Сообщение Twilio SMS повторно отправляет одно и то же сообщение

Поэтому я пытаюсь отправлять уведомления пользователям телефонов Twilio, однако одно и то же сообщение отправляется три раза. У меня есть три телефонных номера, жестко закодированных в массив (Node.js), поэтому я думаю, что из-за этого он трижды зацикливается.

То, что я пытаюсь сделать, - это, в конце концов, заполнить массив телефонных номеров из предоставленных пользователем номеров телефонов, которые они хранят в Firebase для каждого пользователя. Таким образом, другой пользователь получит одно и то же уведомление, чтобы сообщить им о посещении веб-сайта.

Вот мой код:var providerNumbers = ['number1', 'number2', 'number3']; var body = "..." app.get('/testtwilio', function(req, res){ Promise.all( providerNumbers.map(number => { return twilio.messages.create({ to: number, from: '+15704058347', body: body }); }) ).then(messages => { console.log('Messages Sent!'); }).catch(err => console.error(err)); });

.map

Кто-нибудь знает, как я могу предотвратить отправку сообщения три раза всем пользователям?

javascript,node.js,twilio,

1

Ответов: 3


1

В коде, который вы опубликовали, нет ничего плохого.

providerNumbersвызывает функцию обратного вызова один раз для каждого элемента в вашем providerNumbersмассиве.

Функция обратного вызова отправляет только одно сообщение при его выполнении.

Вы можете проверить это, если вы зарегистрируете индекс с чем-то вроде этого:

app.get('/testtwilio', function(req, res){
  Promise.all(
    providerNumbers.map((number, index) => {
      console.log(index);
      return twilio.messages.create({
        to: number,
        from: '+15704058347',
        body: body
      });
    })
  ).then(messages => {
    console.log('Messages Sent!');
  }).catch(err => console.error(err));
});

В заключение, что-то должно быть '/testtwilio'трижды поражать вашу конечную точку .

Надеюсь, это поможет.


1

Ваш пример, похоже, работает, попробуйте проверить журналы, чтобы увидеть, выполняется ли несколько запросов к одной и той же конечной точке. Будет использоваться более сжатый метод сопоставления массива примитивов с обещаниями Promise.map. Сокращение использования сложных структур единиц снижает количество процедур, которые должен выполнять ваш код, упрощает отладку и исключает ложные срабатывания.

const providerNumbers = ['number1', 'number2', 'number3']
const from = '+15704058347'
const body = "..."

app.get('/testtwilio', (req, res, next) => {
  Promise.map(
    providerNumbers, 
    to => twilio.messages.create({to, from, body})
  ).then(res => {
    console.log('Messages sent')
    res.json({success: true})
  }).catch(next)
})

1

Я решил проблему, изменив app.getее app.post.

JavaScript, Node.js, Twilio,
Похожие вопросы