◉GEMINI LABEN
●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…
記事一覧/API / SDK
◈ API / SDK/2026-04-30上級

電話を受けるAIを本番投入する:Gemini Live API × Twilio Media Streams で構築する電話応答エージェント

Twilio Voice と Gemini Live API を WebSocket で橋渡しし、電話に出る AI 音声エージェントを本番運用するための実装手順・割り込み処理・Function Calling・コスト試算までを完全コード付きで解説します。

gemini-live-apitwiliovoice-agentwebsocket4fastapi5production105media-streams

✦ プレミアム記事

「電話を受ける AI」と聞くと、多くの方は IVR(自動音声応答)の延長を思い浮かべるのではないでしょうか。決まったメニューを読み上げ、プッシュ番号で分岐する、あの少しよそよそしい仕組みです。ところが Gemini Live API が登場してから、その先のレベル — 自然な会話で予約を受け、必要に応じて社内データベースに書き込み、難しい問い合わせは人間にエスカレーションする音声エージェント — が、個人開発者の射程にも入ってきました。

私自身、ある小規模店舗向けに「営業時間外の電話を AI で受ける」プロトタイプを試した際、ブラウザ上の WebSocket デモと電話回線とでは、ほとんど別物と言っていいほど実装が違うことを思い知りました。8kHz μ-law と 16kHz PCM の壁、Twilio Media Streams が要求する base64 で包まれたフレーム、無音検知よりも難しい「割り込み」の扱い — 公式ドキュメントのサンプルだけでは、実際の通話に耐える応答エージェントは組み上がりません。

そこで Twilio Voice の着信を Gemini Live API に橋渡しし、本番運用に耐える電話応答エージェントを組み上げる道順 を、私が踏んだ順番のまま書き残します。コードはすべて動く形で置き、エラーハンドリング・割り込み制御・落とし穴・コスト試算まで通します。Gemini Live API の基本をひととおり触れられた中〜上級の方に向けた内容です。

いま思えば、最初に手が止まっていた原因は音声フォーマットではなく、電話は黙ったまま繋がり続けるメディアだという当たり前の事実を実装に落とし込めていなかったことかもしれません。ブラウザのデモはタブを閉じれば終わります。電話は、誰も話していない十数秒のあいだも回線を保ち、その分だけ課金が積み上がっていきます。

前提: WebSocket と ephemeral token の基本については Gemini Live API WebSocket × Ephemeral Token 本番設計 を、Live API そのものの導入は Gemini Live API 完全ガイド を併読することをおすすめします。

ブラウザの音声デモがそのまま電話に乗らない理由

最初に、なぜ電話回線が特別なのかを整理しておきます。ここを理解しないまま実装に入ると、「マイクからは動くのに、電話からだとノイズしか返ってこない」という典型的な詰まり方をします。

電話回線(PSTN)は 8kHz サンプリング・8bit μ-law(u-law)圧縮・モノラル が事実上の標準です。これは 1970 年代に決まった規格で、人の声が伝わる帯域に最適化されており、帯域は驚くほど狭いものです。一方、Gemini Live API が要求する音声フォーマットは 16kHz サンプリング・16bit リニア PCM・モノラル です。サンプリングレートが 2 倍、ビット深度も 2 倍、さらに圧縮方式も違います。

加えて Twilio の Media Streams は、生のバイナリではなく base64 で包まれた JSON フレーム を WebSocket で送ってきます。フレームには event フィールドがあり、start・media・mark・stop の状態遷移を扱う必要があります。逆方向(AI からユーザーへ)も同じフォーマットで返さなければなりません。

つまり中継サーバーがやることは、おおまかに次の 4 つです。

  • Twilio から届いた base64+μ-law の decode と 16kHz PCM へのアップサンプリング
  • Gemini Live API の WebSocket へのバイナリ送信
  • Gemini が返す 24kHz PCM 応答の 8kHz μ-law へのダウンサンプリングと base64 包装
  • 変換後フレームの Twilio への WebSocket 返送

「ただの WebSocket リレー」では済まないことがお分かりいただけると思います。ここを最短距離で実装するのが本記事のゴールです。

アーキテクチャ全体像 — 3 つのコンポーネント

実装に入る前に、登場人物を整理します。本記事のシステムは次の 3 つから成り立ちます。

  • Twilio Voice: 電話番号の貸与と、着信を WebSocket(Media Streams)に流す責務を持ちます。TwiML という小さな XML で着信時の振る舞いを制御します。
  • 中継サーバー(FastAPI + WebSocket): Twilio と Gemini の橋渡しをします。音声フォーマット変換、割り込み制御、Function Calling の橋渡しが主な仕事です。Cloud Run にデプロイする想定で書きます。
  • Gemini Live API: 音声を受け取って音声で返す本体です。Function Calling・System Instructions・割り込み(interrupt)通知も担当します。

データの流れは次のようになります。

  1. ユーザーが電話をかけると、Twilio が Voice URL の Webhook を呼びます
  2. 中継サーバーは TwiML で <Connect><Stream url="wss://.../media"> を返します
  3. Twilio が中継サーバーの WebSocket に接続し、ユーザーの音声を流し始めます
  4. 中継サーバーは Gemini Live API にも WebSocket で接続し、双方向ブリッジを開始します
  5. Gemini の応答音声が中継サーバー経由で Twilio に戻り、ユーザーの耳に届きます
  6. 通話終了で Twilio が stop を送り、中継サーバーが Gemini セッションを閉じます

ここまでが概観です。順番に実装していきましょう。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦ブラウザの音声デモで動いていたコードを電話回線に持ち込もうとして詰まっていた人が、μ-law 8kHz と PCM 16kHz の橋渡しまで含めた動く実装を今日手に入れられる
✦Twilio Media Streams と Gemini Live API の双方向ストリーミングを FastAPI WebSocket で中継する完全コードと、割り込み・ハングアップ処理のパターンを習得できる
✦電話受付の予約・問い合わせ・一次対応を AI で自動化したい個人開発者が、Cloud Run へのデプロイとコスト試算まで含めて本番投入の見取り図を持てる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Gemini Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

◈ API / SDK2026-07-04
Gemini API の英語出力に日本語が『たまに』混ざるとき — 混入率を計測して段階的に締める運用メモ
英語出力を指示したGemini APIが、100回に数回だけ日本語を混ぜてくる——この『たまに』を止められない本当の理由と、混入率をSLOとして計測し、段階的リカバリで本番品質まで締める運用パターンを実装コード付きで整理します。
◈ API / SDK2026-05-20
Gemini API 構造化出力スキーマを本番アプリで安全に進化させる設計記録
本番アプリで Gemini API の JSON 出力スキーマを変えるとき、何を契約として守り、何を段階的に切り替えるか。旧版と新版を同時に返す Dual-Emit パターン、旧スキーマ利用箇所を見積もる compatibility checker、Sunset プロトコルの実装記録です。
◈ API / SDK2026-05-11
Gemini 3 Pro × Firebase Cloud Messaging で個人アプリのプッシュ通知をパーソナライズ配信する本番運用ガイド
個人開発のアプリでプッシュ通知の開封率が頭打ちになっている方へ。Gemini 3 Pro でユーザーの最終操作・課金状態・好みに応じた文面を生成し、Firebase Cloud Messaging で配信する本番設計を、実装コード・コスト試算・落とし穴まで含めて整理しました。