目前正在基于dify平台搭建一个对接公司考勤接口的考勤记录查询智能体。目前采用开发提供的mock接口,本人负责智能体的搭建以及搭建后postman接口调用的调试。
调用流程如下:
textPostman ↓ Dify Chatflow ↓ 提取年月 ↓ HTTP节点 ↓ 调用后端考勤接口
后端接口要求:
httpPOST /chat/captcha/get_attshifts Header: token: xxxxxxxxxxxxx Body: { "year":"2026", "month":"4" }
其中 token 需要从调用 Dify API 时动态传入。
json{
"inputs":{
"token":"a9af8fdae7ab0c857b3dfab709d14XXX"
},
"query":"我要查2026年4月考勤记录",
"response_mode":"streaming",
"conversation_id":"",
"user":"demo-1231",
"files":[]
}
配置了:
user_id
HTTP节点中使用:
text{{开始节点.user_id#}}
结果:
始终获取不到值。
最开始怀疑:
于是查看:
workflow_started
返回内容:
json{
"inputs": {
"sys.files": [],
"sys.user_id": "demo-1231",
"sys.query": "我要查2026年4月考勤记录"
}
}
发现:
只有:
sys.user_id
没有:
user_id
也没有:
token
开始节点:
user_id
Postman:
json{
"inputs":{
"token":"xxxxxxxx"
}
}
二者名称不同。
Dify 不会自动映射:
token ≠ user_id
因此:
inputs.token ↓ 开始节点没有对应参数 ↓ 直接丢弃
这是本次最大的坑。
很多时候:
新增开始节点参数 ↓ 保存 ↓ 直接调用 API
实际上:
API 调用的仍然是旧版本工作流。
必须点击:
右上角 → 发布(Publish)
否则:
workflow_started 中看不到新增的参数。
新增输入变量:
| 参数名 | 类型 |
|---|---|
| user_id | String |
json{
"inputs":{
"user_id":"a9af8fdae7ab0c857b3dfab709d1XXX"
},
"query":"我要查2026年4月考勤记录",
"response_mode":"streaming",
"conversation_id":"",
"user":"demo-1231",
"files":[]
}
注意:
inputs.user_id
必须和开始节点保持一致。
Header:
texttoken {{#开始节点ID.user_id#}}
建议不要手写。
直接:
插入变量 → 用户输入:直接输入‘/’ → user_id
由 Dify 自动生成变量表达式。
查看posman streaming 返回的第一个事件:
json{
"event":"workflow_started"
}
重点观察:
json{
"data":{
"inputs":{
...
}
}
}
如果这里没有:
json"user_id":"xxxx"
说明:
而不是 HTTP 节点的问题。
Dify 的 inputs 完全依赖名称映射:
Postman.inputs.xxx == 开始节点.xxx
否则直接丢弃。
修改开始节点后:
一定要:
保存 + 重新发布(Publish)
否则 API 仍调用旧版本。
排查 API 参数最有效的方法不是看页面,而是查看:
workflow_started
事件中的:
jsondata.inputs
它能准确告诉你:
工作流真正接收到了哪些参数。
以后所有需要外部传参的 Chatflow,建议统一采用:
text开始节点: token user_id username tenant_id project_id
API:
json{
"inputs":{
"token":"xxx",
"user_id":"xxx",
"username":"xxx"
}
}
然后通过「插入变量」引用,而不要手写变量表达式。
这样基本可以避免 90% 的参数传递问题。
提示
不要第一时间去看 HTTP 节点。
直接观察 streaming 返回的第一个事件:
workflow_started
查看:
data.inputs
如果这里没有,说明参数压根没进入工作流。
排查顺序:
本文作者:精卫
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!