简体   繁体   English

Twilio Whatsapp:发送多条媒体消息

[英]Twilio Whatsapp: Sending Multiple Media Messages

I am trying to loop through an array to send multiple messages in Twilio sequentially .我正在尝试循环遍历数组以在 Twilio 中按顺序发送多条消息。 But in my final output in Whatsapp, the order is not sequential.但在我在 Whatsapp 中的最终输出中,顺序不是连续的。 For example, it displays in the order of: Image 2 -> Image 1 -> Image 3. I have tried to use the async / await library, but it did not help.例如,它按以下顺序显示:Image 2 -> Image 1 -> Image 3。我尝试使用async / await库,但没有帮助。

I have tried .reduce , as well as a normal for loop with an await inside of the loop.我已经尝试过.reduce ,以及在循环内带有await的普通for循环。

Array:大批:

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", ]

Code:代码:

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);
}

Looks like you are mixing callback, promises without properly returning things.看起来你正在混合回调,承诺没有正确返回东西。 I would change following thins我会改变以下事情

  • return the promise from send msg从发送消息返回承诺
  • add await in your request.post在您的请求中添加request.post
  • use for..of loop to process them sequentially使用for..of循环顺序处理它们

Something like this像这样的东西

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) {
  return context.getTwilioClient().messages.create({
    to: event.From,
    from: 'whatsapp:' + context.WHATSAPP_NUMBER,
    body: txt,
    mediaUrl: img
  }).catch(err => console.log(err));
}

async function test(str) {
  for (const [index, value] of str.text) {
    await sendMsg(str.images[index], str.text[index]);
  }
}

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

    var str = body.data.message;
    await 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);
        });


}



If you need more time between messages play with 1500 from setTimeout(sendMessage, 1500, items); 如果您需要更多消息之间的时间,请使用 setTimeout(sendMessage, 1500 setTimeout(sendMessage, 1500, items); . .

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM