Introducción
SMPP (Short Message Peer-to-Peer) es un protocolo utilizado por la industria de las telecomunicaciones. Intercambia mensajes SMS entre (SMSC) y ESME. SMSC actúa como intermediario para almacenar el mensaje y enrutarlo. ESME es el sistema que envía SMS a SMSC.
Este tutorial le ayudará a enviar mensajes SMS utilizando su propia puerta de enlace SMSC.
Empezando
¿Dónde se usa SMPP?
SMPP es particularmente adecuado para aplicaciones de SMS de alto volumen y alto rendimiento. Tiene las siguientes características:
- Las conexiones establecidas por el cliente con el servidor son persistentes y pueden mantenerse abiertas indefinidamente. No existe la sobrecarga de conexión que se encuentra con protocolos como HTTP que usan conexiones transitorias.
- Las solicitudes pueden ser emitidas por el cliente SMPP así como por el servidor SMPP.
- Las solicitudes se procesan de forma asincrónica. Lo que significa que las solicitudes se pueden emitir sin tener que esperar primero a recibir respuestas a solicitudes anteriores.
Cómo usarlo
Usaremos Node.js node-smpp para la implementación.
Solicitudes SMPP:
- enlazar solicitud para establecer la sesión SMPP
- submit_sm solicitudes emitidas por el cliente para enviar mensajes a un teléfono móvil
- deliver_sm solicitudes emitidas por el servidor para reenviar mensajes desde el teléfono móvil al cliente, incluidos los recibos de entrega
- solicitudes enquire_link emitidas tanto por el servidor como por el cliente para mantener activa la sesión SMPP
- desvincular solicitud emitida por el servidor o el cliente para terminar la sesión SMPP
Cómo funciona
Se debe establecer una sesión SMPP entre ESME (entidades externas de mensajería corta) y el centro de mensajes o la entidad de enrutamiento SMPP, según corresponda.
Esta sesión se crea utilizando un cliente SMPP que se comunica con un protocolo SMPP. Hay un intercambio continuo de PDU (unidades o paquetes de datos de protocolo) SMPP para garantizar que se establezca un enlace / conexión adecuada.
El cliente SMPP se encarga de los SMS y los entrega al servidor SMPP. El servidor SMPP también transmite un informe de entrega al cliente cuando hay un cambio de estado para un SMS.
Node.js nos ayudará a lograr un MPS alto ya que realiza todas las operaciones de E / S de forma asincrónica.
Tradicionalmente, las operaciones de E / S se ejecutan de forma sincrónica (bloqueo) o asincrónica generando subprocesos paralelos para realizar el trabajo.
Este antiguo enfoque consume mucha memoria y es muy difícil de programar.
Por el contrario, cuando una aplicación de nodo necesita realizar una operación de E / S, envía una tarea asincrónica al bucle de eventos, junto con una función de devolución de llamada. Luego continúa ejecutando el resto de su programa.
Cuando se completa la operación asincrónica, el bucle de eventos vuelve a la tarea para ejecutar su devolución de llamada.
Modo de almacenamiento y reenvío de mensajes
El enfoque convencional de SMS ha sido almacenar el mensaje en un área de almacenamiento de SMSC (por ejemplo, base de datos de mensajes) antes de reenviar el mensaje para su entrega a la SME receptora. Con este modelo, el mensaje permanece almacenado de forma segura hasta que el SMSC haya realizado todos los intentos de entrega. Este modo de mensajería se denomina comúnmente "almacenar y reenviar".

Paso 1: crear una sesión SMPP
Al principio, necesitamos crear una nueva smpp
sesión con dirección IP y puerto.
const smpp = require('smpp'); const session = new smpp.Session({host: '0.0.0.0', port: 9500});
Paso 2: enlazar el transceptor
Tan pronto como se conecte, lo vincularemos en el connect
evento:
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; });
Paso 3: enviar SMS
Así que ahora estamos conectados, enviemos el 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); } }); }
Ahora, después de enviar el SMS, SMSC enviará el informe de entrega de que el mensaje ha sido entregado.
Espero que este tutorial le resulte útil. No dude en comunicarse si tiene alguna pregunta.
Otras lecturas:
Si desea obtener más información sobre SMPP, consulte: //opensmpp.org/specifications.html
¡No dudes en aplaudir si consideras que es una lectura que vale la pena!
Sigue a Shailesh Shekhawat para recibir notificaciones cada vez que publique una nueva publicación.
Publicado originalmente en 101node.io el 16 de septiembre de 2018.