我也遇到了这个问题。
在我看来,如果你没有正确处理来自wit.ai的故事中的设置上下文变量(通过将它们设置为null),它会使故事混乱起来。作为一名开发人员,正确处理“客户端”故事是你自己的责任,所以我可以理解,当你不这样做时,wit.ai会让奇怪的事情发生。也许wit.ai决定跳楼故事,以防止他们的机器人崩溃,对我仍然有点神秘。也许你的问题是另一种,只是分享一个类似的观察和我的解决方案。
正是由于测试的原因,我创建了三个故事;
- 手柄问候
- 告诉什么在X市的天气是
- 确定何时要安排会议
的机器人连接到Facebook和我处理操作(如计划会议)在我的nodejs express服务器上。
我对机器人“我想明天计划一次会议”说,结果机智的日期/时间。顺便提一下。这没关系。然后,我发送了消息“我想今天上午计划会议”。这导致wit.ai上下文中有两个日期/时间变量。反过来,我的代码无法处理这个;两个时间戳导致null(可能json消息变得越来越复杂,我试图得到错误的领域)。这反过来导致必须返回的上下文变量为空。
所以我所做的就是捕捉上下文变量没有填充时的错误,只需填写[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);
}
});
},
希望这有助于