【发布时间】: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