简介:我觉得我在架构级别应该如何设计 Watson Assistant 时遗漏了一些非常明显的东西,但也许我没有。
我遇到的具体问题是,我似乎无法让 API 调用以获取信息回到对话中。
更大的问题是,我不确定我是否正确地设置了这一切,以实现我想要完成的长期目标。
目的:我正在为我们的托管网络建立一个 24/7 客户服务 1 级帮助台。我们其中一个网络的用户应该能够通过短信、网络聊天、Facebook Messenger 以及最终的电话呼叫,要求:
- 有关如何连接其特定设备(PC、Mac、Chromebook、Xbox、Apple TV 等)的说明
- 如果说明无法成功连接,请寻求帮助进行故障排除。(删除保存的网络、重启无线网卡等分步说明)
- 帮助创建案例 - 此时对话变成 Watson 询问一堆信息,例如他们第一次遇到问题的时间和日期、他们遇到问题的任何其他时间/日期、他们的 MAC 地址等。
问题:我已经构建了大部分对话框并且运行良好。通过实体获取信息,保存到上下文变量,将它们吐出来以使对话正常进行,题外话等都正常工作。
在我的一生中,我无法弄清楚我在尝试从外部 API 获取信息时做错了什么。
我们的访客网络有一个“每日密码”,我们希望要求提供每日密码的用户接收它。这涉及对可公开访问的服务器的非常简单的 GET 请求。
我已经构建了一个运行良好的 BlueMix/IBM Cloud 函数,但我似乎无法成功调用或接收来自它的信息。
沃森错误:
Error when updating output with output of dialog node id [node_66_xxxxxxxxxx]. Node output is [{"text":{"values":["Today's password for <? $guestNetwork.ssid ?> is <? $guestNetwork.password ?>"],"selection_policy":"sequential"}}] SpEL evaluation error: Expression [ $guestNetwork.ssid ] converted to [ context['guestNetwork'].ssid ] at position 0: EL1007E: Property or field 'ssid' cannot be found on null (and there is 1 more error in the log)
这个错误让我相信我没有在 Watson 中正确定义结果变量,或者尝试在对话中不正确地检索它 - 因为我知道我的代码在 BlueMix 控制台中运行它时会返回 SSID 和密码。
操作本身的 JSON(是的,我在前一个节点中设置凭据):
{
"output": {
"text": {
"values": [
"Today's password for <? $guestNetwork.ssid ?> is <? $guestNetwork.psk ?>"
],
"selection_policy": "sequential"
}
},
"actions": [
{
"name": "get-http-resource/getGuestNetworkPassword",
"type": "server",
"credentials": "$private.myCredentials",
"result_variable": "$guestNetwork"
}
]
}
问题:
通过使用 Watson <-> IBM Cloud <-> 外部服务,我对“无服务器”Watson 的想法是否可行?我们目前没有“应用程序”或服务器,它是现有服务之间的所有集成。
任何人都可以帮助我了解我在尝试访问该变量时做错了什么?
加分项:我如何知道只有在 IBM 云中成功完成操作后才能访问变量?基本上,如果通过我编写的 IBM Cloud 函数访问信息需要 1.5 秒,我是否需要将对话框暂停 1.5 秒?还是我完全错过了如何从 Watson 获取外部信息的要点?
编辑:观看米奇的视频后,我改变了一些事情,错误信息演变成这样:
“使用对话节点 ID [node_66_1533646714776] 的输出更新输出时出错。节点输出为 [{"text":{"values":["Today's password for is "],"selection_policy":"sequential"}}] SpEL 评估错误:表达式 [ $guestNetwork['ssid'] ] 在位置 24 转换为 [ context['guestNetwork']['ssid'] ]:EL1012E:无法索引到空值”错误。