TwilioのSIPトランクをWixzel Voiceに接続する
Twilioの番号でAI音声エージェントを動かすには、Twilio Elastic SIP TrunkingをWixzel Voiceに接続します。発信が受け付けられるようにトランクが返すplatform_ipをIP Access Control Listに追加し、着信が届くようにOrigination SIP URIをトランクのorigination_uriに設定します。回線の料金は引き続きTwilioからお客様の料金で請求され、Wixzel Voiceは音声エンジンの料金を前払い残高から秒単位で課金します。
最終更新日:
公開日
Twilioは通信事業者で、Wixzel Voiceはその上でエージェントを動かす音声AI APIです。両者は標準のSIPで連携します。Twilioはその所有者の商標であり、Wixzel VoiceはTwilioと提携しておらず、Twilioから推奨を受けているものでもありません。
始める前に何が必要ですか?
- Elastic SIP Trunkingを利用できるTwilioのアカウントと、トランクのホストと認証情報。
- Twilioで所有し、そのトランクに紐付けた電話番号。Wixzel Voiceは電話番号の販売もポーティングも行いません。 コンソールからTwilioのアカウントを接続すれば、「電話番号」ページからそのアカウントで番号を購入することもできます。料金はTwilioの価格でTwilioから請求されます。
- Wixzel VoiceのAPIキーと前払いのクレジット。最低チャージ額は$5で、無料プランはありません。
- Wixzel Voiceの同時通話数はデフォルトで1アカウントあたり5件で、リクエストに応じて引き上げます。Webやアプリのセッションも同じ上限に含まれます。
Wixzel VoiceでTwilioのトランクを作成するには?
Twilioがトランクに表示するTermination SIP URIで、コンソールに表示されるものと同じyour-domain.pstn.twilio.comです。
curl https://api.voice.wixzel.com/v1/sip-trunks \
-H "Authorization: Bearer $WIXZEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Twilio",
"host": "your-domain.pstn.twilio.com",
"transport": "udp"
}'TwilioがIPではなく認証情報で認証する場合は、リクエストボディにusernameとpasswordを追加します。パスワードは保存時に暗号化され、以降APIから返されることはありません。レスポンスには、次の手順で必要な2つの値platform_ipとorigination_uriが含まれます。
Twilio側では何を設定しますか?
| 設定 | Twilioでの名称 | 値 |
|---|---|---|
| Wixzel Voiceからの通話を許可する | IP Access Control List | 187.126.120.231 |
| 着信をWixzel Voiceに送る | Origination SIP URI | sip:187.126.120.231:5090 |
どちらの値も現時点のものです。ページからコピーするのではなく、GET /v1/sip-trunksからplatform_ipとorigination_uriを読み取ってください。その後、POST /v1/phone-numbersで各番号をトランクに登録し、inbound_agent_idを指定してエージェントが応答するようにします。 これらのリクエストはAI電話通話APIのウォークスルーに、コンソールの各フィールドについてはTwilioの詳しい設定手順に記載しています。
Twilioでは何がうまくいかないのですか?
- Twilioは発信を送信元IPで許可し、それ以外はすぐに拒否します。IP ACLの登録漏れは、発信してから約1秒後の即時拒否として、
failure_code21(通話拒否)で現れます。呼び出し音は鳴らず、タイムアウトにもなりません。 - 発信はOrigination URIがなくても動きますが、着信は動かず、エラーも出ません。番号は紐付けられ、エージェントも割り当てられているのに、電話がエージェントに届かないだけです。
- Twilioは発信先番号の先頭に
+があることを前提としているため、send_plusは標準のtrueのままにしてください。
Twilio経由の通話がつながらなかったのはなぜですか?
Twilioでよく見られる失敗コード:
| failure_code | 通信事業者の応答 | 意味 | 対処方法 |
|---|---|---|---|
| 21 | 403 / 407 | 通信事業者が、番号を試す前に通話をそのまま拒否しました。 | 可能性の高い順に、通信事業者のアカウントが停止・解約・残高不足になっている、トランクのユーザー名かパスワードが間違っている、platform_ipが許可リストに登録されていない、発信者番号がアカウントで許可されていない、のいずれかです。まず通信事業者のダッシュボードを確認してください。 |
Twilioが拒否した通話はstatus: "failed"となり、failure_code(通信事業者からのQ.850原因コード)と、対処方法を示すfailure_reasonが付きます。費用はかかりません。 すべての失敗コード、すべての拒否理由、トランクのデバッグ方法は通信事業者のページにあります。
Twilio経由のAI通話にはいくらかかりますか?
回線の料金はTwilioからお客様の料金で請求されます。Wixzel Voiceが課金するのは音声エンジンだけで、実際の使用量に応じて秒単位で、gemini-liveの接続1分あたり$0.0491からdeepgram-agentの$0.1851までです。 すべてのエンジンの料金。
よくある質問
Twilioでの通話が1秒以内に拒否されるのはなぜですか?
failure_code 21になり、呼び出し音も鳴らない通話は、ルーティングされる前にTwilioに拒否されています。Twilioでは、ほとんどの場合TerminationのIP Access Control Listが原因です。そこに187.126.120.231(トランクが返すplatform_ip)を追加してください。受け付けられた後、数秒たってから失敗する通話は別の問題で、ルーティング、番号の形式、アカウントの権限が原因です。IP ACLの代わりにTwilioのCredential Listを使えますか?
usernameとpasswordフィールドに設定すると、IP認証の代わりに使われます。パスワードは保存時に暗号化され、APIから再び返されることはありません。その他の通信事業者
IP認証のSIP Connection。プラットフォームのIPを許可アドレスとして追加し、着信リージョンを選び、トランスポートを合わせます。
Zentrunk。IP ACLにプラットフォームのIPを登録した発信用トランクと、Primary URIをプラットフォームに向けた別の着信用トランクを用意します。
Programmable SIP。SIP DashboardでトランクのACLにプラットフォームのIPを追加し、着信をOrigination URIに送ります。
SIP REGISTERに対応していないため、固定IPが必要です。ロケーションにプラットフォームのIPを追加し、TerminationとOriginationを別々に設定するか、network bridgeの認証情報を使います。
インドの電話番号向けのVirtual SIP Trunking(vSIP)で、TCPを使います。プラットフォームのIPをACLとしてトランクに紐付け、着信用にDestination URIをプラットフォームのTCPポートに向けます。
トランクごとのSIPドメインをホストに使い、トランクのIP ACLにプラットフォームのIPを登録します。「origination URI」はTwilioとは逆の意味です。
Saudi Arabia, ordered through Mobily Business sales and delivered over a private link. No one-step connect: your own SBC on the link relays calls, with G.711 A-law and a one-hour call cap.
手順はどこでも同じです。プラットフォームのIPを許可リストに登録し、着信の宛先をOrigination URIに設定し、番号の形式とトランスポートを合わせます。
トランクの2つの設定の仕組み、すべての失敗コード、すべての通信事業者ガイドを1ページにまとめています。
最初の音声エージェントを構築

