Как отправить SMS в Node.js через шлюз SMPP

kak otpravit sms v nodejs cherez shlyuz smpp

Введение

SMPP (Short Message Peer-to-Peer) – это протокол, используемый в телекоммуникационной отрасли. Он обменивается SMS-сообщениями между (SMSC) и ESME. SMSC выступает в качестве посредника для хранения и маршрутизации сообщения. ESME – это система, которая доставляет SMS на SMSC.

Данное руководство поможет вам отправлять SMS-сообщения с помощью собственного шлюза SMSC.

Начинаем

Где используется SMPP?

SMPP особенно подходит для SMS-приложений большого объема и высокой пропускной способности. Он имеет следующие особенности:

  • Соединения, установленные клиентом с сервером, постоянны и могут оставаться открытыми на неопределенный срок. Нет накладных расходов на подключение, которые можно найти с такими протоколами, как HTTP, которые используют временные соединения.
  • Запросы могут подаваться как клиентом SMPP, так и сервером SMPP.
  • Запросы обрабатываются асинхронно. Это означает, что запросы можно отправлять, не ожидая ответа на предыдущие запросы.

Как это использовать

Для реализации мы будем использовать Node.js node-smpp.

Запросы SMPP:

  • связать запрос на установку сессии SMPP
  • submit_sm запросы, выданные клиентом для отправки сообщений на мобильный телефон
  • доставка_см запросы сервера на пересылку сообщений с мобильного телефона клиенту, включая квитанции о доставке
  • спросить_ссылка запросы, выдаваемые как сервером, так и клиентом, чтобы поддерживать сеанс SMPP
  • решить запрос, отправленный сервером или клиентом, для завершения сеанса SMPP

Как это работает

Сеанс SMPP должен быть установлен между ESME (внешними короткими объектами обмена сообщениями) и центром сообщений или объектом маршрутизации SMPP, если это необходимо.

Этот сеанс создается с помощью клиента SMPP, взаимодействующего с протоколом SMPP. Происходит непрерывный обмен SMPP PDU (блоки или пакеты данных протокола), чтобы обеспечить надлежащую привязку/соединение.

Клиент SMPP заботится о SMS и доставляет их на сервер SMPP. Сервер SMPP также передает a Отчет о доставке назад к клиенту при изменении статуса SMS.

Node.js поможет нам добиться высокого MPS, поскольку он выполняет все операции ввода-вывода асинхронно.

Традиционно операции ввода-вывода выполняются синхронно (блокировка) или асинхронно, создавая параллельные потоки для выполнения работы.

Этот старый подход потребляет много памяти и, как известно, его сложно программировать.

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

После завершения асинхронной операции цикл событий возвращается к заданию, чтобы выполнить обратный вызов.

Режим сохранения и отправки сообщений

Обычный подход к SMS заключался в том, чтобы хранить сообщения в зоне хранения SMSC (например, в базе данных сообщений) перед отправкой сообщения для доставки малому и среднему предприятию-получателю. В этой модели сообщение надежно сохраняется до тех пор пока SMSC не сделает всех попыток доставки. Этот режим обмена сообщениями обычно называют «хранить и пересылать».

l2qlTM5I7RaqA3ipp3oE-2PZR7zaXh5WZR7S

Шаг 1: Создайте сеанс SMPP

В начале нам нужно создать новый smpp сеанс с IP-адресом и портом.

const smpp = require('smpp');
const session = new smpp.Session({host: '0.0.0.0', port: 9500});

Шаг 2: Привязывайте трансивер

Как только он соединится, мы его привяжем connect событие:

let isConnected = false
session.on('connect', () => {
  isConnected = true;

  session.bind_transceiver({
      system_id: 'USER_NAME',
      password: 'USER_PASSWORD',
      interface_version: 1,
      system_type: '380666000600',
      address_range: '+380666000600',
      addr_ton: 1,
      addr_npi: 1,
  }, (pdu) => {
    if (pdu.command_status == 0) {
        console.log('Successfully bound')
    }

  })
})

session.on('close', () => {
  console.log('smpp is now disconnected') 
   
  if (isConnected) {        
    session.connect();    //reconnect again
  }
})

session.on('error', error => { 
  console.log('smpp error', error)   
  isConnected = false;
});

Шаг 3: Отправьте SMS

Теперь мы подключены, давайте отправим SMS:

function sendSMS(from, to, text) {
   from = `+${from}`  
   
// this is very important so make sure you have included + sign before ISD code to send sms
   
   to = `+${to}`
  
  session.submit_sm({
      source_addr:      from,
      destination_addr: to,
      short_message:    text
  }, function(pdu) {
      if (pdu.command_status == 0) {
          // Message successfully sent
          console.log(pdu.message_id);
      }
  });
}

Теперь, после отправки SMS, SMSC отправит отчет о доставке, что сообщение было доставлено.

Надеюсь, это руководство вам будет полезным. Не стесняйтесь обращаться, если у вас есть вопросы.

Дальнейшее чтение:

Если вы хотите узнать больше о SMPP, посмотрите: http://opensmpp.org/specifications.html

Не стесняйтесь аплодировать, если вы считаете, что это стоит прочесть!

Следите за Шайлешем Шехаватом, чтобы получать уведомления, когда я публикую новую публикацию.

Первоначально опубликовано на 101node.io 16 сентября 2018 года.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *