js上的FB-bot,gupshup

时间:2016-11-17 18:52:55

标签: javascript json messenger facebook-chatbot gupshup

我正在寻找异步调用函数的问题解决方案,尤其是来自gupshup api的context.simplehttp.makePost(url, param, header);。我需要按具体顺序发送多条消息。

以下是代码:

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 个答案:

答案 0 :(得分:1)

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

  1. 使用默认的HttpResponseHandler。每次执行HTTP调用时都会调用此处理程序。

  2. 在进行HTTP调用时定义自己的回调函数。喜欢 - context.simplehttp.makePost(url,formParams,header,function)

  3. 我建议使用第二个选项,因为它可以更轻松地处理多个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 发送消息并退出代码执行,直到机器人收到下一条消息。

    有关详细信息,请查看gupshup.io上的document