Як надіслати SMS у Node.js через шлюз 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 запити, видані клієнтом для надсилання повідомлень на мобільний телефон
  • Delivery_sm запити, видані сервером для переадресації повідомлень з мобільного телефону клієнту, включаючи квитанції про доставку
  • запити enquire_link, видані як сервером, так і клієнтом, щоб підтримувати живий сеанс SMPP
  • скасувати запит, виданий сервером або клієнтом для припинення сеансу SMPP

Як це працює

Сеанс SMPP повинен бути встановлений між ESME (Зовнішніми суб’єктами коротких повідомлень) та Центром повідомлень або Суб’єктом маршрутизації SMPP, де це доречно.

Цей сеанс створюється за допомогою клієнта SMPP, який взаємодіє з протоколом SMPP. Існує постійний обмін SMPP PDU (одиниці даних або пакети даних протоколу) для забезпечення належного прив’язки / підключення.

Клієнт SMPP піклується про SMS і доставляє їх на сервер SMPP. Сервер SMPP також передає звіт про доставку назад клієнту, коли змінюється статус SMS.

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

Традиційно операції вводу-виводу виконуються або синхронно (блокуючи), або асинхронно, відкладаючи паралельні потоки для виконання роботи.

Цей старий підхід споживає багато пам'яті і, як відомо, важко програмувати.

На відміну від цього, коли програмі Node потрібно виконати операцію введення-виведення, вона відправляє асинхронне завдання в цикл подій разом із функцією зворотного виклику. Потім він продовжує виконувати решту своєї програми.

Коли операція асинхронізації завершується, цикл подій повертається до завдання для виконання зворотного виклику.

Режим зберігання та пересилання повідомлень

Традиційним підходом до SMS було збереження повідомлення в зоні зберігання SMSC (наприклад, база даних повідомлень) перед тим, як переслати повідомлення для доставки МСП-одержувачу. З цією моделлю повідомлення залишається надійно збереженим, доки SMSC не зробить всіх спроб доставки. Цей режим обміну повідомленнями зазвичай називають "зберігати та пересилати".

Крок 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, перегляньте: //opensmpp.org/specifications.html

Не соромтеся плескати, якщо вважаєте, що це варто прочитати!

Підписуйтесь на Shailesh Shekhawat, щоб отримувати сповіщення щоразу, коли я публікую нову публікацію.

Спочатку опубліковано на 101node.io 16 вересня 2018 року.