Facebook Messenger API:发送结构化消息(Java)

时间:2017-02-09 08:25:24

标签: java json facebook facebook-graph-api facebook-messenger

使用Facebook messenger根据官方文档here使用通用模板发送结构化消息。使用Java构建JSON对象。每当我将JSON发送到Facebook时,我都会收到“400个不良请求”的响应。我尝试使用在线工具进行比较,将java生成的JSON与文档中提供的JSON进行比较,除了变量名之外没有其他任何不同。无法理解我在构建JSON时出错的地方。

从Java代码生成的JSON ..

        {
"message": {
    "attachment": {
        "payload": {
            "elements": [
                {
                    "buttons": [
                        {
                            "title": "show website",
                            "type": "web_url",
                            "url": "https://google.com"
                        },
                        {
                            "payload": "sample payload",
                            "title": "Hi There",
                            "type": "postback"
                        }
                    ],
                    "default_action": {
                        "fallback_url": "https://www.google.com/",
                        "messenger_extensions": true,
                        "type": "web_url",
                        "url": "https://www.google.com/",
                        "webview_height_ratio": "tall"
                    },
                    "image_url": "https://s3-ap-southeast-1.amazonaws.com/primary-4495.png",
                    "subtitle": "Sample Sub Title",
                    "title": "Sample Title"
                }
            ],
            "template_type": "generic"
        },
        "type": "template"
    }
},
"recipient": {
    "id": "988459377921053"
}

}

对应的Java代码..

         JSONObject root1 = new JSONObject();
        JSONObject c01 = new JSONObject();
        JSONObject c11 = new JSONObject();

        JSONObject attachment = new JSONObject();
        JSONObject payload = new JSONObject();
        JSONArray arrayButton= new JSONArray();
        JSONArray arrayelements= new JSONArray();
        JSONObject elementsObj = new JSONObject();
        JSONObject defaultAction = new JSONObject();

        JSONObject buttons1 = new JSONObject();
        JSONObject buttons2 = new JSONObject();

        root1.put("recipient", c01);
            c01.put("id", userId);

        root1.put("message", c11);
            c11.put("attachment", attachment);
                attachment.put("type", "template");
                attachment.put("payload", payload);
                    payload.put("template_type", "generic");
                    payload.put("elements", arrayelements);
                        arrayelements.put(elementsObj);
                            elementsObj.put("title", "Sample Title");
                            elementsObj.put("image_url", "https://s3-ap-southeast-1.amazonaws.com/primary-4495.png");
                            elementsObj.put("subtitle", "Sample Sub Title");
                            elementsObj.put("default_action", defaultAction);

                                defaultAction.put("type", "web_url");
                                defaultAction.put("url", "https://www.google.com/");
                                defaultAction.put("messenger_extensions", true);
                                defaultAction.put("webview_height_ratio", "tall");
                                defaultAction.put("fallback_url", "https://www.google.com/");



                                buttons1.put("type", "web_url");
                                buttons1.put("url", "https://google.com");
                                buttons1.put("title", "show website");
                            arrayButton.put(buttons1);


                                buttons2.put("type", "postback");
                                buttons2.put("title", "Hi There");
                                buttons2.put("payload", "sample payload");
                            arrayButton.put(buttons2);

                            elementsObj.put("buttons", arrayButton);

正如您在将上述json与官方文档中提供的样本进行比较时所看到的那样,只有元素的顺序不同。在过去的两天里坚持这个问题..请帮助..

1 个答案:

答案 0 :(得分:0)

发现我的错误!!

每当我们尝试使用 messenger_extensions 属性时,我们必须将域名列入白名单,否则信使平台将返回400错误。由于我不需要 messenger_extensions 属性,我删除了整个默认操作部分,现在messenger API返回200个代码。如果您想将自己的域列入白名单,可以点击以下链接。

https://developers.facebook.com/docs/messenger-platform/thread-settings/domain-whitelisting