为什么我的Wit.ai messenger机器人解析自己的响应?

时间:2016-09-09 00:47:27

标签: javascript heroku messenger wit.ai

我正在使用Wit作为NLP引擎构建我的第一个FB Messenger聊天机器人。我的所有服务都是连接的,似乎在表面上工作,但是当我查看我的Heroku日志时,似乎我的机器人的响应被发送回Wit以进行解析以及用户输入的消息。当触发操作时,这显然会导致我的对话流程中出现问题。

如何制作它以便我的机器人只解析用户输入,然后根据我在Wit中的故事做出适当的响应?

Messenger窗口:

enter image description here

我的Wit对话流程的相关部分:

enter image description here

我的日志:

enter image description here

enter image description here

据我所知,这是重要的代码:

var actions = {
say (sessionId, context, message, cb) {
    // Bot testing mode, run cb() and return
    if (require.main === module) {
        cb()
        return
    }

    console.log('WIT HAS A CONTEXT:', context)

    if (checkURL(message)) {
        FB.newMessage(context._fbid_, message, true)
    } else {
        FB.newMessage(context._fbid_, message)
    }

    cb()

    }, 

...

}

///

var read = function (sender, message, reply) {
console.log('READING LOG AAAAAAAAAAAAAAAAAAAAAA')
var sessionId = findOrCreateSession(sender)
console.log('READING LOG BBBBBBBBBBBBBBBBBBBBBB')
console.log(message)
    // Let's forward the message to the Wit.ai bot engine
    // This will run all actions until there are no more actions left to do
wit.runActions(
    sessionId, // the user's current session by id
    message,  // the user's message
    sessions[sessionId].context, // the user's session state
    function (error, context) { // callback
    console.log('READING LOG CCCCCCCCCCCCCC')
    if (error) {
        console.log('oops!', error)
    } else {
        // Wit.ai ran all the actions
        // Now it needs more messages
        console.log('READING LOG DDDDDDDDDDDDDDDD')
        console.log('Waiting for further messages')

        // Updating the user's current session state
        sessions[sessionId].context = context
        console.log('READING LOG EEEEEEEEEEEEEEEE')
    }
})
}

///

app.post('/webhooks', function (req, res) {
var entry = FB.getMessageEntry(req.body)
// IS THE ENTRY A VALID MESSAGE?
if (entry && entry.message) {
  if (entry.message.attachments) {
    // NOT SMART ENOUGH FOR ATTACHMENTS YET
    FB.newMessage(entry.sender.id, "That's interesting!")
  } else {
    // SEND TO BOT FOR PROCESSING
    console.log('SENDING TO BOT FOR PROCESSING XXXXX')
    Bot.read(entry.sender.id, entry.message.text, function (sender, reply) {
      FB.newMessage(sender, reply)
      return
    })
    console.log('SENDING TO BOT FOR PROCESSING YYYYY')
  }
}

res.sendStatus(200) 
})

2 个答案:

答案 0 :(得分:0)

我使用'is_echo' : true来识别来自其​​他人的智慧消息并且它一直在工作。

if (event.message.is_echo) {
  console.log(`This sender is the wit bot.`);
  return;
}

答案 1 :(得分:0)

当您创建Facebook Messenger应用程序时,其中一个webhooks事件为message_echoes

请确保您选择退出message_echoes,因为我们没有收到您自己的机器人消息。

facebook messages echo webhook event