クライアントイベント
クライアントイベント
会話型アプリケーションでクライアントが受信するリアルタイムイベントを理解し、処理します。
クライアントイベントは、リアルタイム通信を円滑にするためにサーバーからクライアントへ送信されるシステムレベルのイベントです。これらのイベントは、オーディオ、文字起こし、エージェントの応答など、重要な情報をクライアントアプリケーションに提供します。
クライアントからサーバーへ送信できるイベントについては、クライアントからサーバーへの イベントのドキュメントを参照してください。
概要
クライアントイベントは、会話のリアルタイム性を維持するために不可欠です。初期化メタデータから処理済みのオーディオ、エージェントの応答まで、必要な情報を提供します。
これらのイベントはWebSocket通信プロトコルの一部であり、SDKによって自動的に処理されます。 高度な実装やデバッグには、これらを理解することが重要です。
クライアントイベントの種類
conversation_initiation_metadata
- 会話開始時に自動送信されます
- 会話の設定とパラメータを初期化します
queue_status
- エージェントが同時実行数の上限に達している間、通話キューで保留中の発信者にのみ送信されます
waitingは、conversation_initiation_metadataの後、保留音声の前に1回送信されます- 待機が終了すると、
admittedまたはtimed_outが1回送信されます。timed_outの後には、コード4300でWebSocketがクローズされます - キュー内の発信者には常に送信されます。エージェントの
client_events設定で有効にする必要はありません
発信者がキューに入っている間、保留音声は通常のaudioイベントとして届きます。保留音声をエージェントの発話として扱うのではなく、このイベントを使用して
待機状態を表示してください。
ping
- 即時の応答が必要なヘルスチェックイベント
- SDKによって自動的に処理されます
- WebSocket接続の維持に使用されます
audio
- 再生用のbase64エンコード済みオーディオを含みます
- 追跡と順序管理のための数値イベントIDを含みます
- 音声出力ストリーミングを処理します
- 文字単位のタイミング情報を含むアラインメントデータを含みます
WebRTC接続では、オーディオはLiveKitで直接処理されるため、audioイベントは送信されません。
user_transcript
- 確定したスピーチtoテキストの結果を含みます
- 完全なユーザー発話を表します
- 会話履歴に使用されます
agent_response
- 完全なエージェントメッセージを含みます
- メッセージの完了後に1回送信されるため、音声会話では通常、メッセージのオーディオがストリーミングを開始した後に届きます。
- 表示と履歴に使用されます
エージェントのテキストを生成中に表示するには、このイベントを待つのではなく、以下で説明する
agent_chat_response_partイベントを使用してください。
agent_response_correction
- 割り込み後に切り詰められた応答を含みます
- 表示中のメッセージを更新します
- 会話の正確性を維持します
agent_response_metadata
- カスタムLLM応答からの任意のメタデータを含みます
- カスタムLLMを使用している場合にのみ送信されます
- エージェントの
client_events設定で明示的に有効にする必要があります
このイベントはカスタムLLMインテグレーション固有です。カスタムLLMサーバーから応答とともに 追加メタデータを渡し、クライアントアプリケーションで利用できます。
client_tool_call
- エージェントがクライアントに実行してほしい関数呼び出しを表します
- ツール名、ツール呼び出しID、パラメータを含みます
- クライアント側で関数を実行し、その結果をサーバーに返す必要があります
SDKを使用している場合は、結果をサーバーに返す処理用のコールバックが提供されます。
agent_tool_response
- エージェントがツール関数を実行したときに示されます
- ツールのメタデータと実行ステータスを含みます
- 会話中のエージェントによるツール使用状況を可視化します
agent_tool_response_full_payload
agent_tool_responseを反映し、さらにツール結果の完全なペイロードを文字列としてfull_tool_resultでストリーミングします。- 表示や後続処理のために、クライアントでツール出力を利用できるようにします。
- エージェントの
client_events設定で明示的に有効にする必要があります。
このイベントは完全なツール結果をクライアントに公開するため、機密データが含まれる可能性があります。クライアントがペイロードを安全に処理できる場合にのみ有効にしてください。64 KBを超える結果は自動的に切り詰められます。
React
JavaScript
vad_score
- 音声アクティビティ検出スコアイベント
- ユーザーが発話している確率を示します
- 値の範囲は0から1で、値が高いほど発話である確信度が高いことを示します
mcp_tool_call
- エージェントがMCPツール関数を実行したときに示されます
- ツール名、ツール呼び出しID、パラメータを含みます
loading、awaiting_approval、success、failureの4つの状態のいずれかで呼び出されます。
agent_chat_response_part
- エージェントの応答テキストを、生成に合わせて
start、delta、stopメッセージとしてストリーミングします - テキストのみモードでは常に送信されます。音声会話では、エージェントの
client_events設定で明示的に有効にする必要があります - エージェントまたはアクティブなプロシージャが、応答全体を評価してから公開する必要があるブロッキングガードレールを使用している間は送信されません
response_idはストリーミング中のメッセージを識別し、後で確定するagent_responseのresponse_idと一致します
agent_reasoning_response_part
agent_reasoning_response_partは、テキストのみの会話中にモデルが提供する推論をストリーミングします。
client_eventsでこのイベントを有効にし、エージェントの推論
要約をオンにしてください。サーバーは
start、delta、stopメッセージを送信します。音声会話中、または
エージェントもしくはアクティブなプロシージャがブロッキングガードレールを使用している間は、このイベントを送信しません。
このイベントと対応するSDKコールバックは実験的機能です。動作と形式は リリースごとに変更される可能性があります。
開始イベントと停止イベントでは、text値は空です。
agent_response_complete
- 保留中のツール呼び出しを含め、エージェントが応答を完了したときに発生します。このイベントの後、ユーザーが新しい入力を提供するか、ターンタイムアウトによって新しいターンが開始されない限り、エージェントは追加の出力を生成しません。
- エージェントの
client_events設定で明示的に有効にする必要があります
guardrail_triggered
- ガードレール違反によって会話が終了すると発生します。ガードレールが再試行をトリガーし、その再試行が成功した場合は送信されません。
- イベント自体がシグナルであり、
typeフィールド以外のペイロードは含まれません。 - エージェントの
client_events設定で明示的に有効にする必要があります。
イベントフロー
会話中の一般的なイベントの流れは次のとおりです:
エージェントが同時実行数の上限に達し、通話キューイングが有効になっている場合、サーバーはconversation_initiation_metadataと最初のaudioイベントの間にqueue_statusイベントを送信します。発信者が受け入れられるまで、保留音はaudioイベントとして配信されます。
ベストプラクティス
-
エラー処理
- 各イベントタイプに適切なエラー処理を実装する
- デバッグのために重要なイベントをログに記録する
- 接続の中断を適切に処理する
-
オーディオ管理
- オーディオチャンクを適切にバッファリングする
- 中断時に適切なクリーンアップを実装する
- オーディオリソースを適切に管理する
-
接続管理
- PINGイベントにすみやかに応答する
- 再接続ロジックを実装する
- 接続状態を監視する
トラブルシューティング
接続の問題
- WebSocket接続が適切に設定されていることを確認する
- PING/PONGの応答を確認する
- API認証情報を確認する
オーディオの問題
- オーディオチャンクの処理を確認する
- オーディオ形式の互換性を確認する
- メモリ使用量を監視する
イベント処理
- デバッグのためにすべてのイベントをログに記録する
- エラーバウンダリーを実装する
- イベントハンドラーの登録を確認する
詳しい実装例については、SDK ドキュメントを確認してください。