
Содержание статьи
Введение
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 не сделает всех попыток доставки. Этот режим обмена сообщениями обычно называют «хранить и пересылать».

Шаг 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 года.