Twilio × OpenAI Realtime API で作る,英会話ボイスボットの構築
はじめに
最近では、スマートフォンでAIと英会話の練習ができるアプリが急速に普及しています。本記事では、英会話練習用のAI音声対話システムを自身の環境に構築し、電話を通して利用する方法を紹介します。
具体的には、OpenAIが提供するRealtime APIと電話サービスTwilioを組み合わせ、電話をかけるだけでAIと英会話の練習ができるシステムを構築します。そして、GitHubのサンプルコードをベースに、AIの性格を優しい英会話講師に変えるカスタマイズ手順まで解説します。
システム構成と動作の仕組み

構築するシステムは以下の要素で構成されます。
- Twilio:電話回線とインターネットのゲートウェイ。電話の声をデータに変換してサーバーへ転送する
- ngrok:ローカルPCで動くプログラムを外部からアクセス可能にするトンネリングツール
- OpenAI Realtime API:送られてきた音声を直接処理し、応答音声を生成する
実装方法
以下のTwilio公式ドキュメントに沿って実装を行います。
Step 1: プロジェクトのセットアップ
GitHubからリポジトリをクローンし、Python環境を構築します。Python 3.9以上が必要です。
# リポジトリのクローン
git clone https://github.com/twilio-samples/speech-assistant-openai-realtime-api-python.git
cd speech-assistant-openai-realtime-api-python
# 仮想環境の作成と有効化(任意)
# Mac / Linux
python3 -m venv .venv
source .venv/bin/activate
# Windows
python3 -m venv .venv
.venv\Scripts\activate
# 必要なライブラリを一括インストール
pip install -r requirements.txt
Step 2: ngrokのインストールと外部公開
Twilioからの着信をローカルPCで受け取るために、ngrokをセットアップします。
インストール例(macOS / Homebrew使用時)
brew install ngrok
※Windowsやその他の環境は、ngrok公式サイトからインストーラーをダウンロードしてください。
アカウントを持っていない場合は、サインアップ行い、初回のみアカウント登録後に発行されるトークンによる認証を行います。認証完了後、ngrokでポート5050を公開します。
# 初回のみ認証
ngrok config add-authtoken <あなたのAuthToken>
# ポート5050を公開
ngrok http 5050
公開後、画面に表示された Forwarding に
https://xxxx.ngrok-free.app -> http://localhost:5050
という形でURLが設定されるのでhttps://xxxx.ngrok-free.appをコピーしておきます。
これがTwilioからアクセスするためのエンドポイントとなります。
Step 3: 環境変数の設定
OpenAIとの連携に必要な認証情報を設定します。
cp .env.example .env
作成された .env ファイル内の OPENAI_API_KEY にAPIキーを記述してください。
Step 4: Twilio電話番号の設定
電話番号への着信をアプリケーションにルーティングする設定を行います。
Twilioアカウントをお持ちでない場合は、サインアップを行い無料トライアル用の電話番号を取得してください。
- Twilioコンソールで、Phone Numbers→Manage→Active Numbers
Voice ConfigurationのA call comes in のURL に、ngrokで発行されたURLを設定します。ただし、末尾に/incoming-callを追加してください。
例:https://xxxx.ngrok-free.app → https://xxxx.ngrok-free.app/incoming-call

これにより、電話着信時にTwilioがngrokへリクエストを送信し、ローカルPCとの接続が確立されます。
Step5: 英会話講師へのカスタマイズ
デフォルトのコードでは、AIは冗談好きなアシスタントとして設定されています。これを英会話の練習相手に変えるため、main.py を編集します。
main.py の上部にある SYSTEM_MESSAGE 変数を探し、以下のように書き換えてください。
# main.py
# 変更前:冗談好きなアシスタント
# SYSTEM_MESSAGE = (
# "You are a helpful and bubbly AI assistant who loves to chat about "
# "anything the user is interested in and is prepared to offer them facts. "
# "You have a penchant for dad jokes..."
# )
# 変更後:優しい英会話講師
SYSTEM_MESSAGE = (
"You are a friendly and patient English tutor. "
"Your goal is to help the user practice English conversation. "
"Speak clearly and at a moderate pace. "
"If the user makes a grammar mistake, gently correct them and explain why. "
"Keep the conversation engaging by asking follow-up questions."
)
これで、AIは話した英語を聞き取り、間違いがあれば指摘してくれるようになります。
Step 6: アプリケーションの起動
設定完了後、サーバーを起動します。
python3 main.py
コンソールに Uvicorn running on http://0.0.0.0:5050 と表示されれば待機状態となっています。
Twilioで取得した電話番号にスマートフォンから発信します。Twilioの無料トライアルアカウントを使用している場合、最初に英語のアナウンスが流れるため、スマートフォンのキーパッドで任意の数字キーを押してプログラムを実行してください。
接続のアナウンスが流れた後、AIに英語で話しかけてみてください。タイムラグのない自然なテンポで、本物のネイティブスピーカーとスピーキングの練習をしているかのような、本格的な英会話レッスンを体感できるはずです。
まとめ
本記事では、OpenAIのRealtime APIとTwilioを連携させ、電話で英会話練習ができるAIボットを構築しました。
Realtime APIの恩恵により、極めて自然な音声対話が実現できました。今回は英会話ボットとしてカスタマイズしましたが、システムプロンプトを変更するだけで、飲食店の自動予約受付やカスタマーサポートの一次対応など、様々なビジネスシーンへの応用が可能となります。
Furious Greenでは、音声AIやRealtime APIを活用したシステム設計に関する技術研修・コンサルティングを提供しています。自社チームでの構築を検討されている方はお気軽にご相談ください。