88API88API
使用ガイドAPIリファレンスAIアプリケーションヘルプとサポート
リアルタイム(Realtime)

OpenAI リアルタイム対話インターフェース

📝 概要

はじめに

OpenAI Realtime API は、以下の2つの接続方法を提供します。

  1. WebRTC - ブラウザおよびモバイルクライアント向けのリアルタイム音声・ビデオインタラクション

  2. WebSocket - サーバー間アプリケーション統合向け

ユースケース

  • リアルタイム音声対話
  • 音声・ビデオ会議
  • リアルタイム翻訳
  • 音声書き起こし
  • リアルタイムコード生成
  • サーバーサイドのリアルタイム統合

主要機能

  • 双方向オーディオストリーム転送
  • テキストとオーディオの混合対話
  • 関数呼び出しのサポート
  • 自動音声検出 (VAD)
  • 音声書き起こし機能
  • WebSocket サーバーサイド統合

🔐 認証とセキュリティ

認証方式

  1. 標準 API キー (サーバーサイドでのみ使用)
  2. 一時トークン (クライアントサイドで使用)

一時トークン

  • 有効期限: 1分
  • 使用制限: 単一接続
  • 取得方法: サーバーサイド API を介して作成
POST https://88api.ai/v1/realtime/sessions
Content-Type: application/json
Authorization: Bearer $NEW_API_KEY

\{
  "model": "gpt-4o-realtime-preview-2024-12-17",
  "voice": "verse"
}

セキュリティに関する推奨事項

  • 標準 API キーをクライアントサイドで決して公開しないでください
  • HTTPS/WSS を使用して通信してください
  • 適切なアクセス制御を実装してください
  • 異常なアクティビティを監視してください

🔌 接続の確立

WebRTC 接続

  • URL: https://88api.ai/v1/realtime
  • クエリパラメータ: model
  • リクエストヘッダー:
    • Authorization: Bearer EPHEMERAL_KEY
    • Content-Type: application/sdp

WebSocket 接続

  • URL: wss://88api.ai/v1/realtime
  • クエリパラメータ: model
  • リクエストヘッダー:
    • Authorization: Bearer YOUR_API_KEY
    • OpenAI-Beta: realtime=v1

接続フロー

sequenceDiagram
    participant Client
    participant Server
    participant OpenAI

    alt WebRTC 接続
        Client->>Server: 一時トークンをリクエスト
        Server->>OpenAI: セッションを作成
        OpenAI-->>Server: 一時トークンを返却
        Server-->>Client: 一時トークンを返却

        Client->>OpenAI: WebRTC offer を作成
        OpenAI-->>Client: answer を返却

        Note over Client,OpenAI: WebRTC 接続を確立

        Client->>OpenAI: データチャネルを作成
        OpenAI-->>Client: データチャネルを確認
    else WebSocket 接続
        Server->>OpenAI: WebSocket 接続を確立
        OpenAI-->>Server: 接続を確認

        Note over Server,OpenAI: リアルタイム対話を開始
    end

データチャネル

  • 名称: oai-events
  • 用途: イベント転送
  • 形式: JSON

オーディオストリーム

  • 入力: addTrack()
  • 出力: ontrack イベント

💬 対話のやり取り

対話モード

  1. 純粋なテキスト対話
  2. 音声対話
  3. 混合対話

セッション管理

  • セッションの作成
  • セッションの更新
  • セッションの終了
  • セッション設定

イベントタイプ

  • テキストイベント
  • オーディオイベント
  • 関数呼び出し
  • ステータス更新
  • エラーイベント

⚙️ 設定オプション

オーディオ設定

  • 入力形式
    • pcm16
    • g711_ulaw
    • g711_alaw
  • 出力形式
    • pcm16
    • g711_ulaw
    • g711_alaw
  • 音声タイプ
    • alloy
    • echo
    • shimmer

モデル設定

  • 温度 (Temperature)
  • 最大出力長
  • システムプロンプト
  • ツール設定

VAD 設定

  • 閾値 (Threshold)
  • 無音持続時間
  • プレフィックスパディング

💡 リクエスト例

WebRTC 接続 ❌

クライアント実装 (ブラウザ)

async function init() \{
  // サーバーから一時キーを取得 - 下記のサーバーコードを参照
  const tokenResponse = await fetch("/session");
  const data = await tokenResponse.json();
  const EPHEMERAL_KEY = data.client_secret.value;

  // 対等接続を作成
  const pc = new RTCPeerConnection();

  // モデルから返されたリモートオーディオを再生するように設定
  const audioEl = document.createElement("audio");
  audioEl.autoplay = true;
  pc.ontrack = e => audioEl.srcObject = e.streams[0];

  // ブラウザのマイク入力のローカルトラックを追加
  const ms = await navigator.mediaDevices.getUserMedia({
    audio: true
  });
  pc.addTrack(ms.getTracks()[0]);

  // イベントを送受信するためのデータチャネルを設定
  const dc = pc.createDataChannel("oai-events");
  dc.addEventListener("message", (e) => \{
    // ここでリアルタイムサーバーイベントを受信します!
    console.log(e);
  });

  // セッション記述プロトコル(SDP)を使用してセッションを開始
  const offer = await pc.createOffer();
  await pc.setLocalDescription(offer);

  const baseUrl = "https://88api.ai/v1/realtime";
  const model = "gpt-4o-realtime-preview-2024-12-17";
  const sdpResponse = await fetch(`${baseUrl}?model=${model}`, {
    method: "POST",
    body: offer.sdp,
    headers: {
      Authorization: `Bearer ${EPHEMERAL_KEY}`,
      "Content-Type": "application/sdp"
    },
  });

  const answer = {
    type: "answer",
    sdp: await sdpResponse.text(),
  };
  await pc.setRemoteDescription(answer);
}

init();

サーバーサイド実装 (Node.js)

import express from "express";

const app = express();

// 一時トークンを生成するためのエンドポイントを作成
// このエンドポイントは上記のクライアントコードと連携して使用されます
app.get("/session", async (req, res) => {
  const r = await fetch("https://88api.ai/v1/realtime/sessions", {
    method: "POST",
    headers: \{
      "Authorization": `Bearer ${process.env.NEW_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      model: "gpt-4o-realtime-preview-2024-12-17",
      voice: "verse",
    }),
  });
  const data = await r.json();

  // OpenAI REST APIから受け取ったJSONをクライアントに返送
  res.send(data);
});

app.listen(3000);

WebRTC イベント送受信例

// 対等接続からデータチャネルを作成
const dc = pc.createDataChannel('oai-events');

// データチャネル上のサーバーイベントをリッスン
// イベントデータはJSON文字列から解析する必要があります
dc.addEventListener('message', (e) => {
  const realtimeEvent = JSON.parse(e.data);
  console.log(realtimeEvent);
});

// クライアントイベントを送信: 有効なクライアントイベントを
// JSONにシリアライズし、データチャネル経由で送信します
const responseCreate = {
  type: 'response.create',
  response: {
    modalities: ['text'],
    instructions: 'Write a haiku about code',
  },
};
dc.send(JSON.stringify(responseCreate));

WebSocket 接続 ✅

Node.js (wsモジュール)

import WebSocket from "ws";

const url = "wss://88api.ai/v1/realtime?model=gpt-4o-realtime-preview-2024-12-17";
const ws = new WebSocket(url, {
  headers: \{
    "Authorization": "Bearer " + process.env.NEW_API_KEY,
    "OpenAI-Beta": "realtime=v1",
  },
});

ws.on("open", function open() {
  console.log("Connected to server.");
});

ws.on("message", function incoming(message) {
  console.log(JSON.parse(message.toString()));
});

Python (websocket-client)

# websocket-client ライブラリのインストールが必要です:
# pip install websocket-client

import os
import json
import websocket

NEW_API_KEY = os.environ.get("NEW_API_KEY")

url = "wss://88api.ai/v1/realtime?model=gpt-4o-realtime-preview-2024-12-17"
headers = [
    "Authorization: Bearer " + NEW_API_KEY,
    "OpenAI-Beta: realtime=v1"
]

def on_open(ws):
    print("Connected to server.")

def on_message(ws, message):
    data = json.loads(message)
    print("Received event:", json.dumps(data, indent=2))

ws = websocket.WebSocketApp(
    url,
    header=headers,
    on_open=on_open,
    on_message=on_message,
)

ws.run_forever()

ブラウザ (標準WebSocket)

/*
注意: ブラウザなどのクライアント環境では、WebRTCの使用を推奨します。
ただし、DenoやCloudflare Workersなどのブラウザ類似環境では、
標準WebSocketインターフェースも使用できます。
*/

const ws = new WebSocket(
  'wss://88api.ai/v1/realtime?model=gpt-4o-realtime-preview-2024-12-17',
  [
    'realtime',
    // 認証
    'openai-insecure-api-key.' + NEW_API_KEY,
    // オプション
    'openai-organization.' + OPENAI_ORG_ID,
    'openai-project.' + OPENAI_PROJECT_ID,
    // Betaプロトコル、必須
    'openai-beta.realtime-v1',
  ]
);

ws.on('open', function open() {
  console.log('Connected to server.');
});

ws.on('message', function incoming(message) {
  console.log(message.data);
});

メッセージ送受信例

Node.js/ブラウザ
// サーバーイベントを受信
ws.on("message", function incoming(message) \{
  // メッセージデータはJSONから解析する必要があります
  const serverEvent = JSON.parse(message.data)
  console.log(serverEvent);
});

// イベントを送信、クライアントイベント形式に準拠したJSONデータ構造を作成
const event = {
  type: "response.create",
  response: {
    modalities: ["audio", "text"],
    instructions: "Give me a haiku about code.",
  }
};
ws.send(JSON.stringify(event));
Python
# クライアントイベントを送信、辞書をJSONにシリアライズ
def on_open(ws):
    print("Connected to server.")

    event = \{
        "type": "response.create",
        "response": \{
            "modalities": ["text"],
            "instructions": "Please assist the user."
        }
    }
    ws.send(json.dumps(event))

# メッセージを受信するには、メッセージペイロードをJSONから解析する必要があります
def on_message(ws, message):
    data = json.loads(message)
    print("Received event:", json.dumps(data, indent=2))

⚠️ エラー処理

一般的なエラー

  1. 接続エラー
    • ネットワークの問題
    • 認証の失敗
    • 設定エラー
  2. オーディオエラー
    • デバイス権限
    • 形式の非サポート
    • コーデックの問題
  3. セッションエラー
    • トークンの期限切れ
    • セッションタイムアウト
    • 同時接続制限

エラー回復

  1. 自動再接続
  2. セッション回復
  3. エラー再試行
  4. フォールバック処理

📝 イベントリファレンス

一般的なリクエストヘッダー

すべてのイベントには、以下のリクエストヘッダーを含める必要があります。

リクエストヘッダータイプ説明
Authorization文字列認証トークンBearer $NEW_API_KEY
OpenAI-Beta文字列API バージョンrealtime=v1

クライアントイベント

session.update

セッションのデフォルト設定を更新します。

パラメータタイプ必須説明例/オプション値
event_id文字列クライアント生成のイベント識別子event_123
type文字列イベントタイプsession.update
modalities文字列配列モデルが応答できるモダリティタイプ["text", "audio"]
instructions文字列モデル呼び出しの前にプリセットされるシステム指示"Your knowledge cutoff is 2023-10..."
voice文字列モデルが使用する音声タイプalloy、echo、shimmer
input_audio_format文字列入力オーディオ形式pcm16、g711_ulaw、g711_alaw
output_audio_format文字列出力オーディオ形式pcm16、g711_ulaw、g711_alaw
input_audio_transcription.model文字列書き起こしに使用するモデルwhisper-1
turn_detection.type文字列音声検出タイプserver_vad
turn_detection.threshold数値VAD アクティベーション閾値(0.0-1.0)0.8
turn_detection.prefix_padding_ms整数音声開始前に含めるオーディオの長さ500
turn_detection.silence_duration_ms整数音声停止を検出する無音の持続時間1000
tools配列モデルが利用可能なツールリスト[]
tool_choice文字列モデルがツールを選択する方法auto/none/required
temperature数値モデルのサンプリング温度0.8
max_output_tokens文字列/整数1回の応答の最大トークン数"inf"/4096

input_audio_buffer.append

入力オーディオバッファにオーディオデータを追加します。

パラメータタイプ必須説明
event_id文字列クライアント生成のイベント識別子event_456
type文字列イベントタイプinput_audio_buffer.append
audio文字列Base64エンコードされたオーディオデータBase64EncodedAudioData

input_audio_buffer.commit

バッファ内のオーディオデータをユーザーメッセージとしてコミットします。

パラメータタイプ必須説明
event_id文字列クライアント生成のイベント識別子event_789
type文字列イベントタイプinput_audio_buffer.commit

input_audio_buffer.clear

入力オーディオバッファ内のすべてのオーディオデータをクリアします。

パラメータタイプ必須説明
event_id文字列クライアント生成のイベント識別子event_012
type文字列イベントタイプinput_audio_buffer.clear

conversation.item.create

対話に新しい対話項目を追加します。

パラメータタイプ必須説明
event_id文字列クライアント生成のイベント識別子event_345
type文字列イベントタイプconversation.item.create
previous_item_id文字列新しい対話項目がこのIDの後に挿入されますnull
item.id文字列対話項目の一意の識別子msg_001
item.type文字列対話項目タイプmessage/function_call/function_call_output
item.status文字列対話項目ステータスcompleted/in_progress/incomplete
item.role文字列メッセージ送信者のロールuser/assistant/system
item.content配列メッセージ内容[text/audio/transcript]
item.call_id文字列関数呼び出しのIDcall_001
item.name文字列呼び出された関数名function_name
item.arguments文字列関数呼び出しの引数{"param": "value"}
item.output文字列関数呼び出しの出力結果{"result": "value"}

conversation.item.truncate

アシスタントメッセージ内のオーディオコンテンツを切り詰めます (truncate)。

パラメータタイプ必須説明
event_id文字列クライアント生成のイベント識別子event_678
type文字列イベントタイプconversation.item.truncate
item_id文字列切り詰めるアシスタントメッセージ項目のIDmsg_002
content_index整数切り詰めるコンテンツ部分のインデックス0
audio_end_ms整数オーディオ切り詰めの終了時点1500

conversation.item.delete

対話履歴から指定された対話項目を削除します。

パラメータタイプ必須説明
event_id文字列クライアント生成のイベント識別子event_901
type文字列イベントタイプconversation.item.delete
item_id文字列削除する対話項目のIDmsg_003

response.create

応答生成をトリガーします。

パラメータタイプ必須説明
event_id文字列クライアント生成のイベント識別子event_234
type文字列イベントタイプresponse.create
response.modalities文字列配列応答のモダリティタイプ["text", "audio"]
response.instructions文字列モデルへの指示"Please assist the user."
response.voice文字列モデルが使用する音声タイプalloy/echo/shimmer
response.output_audio_format文字列出力オーディオ形式pcm16
response.tools配列モデルが利用可能なツールリスト["type", "name", "description"]
response.tool_choice文字列モデルがツールを選択する方法auto
response.temperature数値サンプリング温度0.7
response.max_output_tokens整数/文字列最大出力トークン数150/"inf"

response.cancel

進行中の応答生成をキャンセルします。

パラメータタイプ必須説明
event_id文字列クライアント生成のイベント識別子event_567
type文字列イベントタイプresponse.cancel

サーバーイベント

error

エラーが発生したときに返されるイベント。

パラメータタイプ必須説明
event_id文字列配列サーバーイベントの一意の識別子["event_890"]
type文字列イベントタイプerror
error.type文字列エラータイプinvalid_request_error/server_error
error.code文字列エラーコードinvalid_event
error.message文字列人間が読めるエラーメッセージ"The 'type' field is missing."
error.param文字列エラーに関連するパラメータnull
error.event_id文字列関連イベントのIDevent_567

conversation.item.input_audio_transcription.completed

入力オーディオ書き起こし機能が有効で、書き起こしが成功したときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_2122
type文字列イベントタイプconversation.item.input_audio_transcription.completed
item_id文字列ユーザーメッセージ項目のIDmsg_003
content_index整数オーディオを含むコンテンツ部分のインデックス0
transcript文字列書き起こされたテキスト内容"Hello, how are you?"

conversation.item.input_audio_transcription.failed

入力オーディオ書き起こし機能が設定されているが、ユーザーメッセージの書き起こしリクエストが失敗したときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_2324
type文字列配列イベントタイプ["conversation.item.input_audio_transcription.failed"]
item_id文字列ユーザーメッセージ項目のIDmsg_003
content_index整数オーディオを含むコンテンツ部分のインデックス0
error.type文字列エラータイプtranscription_error
error.code文字列エラーコードaudio_unintelligible
error.message文字列人間が読めるエラーメッセージ"The audio could not be transcribed."
error.param文字列エラーに関連するパラメータnull

conversation.item.truncated

クライアントが以前のアシスタントオーディオメッセージ項目を切り詰めたときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_2526
type文字列イベントタイプconversation.item.truncated
item_id文字列切り詰められたアシスタントメッセージ項目のIDmsg_004
content_index整数切り詰められたコンテンツ部分のインデックス0
audio_end_ms整数オーディオが切り詰められた時点 (ミリ秒)1500

conversation.item.deleted

対話内の特定の項目が削除されたときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_2728
type文字列イベントタイプconversation.item.deleted
item_id文字列削除された対話項目のIDmsg_005

input_audio_buffer.committed

オーディオバッファ内のデータがコミットされたときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_1121
type文字列イベントタイプinput_audio_buffer.committed
previous_item_id文字列新しい対話項目がこのIDに対応する対話項目の後に挿入されますmsg_001
item_id文字列作成されるユーザーメッセージ項目のIDmsg_002

input_audio_buffer.cleared

クライアントが入力オーディオバッファをクリアしたときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_1314
type文字列イベントタイプinput_audio_buffer.cleared

input_audio_buffer.speech_started

サーバー音声検出モードで、音声入力が検出されたときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_1516
type文字列イベントタイプinput_audio_buffer.speech_started
audio_start_ms整数セッション開始から音声が検出されるまでのミリ秒数1000
item_id文字列音声停止時に作成されるユーザーメッセージ項目のIDmsg_003

input_audio_buffer.speech_stopped

サーバー音声検出モードで、音声入力の停止が検出されたときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_1718
type文字列イベントタイプinput_audio_buffer.speech_stopped
audio_start_ms整数セッション開始から音声停止が検出されるまでのミリ秒数2000
item_id文字列作成されるユーザーメッセージ項目のIDmsg_003

response.created

新しい応答が作成されたときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_2930
type文字列イベントタイプresponse.created
response.id文字列応答の一意の識別子resp_001
response.object文字列オブジェクトタイプrealtime.response
response.status文字列応答のステータスin_progress
response.status_detailsオブジェクトステータスの追加詳細情報null
response.output文字列配列応答によって生成された出力項目のリスト["[]"]
response.usageオブジェクト応答の使用統計情報null

response.done

応答がストリーミングを完了したときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_3132
type文字列イベントタイプresponse.done
response.id文字列応答の一意の識別子resp_001
response.object文字列オブジェクトタイプrealtime.response
response.status文字列応答の最終ステータスcompleted/cancelled/failed/incomplete
response.status_detailsオブジェクトステータスの追加詳細情報null
response.output文字列配列応答によって生成された出力項目のリスト["[...]"]
response.usage.total_tokens整数合計トークン数50
response.usage.input_tokens整数入力トークン数20
response.usage.output_tokens整数出力トークン数30

response.output_item.added

応答生成中に新しい出力項目が作成されたときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_3334
type文字列イベントタイプresponse.output_item.added
response_id文字列出力項目が属する応答IDresp_001
output_index文字列応答内の出力項目のインデックス0
item.id文字列出力項目の一意の識別子msg_007
item.object文字列オブジェクトタイプrealtime.item
item.type文字列出力項目タイプmessage/function_call/function_call_output
item.status文字列出力項目ステータスin_progress/completed
item.role文字列出力項目に関連付けられたロールassistant
item.content配列出力項目の内容["type", "text", "audio", "transcript"]

response.output_item.done

出力項目がストリーミングを完了したときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_3536
type文字列イベントタイプresponse.output_item.done
response_id文字列出力項目が属する応答IDresp_001
output_index文字列応答内の出力項目のインデックス0
item.id文字列出力項目の一意の識別子msg_007
item.object文字列オブジェクトタイプrealtime.item
item.type文字列出力項目タイプmessage/function_call/function_call_output
item.status文字列出力項目の最終ステータスcompleted/incomplete
item.role文字列出力項目に関連付けられたロールassistant
item.content配列出力項目の内容["type", "text", "audio", "transcript"]

response.content_part.added

応答生成中にアシスタントメッセージ項目に新しいコンテンツ部分が追加されたときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_3738
type文字列イベントタイプresponse.content_part.added
response_id文字列応答のIDresp_001
item_id文字列コンテンツ部分が追加されるメッセージ項目IDmsg_007
output_index整数応答内の出力項目のインデックス0
content_index整数メッセージ項目コンテンツ配列内のコンテンツ部分のインデックス0
part.type文字列コンテンツタイプtext/audio
part.text文字列テキスト内容"Hello"
part.audio文字列Base64エンコードされたオーディオデータ"base64_encoded_audio_data"
part.transcript文字列オーディオの書き起こしテキスト"Hello"

response.content_part.done

アシスタントメッセージ項目内のコンテンツ部分がストリーミングを完了したときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_3940
type文字列イベントタイプresponse.content_part.done
response_id文字列応答のIDresp_001
item_id文字列コンテンツ部分が追加されるメッセージ項目IDmsg_007
output_index整数応答内の出力項目のインデックス0
content_index整数メッセージ項目コンテンツ配列内のコンテンツ部分のインデックス0
part.type文字列コンテンツタイプtext/audio
part.text文字列テキスト内容"Hello"
part.audio文字列Base64エンコードされたオーディオデータ"base64_encoded_audio_data"
part.transcript文字列オーディオの書き起こしテキスト"Hello"

response.text.delta

"text" タイプコンテンツ部分のテキスト値が更新されたときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_4142
type文字列イベントタイプresponse.text.delta
response_id文字列応答のIDresp_001
item_id文字列メッセージ項目のIDmsg_007
output_index整数応答内の出力項目のインデックス0
content_index整数メッセージ項目コンテンツ配列内のコンテンツ部分のインデックス0
delta文字列テキスト増分更新内容"Sure, I can h"

response.text.done

"text" タイプコンテンツ部分のテキストストリーミングが完了したときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_4344
type文字列イベントタイプresponse.text.done
response_id文字列応答のIDresp_001
item_id文字列メッセージ項目のIDmsg_007
output_index整数応答内の出力項目のインデックス0
content_index整数メッセージ項目コンテンツ配列内のコンテンツ部分のインデックス0
delta文字列最終的な完全なテキスト内容"Sure, I can help with that."

response.audio_transcript.delta

モデルが生成したオーディオ出力の書き起こし内容が更新されたときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_4546
type文字列イベントタイプresponse.audio_transcript.delta
response_id文字列応答のIDresp_001
item_id文字列メッセージ項目のIDmsg_008
output_index整数応答内の出力項目のインデックス0
content_index整数メッセージ項目コンテンツ配列内のコンテンツ部分のインデックス0
delta文字列書き起こしテキストの増分更新内容"Hello, how can I a"

response.audio_transcript.done

モデルが生成したオーディオ出力の書き起こしがストリーミングを完了したときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_4748
type文字列イベントタイプresponse.audio_transcript.done
response_id文字列応答のIDresp_001
item_id文字列メッセージ項目のIDmsg_008
output_index整数応答内の出力項目のインデックス0
content_index整数メッセージ項目コンテンツ配列内のコンテンツ部分のインデックス0
transcript文字列オーディオの最終的な完全な書き起こしテキスト"Hello, how can I assist you today?"

response.audio.delta

モデルが生成したオーディオ内容が更新されたときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_4950
type文字列イベントタイプresponse.audio.delta
response_id文字列応答のIDresp_001
item_id文字列メッセージ項目のIDmsg_008
output_index整数応答内の出力項目のインデックス0
content_index整数メッセージ項目コンテンツ配列内のコンテンツ部分のインデックス0
delta文字列Base64エンコードされたオーディオデータの増分"Base64EncodedAudioDelta"

response.audio.done

モデルが生成したオーディオが完了したときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_5152
type文字列イベントタイプresponse.audio.done
response_id文字列応答のIDresp_001
item_id文字列メッセージ項目のIDmsg_008
output_index整数応答内の出力項目のインデックス0
content_index整数メッセージ項目コンテンツ配列内のコンテンツ部分のインデックス0

関数呼び出し

response.function_call_arguments.delta

モデルが生成した関数呼び出し引数が更新されたときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_5354
type文字列イベントタイプresponse.function_call_arguments.delta
response_id文字列応答のIDresp_002
item_id文字列メッセージ項目のIDfc_001
output_index整数応答内の出力項目のインデックス0
call_id文字列関数呼び出しのIDcall_001
delta文字列JSON形式の関数呼び出し引数の増分"{"location": "San""

response.function_call_arguments.done

モデルが生成した関数呼び出し引数がストリーミングを完了したときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_5556
type文字列イベントタイプresponse.function_call_arguments.done
response_id文字列応答のIDresp_002
item_id文字列メッセージ項目のIDfc_001
output_index整数応答内の出力項目のインデックス0
call_id文字列関数呼び出しのIDcall_001
arguments文字列最終的な完全な関数呼び出し引数(JSON形式)"{"location": "San Francisco"}"

その他のステータス更新

rate_limits.updated

各 "response.done" イベントの後にトリガーされ、更新されたレート制限を示します。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_5758
type文字列イベントタイプrate_limits.updated
rate_limitsオブジェクト配列レート制限情報リスト[{"name": "requests_per_min", "limit": 60, "remaining": 45, "reset_seconds": 35}]

conversation.created

対話が作成されたときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_9101
type文字列イベントタイプconversation.created
conversationオブジェクト対話リソースオブジェクト{"id": "conv_001", "object": "realtime.conversation"}

conversation.item.created

対話項目が作成されたときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_1920
type文字列イベントタイプconversation.item.created
previous_item_id文字列前の対話項目のIDmsg_002
itemオブジェクト対話項目オブジェクト{"id": "msg_003", "object": "realtime.item", "type": "message", "status": "completed", "role": "user", "content": [{"type": "text", "text": "Hello"}]}

session.created

セッションが作成されたときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_1234
type文字列イベントタイプsession.created
sessionオブジェクトセッションオブジェクト{"id": "sess_001", "object": "realtime.session", "model": "gpt-4", "modalities": ["text", "audio"]}

session.updated

セッションが更新されたときに返されるイベント。

パラメータタイプ必須説明
event_id文字列サーバーイベントの一意の識別子event_5678
type文字列イベントタイプsession.updated
sessionオブジェクト更新されたセッションオブジェクト{"id": "sess_001", "object": "realtime.session", "model": "gpt-4", "modalities": ["text", "audio"]}

レート制限イベントパラメータ表

パラメータタイプ必須説明
name文字列制限名requests_per_min
limit整数制限値60
remaining整数残り利用可能量45
reset_seconds整数リセット時間(秒)35

関数呼び出しパラメータ表

パラメータタイプ必須説明
type文字列関数タイプfunction
name文字列関数名get_weather
description文字列関数説明Get the current weather
parametersオブジェクト関数パラメータ定義{"type": "object", "properties": {...}}

オーディオ形式パラメータ表

パラメータタイプ説明オプション値
sample_rate整数サンプリングレート8000, 16000, 24000, 44100, 48000
channels整数チャンネル数1 (モノラル), 2 (ステレオ)
bits_per_sample整数サンプルあたりのビット数16 (pcm16), 8 (g711)
encoding文字列エンコーディング方式pcm16, g711_ulaw, g711_alaw

音声検出パラメータ表

パラメータタイプ説明デフォルト値範囲
threshold浮動小数点数VAD アクティベーション閾値0.50.0-1.0
prefix_padding_ms整数音声プレフィックスパディング(ミリ秒)5000-5000
silence_duration_ms整数無音検出持続時間(ミリ秒)1000100-10000

ツール選択パラメータ表

パラメータタイプ説明オプション値
tool_choice文字列ツール選択方式auto, none, required
tools配列利用可能ツールリスト[{type, name, description, parameters}]

モデル設定パラメータ表

パラメータタイプ説明範囲/オプション値デフォルト値
temperature浮動小数点数サンプリング温度0.0-2.01.0
max_output_tokens整数/文字列最大出力長1-4096/"inf""inf"
modalities文字列配列応答モダリティ["text", "audio"]["text"]
voice文字列音声タイプalloy, echo, shimmeralloy

イベント共通パラメータ表

パラメータタイプ必須説明
event_id文字列イベントの一意の識別子event_123
type文字列イベントタイプsession.update
timestamp整数イベント発生のタイムスタンプ(ミリ秒)1677649363000

セッションステータスパラメータ表

パラメータタイプ説明オプション値
status文字列セッションステータスactive, ended, error
errorオブジェクトエラー情報{"type": "error_type", "message": "error message"}
metadataオブジェクトセッションメタデータ{"client_id": "web", "session_type": "chat"}

対話項目ステータスパラメータ表

パラメータタイプ説明オプション値
status文字列対話項目ステータスcompleted, in_progress, incomplete
role文字列送信者ロールuser, assistant, system
type文字列対話項目タイプmessage, function_call, function_call_output

コンテンツタイプパラメータ表

パラメータタイプ説明オプション値
type文字列コンテンツタイプtext, audio, transcript
format文字列コンテンツ形式plain, markdown, html
encoding文字列エンコーディング方式utf-8, base64

応答ステータスパラメータ表

パラメータタイプ説明オプション値
status文字列応答ステータスcompleted, cancelled, failed, incomplete
status_detailsオブジェクトステータス詳細{"reason": "user_cancelled"}
usageオブジェクト使用統計{"total_tokens": 50, "input_tokens": 20, "output_tokens": 30}

オーディオ書き起こしパラメータ表

パラメータタイプ説明
enabledブール値書き起こしを有効にするかtrue
model文字列書き起こしモデルwhisper-1
language文字列書き起こし言語en, zh, auto
prompt文字列書き起こしプロンプト"Transcript of a conversation"

オーディオストリームパラメータ表

パラメータタイプ説明オプション値
chunk_size整数オーディオチャンクサイズ(バイト)1024, 2048, 4096
latency文字列遅延モードlow, balanced, high
compression文字列圧縮方式none, opus, mp3

WebRTC 設定パラメータ表

パラメータタイプ説明デフォルト値
ice_servers配列ICE サーバーリスト[{"urls": "stun:stun.l.google.com:19302"}]
audio_constraintsオブジェクトオーディオ制約{"echoCancellation": true}
connection_timeout整数接続タイムアウト(ミリ秒)30000

目次

📝 概要
はじめに
ユースケース
主要機能
🔐 認証とセキュリティ
認証方式
一時トークン
セキュリティに関する推奨事項
🔌 接続の確立
WebRTC 接続
WebSocket 接続
接続フロー
データチャネル
オーディオストリーム
💬 対話のやり取り
対話モード
セッション管理
イベントタイプ
⚙️ 設定オプション
オーディオ設定
モデル設定
VAD 設定
💡 リクエスト例
WebRTC 接続 ❌
クライアント実装 (ブラウザ)
サーバーサイド実装 (Node.js)
WebRTC イベント送受信例
WebSocket 接続 ✅
Node.js (wsモジュール)
Python (websocket-client)
ブラウザ (標準WebSocket)
メッセージ送受信例
Node.js/ブラウザ
Python
⚠️ エラー処理
一般的なエラー
エラー回復
📝 イベントリファレンス
一般的なリクエストヘッダー
クライアントイベント
session.update
input_audio_buffer.append
input_audio_buffer.commit
input_audio_buffer.clear
conversation.item.create
conversation.item.truncate
conversation.item.delete
response.create
response.cancel
サーバーイベント
error
conversation.item.input_audio_transcription.completed
conversation.item.input_audio_transcription.failed
conversation.item.truncated
conversation.item.deleted
input_audio_buffer.committed
input_audio_buffer.cleared
input_audio_buffer.speech_started
input_audio_buffer.speech_stopped
response.created
response.done
response.output_item.added
response.output_item.done
response.content_part.added
response.content_part.done
response.text.delta
response.text.done
response.audio_transcript.delta
response.audio_transcript.done
response.audio.delta
response.audio.done
関数呼び出し
response.function_call_arguments.delta
response.function_call_arguments.done
その他のステータス更新
rate_limits.updated
conversation.created
conversation.item.created
session.created
session.updated
レート制限イベントパラメータ表
関数呼び出しパラメータ表
オーディオ形式パラメータ表
音声検出パラメータ表
ツール選択パラメータ表
モデル設定パラメータ表
イベント共通パラメータ表
セッションステータスパラメータ表
対話項目ステータスパラメータ表
コンテンツタイプパラメータ表
応答ステータスパラメータ表
オーディオ書き起こしパラメータ表
オーディオストリームパラメータ表
WebRTC 設定パラメータ表