2016-11-17 1 views
0

Je suis à la recherche d'une solution de problème avec les fonctions d'appel asynchrones, en particulier context.simplehttp.makePost(url, param, header); de gupshup api. Je dois envoyer plusieurs messages dans une séquence concrète.FB-bot sur js, gupshup

Voici le code:

function MessageHandler(context, event) { 
if (event.messageobj.type == "msg") { 
if (Array_CH(hi_array, message)) { 
var contextParam = JSON.stringify(event.contextobj); 
var url = "https://api.gupshup.io/sm/api/bot/" + event.botname + "/msg"; 
var param = "context=" + contextParam + "&message="; 
var header = { "apikey": "b3843dad0a484ad3ca19b5358be6c809", "Content-Type": "application/x-www-form-urlencoded" }; 
var catalogue; 
var button; 
var param1; 
param = "context=" + contextParam + "&message=Hey.\nContest called The vivid Emotions needs your assessment.\nLook what emotions here. Do you agree?\nOr are your feelings totally different?"; 
context.simplehttp.makePost(url, param, header); 
catalogue = { 
      "type": "catalogue", 
      "msgid": "cat_212", 
      "items": [ 
       { 
        "title": "Design1", 
        "subtitle": "Quisque consectetur ornare malesuada.\n Nunc dapibus nec felis.", 
        "imgurl": "http://sv777.ru/images/stati/239465865852987356diz.jpg", 
        "options": [ 
         { 
          "type": "url", 
          "title": "About", 
          "url": "http://laminat-parket.net/product/room-yasen-dizajn" 
         } 
        ] 
       }, 
       { 
        "title": "Design2", 
        "subtitle": "Donec purus sem, mollis a fermentum sit amet, pretium sed lectus.\n Ut at mattis purus.", 
        "imgurl": "http://laminat-parket.net/upload/productions/55794d8198b65.jpg", 
        "options": [ 
         { 
          "type": "url", 
          "title": "About", 
          "url": "http://laminat-parket.net/product/room-yasen-dizajn" 
         } 
        ] 
       }, 
       { 
        "title": "Design3", 
        "subtitle": "Proin nec turpis leo.\n Nam metus augue, aliquam vitae laoreet sed, dignissim a risus.", 
        "imgurl": "http://www.askwallpapers.com/pic/201502/2880x1800/askwallpapers.com-17168.jpg", 
        "options": [ 
         { 
          "type": "url", 
          "title": "About", 
          "url": "http://laminat-parket.net/product/room-yasen-dizajn" 
         } 
        ] 
       }, 
       { 
        "title": "Design4", 
        "subtitle": "Phasellus vitae justo sed velit faucibus hendrerit.\n Aenean scelerisque eros ac tortor tincidunt feugiat.", 
        "imgurl": "http://www.kidsworldstudio.net/wp-content/uploads/2015/11/bunk-bed-plans-for-kids-bedroom-ideas-home-interior-design-3353-loft-bed-for-kids-loft-bed-for-kids1.jpg", 
        "options": [ 
         { 
          "type": "url", 
          "title": "About", 
          "url": "http://laminat-parket.net/product/room-yasen-dizajn" 
         } 
        ] 
       }, 
       { 
        "title": "Design5", 
        "subtitle": "Pellentesque risus nibh, porttitor vitae diam ut, facilisis aliquet velit.\n Quisque scelerisque massa urna. ", 
        "imgurl": "http://www.wallpaper4k.com/download.php?res=interior%2FWP67USXQ.jpg", 
        "options": [ 
         { 
          "type": "url", 
          "title": "About", 
          "url": "http://laminat-parket.net/product/room-yasen-dizajn" 
         } 
        ] 
       } 
      ] 
     }; 
button = { 
      "msgid": "bt_2", 
      "type": "survey", 
      "question": "Put your Like and change this rating!", 
      "options": [ 
       { 
        "type": "url", 
        "title": "Yes", 
        "url": "http://www.wallpaper4k.com/uk/wallpapers/interior%20design/wp67usxq.html", 
        "webview_height_ratio": "full" 
       }, 
       { 
        "type": "url", 
        "title": "Add your own project", 
        "url": "http://www.wallpaper4k.com/uk/wallpapers/interior%20design/wp67usxq.html", 
        "webview_height_ratio": "full" 
       }, 
       { 
        "type": "text", 
        "title": "Need own bot?", 
       } 
      ] 
     }; 
param = "context=" + contextParam + "&message=" + JSON.stringify(catalogue); 
param1 = "context=" + contextParam + "&message=" + JSON.stringify(button); 
context.simplehttp.makePost(url, param, header); 
context.simplehttp.makePost(url, param1, header); 
return; 
    } 
} 
} 

Mais les messages à chaque fois envoyer dans un ordre aléatoire.

Répondre

1

Pour envoyer plusieurs messages dans une séquence concrète, vous devez laisser un appel HTTP terminer son exécution avant d'effectuer le second appel. Il y a deux façons de gérer le comportement asynchrone tout en faisant l'appel HTTP à l'aide l'IDE Gupshup -

  1. Utilisez la valeur par défaut HttpResponseHandler. Ce gestionnaire est appelé chaque fois que l'exécution de l'appel HTTP se termine.

  2. Définissez votre propre fonction de rappel pendant l'appel HTTP. Comme - context.simplehttp.makePost (url, formParams, en-têtes, fonction)

Je vous conseille d'utiliser la 2ème option car elle rend plus facile à manipuler plusieurs appels HTTP.

Le pseudo-code pour envoyer 3 messages dans une séquence en utilisant le # 2 serait -

function MessageHandler(context, event) { 
    context.simplehttp.makePost(url, formParams, headers, secondMsg); 
//sending 1st message 
} 
function secondMsg(event,context){ 
    context.simplehttp.makePost(url, formParams, headers, thirdMsg); //sending 2nd message 
} 
function thirdMsg(event,context){ 
    context.sendResponse("I am the last message"); 
} 

NOTE - en utilisant context.sendResponse envoie le message et quitter l'exécution de code jusqu'à ce que la prochaine le message est reçu par le bot. Pour plus de détails, consultez le document sur gupshup.io