我正在尝试按顺序使用FB Send-Message API发送消息,但是它有问题。结果我的机器人以错误的顺序发送消息。我有以下功能:
function sendMessage(recipient, payload, accessToken) {
return axios.post(baseURL + 'v2.11/me/messages/?access_token=' + accessToken,
Object.assign({}, {
messaging_type: "RESPONSE",
recipient: {
id: recipient
}
}, payload) );
}
(1)(返回发送消息的承诺);
let async_actions;
let promise_chain = Q.fcall(function(){});
async_actions = flow['messages'].map(message => {
return sendMessage(recipient, message['payload'], flow['page']['accessToken'])
});
async_actions.forEach(async_action => {
//console.log(async_action)
promise_chain = promise_chain.then(f);
});
(2)(通过带有消息的数组循环并执行函数(1),然后将其插入链中)。
我该怎么做才能按顺序发送消息?现在它随机发送,我的意思是如何等待一条消息发送然后发送另一条消息?谢谢。
同样的问题: (1)Facebook Messenger bot not sending messages in order
答案 0 :(得分:0)
当您致电.swiper-pagination-custom{
position: absolute;
bottom: 0;
z-index: 10;
}
时,它会在承诺实际解决之前返回承诺。因此,您不希望拨打下一个sendMessage
,直到之前的sendMessage
来电结算。但是,在您的sendMessage
电话中,您可以做到这一点。相反,您想要返回一个函数,它将调用正确的.map()
最简单的方法是使用sequential promise库,或者您可以使用sendMessage
自行推送。{/ p>
reduce()
答案 1 :(得分:0)
这是一个Facebook错误报告 - https://developers.facebook.com/bugs/565416400306038
function sendMessage(recipient, messages, accessToken, i) {
axios.post(baseURL + 'v2.11/me/messages/?access_token=' + accessToken,
Object.assign({}, {
messaging_type: "RESPONSE",
recipient: {
id: recipient
}
}, messages[i]['payload']) )
.then(response => {
if(i < messages.length) sendMessage( recipient, messages, accessToken, i+1 );
},
error => {})
.catch(error => {});
}
sendMessage(recipient, flow['messages'], flow['page']['accessToken'], 0);