我也遇到过这个问题。
在我看来,当您没有正确处理来自 wit.ai 的故事中的上下文变量设置时(例如,通过将它们设置为 null),它会使故事变得混乱。作为开发人员,正确处理“客户端”的故事是您自己的责任,所以我可以理解 wit.ai 会让奇怪的事情发生,当您不这样做时。也许 wit.ai 决定跳过故事以防止他们的机器人崩溃,对我来说仍然有点神秘。也许你的问题是不同的类型,只是分享一个类似的观察和我的解决方案。
正是出于测试的原因,我创建了三个故事;
- 处理问候
- 说说x市的天气情况
- 确定何时计划会议
机器人已连接到 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);
}
});
},
希望对你有帮助