跳到正文

流程脚本 chat 节点

chat 节点在节点内部执行持续 ASR、无状态 Chat SSE、分句 TTS 和插话取消,退出后按 handle 回到主流程。

json
{
  "id": "chat-sales",
  "type": "chat",
  "data": {
    "opening_prompt": "您好 {customer_name},您可以直接告诉我需求。",
    "chat_profile": "general-assistant",
    "branches": [{ "key": "done", "desc": "诉求已解决或用户明确结束" }],
    "max_turns": 6,
    "silence_prompt": "抱歉,我没有听清,请再说一次。",
    "error_prompt": "抱歉,系统暂时无法继续对话。",
    "save_as": "chat_result"
  }
}

每个语义分支以及固定的 timeouterror 都必须有同名 sourceHandle 连线;语义分支不能使用这两个保留 key。chat_profile 必须来自 /api/chat/capabilities

save_as 会注册 .status.exitKey.turnCount.summary.lastUserText.lastAssistantText.confidence.reason 模板变量。完整对话只进入 transcript;同一通电话的 chat 节点共享由 callflow-esl 截断维护的历史。

节点内持续 ASR 固定使用 bargeInTrigger: "vad":只有非空 partial / final transcript 才会停止当前 TTS、取消旧 SSE 并进入新一轮。空 speech-start、纯空白 partial 或只有 VAD flags 的事件不会打断分句播放。每个 TTS chunk 会记录序号、 字符数、完成状态、interruptedBystopReason,诊断日志不额外复制回复正文。

文档与代码在同一仓库维护,现有 Markdown 是唯一内容源。