Tus*_*pta 2 json facebook node.js facebook-chatbot facebook-messenger-bot
我想在Messenger上针对单个用户触发的回发发送多个回复.我一直在关注Messenger的开发者文档,但无法真正找到如何做到这一点.
我的代码结构与他们在网站上给出的教程非常相似,我有一个' handlePostback '函数,用于标识收到的回发并将其与一组预定义的有效负载进行比较,以找到' 响应 'JSON对象.这个响应被赋予' callSendAPI ',它将这个JSON对象放入将消息发送回Messenger API的基本格式.
function handlePostback(sender_psid,receivedPostback)
{ if(payload== 'defined_payload') {
response = {
text: 'Some text'
};
callSendAPI(sender_psid,response);
}
function callSendAPI(sender_psid,response) {
let body = {
recipient: {
id= sender_psid
},
message: response
};
// Followed by code for POST request to the webhook
}
Run Code Online (Sandbox Code Playgroud)
这是基本结构,现在我想发送多条消息作为回复一个回发.我做了一些挖掘,我发现解决方案可能是创建一个message []数组.但是我该怎么做?因为我的'响应'是通过该函数生成的,并且消息结构应该看起来像这样(我认为):
let body = {
recipient: {
id=sender_psid
},
messages: [ {
response1
},
{
response2
}
]
};
Run Code Online (Sandbox Code Playgroud)
我希望我能解释一下我的问题,如果我能提供更多细节,请告诉我!
小智 7
好问题.如果您不熟悉Node.js,那么这样做的方式并不太明显,而且在Facebook的Send API文档中没有很好地记录.
首先,您使用数组发送多条消息的方法可能无法正常工作.Facebook有一个解决方案,可以通过一个请求发送多达100个API调用,但在我看来,在您的情况下不需要这样做.如果您想了解更多信息,请查看批量请求文档,您会发现实施与您的实施不同.
一个可行的解决方案是callSendAPI多次调用该函数.但是这个解决方案有一个主要缺点:您将无法控制发送的消息的实际顺序.例如,如果要发送两条单独的消息,则无法保证将首先发送给用户.
要解决此问题,您需要以callSendAPI保证下一次callSendAPI调用仅在第一条消息已发送后才会发生的方式链接您的函数.您可以使用回调或承诺在NodeJS中执行此操作.如果你不熟悉它们中的任何一个,你可以阅读这个以获得回调,这可以用于承诺.
您需要修改您的callSendAPI功能,尤其是将POST请求发送到Facebook的部分.我将通过使用promises和模块node-fetch来解决您的问题.
const fetch = require('node-fetch');
function handlePostback(sender_psid,receivedPostback){
if (payload == 'defined_payload') {
response = {
text: 'Some text'
};
response2 = //... Another response
response3 = //... Another response
callSendAPI(sender_psid,response).then(() => {
return callSendAPI(sender_psid, response2).then(() => {
return callSendAPI(sender_psid, response3); // You can add as many calls as you want
});
});
}
}
function callSendAPI(sender_psid,response) {
let body = {
recipient: {
id= sender_psid
},
message: response
};
const qs = 'access_token=' + encodeURIComponent(FB_PAGE_TOKEN); // Here you'll need to add your PAGE TOKEN from Facebook
return fetch('https://graph.facebook.com/me/messages?' + qs, {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(body),
});
}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4296 次 |
| 最近记录: |