Η διατήρηση της συνόδου στο Gupshup bot καλεί να Api.ai

ψήφοι
1

Είμαι οικοδόμηση ενός bot σε Gupshup με την ολοκλήρωση Api.ai. Έχω έναν πράκτορα σε Api.ai με αρκετές προθέσεις και το καθένα από αυτά συνδέονται μέσω πλαισίων (πλαίσια είσοδος & έξοδος). Όταν χρησιμοποιείτε τον παρακάτω κώδικα για να καλέσετε Api.ai, η πρώτη πρόθεση λέγεται και έχω την απάντηση. Ωστόσο, όταν δίνεται το δεύτερο μήνυμα, το bot που παίρνει ως ένα εντελώς νέο μήνυμα, χωρίς να προσδιορίζει τη σχέση του με την πρώτη. Πώς μπορώ να επιλύσει αυτό το ζήτημα; ευγενικά βοήθεια

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

Suresh, φαίνεται να δημιουργήσετε νέο αναγνωριστικό συνόδου για κάθε αίτηση:

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

Αλλά αν θέλετε να κάνετε τα πλαίσια το έργο αυτό πρέπει να είναι μια σταθερή τιμή για όλες τις αιτήσεις που ανήκουν σε ένα χρήστη. Για παράδειγμα, θα μπορούσατε να χρησιμοποιήσετε κάποια καθολική μεταβλητή για αυτό.

Απαντήθηκε 07/11/2016 στις 05:12
πηγή χρήστη

ψήφοι
1

Η sessionId πρέπει να καθοριστεί για ένα χρήστη. Υπάρχουν δύο τρόποι που μπορείτε να το κάνετε αυτό στον κώδικα bot Gupshup -

  1. Χρησιμοποιήστε τη μοναδική ταυτότητα χρήστη που αποστέλλεται στον bot για κάθε χρήστη. Για να πάρετε αυτή την τιμή που μπορείτε να χρησιμοποιήσετε -

    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 για κάθε χρήστη και να το αποθηκεύσετε στη βάση δεδομένων για να το χρησιμοποιήσει. Στο παρακάτω δείγμα, είμαι αποθήκευση του sessionId σε roomleveldata που είναι η προεπιλεγμένη επιμονή που παρέχονται από Gupshup, για να μάθετε περισσότερα ελέγξει αυτό τον οδηγό .

    Δείγμα κώδικα -

    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