我在将上下文变量从 Node 应用程序发送到 Watson 对话时遇到问题。
我正在尝试实现以下内容,
- 用户输入其电话号码。
- 与该电话号码对应的数据将获取并显示在下一个节点中。
例如:
当用户输入他的电话号码时,下一个节点应该问候 用户及其姓名;这是从数据库中获得的。
节点 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 中创建一个云函数,该函数执行查找,在对话中将其传回,然后节点应用程序获取上下文响应对象中的值。
不过,云功能对时间敏感。因此,如果可能存在任何延迟,请在节点应用程序中执行代码。