Я создаю свой первый бот-чат FB Messenger, используя Wit как движок NLP. Все мои сервисы связаны и, кажется, работают на поверхности, но когда я смотрю на журналы Heroku, кажется, что ответы моего бота отправляются обратно в Wit для анализа, а также для введенных пользователем сообщений. Это, очевидно, вызывает проблемы в ходе моего потока разговоров, когда приходит время для запуска действий.Почему мой бот Wit.ai-мессенджер разбирает собственные ответы?
Как сделать так, чтобы мой бот разбирал только пользовательский ввод, а затем отвечал соответствующим образом в соответствии с моей историей в 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 API Чат будет отправлять сообщения бота на webhook вашего бота. Вам нужно сравнить идентификаторы пользователей-отправителей в коде webhook и игнорировать сообщения с тем же идентификатором отправителя, что и ваш бот. – usandfriends
Спасибо за подсказку - какие-либо подсказки о том, как определить идентификатор отправителя моего бота? – wanstan