2016-09-09 9 views
0

Я создаю свой первый бот-чат FB Messenger, используя Wit как движок NLP. Все мои сервисы связаны и, кажется, работают на поверхности, но когда я смотрю на журналы Heroku, кажется, что ответы моего бота отправляются обратно в Wit для анализа, а также для введенных пользователем сообщений. Это, очевидно, вызывает проблемы в ходе моего потока разговоров, когда приходит время для запуска действий.Почему мой бот Wit.ai-мессенджер разбирает собственные ответы?

Как сделать так, чтобы мой бот разбирал только пользовательский ввод, а затем отвечал соответствующим образом в соответствии с моей историей в Wit?

Коммуникатор окно:

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

Facebook API Чат будет отправлять сообщения бота на webhook вашего бота. Вам нужно сравнить идентификаторы пользователей-отправителей в коде webhook и игнорировать сообщения с тем же идентификатором отправителя, что и ваш бот. – usandfriends

+0

Спасибо за подсказку - какие-либо подсказки о том, как определить идентификатор отправителя моего бота? – wanstan

ответ

0

При создании Facebook Messenger приложение, один из webhooks событий message_echoes.

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

facebook messages echo webhook event

+0

@wanstan Пожалуйста, дайте нам знать, если это сработает для вас –

+0

Да, это было! Не могу поверить, что я пропустил это, спасибо за вашу помощь – wanstan

0

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

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