2017-01-17 3 views
0

Я новичок в разработке chatbot, и мне нужна помощь. В то время как кажется, довольно просто подключить botkit с facebook messenger и wit.ai в orger, чтобы использовать NLP. Мне это не удалось. Моя первоначальная цель состоит в том, чтобы иметь простой разговор, как привет, но используя wit.ai в качестве промежуточного программного обеспечения. Ниже я прикладываю код. То, что он должен делать, это получить «привет» сообщение, передать его wit.ai, а затем ответить «Я слышал привет!». как ответ (без использования остроумия на этом этапе). Вместо этого я просто получитьКак использовать botkit с facebook и wit.ai

отладки: ПОЛУЧЕННЫЕ СООБЩЕНИЕ отлаживать: CUSTOM НАЙТИ Convo XXXXXXXXXXXXXX XXXXXXXXXXXXXX отладки: Нет обработчика для message_received

после каждого сообщения я посылаю facebook мессенджера бота. В остроте кажется, что я получаю сообщения, так как я получаю сообщения в своем почтовом ящике, чтобы обновить намерения. Если какой-либо код намного проще, чем приведенный ниже, я был бы очень рад получить его, чтобы начать с чего-то гораздо более простого :). Благодаря

<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; 
} 

ответ

0

Убедитесь, что есть несколько разговоров в Wit.ai заранее, так, например привет и выделить привет в этом заявлении, как нечто подобное, greetings.

Теперь я не уверен, что ваши намерения вызываются в wit.ai, но в вашем заявлении controller.hears(['hello'] вы фактически слушаете намерения wit.ai. Поэтому в примере, упомянутом выше, мы будем использовать hears(['greetings']), так как это намерение в wit.ai.

Кроме того, вместо того, чтобы использовать direct_message использовать message_received это то, что он должен выглядеть следующим образом:

controller.hears(['hello'], 'message_received', wit.hears, function(bot, message) { 
    bot.reply(message, 'I heard hello!'); 
}); 

Если вы боретесь, выслеживая проблему вы можете вставить консольный заявление в контроллере, так что-то вроде console.log("Wit.ai detected entities", message.entities); и посмотрите, что вы получите от этого.

Сообщите мне, если у вас все еще есть вопросы :)

Смежные вопросы