用你自己的程序直接收发通话音频,例如接入自建的电话系统或 App。先创建通话:
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(16 位小端 PCM,sample_rate 可选 8000、16000、24000)或 mulaw(8 kHz μ-law)。两个方向都用这个格式的二进制帧传音频,建议每帧 20 毫秒。文本帧是 JSON:
| 方向 | 消息 |
|---|---|
| 你 → EvaSay | {"type":"dtmf","digits":"12#"} 按键;{"type":"end"} 挂断;{"type":"text","text":"…"} 客户打的字(点回话按钮时加 "input":"button");{"type":"context","text":"…","key":"cart"} 你的 App 告诉 Agent 的情况(Agent 不会因此开口);{"type":"typing"} 客户正在打字(打字时每秒左右发一次,Agent 2 秒内不开口);{"type":"tool_result","id":"…","result":{…}}(或 "error")页面函数的结果 |
| EvaSay → 你 | start(含 callId);clear(来电者打断了,丢掉还没播放的 Agent 音频);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,随后关闭连接) |
Agent 收到连接就开始说开场白。请求里还可以带 user_id 和 page_tools(你的 App 会执行的页面函数,见下文)。按通话分钟计费,与其他通话相同,通话记录、分析和 Webhook 也一样。