Gupshup bot bakımı oturumu Api.ai çağrıları

oy
1

Ben Api.ai entegrasyonu ile Gupshup bir bot inşa ediyorum. Bir çok niyet ile Api.ai ajan ve bağlamlar (giriş ve çıkış bağlamında) aracılığıyla birleştirilmiş olan, her biri vardır. Ben Api.ai çağırmak için aşağıdaki kodu kullandığınızda, ilk niyet aradı ve ben cevap almak edilir. İkinci mesaj verilir Ancak, bot ilk olan ilişkisini tanımlamadan, tamamen yeni bir mesaj olarak onu alır. Bu sorunu nasıl çözebiliriz? Kibarca yardım

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);
}
Oluştur 05/11/2016 saat 06:58
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
0

Suresh, Eğer her istek için yeni bir oturum kimliği oluşturmak görünüyor:

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

Eğer bağlamlarda çalışmak yapmak istiyorsanız Ama bir kullanıcıya ait olan tüm istekler için bir sabit değer olmalıdır. Örneğin, bunun için bazı küresel değişkenini kullanabilirsiniz.

Cevap 07/11/2016 saat 05:12
kaynak kullanıcı

oy
1

sessionId bir kullanıcı için sabit olması gerekir. Eğer Gupshup bot kodunu bunun iki yolu vardır -

  1. her kullanıcı için bot gönderilen benzersiz kullanıcı kimliği kullanın. kullanabileceğiniz bu değeri elde etmek için -

    event.senderobj.channelid

    Ama bu değer farklı mesajlaşma kanalları bunu sağlar ve api.ai 36 karakter sınırı vardır nasıl bağlıdır.

    Basit kod -

    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. Her kullanıcı için benzersiz bir SessionID oluşturun ve bunu kullanmak için veritabanında depolamak. Aşağıdaki örnekte, ben daha bu kontrol bilmek, Gupshup tarafından sağlanan varsayılan devamlılığın kapanmaması roomleveldata de SessionID depolamak.Bu kılavuzu .

    Basit kod -

    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 karakteri geçmemelidir unutmayın.

Cevap 08/11/2016 saat 06:32
kaynak kullanıcı

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