自社の電話システムやアプリなど、独自のプログラムから通話の音声を送受信します。通話を開始します。
curl https://evasay.com/api/v1/voice/calls/websocket \
-X POST \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{ "agent_id": "AGENT_ID", "encoding": "pcm_s16le", "sample_rate": 16000 }'
レスポンスの websocket_url にはワンタイムトークンが含まれ、15 分以内に開けます。encoding は pcm_s16le(sample_rate 8000、16000、24000 の 16 ビット リトルエンディアン PCM)または mulaw(8 kHz μ-law)です。音声はその形式のバイナリフレームで双方向に流れ、1 フレーム 20 ms が理想です。テキストフレームは JSON です。
| 方向 | メッセージ |
|---|---|
| あなた → EvaSay | {"type":"dtmf","digits":"12#"} キー入力。{"type":"end"} 切断。{"type":"text","text":"…"} 発信者が入力した言葉(ボタンでの返答は "input":"button")。{"type":"context","text":"…","key":"cart"} アプリからの状況報告(エージェントは返答しません)。{"type":"typing"} お客様が入力中(入力中は1秒に1回ほど送信。エージェントは2秒間話しません)。{"type":"tool_result","id":"…","result":{…}}(または "error")ページ関数の回答 |
| EvaSay → あなた | start(callId 付き)。clear(発信者が割り込み:未再生のエージェント音声を破棄)。transcript(role、text、final、入力された言葉には input)。user_started_speaking、user_stopped_speaking、agent_started_speaking、agent_stopped_speaking。cards(cards、quick_replies)。tool(id、name、arguments:ページ関数を実行)。notice(code:入力された言葉の too_fast または limit)。ended(reason 付き。そのあとソケットが閉じます) |
接続するとすぐにエージェントが挨拶します。リクエストに user_id と page_tools(アプリが応答するページ関数。後述)を追加できます。通話はほかの通話と同じく分単位で課金され、通話記録、分析、Webhook も同じです。