Портирование с Gupshup на Microsoft Bot Framework
Я новичок в Microsoft Bot Framework. Ранее я использовал Gupshup для сборки своих ботов. Gupshup разработал рабочий процесс очень хорошо. Я использовал движок api.ai NLP с Gupshup. Я хочу переключиться и попробовать MS Bot Framework сейчас с api.ai.
Ниже код моего Гупшупа:
function MessageHandler(context, event) {
sendMessageToApiAi({
message : event.message,
sessionId : new Date().getTime() +'api',
nlpToken : "74c04b2c16284c738a8dbcf6bb343f",
callback : function(res){
if(JSON.parse(res).result.parameters.Ent_1=="Hello"){
context.sendResponse("Hello");
}
}
},context);
};
function sendMessageToApiAi(options,botcontext) {
var message = options.message; // Mandatory
var sessionId = options.sessionId || ""; // optinal
var callback = options.callback;
if (!(callback && typeof callback == 'function')) {
return botcontext.sendResponse("ERROR : type of options.callback should be function and its Mandatory");
}
var nlpToken = options.nlpToken;
if (!nlpToken) {
if (!botcontext.simpledb.botleveldata.config || !botcontext.simpledb.botleveldata.config.nlpToken) {
return botcontext.sendResponse("ERROR : token not set. Please set Api.ai Token to options.nlpToken or context.simpledb.botleveldata.config.nlpToken");
} else {
nlpToken = botcontext.simpledb.botleveldata.config.nlpToken;
}
}
var query = '?v=20150910&query='+ encodeURIComponent(message) +'&sessionId='+context.simpledb.roomleveldata.session+'&timezone=Asia/Calcutta&lang=en '
var apiurl = "https://api.api.ai/api/query"+query;
var headers = { "Authorization": "Bearer " + nlpToken};
botcontext.simplehttp.makeGet(apiurl, headers, function(context, event) {
if (event.getresp) {
callback(event.getresp);
} else {
callback({})
}
});
}
Я начал с MS Bot Framework и связал его с api.ai. Ниже мой код:
var builder = require('botbuilder');
var restify = require('restify');
var apiairecognizer = require('api-ai-recognizer');
var request = require('request');
//=========================================================
// Bot Setup
//=========================================================
// Setup Restify Server
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
console.log('%s listening to %s', server.name, server.url);
});
// Create chat bot
var connector = new builder.ChatConnector({
appId: "8c9f2d7b-dfa6-4116-ac45-po34eeb1d25c",
appPassword: "7CCO8vBGtdcTr9PoiUVy98tO"
});
server.post('/api/messages', connector.listen());
var bot = new builder.UniversalBot(connector);
var recognizer = new apiairecognizer("74c04b2c16284c738a8dbcf6bb343f");
var intents = new builder.IntentDialog({
recognizers: [recognizer]
});
bot.dialog('/',intents);
intents.matches('Flow_1',function(session, args){
var fulfillment = builder.EntityRecognizer.findEntity(args.entities, 'fulfillment');
if (fulfillment){
var speech = fulfillment.entity;
session.send(speech);
console.log("Inside fulfillment");
}else{
session.send('Sorry...not sure how to respond to that');
}
});
intents.matches('Intro',function(session, args){
var fulfillment = builder.EntityRecognizer.findEntity(args.entities, 'fulfillment');
if (fulfillment){
var speech = fulfillment.entity;
session.send(speech);
}else{
session.send('Sorry...not sure how to respond to that');
}
});
intents.matches('Default Fallback Intent',function(session, args){
var fulfillment = builder.EntityRecognizer.findEntity(args.entities, 'fulfillment');
if (fulfillment){
var speech = fulfillment.entity;
session.send(speech);
}else{
session.send('Sorry...not sure how to respond to that');
}
});
Теперь вот чего я хочу добиться:
JSON.parse (res).result.parameters.Ent_1 легко анализировать и получать параметры. Как я могу добиться чего-то похожего в Bot Framework? Должен ли я создать функцию sendMessageToApiAi() или есть другой способ достижения в MS Bot Framework?
1 ответ
На самом деле, шаблон Gupshup не заботится о намерении, которое отправляет ответ. Шаблон просто получает ответ от вызова API и позволяет анализировать ответ по желанию.
Теперь в среде MSbot, если вы хотите получить значение Ent_1, вы можете использовать приведенный ниже пример кода, учитывая, что Flow_1 является намерением, которое будет содержать сущность Ent_1
intents.matches('Flow_1',function(session, args){
var fulfillment = builder.EntityRecognizer.findEntity(args.entities, 'Ent_1');
if (fulfillment){
var speech = fulfillment.entity;
session.send(speech);
console.log("Inside fulfillment");
}else{
session.send('Sorry...not sure how to respond to that');
}
});
Вы также можете пройти этот блог, который поможет.