通話中に POST /api/v1/voice/calls/{id}/control を送ります。通話を処理する Worker が約 2 秒以内にコマンドを受け取り、API は 202 を返します。通話を処理する Worker に接続できない場合、API は 503(code call_unreachable)を返し、コマンドは実行されません。
type | 動作 |
|---|---|
say | エージェントが今の文のあとに text を話します。"interrupt": true ならすぐに話します |
note | エージェントに text を伝え(話しません)、次の返答から考慮させます。文字起こしに記録されます |
end | text があればエージェントが話してから切断します。text のない電話は即座に切断します |
その通話の ended_reason は api_ended になります。ダッシュボードの通話ページにも同じ操作があります。
POST /api/v1/voice/calls/{id}/listen(任意で { "channels": 2 })は、2 分以内に開ける listen_url を返します。これは WebSocket で、まず JSON メッセージ {"type":"start","sampleRate":8000,"channels":1,"encoding":"pcm_s16le"} が届き、続いて発信者が聞いている音声(両者の声のミックス。channels: 2 なら左が発信者、右がエージェント)が 16 ビット リトルエンディアン PCM のバイナリフレームで届きます。通話が終わると閉じます。音声は EvaSay のコントロールプレーンを経由せず、通話を処理する Worker から直接届きます。ダッシュボードの通話ページの「モニタリング」ボタンも同じアドレスを使います。