Die Aufrechterhaltung Sitzung in Gupshup Bot ruft Api.ai

stimmen
1

Ich baue einen Bot in Gupshup mit Api.ai Integration. Ich habe einen Agenten in Api.ai mit mehreren Absichten und jeder von ihnen durch Kontexte verknüpft (Eingang und Ausgang Kontexte). Wenn ich den folgenden Code verwenden Api.ai zu nennen, wird die erste Absicht genannt und ich die Antwort. Jedoch, wenn die zweite Nachricht gegeben wird, nimmt die bietet es als völlig neue Nachricht, ohne ihre Beziehung mit dem ersten Identifizierung. Wie kann ich dieses Problem lösen? Freundlich helfen

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);
}
Veröffentlicht am 05/11/2016 um 06:58
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
0

Suresh, es scheint, dass Sie für jede Anforderung neue Session-ID generieren:

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

Aber wenn Sie wollen Kontexte machen arbeiten muss es ein fester Wert für alle Anforderungen an einen Benutzer gehören, sein. Zum Beispiel könnten Sie eine globale Variable für sie verwenden.

Beantwortet am 07/11/2016 um 05:12
quelle vom benutzer

stimmen
1

Die sessionId hat für einen Benutzer festgelegt werden. Es gibt zwei Möglichkeiten, wie Sie dies in der Gupshup Bot Code tun kann -

  1. Nutzen Sie die einmalige Benutzer-ID, die für jeden Benutzer an den Bot gesendet wird. Um diesen Wert erhalten Sie verwenden können -

    event.senderobj.channelid

    Aber dieser Wert ist davon abhängig, wie verschiedene Messaging-Kanäle es bietet und api.ai hat ein Limit von 36 Zeichen.

    Beispielcode -

    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. Erzeugt eine eindeutige sessionId für jeden Benutzer und speichern sie in der Datenbank , es zu nutzen. Im folgenden Beispiel, bin ich die Speicherung sessionId bei roomleveldata , die die Standard - persistance von Gupshup vorgesehen ist, mehr lesen Sie in diesem wissen Führer .

    Beispielcode -

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

Denken Sie daran, dass sessionId nicht mehr als 36 Zeichen nicht überschreiten.

Beantwortet am 08/11/2016 um 06:32
quelle vom benutzer

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