【问题标题】:Why is my Wit.ai messenger bot parsing its own responses?为什么我的 Wit.ai Messenger 机器人会解析自己的响应?
【发布时间】:2016-09-09 00:47:26
【问题描述】:

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

如何让我的机器人只解析用户输入,然后根据我在 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) 
})

【问题讨论】:

  • Facebook Messenger API 会将机器人的消息发送到机器人的 webhook。您需要比较 webhook 代码中的发件人用户 ID,并忽略与您的机器人具有相同发件人 ID 的消息。
  • 感谢您的提示 - 有关如何找出我的机器人的发件人 ID 的任何提示?

标签: javascript heroku messenger wit.ai


【解决方案1】:

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

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

【讨论】:

  • 是的,它做到了!不敢相信我错过了,谢谢你的帮助
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2019-11-16
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 2021-06-15
    • 2021-05-13
    相关资源
    最近更新 更多