こんにちは。今回は、電話網と最先端の音声AIをシームレスに統合するデモプロジェクトvonage-voice-ws-elevenlabs-convAI-demoのアーキテクチャを詳細に分析し、開発エンジニア向けに解説します。
この仕組みを理解することで、Vonage Voice APIのWebSocket機能と、ElevenLabs Conversational AIを組み合わせた、遅延の極めて少ないリアルタイムな電話越しのAI対話システム(AIエージェント、自動応答システムなど)を構築できるようになります。
1. 全体アーキテクチャと技術スタック
本構成のコアとなるのは、「Vonageからの電話音声ストリーム」と「ElevenLabs AIとの通信」を自社サーバー(ミドルウェア)内でWebSocketを用いてリアルタイムにブリッジ(中継)する仕組みです。
技術スタック
- 通信インフラ: Vonage Voice API (電話網への発着信、NCCOによる呼制御とWebSocketへのルーティング)
- 音声AIモデル: ElevenLabs Conversational AI (音声認識 ASR + LLM推論 + 音声合成 TTS を統合したリアルタイム対話エンドポイント)
- プロトコル: WebSocket (双方向のバイナリ音声ストリーミング)
- サーバーサイド: Node.js / Python (WebSocketのブリッジサーバーとして機能)
アーキテクチャフローチャート
ユーザーが電話をかけてからAIが応答するまでの全体フローをMermaid図で示します。
2. システムコンポーネントの詳細解説
2.1 Vonage Voice API と NCCO (Nexmo Call Control Object)
Vonage Voice APIは、着信を受けると開発者が指定したWebhook(Answer URL)に対してHTTPリクエストを送ります。この際、サーバー側は以下のようなNCCO(JSONフォーマットの呼制御命令)を返すことで、「電話の音声をWebSocket経由でサーバーに流してほしい」と指示を出します。
[
{
"action": "connect",
"endpoint": [
{
"type": "websocket",
"uri": "wss://YOUR_SERVER_DOMAIN/socket",
"content-type": "audio/l16;rate=16000"
}
]
}
]
-
audio/l16;rate=16000: Vonageとサーバー間の音声フォーマットです。非圧縮のリニアPCM(16bit)、サンプリングレート16kHzの生音声データがストリーミングされることを意味します。
2.2 中継サーバー (WebSocket ブリッジ)
ミドルウェアサーバーの最大の役割は、VonageとElevenLabsの2つのWebSocketコネクションをリアルタイムに繋ぎ込み、データのバケツリレーを行うことです。
- Vonageからの接続受付: VonageからのWebSocket接続を受け入れ、初期メタデータ(発信元番号など)を処理します。
- ElevenLabsへの接続: ElevenLabsのConversational AIエンドポイントにクライアントとして接続し、Agent IDを渡してセッションを開始します。
- 双方向のフォーマット変換・中継:
- Vonageから流れてくるバイナリPCM音声を、ElevenLabsが受け付けられるフォーマット(Base64エンコードされたJSONメッセージ等)に変換して送信します。
- 逆にElevenLabsから返ってくる音声データをバイナリにデコードし、VonageのWebSocketコネクションに流し込みます。
2.3 ElevenLabs Conversational AI
これまで、高度な音声ボットを作る際は「Google/AWS等でテキスト化(ASR)」→「OpenAI等でテキスト応答(LLM)」→「ElevenLabs等で音声化(TTS)」と、3つのAPIをシーケンシャルに呼び出す必要があり、数秒のレイテンシが避けられませんでした。
ElevenLabsの「Conversational AI」は、これらを1つのWebSocketコネクション内でフルマネージドに完結させます。この統合により、ネットワークのオーバーヘッドが劇的に削減され、人間と話しているかのようなミリ秒単位のレスポンス速度が実現されます。また、AIの発話中にユーザーが割り込んで話し始める(Barge-in / Interruption)処理もElevenLabs側でインテリジェントに低遅延で制御されます。
3. 実装における技術的なポイント・注意点
開発エンジニアが本アーキテクチャを実装する際、特に気をつけるべきトラブルシューティングのポイントです。
① サンプリングレートとエンコーディングの一致
VonageからのWebSocketストリームは 16000Hz の audio/l16 フォーマットです。ElevenLabsに対して「16kHzのPCMで送受信する」という設定を正しく行っていないと、音声が早送り・スロー再生になったり、ひどいノイズが発生したりします。双方向で設定パラメーターを完全に一致させることが最重要です。
② WebSocketイベントの非同期ハンドリング
純粋な音声データだけでなく、制御用のメタデータ(JSON)が同じWebSocket回線上を流れます。
-
Vonage側: 接続直後にメタデータを含むメッセージ(
event: "websocket:connected"等)をテキストフレームで送信してきます。 -
ElevenLabs側: 「ユーザーの発話開始」「AIの発話終了」などのメタデータイベントをJSONで発火させます。
バイナリデータフレーム(音声)とテキストフレーム(制御JSONメッセージ)のハンドリングを正しく分離・パースし、アプリケーションがクラッシュしないよう例外処理を実装する必要があります。
③ バッファリングを避ける(レイテンシ最適化)
リアルタイム対話において、サーバー側での意図しないバッファリングは致命的です。ElevenLabsから返ってきた音声のチャンク(断片)は、大きなサイズに溜め込もうとせず、受信した端から即座にVonageのWebSocketに書き込む(Stream処理)実装にしてください。
4. まとめ
vonage-voice-ws-elevenlabs-convAI-demo のアーキテクチャは、「電話網(Vonage)と最先端の音声生成AI(ElevenLabs)をWebSocketで直結する」という、次世代の音声対話アプリケーションにおけるスタンダードな構成です。
この構成をベースにすることで、カスタマーサポートの自動応答、英会話のAIチューター、高齢者向けの見守り電話など、様々な電話ベースのAIプロダクトを低遅延かつ自然なユーザー体験で提供することが可能になります。ぜひご自身の環境で動かし、その圧倒的なレスポンス速度を体感してみてください。
ぜひリポジトリをクローンして、ローカルで動かしてみてください。PR、Issueレポートなどお気づきの点、サジェスチョンなどあどありましたら遠慮なくお知らせください。
🎥 デモ動画
画像をクリックするとYouTube動画が再生されます
