【问题标题】:Porting from Gupshup to Microsoft Bot Framework从 Gupshup 移植到 Microsoft Bot Framework
【发布时间】:2017-07-14 09:44:14
【问题描述】:

我是 Microsoft Bot Framework 的新手。早些时候,我使用 Gupshup 来构建我的机器人。 Gupshup 以非常好的方式设计了工作流程。我曾在 Gupshup 中使用过 api.ai NLP 引擎。我现在想切换并尝试使用 api.ai 的 MS Bot Framework。

下面是我的 Gupshup 的代码:

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 中有不同的方法来实现?

【问题讨论】:

  • 你应该避免在你的问题中清楚地发布你的令牌、appID 和 appSecret
  • 我改了

标签: node.js nlp botframework dialogflow-es gupshup


【解决方案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');
}
});

您也可以通过此blog 提供帮助。

【讨论】:

  • 嗨 Shreyans。感谢你的回答。我已经使用 Gupshup 很长时间了。我没有什么重要的事情要讨论。如果可能,请通过个人聊天发送消息。
  • 嗨,AITea,我在 Gupshup 工作,因此您可以在 developer@gupshup.io 发送您的查询
  • 嗨 Shreyans,请同时参考这个问题stackoverflow.com/questions/45158775/…
猜你喜欢
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
  • 2023-04-08
相关资源
最近更新 更多