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

mur7ay спросил: 13 июня 2018 в 10:06 в: javascript

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

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

Вот мой код Node.js:

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

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

3 ответа

Alex Baban ответил: 13 июня 2018 в 10:54

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

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

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

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

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'.

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

mur7ay ответил: 13 июня 2018 в 11:50
Да, я не уверен, почему он три раза попадает в конечную точку. Я просто запускаю его в терминале с запуском npm, отправляет, затем через несколько секунд он отправляет его снова.
Alex Baban ответил: 13 июня 2018 в 12:07
Попробуйте запустить прямо с узлом node your_app_name.js и вызвать конечную точку из своего браузера.
mur7ay ответил: 14 июня 2018 в 01:03
Я смог заставить его работать.
dcd018 ответил: 13 июня 2018 в 10:54

Ваш пример, похоже, работает, попробуйте проверить журналы, чтобы увидеть, выполняется ли несколько запросов к одной и той же конечной точке. Более сжатый метод сопоставления массива примитивов с обещаниями будет использовать 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)
})
Mark Meyer ответил: 13 июня 2018 в 11:17
Promise.map() не входит в стандартный javascript. Вы предполагаете использовать что-то вроде Bluebird?
mur7ay ответил: 14 июня 2018 в 01:04

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

Дополнительное видео по вопросу: Сообщение Twilio SMS продолжает пересылать то же сообщение

Уроки JavaScript | Урок №8 - Методы alert, confirm, prompt

Взаимодействие с пользователем на JavaScript, Диалоговые окна prompt confirm alert на JS, Урок 26

Уроки JavaScript | #5 - Взаимодействие с пользователем:alert,prompt,confirm