【问题标题】:Using slot in Watson Assistant and Node RED在 Watson Assistant 和 Node RED 中使用槽
【发布时间】:2020-02-06 15:48:49
【问题描述】:

我正在使用 Watson Assistant 和 Node RED 在 Telegram 上构建一个聊天机器人。我需要从用户那里获取一个日期和时间来进行预约,所以我使用了一个需要插入这两个信息的插槽。使用 Watson 提供的试用聊天机器人,我对 slot 没有任何问题;但是使用 Node RED,我只能输入日期。通过debug,看到输入日期后,再运行第一个slot后,返回这个错误“msg.payload.content is empty”。此外,查看助手返回的输出消息正文,msg.payload.output.generic 字段为空。另一方面,它应该包含请求在输入日期后也插入时间的助手的响应。似乎机器人在输入日期时卡住了,但实际上我不这么认为,因为在试用聊天机器人中,它可以完美运行。

可能是什么问题?

【问题讨论】:

    标签: ibm-cloud telegram-bot node-red watson-assistant slots


    【解决方案1】:

    Assistant V1 和 V2 都没有设置或查看msg.payload.content。在输入时,他们查看 msg.payload,在退出时,他们将来自 Watson Assistant 的响应分配给 msg.payload

    如果您收到“msg.payload.content”是空的错误,那么这将发生在您的流程中的某个地方。最有可能在您尝试处理响应的最后。如果 msg.payload.content 为空,则助手对话框不会返回任何输出。这很奇怪,因为它应该返回当前空槽的提示。

    msg.payload 是什么样的?

    您使用的是 V1 还是 V2 节点,您使用的是哪个版本的 node-red-node-watson 节点?你可以通过调色板来判断。

    然而,V1 和 V2 节点都已经过插槽测试,并且响应最终会出现在 msg.payload.content 上。当前发布的 node-red-node-watson 版本是 0.9.0。

    【讨论】:

    • 好的,现在我找到了问题的原因,但我不知道如何解决它。问题是机器人在每个用户的消息中设置了一个随机 session_id,所以在每次调用时我都会丢失上下文。我想在用户与机器人交互开始时生成一个随机会话 id 并将其保存到 msg.params["session_id"] 中,因此它将在该会话期间使用。当用户从助手插入#exit的intent时,系统会生成一个新的session_id。你认为这是一个正确的策略吗?还是有更好的方法来实现它?
    • 以防万一,您知道如何生成随机会话 ID 吗? @chughts
    • 如果您在节点配置中关闭multiple sessions 选项,则该节点会为您管理会话,您无需将其传入。如果您确实想要多个会话,那么您可以需要反馈节点在msg.payload.session_id上输出的会话id
    • 因为我需要多个会话,所以我想到了像您这样的解决方案,但我不知道如何从 Watson Assistant 节点获取 msg.payload.session_id 并将结果传递给我创建的块函数在此节点之前设置助手。我尝试使用另一个块函数,该函数使用 msg.sessionId = msg.payload.session_id; 从助手那里获取 session_id;返回味精;但是当我将此 msg.sessionId 传递给 msg.params["session_id"] 时,系统会循环,返回此错误“msg.payload.chatId 为空”。
    • 我正在努力修复以允许您在msg.params.session_id 上提供任何字符串,然后节点将其映射到真实会话。我将允许一个新字段msg.params.reset_session 清除节点的地图,然后开始清理。我希望今天晚些时候发布带有修复程序的 0.9.1。在发布之前,我需要在本地和云端测试运行。
    猜你喜欢
    • 1970-01-01
    • 2020-12-16
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 2017-10-30
    相关资源
    最近更新 更多