如何为Node-RED中Watson Assistant节点的$user变量赋值
Node-RED Watson Assistant节点$user变量赋值解决方案
核心问题原因
你当前直接传入字符串格式的payload,Watson Assistant节点无法识别单独的上下文变量字段,需要先重构输入结构。
具体解决步骤
- 在Watson Assistant节点上游新增一个Function节点,用于转换输入结构:
// 此处以v1版本API为例,v2版本适配代码见下方排查点 // 原字符串输入默认存在msg.payload中 // 请将msg.username替换为你实际存储用户名的变量字段 msg.payload = { input: { text: msg.payload.toString() }, context: { user: msg.username } } return msg;
- 打开Watson Assistant节点的配置面板,确认Context选项设置为
Merge with msg.context,不要勾选Clear context相关配置,避免传入的变量被清空。
- 打开Watson Assistant节点的配置面板,确认Context选项设置为
- 在Watson Assistant节点下游新增Debug节点,设置输出完整
msg对象,触发一次请求后检查msg.context字段下是否存在user键,确认值为目标用户名即可。
- 在Watson Assistant节点下游新增Debug节点,设置输出完整
常见问题排查
- 变量名大小写敏感:确认你在自研机器人中配置的变量名和Function节点中传入的字段名完全一致,
$user对应的上下文字段必须是小写user,不要写错为User或USER。 - v2版本API适配:如果你使用的是Watson Assistant v2 API节点,需要调整Function节点的结构:
// Watson Assistant v2 API适配代码 msg.payload = { input: { text: msg.payload.toString() }, context: { skills: { "main skill": { // 替换为你自己的Watson Assistant技能名称 user_defined: { user: msg.username } } } } } return msg;
- 变量来源校验:如果赋值还是为空,单独给Function节点加Debug节点,确认你用于赋值的用户名字段(比如上面示例的msg.username)确实有值,不是空值或undefined。
内容的提问来源于stack exchange,提问作者Wellinton Neves
相关产品推荐
相关产品推荐

