node.js - Twilio Whatsapp : Sending Multiple Media Messages

标签 node.js async-await twilio twilio-programmable-chat

我正在尝试循环遍历一个数组,以便在 Twilio 中按顺序发送多条消息。但在我在 Whatsapp 中的最终输出中,顺序不是连续的。例如,它按以下顺序显示:图像2 ->图像1 ->图像3。我尝试使用async/await库,但没有帮助。

我尝试过.reduce,以及在循环内部带有await的普通for循环

数组:

str.text = ["Image 1", "Image 2", "Image 3"]
str.images = ["https://hatrabbits.com/wp-content/uploads/2017/01/random.jpg", "https://images.unsplash.com/photo-1494253109108-2e30c049369b?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80", "https://www.computerhope.com/jargon/r/random-dice.jpg", ]

代码:

function sendMsg(img, txt) {
  context.getTwilioClient().messages.create({
    to: event.From,
    from: 'whatsapp:' + context.WHATSAPP_NUMBER,
    body: txt,
    mediaUrl: img
  }).then(message => {
    callback();
  }).catch(err => callback(err));
}

async function test(str) {
  (str.text).reduce(async (previousPromise, value, i) => {
      await previousPromise;
      return sendMsg(str.images[i], str.text[i])
  }, Promise.resolve());
}

request.post({
...
}, function (err, res, body) {

  var str = body.data.message;
  test(str);
}

最佳答案


var items = [
    {
        text: "Image 1",
        image: "https://hatrabbits.com/wp-content/uploads/2017/01/random.jpg"
    },
    {
        text: "Image 2",
        image: "https://images.unsplash.com/photo-1494253109108-2e30c049369b?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80"
    },
    {
        text: "Image 3",
        image: "https://www.computerhope.com/jargon/r/random-dice.jpg"
    }
];

sendMessage(items);

function sendMessage(items) {

    // stop condition
    if (!items.length) {
        // return;
        callback(null, '');
    }

    const currentItem = items.shift();

    context.getTwilioClient().messages.create({
        to: event.From,
        from: 'whatsapp:' + context.WHATSAPP_NUMBER,
        body: currentItem.text,
        mediaUrl: currentItem.image
    })
        .then(message => {
            setTimeout(sendMessage, 1500, items);
        })
        .catch(err => {
            // return;
            callback(err, null);
        });


}


<小时/> 如果您需要更多消息之间的时间,请使用 setTimeout(sendMessage, 1500, items); 中的 1500

关于node.js - Twilio Whatsapp : Sending Multiple Media Messages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59835660/

相关文章:

c# - ITargetBlock<TInput>.Completion.ContinueWith() 的最佳实践

node.js - Async/await with Express 返回 Promise { <pending> }

php - Zend 中的 spl_autoload_register

sms - 法国口音不适用于 Twilio SMS

javascript - pop()/shift() 方法返回原始数组

javascript - 在浏览器的子窗口中登录完成后通知父窗口

c# - 将 ValueTask<T> 转换为非泛型 ValueTask

Twilio,如何将新的监听器用户添加到已经开始的呼​​叫中?

node.js - Bot 框架中的上下文管理 - Node JS

javascript - Node.js 中的动态路由