Gupshup बॉट में बनाए रखने के सत्र Api.ai करने के लिए कॉल

वोट
1

मैं Api.ai एकीकरण के साथ Gupshup में एक बॉट निर्माण कर रहा हूँ। मैं कई उद्देश्यों के साथ Api.ai में एक एजेंट और संदर्भों (इनपुट और आउटपुट संदर्भों) के माध्यम से जुड़ा हुआ उनमें से प्रत्येक की है। जब मैं निम्नलिखित कोड का उपयोग Api.ai कॉल करने के लिए, पहले के इरादे कहा जाता है और मैं जबाब मिलता है। लेकिन जब दूसरा संदेश दिया जाता है, बॉट एक पूरी तरह से नया संदेश के रूप में यह लगता है, पहले के साथ अपने संबंध पहचान के बिना। कैसे मैं इस मुद्दे को हल कर सकता हूँ? कृप्या सहायता करे

function MessageHandler(context, event) {
    // var nlpToken = xxxxxxxxxxxxxxxxxxxxxxx;//Your API.ai token
    // context.sendResponse(JSON.stringify(event));
    sendMessageToApiAi({
        message : event.message,
        sessionId : new Date().getTime() +'api',
        nlpToken : 3626fe2d46b64cf8a9c0d3bee99a9sb3,
        callback : function(res){
            //Sample response from apiai here.
            context.sendResponse(JSON.parse(res).result.fulfillment.speech);
        }
    },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='+sessionId+'&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({})
       }
    });
}

/** Functions declared below are required **/
function EventHandler(context, event) {
    if (!context.simpledb.botleveldata.numinstance)
        context.simpledb.botleveldata.numinstance = 0;
    numinstances = parseInt(context.simpledb.botleveldata.numinstance) + 1;
    context.simpledb.botleveldata.numinstance = numinstances;
    context.sendResponse(Thanks for adding me. You are: + numinstances);
}

function HttpResponseHandler(context, event) {
    // if(event.geturl === http://ip-api.com/json)
    context.sendResponse(event.getresp);
}

function DbGetHandler(context, event) {
    context.sendResponse(testdbput keyword was last get by: + event.dbval);
}

function DbPutHandler(context, event) {
    context.sendResponse(testdbput keyword was last put by: + event.dbval);
}
05/11/2016 को 06:58
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
0

सुरेश, यह आप प्रत्येक अनुरोध के लिए नए सत्र id उत्पन्न लगता है:

new Date().getTime() +'api'

लेकिन यह एक उपयोगकर्ता से संबंधित सभी अनुरोधों के लिए एक निश्चित मूल्य होना चाहिए आप संदर्भों काम करने के लिए चाहते हैं। उदाहरण के लिए, आप इसके लिए कुछ वैश्विक चर का उपयोग कर सकते हैं।

07/11/2016 को 05:12
का स्रोत उपयोगकर्ता

वोट
1

sessionId एक उपयोगकर्ता के लिए तय किया गया है। आप दो तरह से Gupshup बॉट कोड में यह कर सकते हैं कर रहे हैं -

  1. अद्वितीय userID जो प्रत्येक उपयोगकर्ता के लिए बॉट को भेजा जाता है का उपयोग करें। इस मान को आप उपयोग कर सकते हैं प्राप्त करने के लिए -

    event.senderobj.channelid

    लेकिन इस मूल्य कैसे अलग मैसेजिंग चैनलों यह प्रदान करता है और api.ai 36 वर्णों की एक सीमा होती है पर निर्भर है।

    नमूना कोड -

    function MessageHandler(context, event) {
    sendMessageToApiAi({
        message : event.message,
        sessionId : event.senderobj.channelid,
        nlpToken : "3626fe2d46b64cf8a9c0d3bee99a9sb3",
        callback : function(res){
            //Sample response from apiai here.
            context.sendResponse(JSON.parse(res).result.fulfillment.speech);
         }
       },context)
    }
    
  2. प्रत्येक उपयोगकर्ता के लिए एक अनूठा sessionId जनरेट करें और इसे उपयोग करने के लिए डेटाबेस में संग्रहीत। नीचे दिए नमूने में, मैं roomleveldata जो डिफ़ॉल्ट Gupshup द्वारा प्रदान की दृढ़ता है पर sessionId भंडारण कर रहा हूँ, पता करने के लिए और अधिक इस जाँच गाइड

    नमूना कोड -

    function MessageHandler(context, event) {
    sendMessageToApiAi({
        message : event.message,
        sessionId : sessionId(context),
        nlpToken : "84c813598fb34dc5b1f3e1c695e49811",
        callback : function(res){
            //Sample response from apiai here.
            context.sendResponse(JSON.stringify(res));
        }
       },context)
    }
    function sessionId(context){
     var userSession = context.simpledb.roomleveldata.sessionID;
     if(!userSession){
       userSession = new Date().getTime() +'api';
        context.simpledb.roomleveldata.sessionID = userSession;
       return userSession;
     }else{
        return userSession;
     }
    }
    

याद रखें कि sessionId 36 अक्षरों से अधिक नहीं होना चाहिए।

08/11/2016 को 06:32
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more