For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
メインナビゲーション

電話と SIP

電話通話に使用する SIP 接続またはアプリケーションの音声ブリッジを選択します。

アプリケーションで使用する API を選択してください。認証、セッション作成、イベントの仕様は API ごとに異なります。

電話接続方式の選択

電話通話は、SIP トランクまたは音声を中継するアプリケーションを通じて GPT-Live に接続できます。既存の電話システムと、アプリケーションが音声を処理する必要のある箇所に応じて、接続経路を選択してください。

接続音声の経路とアプリケーションの役割
直接 SIP 接続プロバイダーが OpenAI と通話音声を送受信します。アプリケーションは Webhook、セッション構成、通話に関する判断、ビジネスロジックを担当します。
サーバー音声ブリッジアプリケーションが、プロバイダーまたはルームの音声を WebSocket 経由で GPT-Live に中継します。両方の接続、イベントの変換、再生、通話のライフサイクルを管理します。

プロバイダーとアプリケーションの接続は、アプリケーションと OpenAI の接続とは別のものです。たとえば、発信者が SIP 経由でルームに参加し、そのルーム内のエージェントが WebSocket 経由で GPT-Live に接続する構成が可能です。

Twilio、Telnyx、LiveKit、Daily/Pipecat をお使いの場合は、GPT-Live のパートナー連携でプロバイダー別のガイドをご覧ください。

直接 SIP 接続

直接 SIP 接続では、通話音声はプロバイダーと OpenAI 間のメディア経路を通ります。SIP シグナリングには TLS を使用し、GPT-Live では通話音声に SRTP が必要です。着信を受け入れるかどうかの判断、セッション構成、認可、ビジネスロジックは、引き続きバックエンドが担当します。

バックエンドでセッションイベントの受信やコマンドの送信が必要な場合は、サイドバンド接続を使用します。音声は SIP で伝送しながら、既存の会話に接続できます。Webhook の重複配信や、複数の接続で同じイベントを受信することによってツールが二重に実行されないよう、各アクションにハンドラーを 1 つ割り当ててください。

SIP ルーティングとプロバイダーの設定は、それらを使用する連携と一緒に管理してください。Realtime の Webhook イベント、通話識別子、受け入れ時のペイロードは Realtime API の仕様です。Live セッションには GPT-Live の仕様を使用してください。

通話ライフサイクルの処理

このフローを使用する前に、プロジェクトで GPT-Live の SIP サポートが有効になっており、プロバイダーの SIP トランクがそのプロジェクトにルーティングされていることを確認してください。もう一方のタブにある Realtime の Webhook と受け入れ時のペイロードは、異なる API 仕様に基づいています。

着信の受信

プロジェクトの Webhook エンドポイントlive.transport.incoming 用に設定します。通話に関する判断を行う前に、Webhook の署名を検証し、重複配信を排除してください。配信の受信確認を返しても、通話を受け入れたことにはなりません。

Webhook は data.type: "sip" で SIP 通話を識別し、data.session_id を提供します。すべての Live 通話アクションで、このセッション ID を変更せずに使用してください。data.sip_headers は認可の根拠ではなく、信頼できない発信者メタデータとして扱ってください。

既存の連携では、非推奨の live.call.incoming イベントを引き続き受信する場合があります。このイベントには data.type がありません。移行中は両方のイベント名に対応し、旧形式の配信と再試行がすべて完了するまで、古いサブスクリプションを維持してください。同じ保留中の通話から Realtime の Webhook が発行される場合もあります。両方の API で受け入れるのではなく、受け入れまたは拒否の判断を 1 つのハンドラーに割り当ててください。

通話の受け入れまたは拒否

アプリケーションの認可ルールとルーティングルールを適用します。通話を受け入れるには、最上位に session オブジェクトを含めた、認証済みの POST /v1/live/sessions/{session_id}/accept リクエストを送信します。

{
  "session": {
    "type": "live",
    "model": "gpt-live-1",
    "instructions": "You are answering an inbound support call.",
    "audio": { "output": { "voice": "marin" } },
    "delegation": { "type": "client" }
  }
}

通話制御リクエストは、信頼できるバックエンドから Authorization: Bearer $OPENAI_API_KEY を使用して送信してください。音声と委任モードは、通話を受け入れる際に選択します。音声形式は SIP がネゴシエーションするため、audio.format は省略してください。この例ではクライアントへの委任を選択しているため、委任された処理をバックエンドで実行する必要があります。クライアントと Responses の構成については、委任とツールをご覧ください。

受け入れが成功すると、セッションの初期化後に本文が空の 200 OK が返されます。通話を受け入れ済みとして扱う前に、HTTP エラーを処理してください。

通話を拒否するには、話し中を示す { "status_code": 486 } などの SIP ステータスを含めて POST /v1/live/sessions/{session_id}/reject を送信します。ステータスは 300 以上 699 以下の整数でなければなりません。最初の受け入れまたは拒否の判断が優先され、後から競合する判断を送信すると decision_already_made が返されます。

バックエンドの接続

受け入れ後、wss://api.openai.com/v1/live/sessions/{session_id}/attachサイドバンド WebSocket で接続します。受け入れたセッションの ID と、同じプロジェクトの認証情報および接続ヘッダーを使用してください。session.start を再度送信しないでください。

通話音声は SIP が伝送します。文字起こし、委任、ツール、コマンド、ミラーリングされた音声にはサイドバンドを使用してください。複数の接続で同じイベントを受信する場合でも、副作用を伴う各処理の実行担当は 1 つに決めてください。

キーパッドイベントの監視

サイドバンドは、発信者がキーを押すと transport.dtmf.received を受信し、ホスト型ツールがトーンを正常に送信すると transport.dtmf.send を受信します。イベントの event フィールドには、09*#、または AD のいずれかが含まれます。

これらは監視用の通知であり、クライアントコマンドではありません。トーンを要求するために transport.dtmf.send を送信したり、ブラウザのデータチャネルでキーパッドイベントを受信できると想定したりしないでください。

通話の転送または終了

通話を転送するには、転送先を指定する { "target_uri": "sip:agent@example.com" } を含めて POST /v1/live/sessions/{session_id}/refer を送信します。通話を切断するには、リクエスト本文を付けずに POST /v1/live/sessions/{session_id}/hangup を送信します。どちらも成功時には、本文が空の 200 OK を返します。

アプリケーションのリソースを解放する前に、最後のイベントと使用量を受信できるよう、サイドバンドを開いたままにしてください。切断リクエストの成功や予期しない切断を、session.closed の代わりとして扱うことはできません。終了処理と終了理由については、使用量と正常な終了をご覧ください。

このフローは着信を受け入れるためのものです。POST /v1/live/sessions による SIP 発信はサポートされていません。プロバイダー側で発信するには、該当するパートナー連携を使用してください。

サーバー音声ブリッジ

アプリケーションが電話プロバイダーやエージェントフレームワークから音声ストリームを受信する場合は、GPT-Live の WebSocket 接続を使用します。アプリケーションは両方の接続を認証し、それぞれのイベントエンベロープを変換して、音声を双方向に中継します。

GPT-Live は、WebSocket 経由で 8 kHz の生の G.711 μ-law および A-law 音声をサポートしています。プロバイダーのストリームが同じコーデック、サンプルレート、チャネル数を使用している場合、アプリケーションは音声の生のバイト列を PCM に変換せずに転送できます。音声の順序を維持し、各接続で必要なメッセージ形式を使用してください。音声形式が一致していても、2 つのイベントプロトコルを相互に置き換えられるわけではありません。

ブリッジは、再生用にキューに入れた音声の管理も担当します。プロバイダー側のバッファリング、割り込み、通話の終了も考慮してアプリケーションを設計してください。Live セッションのライフサイクルについてはセッションの管理を、発話の交代と再生制御の変更については GPT-Live への移行をご覧ください。

両方のシステムにまたがって会話を追跡できるよう、プロバイダーの通話識別子またはルーム識別子を OpenAI のセッション ID とともに保持してください。

GPT-Live での次のステップ