为什么我的 Wit.ai 聊天机器人会解析自己的回复?

Why is my Wit.ai messenger bot parsing its own responses?

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

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

信使window:

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

我的日志:

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

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) 
})

我使用 'is_echo' : true 来辨别来自其他人的智慧消息并且它一直有效。

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

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

请确保您选择退出 message_echoes 不接收您自己的机器人消息。