从后端设置 Watson 对话的上下文变量



我在将上下文变量从 Node 应用程序发送到 Watson 对话时遇到问题。

我正在尝试实现以下内容,

  1. 用户输入其电话号码。
  2. 与该电话号码对应的数据将获取并显示在下一个节点中。

例如:

当用户输入他的电话号码时,下一个节点应该问候 用户及其姓名;这是从数据库中获得的。

节点 1:输入您的电话号码?
节点 2:<用户输入电话号码
从数据库中获取与电话号码对应的数据,并将其作为上下文变量传递给 Watson
节点 3:嘿,$user_name。你好吗?
节点 4:<等待用户输入

我面临的问题是,

Node 应用仅在需要用户输入时才发送上下文变量,因此,在此之前,Watson Conversation 不会获取新的上下文变量集。所以在这里它只发送节点3的新上下文变量集,但我想要的是,我希望 Watson Conversation 在我输入电话号码后具有新的上下文变量集。

也就是说,当用户在Node 2中输入其phone_number后,Node 应用程序会立即获取与其对应的user_name,并将该值设置为来自 Node 应用程序的上下文变量,并将其发送回 Watson Conversation。因此,在节点 3打印之前,Watson Conversation 具有一组新的上下文变量。 但实际发生的是,当用户输入电话号码时,我在 Node App 上获取与之对应的user_name,但上下文变量不在Watson 对话上,所以现在当 Watson 响应时,$user_name的值仍然是undefined,所以它作为空字符串返回。

谁能帮我解决这个问题?提前谢谢。

Node 应用仅在需要用户输入时才发送上下文变量,因此,在此之前,Watson Conversation 不会获得新的上下文变量集。

这是预期行为。Watson Assistant 是无国籍的。它不知道上下文变量或您在对话中的位置,直到您将上下文对象发送回它。

因此,您必须将值发送给它。如果是,则需要发布示例 JSON 请求/响应,以更好地了解正在发生的事情。


另一种方法是云函数。您可以在 Watson Assistant 中创建一个云函数,该函数执行查找,在对话中将其传回,然后节点应用程序获取上下文响应对象中的值。

不过,云功能对时间敏感。因此,如果可能存在任何延迟,请在节点应用程序中执行代码。

最新更新