Почему мой мессенджер Wit.ai анализирует собственные ответы?

Я создаю своего первого чат-бота FB Messenger, используя Wit в качестве движка NLP. Все мои службы подключены и, кажется, работают на поверхности, но когда я смотрю свои журналы 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) 
})

person wanstan    schedule 09.09.2016    source источник
comment
Facebook Messenger API будет отправлять сообщения вашего бота на веб-перехватчик вашего бота. Вам нужно сравнить идентификаторы отправителей в коде веб-перехватчика и игнорировать сообщения, которые имеют тот же идентификатор отправителя, что и ваш бот.   -  person rgajrawala    schedule 09.09.2016
comment
Спасибо за совет - есть подсказки, как узнать идентификатор отправителя моего бота?   -  person wanstan    schedule 09.09.2016


Ответы (2)


Когда вы создаете приложение для обмена сообщениями Facebook, одно из событий webhooks - message_echoes.

Убедитесь, что вы отказались message_echoes, чтобы не получать сообщения от собственных ботов.

facebook messages echo webhook event

person Guy Dubrovski    schedule 09.09.2016
comment
Ага, это сработало! Не могу поверить, что я это пропустил, спасибо за вашу помощь - person wanstan; 12.09.2016

Я использовал 'is_echo' : true, чтобы отличать сообщения остроумия от других, и он работал.

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