# Parámetros opcionales TLV de SMPP

> 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.

- URL canónica: https://www.broadnet.me/es/reference/smpp-tlv-parameters
- Idioma: es
- Última actualización: 2026-07-18
- Editor: BroadNet (https://www.broadnet.me)

Los parámetros opcionales de SMPP usan un formato Tag-Length-Value. La disposición en bytes del TLV más las etiquetas comunes: message_payload, receipted_message_id, message_state, user_message_reference y el conjunto sar_* de concatenación.

## 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 bytes*

```hex
04 24        Tag    = 0x0424 (message_payload)
00 05        Length = 5 octets
48 65 6C 6C 6F   Value = "Hello"
```

## 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*

| Etiqueta | Nombre | Valor | Usar |
|---|---|---|---|
| 0x0424 | message_payload | Octet String | Cuerpo del mensaje cuando excede short_message |
| 0x001E | receipted_message_id | C-Octet String (65) | message_id original en una confirmación de entrega |
| 0x0427 | message_state | Integer (1) | Estado final/intermedio en una confirmación de entrega (ver más abajo) |
| 0x0204 | user_message_reference | Integer (2) | Referencia de correlación asignada por ESME |
| 0x020C | sar_msg_ref_num | Integer (2) | Concatenación: referencia compartida entre segmentos |
| 0x020E | sar_total_segments | Integer (1) | Concatenación: número total de segmentos |
| 0x020F | sar_segment_seqnum | Integer (1) | Concatenación: la secuencia de este segmento |
| 0x0423 | network_error_code | Octet String (3) | Detalle del fallo específico de la red en una confirmación de entrega |
| 0x0426 | more_messages_to_send | Integer (1) | Indica que siguen más segmentos |
| 0x020A | source_port | Integer (2) | Direccionamiento de puertos de la aplicación (origen) |
| 0x020B | dest_port | Integer (2) | Direccionamiento del puerto de la aplicación (destino) |

## 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*

| Valor | Estado | Palabra clave stat del DLR |
|---|---|---|
| 1 | ENROUTE | (en tránsito) |
| 2 | DELIVERED | DELIVRD |
| 3 | EXPIRED | EXPIRED |
| 4 | DELETED | DELETED |
| 5 | UNDELIVERABLE | UNDELIV |
| 6 | ACCEPTED | ACCEPTD |
| 7 | UNKNOWN | UNKNOWN |
| 8 | REJECTED | REJECTD |
| 9 | SKIPPED (v5.0) | — |

## 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.

## 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

### ¿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.

## Fuentes

- [SMPP v3.4 specification — §5.3 optional parameters](https://smpp.org/SMPP_v3_4_Issue1_2.pdf)
- [SMPP v5.0 specification](https://smpp.org/SMPP_v5.pdf)

## Relacionado

- [Confirmaciones de entrega SMPP (formato DLR)](https://www.broadnet.me/es/reference/smpp-delivery-receipts-dlr)
- [Segmentación de SMS y UDH](https://www.broadnet.me/es/reference/sms-segmentation-concatenation-udh)
- [Referencia SMPP submit_sm](https://www.broadnet.me/es/reference/smpp-submit-sm)
- [Decodificador de PDU SMPP (herramienta gratuita)](https://www.broadnet.me/es/tools/smpp-pdu-decoder)
- [Anatomía de SMPP PDU](https://www.broadnet.me/es/reference/smpp-pdu-anatomy)
