SMPP — un protocolo de mensajería de punto a punto

¡Hola! Aunque los mensajeros y redes sociales están suplantando cada vez más los métodos tradicionales de comunicación, esto no disminuye la popularidad de los SMS. La verificación en un sitio web popular o las notificaciones de transacciones las repiten y seguirán existiendo. ¿Alguna vez te has preguntado cómo funciona todo esto? A menudo, para el envío masivo de mensajes se utiliza el protocolo SMPP, del cual hablaré a continuación.

Ya ha habido artículos sobre SMPP en Habr, 1,2, pero su objetivo no era describir el protocolo en sí. Sin duda, puedes empezar directamente con la fuente original — la especificación, pero creo que también es útil tener un breve resumen. Explicaré utilizando el ejemplo de la versión 3.4. Agradezco tus críticas constructivas.

El protocolo SMPP es un protocolo de mensajería de punto a punto. Esto significa que cada nodo o servidor es igual en derechos. En su forma más sencilla, el esquema de intercambio de mensajes SMS se ve así:

SMPP — un protocolo de mensajería de punto a punto

Sin embargo, si el operador nacional no tiene una ruta a alguna región remota, solicitará ayuda a un intermediario: un hub de SMS. A veces, para enviar un solo SMS, es necesario establecer una cadena que atraviese varios países o incluso continentes.

Acerca del protocolo

SMPP es un protocolo de capa de aplicación que se basa en el intercambio de PDU y se transporta sobre sesiones TCP/IP o X.25 para la transmisión de mensajes SMS y USSD. Normalmente, SMPP se utiliza en modo de conexión permanente, lo que ayuda a ahorrar tiempo. SMPP utiliza un modelo de comunicación cliente-servidor.

Modo de comunicación

SMPP — un protocolo de mensajería de punto a punto

El intercambio de mensajes entre el remitente y el centro SMS a través de SMPP puede llevarse a cabo en los siguientes modos:

Transmitter (transmisor) — envío de mensajes en una sola dirección, secuencialmente
Receiver (receptor) — solo recibir mensajes del centro SMS.
Transreceiver (transceptor) — intercambio de mensajes entre el centro SMS y el usuario

Estructura

SMPP — un protocolo de mensajería de punto a punto

Longitud del mensaje

Un mensaje SMS puede contener 70 caracteres en alfabeto cirílico y no más de 157 caracteres latinos + 3 UDH. Si se envía un SMS con una cantidad mayor de caracteres, se dividirá en varios segmentos y se unirá en el dispositivo receptor. En caso de segmentación, la cantidad de caracteres se reduce debido a los encabezados del mensaje que indican la parte del mensaje. Por lo tanto, al enviar un gran SMS, contendrá un máximo de 153 caracteres latinos o 67 caracteres no estándar.

Esquema de codificación de datos

Sin embargo, para transmitir un mensaje, los caracteres necesitan ser codificados. En el protocolo SMPP, la codificación está a cargo de un campo especial: Data Coding Scheme, o DCS. Este campo indica cómo deben ser reconocidos los mensajes. Además, el campo DCS incluye:

  • un conjunto de caracteres que define la codificación;
  • la clase del mensaje;
  • una solicitud para eliminar automáticamente después de ser leído;
  • una indicación para la compresión del mensaje;
  • el idioma del mensaje en difusión;

El alfabeto estándar de 7 bits (GSM 03.38). Fue desarrollado para el sistema de mensajería en GSM. Esta codificación es adecuada para el inglés y varios idiomas latinos. Cada carácter consiste en 7 bits y se codifica en un octeto.

UTF-16 (en GSM UCS2) Para incluir caracteres ausentes en el alfabeto de 7 bits, se desarrolló la codificación UTF-16, que añade caracteres adicionales (incluidos los cirílicos) a costa de reducir el tamaño del mensaje de 160 a 70; este tipo de codificación prácticamente replica Unicode.

Datos de 8 bits definidos por el usuario. Esto incluye KOI8-R y Windows-1251. Aunque esta solución parece más económica en comparación con UTF-16. Surge una cuestión de compatibilidad en diferentes dispositivos. Puesto que, en este caso, ambos dispositivos deben estar configurados de antemano.

Clase del mensaje

  • Class0, o flash, mensajes que se almacenan en la memoria del teléfono a solicitud del usuario;
  • Class1, o aquellos que se almacenan en la memoria del teléfono;
  • Class1, o aquellos que se almacenan en la memoria del teléfono;
  • Class2, debe garantizar que el mensaje se guardará en la memoria del terminal móvil; de lo contrario, debe enviar una notificación al centro de SMS sobre la imposibilidad de guardar;
  • Class3 — en este caso, el teléfono debe enviar una notificación de que el mensaje puede ser guardado, independientemente de la cantidad de memoria en el dispositivo. Este tipo de mensaje implica que el mensaje ha llegado al destinatario;

Tipo de mensaje

Silent message (SMS0) Tipo de mensaje SMS sin contenido. Este SMS llega sin notificación y no se muestra en la pantalla del dispositivo.

PDU

Cada operación pdu es par y consiste en una solicitud y una respuesta. Por ejemplo: un comando que indica la configuración de la conexión (bind_transmitter / bind_transmitter_resp), o que el mensaje ha sido entregado (deliver_sm / deliver_sm_resp)

SMPP — un protocolo de mensajería de punto a punto

Cada paquete PDU consta de dos partes: el encabezado (header) y el cuerpo (body). La estructura del encabezado es la misma para cualquier paquete PDU: la longitud del comando indica la longitud del paquete, el id es el nombre del paquete, y el comando de estado indica si el mensaje se ha enviado con éxito o ha habido un error.

Parámetros adicionales TLV

TLV (Tag Length Value), o campos adicionales. Estos parámetros se utilizan para ampliar las funciones del protocolo y no son obligatorios. Este campo se indica al final del campo PDU. Por ejemplo, mediante TLV dest_addr_np_information se puede organizar la transmisión de información sobre la portabilidad del número.

Ton y Npi

TON (Type of Number) es un parámetro que informa al SMSC sobre el formato de direccionamiento y el tipo de red.
NPI (Numbering Plan Identification) es un parámetro que indica el plan de numeración.

SMPP — un protocolo de mensajería de punto a punto

Dirección del remitente del mensaje, o nombre alfa

Los mensajes enviados al teléfono son de dos tipos: digitales y alfabéticos. Los digitales pueden ser largos (similares a un número de teléfono) o cortos. A veces, los operadores tienen restricciones para enviar de nombres neutros, como Infosms, Alert, etc. A veces, los operadores no permiten el tráfico si el nombre no está registrado en su red. Sin embargo, esto es más bien una característica del operador.

Fases de envío

SMPP — un protocolo de mensajería de punto a punto

SMS-SUBMIT es el envío de un mensaje MO FSM (mensaje corto desde un terminal móvil)
SMS-SUBMIT REPORT es la confirmación de que el mensaje ha sido enviado al SMSC
SRI SM (SendRoutingInfo) — el SMSC recibe información del HLR sobre la ubicación del MSC / VLR del abonado
SRI SM RESP es la respuesta del HLR sobre la ubicación del abonado
MT-FSM después de recibir la ubicación, se envía un mensaje utilizando la operación 'Forward Short Message'
MT-FSM ACK es la respuesta del SMSC de que el mensaje ha sido enviado
SMS-STATUS REPORT el SMSC envía el estado de entrega del mensaje.

El estado de entrega del mensaje

SMS-STATUS REPORT puede tener varios valores:
DELIVRD el mensaje fue entregado con éxito
REJECTD — el mensaje fue rechazado por el centro SMS
EXPIRED — el mensaje fue eliminado de la cola de envío después de que expiró el TTL (tiempo de vida del mensaje)
UNDELIV — otros casos de no entrega
UNKNOWN- no se recibió respuesta sobre el envío.

Errores de transmisión

A veces hay razones por las cuales los mensajes SMS no se entregan al abonado. La consecuencia de estas razones es la aparición de errores. Los errores se devuelven en PDUs_sms_resp. Todos los errores se pueden dividir en temporales (Temporary) y permanentes (Permanent).

Como ejemplo, se pueden considerar como temporales los casos de 'absent_subscriber', es decir, el abonado no está disponible o no está en línea, y como permanentes — el abonado no existe. Dependiendo de los errores que ocurren, se forma una política de reenvío de estos mensajes.

Por ejemplo, si el abonado estaba ocupado en una llamada y recibió el error de MT handset is busy, el mensaje se puede reenviar después de unos minutos. Sin embargo, si el servicio de recepción de mensajes está bloqueado para el abonado, el reenvío no tendrá sentido. Puede encontrar la lista de errores en las páginas de SMSC, por ejemplo, como esta.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster