我的Wit.ai机器人上有两个单独的简单故事,
第一个接受单词" Debug",发送" test"然后运行一个函数,将上下文内容输出到控制台,名为test_context()
第二个接收地址,运行一个更改名为new_session()的上下文的函数,然后向用户发送更改确认信息,如#34;您的位置已更改为{address}&# 34;
当我直接输入wit.ai测试控制台时,它似乎正确地检测故事并运行相应的功能,但是当我尝试通过Node.js API使用它时,它似乎完全随机地行动。
有时输入地址时会运行test_context()后跟new_session(),然后输出没有文本,有时输出测试文本后跟地址文本并且不运行任何函数,有时它会正常运行。
输入" Debug"时会发生同样的行为。同样。
后端设置正确,因为其他2个故事似乎完美无缺。
这两个故事今天早些时候都运行良好,我对机智故事本身没有任何改变,后端的变化甚至没有触及调试功能。
这是一个已知问题吗?
答案 0 :(得分:0)
我也遇到了这个问题。
在我看来,当你没有正确地从wit.ai处理故事中的设置上下文变量时(例如通过将它们设置为null),它会弄乱故事。作为一名开发人员,你有责任正确地处理故事“客户端”,所以我可以理解wit.ai让你发生奇怪的事情。也许wit.ai决定跳楼子以防止他们的机器人崩溃,对我来说仍然有点神秘。也许你的问题是另一种类型,只是分享一个类似的观察和我的解决方案。
正是出于测试原因,我创作了三个故事;
机器人连接到Facebook,我在我的nodejs express服务器上处理动作(比如计划会议)。
我对机器人说:“我想明天安排一次会议”,结果是机智日期/时间。顺便说一句时间。这没关系。然后我发了一条消息“我想今天早上计划开会”。这导致了wit.ai上下文中的两个日期/时间变量。反过来,我的代码无法处理这个问题;两个时间戳导致null(可能json消息变得更复杂,我试图得到错误的字段)。这反过来导致必须返回的上下文变量为null。
所以我做的是捕获上下文变量未填充时的错误,只填写[wit.js找不到日期]。这解决了这个问题,尽管我现在当然需要更好地处理这个错误。
旧代码:
'createAppointment': ({sessionId, context, text, entities}) => {
return new Promise(function(resolve, reject) {
const myDateTime = firstEntityValue(entities, 'datetime');
console.log('the time trying to send ',myDateTime);
createAppointment(context, myDateTime)
context.appointmentText = myDateTime
return resolve(context);
},}
新的,有效的代码:
'createAppointment': ({sessionId, context, text, entities}) => {
return new Promise(function(resolve, reject) {
const myDateTime = firstEntityValue(entities, 'datetime');
console.log('the time trying to send ',myDateTime);
if(myDateTime){
createAppointment(context, myDateTime)
context.appointmentText = myDateTime
return resolve(context);
} else {
context.appointmentText = '[wit.js could not find date]'
return resolve(context);
}
});
},
希望这有帮助