Twilio通話を登録する

独自のTwilioインフラを使用して、通話をElevenLabsエージェントに接続します。

上級者向け

このガイドでは、Twilioインフラを完全に制御する必要があるデベロッパー向けの高度なインテグレーションパターンを説明します。より簡単に設定するには、設定を自動的に処理するネイティブTwilioインテグレーションの使用をご検討ください。

アプローチごとの使い分け

始める前に、ネイティブインテグレーションと通話登録アプローチの違いを確認しましょう。

機能ネイティブインテグレーション通話登録
設定の簡単さより簡単より複雑
通話転送対応済み非対応
カスタムTwilioロジック制限あり完全に制御可能
電話番号管理ElevenLabs経由Twilio経由

概要

通話登録エンドポイントを使用すると、会話にはElevenLabsエージェントを活用しながら、独自のTwilioインフラを使用できます。Twilio番号をElevenLabsにインポートする代わりに、Twilio設定を完全に制御したまま、ElevenLabs APIで通話を登録し、エージェントへの接続に使用するTwiMLを受け取れます。

このアプローチは、次の場合に適しています。

  • 既存のTwilioインフラとワークフローを維持する必要がある
  • 通話のルーティングと処理をプログラムで制御したい
  • エージェントに接続する前にカスタムTwilioロジックが必要な複雑な通話フローがある
  • ElevenLabsエージェントを既存の電話システムに統合する必要がある

仕組み

  1. サーバーがTwilio経由で着信通話を受信するか、発信通話を開始します
  2. サーバーがエージェントと通話の詳細を指定してElevenLabsの通話登録エンドポイントを呼び出します
  3. ElevenLabsは、WebSocket経由で通話をエージェントに接続するTwiMLを返します
  4. このTwiMLをTwilioに返して接続を確立します

通話登録エンドポイントを使用する場合、ElevenLabsはTwilioアカウントの認証情報に直接アクセスできないため、通話転送機能は利用できません。

前提条件

エージェント設定

通話登録エンドポイントを使用する前に、Twilioがサポートする正しいオーディオ形式を使用するようエージェントを設定します。

1

TTS出力を設定

  1. エージェント設定に移動します
  2. Voiceセクションを開きます
  3. ドロップダウンから「μ-law 8000 Hz」を選択します
2

入力形式を設定

  1. エージェント設定に移動します
  2. Advancedセクションを開きます
  3. 入力形式として「μ-law 8000 Hz」を選択します

APIリファレンス

通話登録エンドポイントでは、次のパラメータを受け付けます。

パラメータ型必須説明
agent_idstringはい通話を処理するエージェントのID
from_numberstringはい発信者の電話番号
to_numberstringはい宛先の電話番号
directionstringいいえ通話方向:inbound(デフォルト)またはoutbound
conversation_initiation_client_dataobjectいいえ動的変数と設定のオーバーライド

エンドポイントは、Twilioに直接渡すTwiMLを返します。

実装

import os
from fastapi import FastAPI, Request
from fastapi.responses import Response
from elevenlabs import ElevenLabs
app = FastAPI()
elevenlabs = ElevenLabs()
AGENT_ID = os.getenv("ELEVENLABS_AGENT_ID")
@app.post("/twilio/inbound")
async def handle_inbound_call(request: Request):
form_data = await request.form()
from_number = form_data.get("From")
to_number = form_data.get("To")
# Register the call with ElevenLabs
twiml = elevenlabs.conversational_ai.twilio.register_call(
agent_id=AGENT_ID,
from_number=from_number,
to_number=to_number,
direction="inbound",
conversation_initiation_client_data={
"dynamic_variables": {
"caller_number": from_number,
}
}
)
# Return the TwiML directly to Twilio
return Response(content=twiml, media_type="application/xml")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)

発信通話

発信通話の場合は、Twilio経由で通話を開始し、Webhook URLをサーバーに指定します。サーバーでElevenLabsへの登録を行います。

from twilio.rest import Client
import os
from fastapi import Request
from fastapi.responses import Response
from elevenlabs import ElevenLabs
# Initialize clients
twilio_client = Client(
os.getenv("TWILIO_ACCOUNT_SID"),
os.getenv("TWILIO_AUTH_TOKEN")
)
elevenlabs = ElevenLabs()
AGENT_ID = os.getenv("ELEVENLABS_AGENT_ID")
def initiate_outbound_call(to_number: str):
call = twilio_client.calls.create(
from_=os.getenv("TWILIO_PHONE_NUMBER"),
to=to_number,
url="https://your-server.com/twilio/outbound"
)
return call.sid
@app.post("/twilio/outbound")
async def handle_outbound_webhook(request: Request):
form_data = await request.form()
from_number = form_data.get("From")
to_number = form_data.get("To")
twiml = elevenlabs.conversational_ai.twilio.register_call(
agent_id=AGENT_ID,
from_number=from_number,
to_number=to_number,
direction="outbound",
)
return Response(content=twiml, media_type="application/xml")

会話をパーソナライズする

conversation_initiation_client_dataパラメータを使用して、動的変数を渡し、エージェント設定をオーバーライドします。

{
"agent_id": "your-agent-id",
"from_number": "+1234567890",
"to_number": "+0987654321",
"direction": "inbound",
"conversation_initiation_client_data": {
"dynamic_variables": {
"customer_name": "John Doe",
"account_type": "premium",
"order_id": "ORD-12345"
}
}
}

動的変数とオーバーライドの詳細については、動的変数およびオーバーライドのドキュメントを参照してください。

Twilioの設定

Twilioの電話番号がサーバーを指すように設定します。

1

パブリックURLを作成

ローカル開発では、ngrokを使用してサーバーを公開します。

ngrok http 8000
2

Twilio番号を設定

  1. Twilio Consoleにアクセスします
  2. Phone Numbers > Manage > Active numbersに移動します
  3. 電話番号を選択します
  4. 「Voice Configuration」で、Webhook URLをサーバーエンドポイントに設定します(例:https://your-ngrok-url.ngrok.app/twilio/inbound)
  5. HTTPメソッドをPOSTに設定します

制限事項

ネイティブインテグレーションではなく通話登録エンドポイントを使用する場合:

  • 通話転送なし:ElevenLabsはTwilio認証情報にアクセスできないため、転送機能は利用できません
  • 手動設定:オーディオ形式を設定し、TwiMLのルーティングを自身で処理する必要があります
  • ダッシュボードへのインポートなし:この方法で登録した電話番号は、ElevenLabsの電話番号ダッシュボードに表示されません