エンドポイント
Connection: Upgrade と Upgrade: websocket を伴う GET)。それ以外のリクエストは 426 で拒否されます。
認証
アップグレードリクエストのヘッダーで、Comfy API キーをX-API-Key: comfyui-... または Authorization: Bearer comfyui-... として送信します。Router はクエリ文字列や WebSocket サブプロトコルからキーを読み取りません。
接続
アップグレードが成功したら、xAI が Grok Voice 向けに文書化しているリアルタイムイベントを送受信します。この例ではセッションを設定し、1 回のテキストターンを送信して、受信した各イベントタイプを出力します。イベント
Router は独自のイベントプロトコルを定義していません。サーバーイベントは fal が送信するそのままの形で届き、Router が受け付けるクライアントイベントは変更されずに転送されます。イベント一覧、セッションのフィールド、ボイス、オーディオ形式については、次を参照してください。- xAI Speech to Speech および xAI の realtime イベントスキーマ
- fal の Grok Voice realtime モデルページ とその API ページ
session.created で始まる msgpack バイナリメッセージとして返されます。fal は独自の x-fal-message タイプの JSON テキストメッセージ(タイミング情報)も送信しますが、これらはスキップしてかまいません。Router のチェックではクライアントイベントを 1 つの JSON テキストメッセージとして受け付けることもできますが、クライアントで JSON をテスト済みでない限り msgpack を使用してください。
Router は転送前に各クライアントイベントをチェックします:
- イベントタイプ:
session.update、input_audio_buffer.append、input_audio_buffer.commit、input_audio_buffer.clear、conversation.item.create、conversation.item.delete、conversation.item.truncate、response.create、response.cancel、および fal のx-fal-session.configure。 - モデル:
session.update内のmodelはgrok-voice-latest、grok-voice-3.0、またはgrok-voice-2.0である必要があります。 - ツール: クライアントが実行する関数ツールは許可されます。サーバー側のツール(ウェブ検索、X 検索、ファイル検索、MCP)は拒否されます。
- メディア: 画像とビデオの入力は拒否されます。セッションは音声とテキストのみです。
- サイズ: 1 つのクライアントメッセージは最大 1 MiB です。
1008 でセッションを閉じます。
料金
セッションには**1秒あたり$0.0011869**の費用がかかります(1分あたり約$0.0712、または1秒あたり0.2504クレジット、1分あたり約15.0クレジット。211クレジット = 1 USDのレートで)。セッションが開いている間は15秒単位で課金され、最後の端数は秒単位で切り上げて課金されます。課金はアップグレードからソケットが閉じるまで、オーディオが流れているかどうかに関係なく継続します。制限
セッションが時間制限に達した場合、またはクレジットが不足した場合、接続は close フレームなしで閉じることがあります(多くの場合、close コード
1006 として現れます)。チャージした後にのみ再接続するか、より長い時間が必要な場合は新しいセッションを開始してください。
エラー
アップグレード前
Router が接続を拒否した場合、プロトコルを切り替えずに HTTP ステータスと JSON ボディで応答します。code を使用してください。detail は人向けの説明です。
アップグレード後
その他のクローズは fal または xAI によるものです。イベントにリンクされている各社のドキュメントを参照してください。