Behoud van sessie in Gupshup bot oproepen naar Api.ai

stemmen
1

Ik ben het bouwen van een bot in Gupshup met Api.ai integratie. Ik heb een agent in Api.ai met diverse opzichten elk daarvan verbonden door contexten (en -uitvoer contexten). Wanneer ik de volgende code om Api.ai noemen, is de eerste opzet gebeld en ik krijg het antwoord. Echter wanneer het tweede bericht wordt gegeven, het bot neemt als een geheel nieuw bericht niet gepreciseerd zijn relatie met de eerste. Hoe kan ik dit probleem op te lossen? Help alstublieft

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);
}
De vraag is gesteld op 05/11/2016 om 06:58
bron van user
In andere talen...                            


2 antwoorden

stemmen
0

Suresh, Het lijkt erop dat je nieuwe sessie-id voor elk verzoek te genereren:

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

Maar als je wilt maken contexten werken moet het een vaste waarde voor alle aanvragen die tot één gebruiker. Bijvoorbeeld, kon u een aantal globale variabele gebruiken voor het.

antwoordde op 07/11/2016 om 05:12
bron van user

stemmen
1

De sessionId heeft voor een gebruiker vast te stellen. Er zijn twee manieren waarop u kunt dit doen in de Gupshup bot code -

  1. Gebruik de unieke gebruikers-ID die voor elke gebruiker om de bot wordt verzonden. Om deze waarde kunt u gebruik maken krijgen -

    event.senderobj.channelid

    Maar deze waarde is afhankelijk van hoe verschillende messaging kanalen levert het en api.ai een limiet van 36 tekens.

    Voorbeeldcode -

    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. Genereer een unieke sessionId voor elke gebruiker en op te slaan in de database om het te gebruiken. In het onderstaande voorbeeld, ik ben het opslaan van de sessionId op roomleveldata Dit is de standaardinstelling persistance door Gupshup, te weten meer check deze handleiding .

    Voorbeeldcode -

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

Vergeet niet dat sessionId niet hoger mag zijn dan 36 tekens.

antwoordde op 08/11/2016 om 06:32
bron van user

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