はじめに
OpenAIのRealtime APIをSIPで接続する場合に、TwilioではElastic SIP TrunkingとProgrammable Voiceのどちらかで連携することが可能です。
前回の「OpenAI Realtime APIをSIP接続で使う:Twilioとの連携手順まとめ」ではElastic SIP Trunkingでの設定方法書きました。
今回はProgrammable Voiceでの連携方法を記載します。
前回と手順が非常に似ているのですが、実際に両方を検証してみてProgrammable Voiceの方が使い勝手が良いなと思う部分がありましたので、そのあたりにも触れたいと思います。
設定手順
前提
- 下記については前回のOpenAI Realtime APIをSIP接続で使う:Twilioとの連携手順まとめを参考にしてください。今回下記の手順については触れません
- OpenAIのコンソール
- API Keyの取得
- Project IDの取得
- Webhookの設定とWebhook Secretの取得
- Webhookサーバの起動
- サンプルコードの微修正
- OpenAIのコンソール
- Twilioアカウントがあること
- 電話番号が購入済みであること
TwiMLの作成
-
TwiMLを作成して保存
SIPアドレスは、「sip:<OPENAI_PROJ_NAME>
@sip.api.openai.com」
Friendly Name RealtimeAPI-SIP TwiML <?xml version="1.0" encoding="UTF-8"?><Response><Say language="ja-JP" voice="Polly.Mizuki">ただいまオペレーターに接続します。しばらくお待ちください。</Say><Dial> <Sip>sip:proj_xxxxxxx@sip.api.openai.com;transport=tls</Sip></Dial></Response>
実行結果
紐づけした電話番号に電話をかけAIが応対すれば完成となります。
ポイント
前回のSIP TrunkingからProgrammable Voiceでの連携に変えることで、下記のメリット・デメリットが発生します。
- コールの切断をAI側から実行できる
Call SID が取れるので REST API で通話の終了(hangup)やリダイレクトができる。 - AIに繋ぐ前にコールのコントロールができる
<Say>, <Gather>, <Pause>, <Record>, <Stream>
など TwiML の制御を前段に挿入できます。たとえば営業時間外判定や、発信者のプライバシー同意確認などを行った上で へ接続可能です。 - 通話料が若干高い可能性あり
- アウトバウンドコールが実現できる
REST API から SIP 宛てに直接発信できます(To=sip:...)。発信時は url(または twiml)で TwiML を指定するのが必須です。
終わりに
Programmable Voice 方式は、
- Call SID を用いた通話制御(hangup/redirect)
- TwiML による前段ロジックの挿入
- アウトバウンド発信の容易さ
といった運用上の強みがあり、検証〜本番移行を柔軟にします。
一方で Elastic SIP Trunking とは課金体系が異なるため、要件に応じた使い分けが肝要です。Realtime API の成熟は進行中ですが、まずは 小さく検証→学習→拡張のサイクルを回していきましょう。