2016-11-17 146 views
0

我在寻找异步调用函数的问题的解决方案,特别是gupshup api中的context.simplehttp.makePost(url, param, header);。我需要以具体的顺序发送多个消息。js上的FB-bot,gupshup

下面是代码:

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

但消息中发送随机顺序。

回答

1

要以具体的顺序发送多个消息,您需要让一个HTTP呼叫在完成第二个呼叫之前完成它的执行。 有两种方式来处理异步行为,同时使利用Gupshup的IDE HTTP调用 -

  1. 使用默认HttpResponseHandler。每当HTTP调用的执行完成时,都会调用此处理函数。

  2. 在进行HTTP调用时定义您自己的回调函数。像 - context.simplehttp.makePost(URL,formParams,头,功能)

我会建议使用第二个选项,因为它可以更容易地处理多个HTTP调用。

使用#2将是在一个序列中发送3个消息的伪代码 -

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

- 使用context.sendResponse发送消息并退出代码执行,直到下一个消息被bot收到。

欲了解更多详情,请登录gupshup.io