2017-07-14 16 views
0

私はMicrosoft Bot Frameworkを初めて使用しています。以前私はボットを作るためにGupshupを使っていました。 Gupshupはワークフローをとてもうまく設計しました。私はGupshupでapi.ai NLPエンジンを使いました。私はMS Bot Frameworkを今api.aiで切り替えてみたいと思っています。以下はGupshupからMicrosoft 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ボットフレームワークで始まったと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はparamertersを解析して取得する簡単でした。どのように私はボットフレームワークのそれと同様の何かを達成することができますか? sendMessageToApiAi()関数を構築する必要がありますか、MS Bot Frameworkで実現する別の方法がありますか?

+0

あなたの質問に、あなたのトークン、appIDとappSecretを明記しないでください。 –

+0

私はそれを変更しました – AITea

答えて

0

実際、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も役立ちます。

+0

Hi Shreyans。答えをありがとう。私は長い間Gupshupを使ってきました。議論する重要なことはほとんどありません。可能であれば、個人的なチャットでメッセージを送信してください。 – AITea

+0

こんにちはAITea、私はGupshupのために働いていますので、developer @ gupshup.ioであなたの質問を送ることができます – Shreyans

+0

こんにちはShreyans、この質問を参照してくださいhttps://stackoverflow.com/questions/45158775/gupshup-chat-web-widget-リダイレクト - 問題 – AITea

関連する問題