开发工具/API 参考/工作流/执行对话流
执行对话流
更新于: 2026-06-25 19:29:14
执行已发布的对话流。
对话流是基于对话场景的特殊工作流,专门用于处理对话类请求。对话流通过对话的方式和用户交互,并完成复杂的业务逻辑。在应用中添加对话流,将对话中的用户指令拆分为一个个步骤节点,并为其设计用户界面,你可以搭建出适用于移动端或网页端的对话式 AI 应用,实现自动化、智能化的对话流程。关于对话流的详细说明可参考工作流与对话流。
此接口为流式响应模式,允许客户端在接收到完整的数据流之前就开始处理数据,例如在对话界面实时展示回复内容,减少客户端等待模型完整回复的时间。
此接口支持包括问答节点、输入节点等可能导致对话中断的节点,对话中断时只需再次调用对话流,在 additional_messages 中指定输入内容,即可继续对话。
说明
此接口可用于调用空间资源库中的对话流,或低代码应用中的对话流。调用这两种对话流时,入参不同:
|
入参 |
资源库对话流 |
低代码应用中的对话流 |
|
|---|---|---|---|
|
在智能体中执行 |
在低代码应用中执行 |
||
|
workflow_id |
必选 |
必选 |
必选 |
|
app_id |
不传 |
必选 |
必选 |
|
bot_id |
必选 |
不传 |
不传 |
|
conversation_id |
可选 |
可选 |
可选 |
|
请求方式 |
POST |
|---|---|
|
请求地址 |
|
|
权限 |
|
|
接口说明 |
执行已发布的对话流。 |
|
参数 |
取值 |
说明 |
|---|---|---|
|
Authorization |
Bearer $Access_Token |
用于验证客户端身份的访问令牌。你可以在扣子编程中生成访问令牌,详细信息,参考准备工作。 |
|
Content-Type |
application/json |
解释请求正文的方式。 |
|
参数 |
类型 |
是否必选 |
示例 |
说明 |
|---|---|---|---|---|
|
workflow_id |
String |
必选 |
73505836754923*** |
待执行的对话流 ID,此对话流应已发布。 |
|
additional_messages |
Array of additional_messages object |
必选 |
[ { “role”: “user”, “content_type”: “text”, “content”: “你好” } ] |
对话中用户问题和历史消息。数组长度限制为 50,即最多传入 50 条消息。
说明 对话流执行到问答节点、输入节点等节点时可能导致对话中断,此时只需再次调用对话流,在 additional_messages 中指定输入内容即可继续对话。 |
|
parameters |
map[String]any |
必选 |
{“image”: “{"file_id":"1122334455"}”,“user_name”:“George”} |
设置对话流输入参数中的自定义参数。以 JSON 序列化字符串形式传入。你可以在指定对话流的编排页面查看自定义输入参数列表。
说明
|
|
app_id |
String |
可选 |
744208683** |
需要关联的低代码应用 ID。调用对话流时,必须指定 app_id 或 bot_id,便于模型调用智能体或应用的数据库、变量等数据处理问题。 说明 运行低代码应用中的对话流时,app_id 必选。详细说明可参考接口说明。 |
|
bot_id |
String |
可选 |
75049216555930**** |
需要关联的智能体 ID。 调用对话流时,必须指定 app_id 或 bot_id,便于模型调用智能体或应用的数据库、变量等数据处理问题。 说明 运行资源库中的对话流时,根据对话流执行的位置(智能体或低代码应用)选择设置 bot_id 还是 app_id。详细说明可参考接口说明。 |
|
conversation_id |
String |
可选 |
748348012449138**** |
对话流对应的会话 ID,对话流产生的消息会保存到此会话中。会话默认为开始节点设置的 CONVERSATION_NAME,也可以通过 conversation_id 参数指定会话。 说明
|
|
ext |
Map[String][String] |
可选 |
{“latitude”:“39.9042”,“longitude”:“116.4074”,“user_id”:“123456789”} |
用于指定一些额外的字段,以 Map[String][String] 格式传入。例如某些插件会隐式用到的经纬度等字段。
|
|
workflow_version |
String |
可选 |
v0.0.5 |
对话流的版本号,仅当运行的对话流属于资源库对话流时有效。未指定版本号时默认执行最新版本的对话流。 |
|
connector_id |
String |
可选 |
1024 |
渠道 ID,用于配置该对话流在什么渠道执行。
说明 不同渠道的用户数据、会话记录等相互隔离,进行数据分析统计时,不支持跨渠道数据调用。 |
|
参数 |
类型 |
是否必选 |
示例 |
说明 |
|---|---|---|---|---|
|
role |
String |
必选 |
user |
发送这条消息的实体。取值:
|
|
type |
String |
可选 |
question |
消息类型。默认为 question。
|
|
content |
String |
可选 |
北京今天的天气怎么样 |
消息的内容,仅支持纯文本。
说明
|
|
content_type |
String |
可选 |
text |
消息内容的类型。 说明 指定 content 时,应同时设置 content_type。 |
|
meta_data |
Map |
可选 |
{“key1”:“value1”, “key2”:“value2”} |
创建消息时的附加消息,获取消息时也会返回此附加消息。 |
流式响应允许客户端在接收到完整的数据流之前就开始处理数据,例如在对话界面实时展示回复内容,减少客户端等待模型完整回复的时间。
流式响应的整体流程如下:
######### 整体概览 (chat, MESSAGE 两级)
# chat - 开始
# chat - 处理中
# MESSAGE - 知识库召回
# MESSAGE - function_call
# MESSAGE - tool_output
# MESSAGE - answer is normal text
# MESSAGE - 多 answer 的情况下,会继续有 message.delta
# chat - 完成
# 流结束 event: done
#########
# chat - 开始
event: conversation.chat.created
data: {"id":"120","conversation_id":"456","created_at":1733407180,"last_error":{"code":0,"msg":""},"status":"created","usage":{"token_count":0,"output_count":0,"input_count":0},"section_id":"789"}
# chat - 处理中
event: conversation.chat.in_progress
data: {"id":"121","conversation_id":"456","created_at":1733407180,"last_error":{"code":0,"msg":""},"status":"in_progress","usage":{"token_count":0,"output_count":0,"input_count":0},"section_id":"789"}
# MESSAGE - answer is normal text
event: conversation.message.delta
data: {"id":"122","conversation_id":"456","role":"assistant","type":"answer","content":"中午吃啥了","content_type":"text","chat_id":"567","section_id":"789","created_at":1733407182}
# MESSAGE - 消息结束
event: conversation.message.completed
data: {"id":"124","conversation_id":"456","role":"assistant","type":"answer","content":"中午吃啥了","content_type":"text","chat_id":"567","section_id":"789","created_at":1733407182}
event: conversation.message.completed
data: {"id":"125","conversation_id":"456","role":"assistant","type":"verbose","content":"{\"msg_type\":\"interrupt\",\"data\":\"\",\"from_module\":null,\"from_unit\":null}","content_type":"text","chat_id":"567","section_id":"789","created_at":1733407182,"updated_at":1733407182}
event: conversation.message.completed
data: {"id":"130","conversation_id":"456","role":"assistant","type":"verbose","content":"{\"msg_type\":\"generate_answer_finish\",\"data\":\"{\\\"finish_reason\\\":1,\\\"FinData\\\":\\\"\\\"}\",\"from_module\":null,\"from_unit\":null}","content_type":"text","chat_id":"567","section_id":"789","created_at":1733407182,"updated_at":1733407182}
event: done
data: {"debug_url":"https://www.coze.cn/work_flow?execute_id=74449256856****\u0026space_id=7442165654356*****\u0026workflow_id=744224337778*****"}
返回的事件消息体结构如下:
|
参数 |
类型 |
说明 |
|---|---|---|
|
event |
String |
当前流式返回的数据包事件。在流式响应中,服务端不会一次性发送所有数据,而是以数据流的形式逐条发送数据给客户端,数据流中包含对话过程中触发的各种事件(event),直至处理完毕或处理中断。处理结束后,服务端会通过 conversation.message.completed 事件返回拼接后完整的模型回复信息。各个事件的说明可参考下表。 |
|
data |
Object |
消息内容。其中,chat 事件和 message 事件的格式不同。
|
流式响应事件列表:
|
事件(event)名称 |
说明 |
|---|---|
|
conversation.chat.created |
创建对话的事件,表示对话开始。 |
|
conversation.chat.in_progress |
服务端正在处理对话。 |
|
conversation.message.delta |
增量消息,通常是 type=answer 时的增量消息。 |
|
conversation.message.completed |
message 已回复完成。此时流式包中带有所有 message.delta 的拼接结果,且每个消息均为 completed 状态。 |
|
conversation.chat.completed |
对话完成。 |
|
conversation.chat.failed |
此事件用于标识对话失败。 |
|
conversation.chat.requires_action |
对话中断,需要使用方上报工具的执行结果。通常是触发了问答节点或输入节点,需要再次调用此接口继续对话。 |
|
error |
流式响应过程中的错误事件。关于 code 和 msg 的详细说明,可参考错误码。 |
|
done |
本次会话的流式返回正常结束。 |
|
参数 |
类型 |
是否可选 |
说明 |
|---|---|---|---|
|
id |
String |
必填 |
对话 ID,即对话的唯一标识。 |
|
conversation_id |
String |
必填 |
会话 ID,即会话的唯一标识。 |
|
bot_id |
String |
必填 |
要进行会话聊天的智能体 ID。 |
|
created_at |
Integer |
选填 |
对话创建的时间。格式为 10 位的 Unixtime 时间戳,单位为秒。 |
|
completed_at |
Integer |
选填 |
对话结束的时间。格式为 10 位的 Unixtime 时间戳,单位为秒。 |
|
failed_at |
Integer |
选填 |
对话失败的时间。格式为 10 位的 Unixtime 时间戳,单位为秒。 |
|
meta_data |
Map<String,String> |
选填 |
创建消息时的附加消息,用于传入使用方的自定义数据,获取消息时也会返回此附加消息。 |
|
last_error |
Object |
选填 |
对话运行异常时,此字段中返回详细的错误信息,包括:
说明
|
|
status |
String |
必填 |
对话的运行状态。取值为:
|
|
required_action |
Object |
选填 |
需要运行的信息详情。 |
|
usage |
Object |
选填 |
Token 消耗的详细信息。实际的 Token 消耗以对话结束后返回的值为准。 |
|
»token_count |
Integer |
选填 |
本次对话消耗的 Token 总数,包括 input 和 output 部分的消耗。 |
|
»output_count |
Integer |
选填 |
output 部分消耗的 Token 总数。 |
|
»input_count |
Integer |
选填 |
input 部分消耗的 Token 总数。 |
Chat Object 的示例如下:
{
// 在 chat 事件里,data 字段中的 id 为 Chat ID,即会话 ID。
"id": "737662389258662****",
"conversation_id": "737554565555041****",
"bot_id": "736661612448078****",
"completed_at": 1717508113,
"last_error": {
"code": 0,
"msg": ""
},
"status": "completed",
"usage": {
"token_count": 6644,
"output_count": 766,
"input_count": 5878
}
}
|
参数 |
类型 |
说明 |
|---|---|---|
|
id |
String |
Message ID,即消息的唯一标识。 |
|
conversation_id |
String |
此消息所在的会话 ID。 |
|
bot_id |
String |
编写此消息的智能体ID。此参数仅在对话产生的消息中返回。 |
|
chat_id |
String |
Chat ID。此参数仅在对话产生的消息中返回。 |
|
meta_data |
Map |
创建消息时的附加消息,获取消息时也会返回此附加消息。 |
|
role |
String |
发送这条消息的实体。取值:
|
|
content |
String |
消息的内容,支持纯文本、多模态(文本、图片、文件混合输入)等多种类型的内容。 |
|
content_type |
String |
消息内容的类型,取值包括:
|
|
created_at |
Integer |
消息的创建时间,格式为 10 位的 Unixtime 时间戳,单位为秒(s)。 |
|
updated_at |
Integer |
消息的更新时间,格式为 10 位的 Unixtime 时间戳,单位为秒(s)。 |
|
type |
String |
消息类型。
|
|
section_id |
String |
预留字段,仅在调用发起对话 API 时的部分场景下返回,无需关注。 |
执行低代码应用中的对话流时,需要通过 app_id 指定应用 ID。
示例如下:
curl --location 'https://api.coze.cn/v1/workflows/chat' \
--header 'Authorization: Bearer pat_*****' \
--header 'Content-Type: application/json' \
--data '{
"workflow_id": "74423***",
"app_id": "7439828073***",
"additional_messages": [
{
"role": "user",
"content_type": "text",
"content": "你好"
}
],
"parameters": {
"image":"{\"file_id\":\"1122334455\"}"
}
}'
执行资源库中的对话流时,需要通过 bot_id 参数绑定一个智能体 ID,或通过 app_id 绑定一个应用。
执行对话流且绑定智能体的示例如下:
curl --location 'https://api.coze.cn/v1/workflows/chat' \
--header 'Authorization: Bearer pat_*****' \
--header 'Content-Type: application/json' \
--data '{
"workflow_id": "74423***",
"bot_id": "7439828073***",
"conversation_id": "7237029***",
"additional_messages": [
{
"role": "user",
"content_type": "text",
"content": "你好"
}
],
"parameters": {
"image":"{\"file_id\":\"1122334455\"}"
}
}'
# chat - 开始
event: conversation.chat.created
data: {"last_error":{"msg":"","code":0},"usage":{"token_count":0,"output_count":0,"input_count":0},"id":"75598600924738*****","conversation_id":"75598599835687*****","section_id":"75598599835687*****","status":"created","created_at":1760167093}
# chat - 处理中
event: conversation.chat.in_progress
data: {"usage":{"token_count":0,"output_count":0,"input_count":0},"conversation_id":"75598599835687*****","id":"75598600924738*****","section_id":"75598599835687*****","last_error":{"code":0,"msg":""},"status":"in_progress","created_at":1760167093}
event: conversation.message.delta
data: {"conversation_id":"75598599835687*****","role":"assistant","section_id":"75598599835687*****","chat_id":"75598600924738*****","id":"75598601273532*****","type":"answer","content":"那我给你讲","content_type":"text"}
event: conversation.message.delta
data: {"content":"个会冒冷气的笑话哦!从前有只小企鹅问","content_type":"text","section_id":"75598599835687*****","conversation_id":"75598599835687*****","type":"answer","chat_id":"75598600924738*****","id":"75598601273532*****","role":"assistant"}
event: conversation.message.delta
data: {"id":"75598601273532*****","conversation_id":"75598599835687*****","role":"assistant","content_type":"text","chat_id":"75598600924738*****","type":"answer","content":"妈妈:\"为什么我们住在南极呀","section_id":"75598599835687*****"}
event: conversation.message.delta
data: {"content":"?\"妈妈摸着它的圆脑袋说","role":"assistant","conversation_id":"75598599835687*****","type":"answer","content_type":"text","chat_id":"75598600924738*****","section_id":"75598599835687*****","id":"75598601273532*****"}
event: conversation.message.delta
data: {"role":"assistant","type":"answer","chat_id":"75598600924738*****","section_id":"75598599835687*****","id":"75598601273532*****","conversation_id":"75598599835687*****","content":":\"因为这里有好多好多鱼呀~\"小","content_type":"text"}
event: conversation.message.delta
data: {"role":"assistant","chat_id":"75598600924738*****","id":"75598601273532*****","conversation_id":"75598599835687*****","type":"answer","content":"企鹅眨巴眨巴眼睛:\"可是北极熊住在","content_type":"text","section_id":"75598599835687*****"}
event: conversation.message.delta
data: {"content":"北极也有鱼呀!\"妈妈突然把翅膀","chat_id":"75598600924738*****","section_id":"75598599835687*****","role":"assistant","type":"answer","content_type":"text","id":"75598601273532*****","conversation_id":"75598599835687*****"}
event: conversation.message.delta
data: {"id":"75598601273532*****","conversation_id":"75598599835687*****","role":"assistant","type":"answer","section_id":"75598599835687*****","content":"搭在它肩上,压低声音说","content_type":"text","chat_id":"75598600924738*****"}
event: conversation.message.delta
data: {"role":"assistant","type":"answer","content":":\"傻孩子...因为如果我们搬到北极,就","content_type":"text","id":"75598601273532*****","conversation_id":"75598599835687*****","chat_id":"75598600924738*****","section_id":"75598599835687*****"}
event: conversation.message.delta
data: {"conversation_id":"75598599835687*****","role":"assistant","type":"answer","content_type":"text","section_id":"75598599835687*****","id":"75598601273532*****","content":"会变成'北极大企鹅啦!","chat_id":"75598600924738*****"}
# MESSAGE - 消息结束
event: conversation.message.completed
data: {"chat_id":"75598600924738*****","created_at":1760167105,"id":"75598601273532*****","content":"那我给你讲个会冒冷气的笑话哦!从前有只小企鹅问妈妈:\"为什么我们住在南极呀?\"妈妈摸着它的圆脑袋说:\"因为这里有好多好多鱼呀~\"小企鹅眨巴眨巴眼睛:\"可是北极熊住在北极也有鱼呀!\"妈妈突然把翅膀搭在它肩上,压低声音说:\"傻孩子...因为如果我们搬到北极,就会变成'北极大企鹅'啦!\"","content_type":"text","section_id":"75598599835687*****","conversation_id":"75598599835687*****","role":"assistant","type":"answer"}
event: conversation.message.completed
data: {"updated_at":1760167107,"id":"75598601516393*****","role":"assistant","content_type":"text","chat_id":"75598600924738*****","created_at":1760167107,"conversation_id":"75598599835687*****","type":"verbose","content":"{\"msg_type\":\"empty result\",\"data\":\"empty result\",\"from_module\":null,\"from_unit\":null}","section_id":"75598599835687*****"}
event: conversation.message.completed
data: {"updated_at":1760167107,"id":"75598601569435*****","content":"{\"msg_type\":\"generate_answer_finish\",\"data\":\"{\\\"finish_reason\\\":0,\\\"FinData\\\":\\\"\\\"}\",\"from_module\":null,\"from_unit\":null}","content_type":"text","chat_id":"75598600924738*****","section_id":"75598599835687*****","created_at":1760167107,"conversation_id":"75598599835687*****","role":"assistant","type":"verbose"}
# chat - 结束
event: conversation.chat.completed
data: {"status":"completed","usage":{"token_count":1736,"output_count":498,"input_count":1238},"created_at":1760167093,"id":"75598600924738*****","section_id":"75598599835687*****","completed_at":1760167107,"conversation_id":"75598599835687*****","last_error":{"code":0,"msg":""}}
event: done
data: {"debug_url":"https://www.coze.cn/work_flow?execute_id=75598600951038*****&space_id=74982048832804*****&workflow_id=75228046974940*****&execute_mode=2"}
event: conversation.chat.failed
data: {"code": "720702204","msg": "会话名不存在"}
如果成功调用扣子编程的 API,返回信息中 code 字段为 0。如果状态码为其他值,则表示接口调用失败。此时 msg 字段中包含详细错误信息,你可以参考错误码文档查看对应的解决方法。