Как отправить смс в Twilio с помощью Nodejs?

Я хотел бы знать, как я могу отправить сообщение на разные номера. Я имею в виду, отправлять SMS в качестве уведомлений на разные номера в одном и том же массиве строк. Что-то вроде:

body: "Hello Word!"
number:["+2222", "+2222", "+2222"]

Возможно ли это сделать с помощью twilio?

Должно быть возможно, если можно с почтой, то как это делается с телефонными номерами?

Я использую nodeJs и имел что-то вроде:

обновленный код

    const sendBulkMessages = async(req, res) => {
    let messageBody = req.body;
    let numberList = req.body;
    var numbers = [];
    for (i = 0; i < numberList.length; i++) {
        numbers.push(JSON.stringify({
            binding_type: 'sms',
            address: numberList[i]
        }))
    }


    const notificationOpts = {
        toBinding: numbers,
        body: messageBody,
    };

    const response = await client.notify
        .services(SERVICE_SID)
        .notifications.create(notificationOpts)
        .then(notification => console.info(notification.sid))
        .catch(error => console.info(error));

    console.info(response);

    res.json({
        msg: 'Mensaje enviado correctamente'
    });
}

Но мне пишет ошибку, что я не отправил тело, когда явно делаю.

Кто-нибудь может мне помочь? Пожалуйста

Я вижу, что у вас есть аргумент messageBody, который передается в вашу функцию sendBulkMessages, но где он вызывается? Возможно ли, что messageBody не заполнен правильно? В противном случае ваш код выглядит нормально.

philnash 17.03.2022 00:00

@Filnash Я обновил код (в запросе), теперь я передаю его в теле запроса. Я не знаю, что происходит, но он продолжает выдавать мне ту же ошибку «Требуется тело сообщения». Я уже читал документацию, я не нашел ничего, что помогло. Я настроил службу сообщений и т. д. Я действительно потерялся.

Izlia 17.03.2022 00:22
req.body — это все тело запроса, так что это не будет текстовое сообщение. Какой запрос вы отправляете на эту конечную точку?
philnash 17.03.2022 00:28

Я хочу сделать пост, который получает массив строк по запросу, который получает номера телефонов. И тело сообщения. Это то, что я действительно хочу сделать, отправить одно и то же сообщение на разные номера. Например: post = { number: ['+222', '+222'], body: 'Hello'} Можно ли это сделать с помощью twilio?

Izlia 17.03.2022 00:37

Это может быть интересно - twilio.com/docs/runtime/quickstart/serverless-functions-noti‌​fy

Alan 18.03.2022 04:52

Привет @Alan, я знаю, что это было давно, но у меня есть вопрос, как я могу добавить заголовок отправителю уведомления? Я имею в виду, когда появляется смс-уведомление, не говорите, что его отправляет +64xxx, а появляется имя. Как дать имя номеру, назначенному twilio для смс-уведомлений?

Izlia 06.04.2022 01:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, вы пытаетесь отправить эти сообщения через почтовый запрос в приложение Express. Проблема в том, что вы неправильно извлекаете данные из тела запроса.

Если ваше тело запроса POST представляет собой объект JSON, который выглядит следующим образом:

{
  "toBinding": ['+222', '+222'],
  "body": 'Hello'
}

Затем вам нужно будет убедиться, что вы анализируете тело запроса как JSON, обычно добавляя ПО промежуточного слоя JSON экспресс-парсера тела, а затем извлекаете данные из тела запроса следующим образом:

let messageBody = req.body.body;
let numberList = req.body.toBinding;

Вот полный скрипт:

const sendBulkMessages = async(req, res) => {
    let messageBody = req.body.body;
    let numberList = req.body.toBinding;
    var numbers = [];
    for (i = 0; i < numberList.length; i++) {
        numbers.push(JSON.stringify({
            binding_type: 'sms',
            address: numberList[i]
        }))
    }


    const notificationOpts = {
        toBinding: numbers,
        body: messageBody,
    };

    const response = await client.notify
        .services(SERVICE_SID)
        .notifications.create(notificationOpts)
        .then(notification => console.info(notification.sid))
        .catch(error => console.info(error));

    console.info(response);

    res.json({
        msg: 'Mensaje enviado correctamente'
    });
}

Проверив ваше репо, оказалось, что ваша функция на самом деле была правильной, но то, как вы экспортировали и запрашивали функции, было нет.

Вы не можете экспортировать такие функции:

 module.exports = sendMessage, sendMessageWhatsapp, sendBulkMessages;

Это экспортирует только первую функцию, остальные игнорируются. Поэтому я обновил его до этого:

module.exports = { sendMessage, sendMessageWhatsapp, sendBulkMessages };

Это экспортирует объект, содержащий три функции. Затем, когда вам нужны функции, вы не можете этого сделать:

const sendMessage = require('./message');
const sendMessageWhatsapp = require('./message');
const sendBulkMessages = require('./message');

Для этого требуется одна и та же функция три раза. С приведенным выше обновлением теперь вы можете сделать это:

const {
  sendMessage,
  sendBulkMessages,
  sendMessageWhatsapp,
} = require("./message");

Я не понимаю, хотя я следовал вашему ответу, и ваше объяснение продолжает давать мне ту же ошибку. И я даже пробовал другие способы и все равно то же самое. Я загрузил репозиторий, возможно вы видите что-то, чего я не вижу, потому что я действительно не могу понять, почему это не работает, github.com/IzliaB/SendSMSTwilio/blob/main/server/message.js

Izlia 17.03.2022 01:02

Я не вижу, куда вы отправляете запросы на конечную точку /sendVarios. Это где-то?

philnash 17.03.2022 01:08

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

philnash 17.03.2022 01:17

ой! я не заметил

Izlia 17.03.2022 01:43

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

philnash 17.03.2022 01:48

Кажется, я не понял вопроса. Но это происходит примерно так: в app.js вызовите сообщение Routes.js "app.use('/', require('./messageRoute'));" Что, в свою очередь, вызывает обработчик sendBulkMessages в файле message.js, который выполняет публикацию. В почтальоне я делаю запрос к конечной точке.

Izlia 17.03.2022 01:49

Хорошо, как выглядит ваш запрос в Postman?

philnash 17.03.2022 01:50

Это как: { "body": "Testing", "toBinding": ["+50489854230", "+50488287591"] }

Izlia 17.03.2022 01:52

Хорошо, попробуйте const messageBody = req.body.body; и const numberList = req.body.toBinding;. Как бы вы ни назвали свойство в своем запросе, вы получите к нему доступ из req.body. Вы также можете попробовать зарегистрировать req.body, чтобы увидеть, что входит в функцию, и зарегистрировать messageBody и numberList, чтобы убедиться, что они установлены правильно.

philnash 17.03.2022 01:54

Спасибо за вашего пациента. После предложенных изменений вот такой получился результат, прикрепляю ссылку со скриншотом ошибки, которую он мне выдает: github.com/IzliaB/SendSMSTwilio/blob/main/…. Это похоже на то, что я хочу сделать, на самом деле не определено в API twilio. Я взял учебник о том, как это сделать, с этой страницы: twilio.com/blog/2017/12/send-bulk-sms-twilio-node-js.html

Izlia 17.03.2022 02:30

Давайте продолжить обсуждение в чате.

philnash 17.03.2022 02:32

Другие вопросы по теме