BroadNet
SMPPFormato de trama

Parámetros opcionales TLV de SMPP

Actualizado el 3 min de lecturaBasado en estándares
Respuesta directa

Los TLV (parámetros opcionales, introducidos en la v3.4) amplían una PDU más allá de sus campos obligatorios. Cada uno se codifica como un Tag de 2 bytes, un Length de 2 bytes y un Value de Length bytes, todo big-endian. Los TLV aparecen tras el cuerpo obligatorio, en cualquier orden, y permiten a SMPP transportar cargas, metadatos de concatenación y correlación de acuses sin cambiar la disposición fija de campos.

§01

El formato TLV

Un TLV (también llamado parámetro opcional) es un campo autodescriptivo: un Tag de 2 octetos identifica el parámetro, un Length de 2 octetos da el tamaño del Value en octetos y a continuación va el Value. Tanto Tag como Length son big-endian. Como están etiquetados, los TLV pueden aparecer en cualquier orden tras los parámetros obligatorios y el receptor simplemente omite las etiquetas que no reconoce.

TLV message_payload que transporta un valor de 5 byteshex
04 24        Tag    = 0x0424 (message_payload)
00 05        Length = 5 octets
48 65 6C 6C 6F   Value = "Hello"
§02

Etiquetas TLV comunes

Un puñado de TLV hace la mayor parte del trabajo en producción. message_payload transporta un mensaje demasiado largo para short_message. receipted_message_id y message_state hacen que las confirmaciones de entrega sean legibles por máquina. user_message_reference permite adjuntar tu propio identificador de correlación. El conjunto sar_* proporciona concatenación basada en estándares sin bytes UDH en el cuerpo.

Parámetros opcionales de uso frecuente
EtiquetaNombreValorUsar
0x0424message_payloadOctet StringCuerpo del mensaje cuando excede short_message
0x001Ereceipted_message_idC-Octet String (65)message_id original en una confirmación de entrega
0x0427message_stateInteger (1)Estado final/intermedio en una confirmación de entrega (ver más abajo)
0x0204user_message_referenceInteger (2)Referencia de correlación asignada por ESME
0x020Csar_msg_ref_numInteger (2)Concatenación: referencia compartida entre segmentos
0x020Esar_total_segmentsInteger (1)Concatenación: número total de segmentos
0x020Fsar_segment_seqnumInteger (1)Concatenación: la secuencia de este segmento
0x0423network_error_codeOctet String (3)Detalle del fallo específico de la red en una confirmación de entrega
0x0426more_messages_to_sendInteger (1)Indica que siguen más segmentos
0x020Asource_portInteger (2)Direccionamiento de puertos de la aplicación (origen)
0x020Bdest_portInteger (2)Direccionamiento del puerto de la aplicación (destino)
§03

Valores de message_state

El TLV message_state (0x0427) informa numéricamente del estado del ciclo de vida de un mensaje: el complemento legible por máquina de la palabra clave stat del texto del DLR. Estos valores también aparecen en query_sm_resp.

Valores de message_state
ValorEstadoPalabra clave stat del DLR
1ENROUTE(en tránsito)
2DELIVEREDDELIVRD
3EXPIREDEXPIRED
4DELETEDDELETED
5UNDELIVERABLEUNDELIV
6ACCEPTEDACCEPTD
7UNKNOWNUNKNOWN
8REJECTEDREJECTD
9SKIPPED (v5.0)—
§04

Concatenación SAR frente a UDH

SMPP ofrece dos formas de concatenar un mensaje largo. El método UDH coloca un User Data Header de 6 bytes dentro de short_message y activa el bit UDHI de esm_class. El método SAR mantiene el cuerpo limpio y transporta en su lugar los tres TLV sar_*. Elige uno y sé coherente por ruta: algunas redes solo aceptan UDH y otras solo SAR. Nunca mezcles ambos en el mismo mensaje.

§05

Reglas y trampas

No rellenes a la vez short_message y message_payload: los proveedores lo rechazan. Los TLV personalizados fuera de los rangos que apruebe tu proveedor suelen eliminarse o provocar errores de análisis aguas abajo, así que envía metadatos solo en etiquetas acordadas. Un receptor debe tolerar los TLV desconocidos omitiendo Length bytes; un Length mal formado es la causa clásica de un análisis corrupto de todo lo que va después.

Preguntas frecuentes

Preguntas frecuentes

¿Qué significa TLV en SMPP?

Tag-Length-Value. Cada parámetro opcional se codifica como una etiqueta de 2 bytes, una longitud de 2 bytes y ese número de bytes de valor. Los TLV se introdujeron en SMPP v3.4 y aparecen tras el cuerpo obligatorio de una PDU.

¿Cuándo debo usar message_payload en lugar de short_message?

Usa el TLV message_payload (0x0424) cuando el mensaje supere el campo short_message de 254 octetos, o cuando tu proveedor lo prefiera para contenido largo. No rellenes ambos campos en la misma PDU.

¿Cómo correlaciono una confirmación de entrega con mi mensaje enviado?

Coteja el TLV receipted_message_id (0x001E) del acuse contra el message_id que guardaste de submit_sm_resp. Normaliza primero los formatos, ya que algunos SMSC devuelven el identificador en hexadecimal en el envío y en decimal en el acuse.

¿Son los TLV sar_* mejores que UDH para concatenar?

Ninguno es universalmente mejor: son dos codificaciones de la misma idea. SAR mantiene el cuerpo del mensaje libre de bytes de cabecera; UDH está más ampliamente aceptado. Usa el que admita tu ruta y sé coherente.

¿Puedo añadir mis propios TLV personalizados?

Solo dentro del rango de etiquetas específicas del fabricante que apruebe tu proveedor. Los TLV personalizados no aprobados se eliminan o rechazan con frecuencia en tránsito, así que acuerda antes las etiquetas y su significado con el proveedor.

Referencias

Especificaciones de la fuente

Las normas publicadas en las que se basa esta página. Se abre en una pestaña nueva.

BNMantenido por el equipo de ingeniería BroadNet·Mensajería de nivel empresarial desde 2003.
Colócalo en el cable

Desarrollado con un enlace SMPP real y una API REST.

Solicita acceso de prueba con claves de prueba reales: primero envía a tu propio número verificado y, una vez aprobada tu identidad de remitente y las rutas, pasa a producción en más de 200 países.