Hola Aunque los mensajeros y las redes sociales están desplazando a los métodos tradicionales de comunicación todos los días, esto no resta valor a la popularidad de los SMS. La verificación en un sitio popular, o notificación de transacción, demuestra que viven y vivirán. ¿Alguna vez te has preguntado cómo funciona todo? Muy a menudo, SMPP se utiliza para enviar mensajes masivos, que se discutirán bajo el gato.
Ya había artículos en Habr sobre smpp,
1 ,
2 , pero su propósito no era describir el protocolo en sí. Por supuesto, puede comenzar inmediatamente con la fuente principal: la
especificación , pero creo que sería bueno tener un breve resumen. Explicaré con un ejemplo v3.4 Me alegra su crítica objetiva.
SMPP es un protocolo de mensajería entre pares. Esto significa que cada servidor peer / hub es igual. En el caso más simple, el esquema de mensajes SMS se ve así:

Sin embargo, si el operador nacional no tiene una ruta a alguna región remota, solicita este intermediario: un centro de SMS. A veces, para enviar un SMS, debe construir una cadena entre varios países, o incluso continentes.
Acerca de Protocolo
SMPP es un protocolo de nivel de aplicación que se basa en el intercambio de
PDU y se transmite a través de sesiones TCP / IP o X25 para enviar mensajes sms y ussd. Por lo general, SMPP se usa en modo de conexión constante, esto ayuda a ahorrar tiempo. SMPP utiliza un modelo de comunicación cliente-servidor.
Modo de comunicación

El intercambio de mensajes entre el remitente y
SMSC a través de SMPP se puede llevar a cabo en los siguientes modos:
Transmisor (transmisor): transmisión de un mensaje en una dirección, alternativamente
Receptor (receptor): solo recibe mensajes de SMSC.
Transreceiver (transceptor): mensajes entre SMSC y el usuario
Estructura

Longitud del mensaje
Un mensaje SMS puede contener 70 caracteres al escribir en cirílico y no más de 157 caracteres latinos + 3
UDH si se envían. SMS con una gran cantidad de caracteres, se dividirá en varios segmentos y se combinará en el dispositivo receptor. En el caso de la segmentación, el número de caracteres se reduce debido a los encabezados del mensaje en el que se indica la parte del mensaje. Por lo tanto, al enviar un mensaje SMS grande, contiene un máximo de 153 caracteres latinos o 67 caracteres atípicos.
Esquema de codificación de datos
Sin embargo, los caracteres deben estar codificados para transmitir un mensaje. En el protocolo SMPP, un campo especial es responsable de la codificación: Esquema de codificación de datos o DCS. Este es un campo que indica cómo se deben reconocer los mensajes. Además, el campo DCS incluye:
- el conjunto de caracteres que define la codificación;
- mensaje de clase;
- solicitud de eliminación automática después de leer;
- indicación de compresión de mensajes;
- lenguaje de difusión;
Alfabeto estándar de 7 bits (GSM 03.38). Fue desarrollado para el sistema de mensajería GSM. Dicha codificación es adecuada para inglés y algunos idiomas latinos. Cada carácter consta de 7 bits y está codificado en un octeto.
UTF-16 (en GSM UCS2) Para incluir los caracteres faltantes en la codificación de 7 bits, se desarrolló la codificación UTF-16 que agrega caracteres adicionales (incluido el cirílico) al reducir el tamaño del mensaje de 160 a 70, este tipo de codificación se repite casi por completo Unicode
Datos definidos por el usuario de 8 bits. Estos incluyen el KOI8-R y Windows-1251. Aunque esta solución parece ser más económica en comparación con el mismo UTF-1, para usar tales codificaciones, se requiere una configuración preliminar en los dispositivos de recepción y transmisión. Si en algunos de ellos no se admiten los datos de codificación, el mensaje no se mostrará correctamente. Como en este caso, ambos dispositivos deben configurarse de antemano.
Mensajes de clase
- Class0, o flash, un mensaje almacenado en la memoria del teléfono a solicitud del usuario;
- Class1, o los almacenados en el teléfono;
- Class2, debe asegurarse de que el mensaje esté almacenado en la memoria del terminal móvil; de lo contrario, debe enviar alertas SMSC sobre la imposibilidad de guardar;
- Clase 3: en este caso, el teléfono debe enviar una notificación de que el mensaje se puede guardar, independientemente de la cantidad de memoria en el dispositivo. Este tipo de mensaje implica que el mensaje ha llegado a su destino;
Tipo de mensaje
Mensaje silencioso (SMS0) Tipo de mensaje SMS sin contenido. Dicho SMS llega sin previo aviso y no se muestra en la pantalla del dispositivo.
PDU
Cada operación de PDU está emparejada y consiste en una solicitud y una respuesta. Por ejemplo: un comando que dice sobre el establecimiento de una conexión (bind_transmitter / bind_transmitter_resp), o que el mensaje ha sido transmitido (deliver_sm / deliver_sm_resp)

Cada paquete de PDU consta de dos partes: un encabezado y un cuerpo. La estructura del encabezado es la misma para cualquier paquete pdu: la longitud del comando es la longitud del paquete, id es el nombre del paquete y el comando de estado muestra un mensaje transmitido con éxito o con un error.
Opciones avanzadas de TLV
TLV (Valor de longitud de etiqueta) o campos opcionales. Dichos parámetros se utilizan para ampliar las funciones del protocolo y no son necesarios. Este campo se indica al final del campo PDU. Como ejemplo, utilizando TLV dest_addr_np_information, puede organizar la transferencia de información sobre cómo portar un número.
Ton y Npi
El parámetro TON (Tipo de número) informa al SMSC sobre el formato de direccionamiento y el tipo de red.
Parámetro NPI (identificación del plan de numeración) que indica el plan de numeración.

Dirección de origen del mensaje o nombre alfa
Los mensajes enviados al teléfono vienen en dos variedades: digital y alfabético. Lo digital puede ser largo (similar a un número de teléfono) y corto. A veces, los operadores tienen restricciones para enviar desde nombres neutrales, por ejemplo, Infosms, Alert, etc. A veces, los operadores no permiten el tráfico si el nombre no está registrado en su red. Sin embargo, son más bien las características del operador.
Etapas de envío
SMS-SUBMIT está enviando un mensaje MO FSM (mensaje corto desde un terminal móvil)
INFORME DE ENVÍO DE SMS : confirmación de que el mensaje fue enviado por SMSC
SRI SM (SendRoutingInfo): SMSC recibe información del HLR sobre el MSC / VLR de la ubicación del suscriptor
SRI SM RESP - respuesta del HLR con respecto a la carne de la posición del suscriptor
MT-FSM : después de recibir la ubicación, se envía un mensaje utilizando la operación "Reenviar mensaje corto"
MT-FSM ACK : respuesta de SMSC de que se ha enviado un mensaje
INFORME DE ESTADO DE SMS : SMSC envía el estado de entrega del mensaje.
Estado de entrega del mensaje
El INFORME DE ESTADO DE SMS puede tomar varios valores:
Mensaje
DELIVRD entregado con éxito
RECHAZAR - mensaje rechazado por el centro de SMS
CADUCADO : el mensaje se elimina de la cola de envío después del final de TTL (vida útil del mensaje)
UNDELIV - otros casos de no entrega
DESCONOCIDO: no se recibió respuesta de envío.
Errores de transmisión
A veces los mensajes no se entregan. Como resultado, se producen errores. Los errores se devuelven a PDUs_sms_resp. Todos los errores se pueden dividir en temporales (temporales) y permanentes (permanentes).
Como ejemplo, los temporales son absent_subscriber, el suscriptor no está disponible o no está en la red y el suscriptor permanente no existe. Dependiendo de los errores que ocurran, se forma una política para reenviar estos mensajes.
Por ejemplo, si un suscriptor estaba ocupado hablando y recibió un error de teléfono MT ocupado, el mensaje puede enviarse nuevamente en unos minutos, sin embargo, si el suscriptor tiene un servicio de mensajes bloqueado, el reenvío no tendrá sentido. Puede encontrar la lista de errores en las páginas de SMSC, por ejemplo, así.