
【初心者向け】Twilio + Realtime APIで誰でもAIと電話出来るボイスボットを作ってみた
やりたいこと
こんにちは。株式会社IZAI エンジニアチームです。
今回は Twilio と OpenAI Realtime API を組み合わせて、初学者でも簡単にできるAIボイスボットを開発する手順を解説します。
完成動画
Twilio(トゥイリオ)とは

Twilioは、2008年設立の米Twilio社によって提供されている世界シェアトップのクラウド通信プラットフォームです。電話やSMSなど様々な機能をWebAPI経由で簡単に利用でき、世界中の本人認証やSMSでのカスタマーサポートに使用されています。
※ おそらく本記事をご覧の皆さんも、Twilio経由での本人認証コードや企業からのSMSメッセージを受信しているかと思います。
実装が非常に簡単(エンジニアフレンドリー)で公式ドキュメントが充実していること特徴で、初学者や電話回線について詳しくないWebエンジニアでも簡単に開発・実装できることが人気の理由の一つとなっています。
Realtime APIとは
公式URL: https://platform.openai.com/docs/guides/realtime

Realtime API は米OpenAI社によって2024年10月に公開された、音声対話APIで、ChatGPTアプリの「高度な音声モード(Advanced Voice mode)」の開発者向けサービスです。自然で感情豊かな音声応答を実現する擬似Speech-to-Speechモデルで、日本語を含めたあらゆる言語に対応した高性能なAPIです。
さらにRealtime APIはRAGにも対応しています。詳しくは以下の記事をご覧ください。
両サービス共に「エンジニアフレンドリー」なAPI設計が魅力で、非常に短いコードで実装することができます。
Twilioは音声回線とWebAPIとの接続や番号の発行、音声データの分割や圧縮方式について一切考えることなく実装可能で、
RealtimeAPIは文字起こしや言語設定、空白検知などの音声認識や回答生成、音声合成について考慮することなく、ほんの数行で実装が可能です。
今回はこれらを組み合わせて、非常に簡単に高性能なボイスボットを実装する手順を解説します。
1. 検証環境
OS依存のコードおよびGPUが必要なコードは含まないため、Windows、MacOS、Linux問わず、PythonまたはNode.jsの実行環境さえあれば開発可能です。
※ 筆者はM3 Pro MacBook Pro、Python3.10で検証しています。
2. 実装手順 (所要時間 1.0h 程度)
基本的に、Twilio公式ドキュメントの通りに作業すれば完成します。
今回は「着信(ユーザーがTwilio番号に電話をかける)」を想定した手順です。「発信」のシナリオを実装したい場合は、Twilio公式ブログ例などをご参照ください。
2-1. レポジトリをクローン
最初に、このデモ用のコードが格納されているGitリポジトリをクローンしましょう。
git clone https://github.com/twilio-samples/speech-assistant-openai-realtime-api-python.git
cd speech-assistant-openai-realtime-api-python
2-2. Python バージョンの確認
このサンプルでは Python 3.9 以上 を推奨しています。
インストール状況を確認しましょう。
python3 --version
# 例: Python 3.10.14
もしPythonがインストールされていなければ、公式サイトから安定版をダウンロードしてください。
2-3. 仮想環境の作成(任意だが推奨)
Pythonのグローバル環境を汚さないために、仮想環境(venv)の利用を推奨します。
python3 -m venv venv
source venv/bin/activate
# Windowsの場合は
env\Scripts\activate
2-4. 必要パッケージのインストール
requirements.txt を読み込んで一括インストールします。
pip install -r requirements.txt
2-5. ngrokを使ったローカル環境の外部公開
TwilioからローカルのWebサーバーにアクセスするために、ngrok という開発環境でよく使用されるトンネリングツールを使用します。アカウントの作成が必要です。
1. ngrokをインストールする(公式ドキュメント 参照)。
2. ターミナルで以下を実行:
ngrok http 5050
これにより、Forwarding の行に
https://xxxxx.ngrok.io -> http://localhost:5050
といった形で一時URLが払い出されます。

3. 後ほどこのURL(https://xxxxx.ngrok.io)をTwilioのWebhook設定に使います。
注意点
ngrokを起動中のタブはそのままに、以降の手順は別のターミナルタブを開いて作業してください。
ngrokを再起動するたびにURLが変わるため、変更のたびにTwilioの設定を更新する必要があります。
2-6. Twilio電話番号の発行
Twilioアカウントをお持ちでない場合は、無料トライアルを開始してください。本記事の範囲では課金は不要です。トライアル用の電話番号を発行してください。
2-7. 電話番号にWebhookを設定
1. Twilioコンソールの Phone Numbers > Manage > Active Numbers で、先ほど発行した番号をクリック。
2. A CALL COMES IN セクションのWebhook (URL) を、ngrokで発行されたURLに合わせて設定します。
例: https://xxxxx.ngrok.io/incoming-call

3. Save します。
この設定で、ユーザーが該当の電話番号にかけると、Twilioは https://xxxxx.ngrok.io/incoming-call へリクエストを送るようになります。
2-8. .envファイルの準備
リポジトリにある .env.example を .env にコピーします。
cp .env.example .env
.env ファイルを開き、OpenAI公式から取得した OpenAI API キーを `OPENAI_API_KEY` に設定してください。
https://platform.openai.com/api-keys
2-9. アプリケーションの実行
準備が整ったら、アプリケーションを起動しましょう。
python main.py
これで完成です。非常に簡単ですね。
上手く動作すると、音声アシスタントとのリアルタイム会話が可能になります。
完成
デモの全体像
1. ユーザーが Twilio 電話番号に電話をかける。
2. Twilioが着信を受け取り、冒頭の案内を機械音声で再生
3. Twilioから手元のパソコンへngrok経由で接続
3. OpenAIのRealtimeAPIと接続して会話スタート
再掲:完成動画
電話をかけると最初にTwilioのデモ音声が再生されるので任意のダイヤルボタンを押してください。RealtimeAPIと接続されます。
※ Twilioトライアル版では最初のTwilioのデモ音声はスキップできません。
運用上の注意点
1. 費用面
Twilio: 通話分数や電話番号の利用料金が発生します
OpenAI: Realtime APIの音声ストリーミングやトークン使用量に応じて料金が発生します。
• トライアルやテストクレジットで試せる範囲でも、過度に使用すると請求が発生する可能性があるので注意してください。
2. 応答速度
複数のサーバを経由するため、0.3秒程度の遅延が発生する場合があります。
3. セキュリティ・本番環境
ngrokはあくまで開発・検証用ツールです。本番運用はAzureなどにデプロイし、SSL証明書やファイアウォールの設定を整備し、場合によっては電気通信事業の届出をする必要があります。
まとめ
大手APIを利用することで、初心者でも非常に簡単にボイスボットを開発することができます。TwilioはOpenAIとパートナーシップを締結しており、今後より高度な仕組みや、Twilio限定のOpenAIモデルのリリースなどがあるかもしれません。電話応対の課題解決へ向け、今後の進展に期待です。
本記事に従う上で不明点などがあればお気軽にコメントください。可能な限り返信・対応いたします。
IZAIでの取り組み
弊社IZAIでは、2030年までのコールセンター完全自動化を目指して日本語特化の音声対話モデルを開発・提供しています。
大手APIに依存しない高度な音声認識・自然言語処理を組み合わせたソリューションを通じて、コールセンターの業務効率化や顧客満足度向上 を支援しています。
また、エンジニアも募集中です。グローバル水準のAI人材が在籍しており、最新の言語モデルや音声技術を研究・実装しています。興味のある方は、ぜひお気軽にお問い合わせください。
今後も音声AIやコールセンター自動化に興味があれば、ぜひIZAIのソリューションやエンジニア採用情報をチェックしてみてください。
最後までお読みいただき、ありがとうございました!
最後に
株式会社IZAIでは音声認識や音声合成に関する研究開発・サービス開発を行っています。興味のあるエンジニア、学生、企業様などいらっしゃいましたらお気軽にお問い合わせください。
参考になった方、興味のある方はぜひ「いいね」をよろしくお願いいたします。それではまた!