GET /api/v1/voice/calls/{id} 返回通话状态、时长、扣除的 Credits、摘要、分析结果和逐字稿。用 GET /api/v1/voice/calls?agent_id=&status=&channel=&user_id=&page= 列出通话(user_id:你给这个人的 ID,来自网页通话令牌)。返回里的 turns 是逐轮调试日志:每一轮从来电者说完到听到回答的各段耗时(毫秒),包括 waitMs(等来电者说完)、sttMs(识别)、llmMs(模型首字,每轮调用函数会多一个)、ttsMs(语音首包)、firstAudioMs(听到回答),以及调用的函数、是否被打断和出错信息。工作台通话详情页也会显示。
打开 recording_enabled 后,每通电话保存为双声道 WAV:左声道是来电者,右声道是 Agent,采样率与通话一致。recording_consent 为 "announce" 时 Agent 先说明通话会被录音;为 "ask" 时先询问,来电者同意才保存录音(不回答视为不同意);为 "none" 时不提示。请先确认你和来电者所在地区的法律要求。
录音默认存放在 EvaSay,也可以在“集成 → Webhook 与通知 → 录音存储”里改存到你自己的 S3 兼容存储桶(AWS S3、Cloudflare R2、Google Cloud Storage、Supabase、MinIO)。录音由运行通话的 Worker 直接上传到存储桶。录音保存后,GET /api/v1/voice/calls/{id} 返回 1 小时内有效的 recordingUrl,以及 recording.status(recording、stored、declined 或 failed)。
DELETE /api/v1/voice/calls/{id} 删除一通已结束的通话,连同逐字稿、录音(EvaSay 存储或你自己的存储桶里的)、分析和 Webhook 投递记录。已用的 Credits 仍保留在点数记录里。暂时不能删除的通话返回 409,code 为 call_not_deletable_yet:通话还在进行或刚刚结束、还在结算、录音可能还在上传,或者欠着余额不够支付的 Credits(先充值)。
有人要求删除自己的数据时,用 POST /api/v1/voice/calls/delete-by-caller:传 { "phone_number": "+14155550123" } 删除这个号码的所有通话(呼入看来电号码,外呼看被叫号码),传 { "user_id": "..." } 删除令牌里带这个 user_id 的所有网页通话。返回 { "deleted": 12, "kept_back": { "settling": 1 }, "more": false }:每次最多 200 通,more 为 true 时再调一次;kept_back 里的通话稍后再删。号码如果在拒呼名单里,会继续留在名单上。工作台的“通话记录 → 删除来电者的数据”做的是同一件事。