使用Facebook Send-API发送顺序消息

时间:2018-01-20 02:50:51

标签: node.js facebook axios q facebook-messenger-bot

我正在尝试按顺序使用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

2 个答案:

答案 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);