从模板创建 Agent,可以在同一个请求里设置字段。不带 template 时从空白开始;GET /api/v1/voice/catalog 列出全部模板,以及 Agent 可用的语言和声音。模板只有英文和中文,其他语言请用该语言写好 system_prompt 和 first_message 一起传。整个请求要么全部保存,要么不创建 Agent,所以被拒绝的请求改正后可以直接重发。返回里的 dashboard_url 是这个 Agent 在工作台的页面,可以在浏览器里直接和草稿通话。所有 Agent 都使用 EvaSay ASR、EvaSay LLM 和 EvaSay TTS,由 EvaSay 按每通电话的语言和通话量自动选择,费用已包含在通话费里,不需要也不能填写其他服务商的账号。
curl https://evasay.com/api/v1/voice/agents \
-X POST \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{
"name": "前台",
"language": "zh",
"first_message": "您好,这里是晨光造型,请问有什么可以帮您?",
"system_prompt": "你是晨光造型理发店的前台……"
}'
用 PATCH /api/v1/voice/agents/{id} 修改这些字段:
| 字段 | 说明 |
|---|---|
name、first_message、system_prompt | 文本 |
status | published 把草稿发布成新版本;draft 停止接听电话 |
language | 27 种语言之一,如 en、zh、es、de;multi 表示跟随来电者 |
temperature | 0-100 |
max_duration_sec、silence_timeout_sec | 通话时长和静音限制 |
interruptible、end_call_enabled | 布尔值 |
confirm_details | 布尔值,复述并确认号码、姓名等关键信息 |
ai_disclosure | 布尔值,默认 true;Agent 在开场白之前用通话语言说明来电者在和 AI 通话(开场白里已经说明的不重复) |
voicemail_detection | 布尔值,外呼时先听对方开口,接到语音信箱就结束 |
voicemail_message | 在语音信箱里留的话,可用 {{变量}};不填则直接挂断 |
transfer_number | 转接号码,国际格式 |
transfer_destinations | 最多再加 9 个号码,[{name, number, when}];Agent 按 when 选择 |
transfer_briefing | 布尔值,接听人先听到 Agent 对这通电话的简要介绍再接通 |
pronunciations | 发音词典,最多 100 条 [{word, say, case_sensitive}] |
idle_messages | 最多 3 条静音提醒语,依次说完仍无回应则挂断 |
noise_reduction | 布尔值,先滤掉来电者那边的背景噪音再识别 |
recording_enabled | 布尔值,双声道录音(左声道来电者,右声道 Agent) |
recording_consent | announce、ask(来电者同意才保存)或 none |
recording_notice | 开头说的告知语或问题;不填则按通话语言使用内置说法 |
handoffs | 最多 5 个 [{agent_id, when}]:可以把通话交给的其他 Agent |
knowledge_base_id | 你的某个知识库 |
vocabulary_id | 你的某个词库,来电者说到其中的词时识别更准 |
voice_id | 声音:EvaSay 内置声音的 ID,或你的克隆声音(clone:…) |
内置声音按语言区分:中文有 ming-designed-female-clear、ming-designed-female-warm(女声)和 ming-designed-male-clear、ming-designed-male-friendly(男声),其他语言有 F1–F5(女声)、M1–M5(男声)。设成不说该语言的内置声音时,会换成同性别、说该语言的声音。其他值,以及还没准备好的克隆声音,会被拒绝。旧字段 tts_voice_id 仍然可用。
analysis_config 设置每通电话结束后要分析什么:summary(默认 true)、summaryLanguage、successCriteria(怎样算成功)、fields(最多 20 个要提取的字段 {name, type, description},type 为 string、number 或 boolean)和 scorecard(最多 10 条 {name, description, weight},权重 1–5)。结果在通话的 analysis 和 call.analyzed Webhook 里。
修改 Agent 的字段只改草稿,通话继续使用已发布的版本,直到你用 POST /api/v1/voice/agents/{id}/publish(可带 note)发布草稿,或在同一次 PATCH 里带上 status: "published"。每次发布都会保存一个带编号的版本,Agent 的 published_version 表示通话使用哪个版本。一通电话始终使用它开始时线上的版本,通话中发布不会影响它。工作台里的测试通话使用草稿。
GET /agents/{id}/versions 列出所有版本,POST /agents/{id}/versions/{version}/restore 回滚:新的通话改用该版本,草稿也恢复成它。Agent 的名称、部署位置、挂件外观和通知设置不分版本,修改后立即生效;知识库里的文档同样如此。