2016-12-05 62 views
0

我有我的Wit.ai机器人两个独立的简单的故事,之间随机跳Wit.ai似乎故事

单词“调试”的第一个就是,将“测试”,然后运行功能输出上下文的东西到控制台名为test_context()

第二个接受地址,运行一个函数,更改名为new_session()的上下文,然后发送一个确认的变化给用户结构像“你的位置有已更改为{地址}“

当我直接键入wit.ai测试控制台时,它似乎正确地检测到故事并运行相应的函数,但是当我尝试通过Node.js API使用它时,它似乎完全随机地执行。

有时在输入地址时会运行test_context(),然后是new_session(),然后输出没有文本,有时只输出测试文本,后跟地址文本并且不运行任何函数,有时它会正常运行。

输入“Debug”时也会发生同样的情况。

后端设置正确,因为其他两个故事似乎工作得很好。

这两个故事今天早些时候都运行良好,我没有改变机智故事本身,也没有改变后端甚至触及调试功能。

这是一个已知的问题?

回答

0

我也遇到了这个问题。

在我看来,如果你没有正确处理来自wit.ai的故事中的设置上下文变量(通过将它们设置为null),它会使故事混乱起来。作为一名开发人员,正确处理“客户端”故事是你自己的责任,所以我可以理解,当你不这样做时,wit.ai会让奇怪的事情发生。也许wit.ai决定跳楼故事,以防止他们的机器人崩溃,对我仍然有点神秘。也许你的问题是另一种,只是分享一个类似的观察和我的解决方案。

正是由于测试的原因,我创建了三个故事;

  1. 手柄问候
  2. 告诉什么在X市的天气是
  3. 确定何时要安排会议

的机器人连接到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); 
    } 
    }); 
}, 

希望这有助于