为什么我的 Wit.ai 聊天机器人会解析自己的回复?
Why is my Wit.ai messenger bot parsing its own responses?
我正在构建我的第一个 FB Messenger 聊天机器人,使用 Wit 作为 NLP 引擎。我所有的服务都已连接并且表面上似乎在工作,但是当我查看我的 Heroku 日志时,我的机器人的响应似乎被发送回 Wit 以进行解析以及用户输入的消息。当需要触发操作时,这显然会导致我的对话流程进一步出现问题。
如何让我的机器人只解析用户输入,然后根据我在 Wit 中的故事做出适当的响应?
信使window:
我的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)
})
我使用 'is_echo' : true
来辨别来自其他人的智慧消息并且它一直有效。
if (event.message.is_echo) {
console.log(`This sender is the wit bot.`);
return;
}
当您创建 Facebook Messenger 应用程序时,其中一个 webhooks 事件是 message_echoes
。
请确保您选择退出 message_echoes
不接收您自己的机器人消息。
我正在构建我的第一个 FB Messenger 聊天机器人,使用 Wit 作为 NLP 引擎。我所有的服务都已连接并且表面上似乎在工作,但是当我查看我的 Heroku 日志时,我的机器人的响应似乎被发送回 Wit 以进行解析以及用户输入的消息。当需要触发操作时,这显然会导致我的对话流程进一步出现问题。
如何让我的机器人只解析用户输入,然后根据我在 Wit 中的故事做出适当的响应?
信使window:
我的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)
})
我使用 'is_echo' : true
来辨别来自其他人的智慧消息并且它一直有效。
if (event.message.is_echo) {
console.log(`This sender is the wit bot.`);
return;
}
当您创建 Facebook Messenger 应用程序时,其中一个 webhooks 事件是 message_echoes
。
请确保您选择退出 message_echoes
不接收您自己的机器人消息。