我是一个聊天机器人开发的新手,我想要一些帮助。虽然在orger中将botkit与facebook messenger和wit.ai连接起来似乎很简单,但也可以使用NLP。我还没有做到这一点。我最初的目标是有一个简单的对话,就像hello-hello,但是使用wit.ai作为中间件。下面我附上代码。它应该做的是接收"hello“消息,将其传递给wit.ai,然后响应”我听到hello!“作为回复(在这个阶段不使用wit )。相反,我只是收到
debug:已收到消息debug:自定义查找命令
在我向facebook messenger机器人发送的每条消息之后。简而言之,我似乎收到了消息,因为我在收件箱中收到了更新意图的消息。如果有比下面的代码简单得多的代码,我将非常高兴拥有它,这样我就可以从更简单的代码开始:)。谢谢
<pre><code>
if (!process.env.page_token) {
console.log('Error: Specify page_token in environment');
process.exit(1);
}
if (!process.env.page_token) {
console.log('Error: Specify page_token in environment');
process.exit(1);
}
if (!process.env.verify_token) {
console.log('Error: Specify verify_token in environment');
process.exit(1);
}
if (!process.env.app_secret) {
console.log('Error: Specify app_secret in environment');
process.exit(1);
}
var Botkit = require('./lib/Botkit.js');
var wit = require('./node_modules/botkit-middleware-witai')({
token: process.env.wit,
minConfidence: 0.6,
logLevel: 'debug'
});
var os = require('os');
var commandLineArgs = require('command-line-args');
var localtunnel = require('localtunnel');
const ops = commandLineArgs([
{name: 'lt', alias: 'l', args: 1, description: 'Use localtunnel.me to make your bot available on the web.',
type: Boolean, defaultValue: false},
{name: 'ltsubdomain', alias: 's', args: 1,
description: 'Custom subdomain for the localtunnel.me URL. This option can only be used together with --lt.',
type: String, defaultValue: null},
]);
if(ops.lt === false && ops.ltsubdomain !== null) {
console.log("error: --ltsubdomain can only be used together with --lt.");
process.exit();
}
var controller = Botkit.facebookbot({
debug: true,
log: true,
access_token: process.env.page_token,
verify_token: process.env.verify_token,
app_secret: process.env.app_secret,
validate_requests: true, // Refuse any requests that don't come from FB on your receive webhook, must provide FB_APP_SECRET in environment variables
});
var bot = controller.spawn({
});
controller.setupWebserver(process.env.port || 3000, function(err, webserver) {
controller.createWebhookEndpoints(webserver, bot, function() {
console.log('ONLINE!');
if(ops.lt) {
var tunnel = localtunnel(process.env.port || 3000, {subdomain: ops.ltsubdomain}, function(err, tunnel) {
if (err) {
console.log(err);
process.exit();
}
console.log("Your bot is available on the web at the following URL: " + tunnel.url + '/facebook/receive');
});
tunnel.on('close', function() {
console.log("Your bot is no longer available on the web at the localtunnnel.me URL.");
process.exit();
});
}
});
});
controller.middleware.receive.use(wit.receive);
controller.hears(['hello'], 'direct_message', wit.hears, function(bot, message) {
bot.reply(message, 'I heard hello!');
});
function formatUptime(uptime) {
var unit = 'second';
if (uptime > 60) {
uptime = uptime / 60;
unit = 'minute';
}
if (uptime > 60) {
uptime = uptime / 60;
unit = 'hour';
}
if (uptime != 1) {
unit = unit + 's';
}
uptime = uptime + ' ' + unit;
return uptime;
}发布于 2017-01-24 05:28:56
确保事先在Wit.ai中进行了几次对话,例如hello there,并在该语句中突出显示hello,如greetings。
现在我不确定你的意图在wit.ai中是什么,但是在你的语句controller.hears(['hello']中,你实际上是在听wit.ai意图。因此,在我上面提到的例子中,我们将使用hears(['greetings']),因为这是wit.ai中的意图。
另外,使用message_received而不是direct_message,应该是这样的:
controller.hears(['hello'], 'message_received', wit.hears, function(bot, message) {
bot.reply(message, 'I heard hello!');
});如果你很难追踪到这个问题,你可以在你的控制器中加入一条控制台语句,比如console.log("Wit.ai detected entities", message.entities);,然后看看你能得到什么。
如果您仍然有任何问题,请告诉我:)
https://stackoverflow.com/questions/41705008
复制相似问题