BroadNet
SMPPOperaciones

SMPP submit_sm: todos los campos obligatorios

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

submit_sm (command_id 0x00000004) envía un mensaje terminado en móvil desde el ESME al SMSC. Su cuerpo es una secuencia fija de campos obligatorios: direccionamiento (TON/NPI + dirección), esm_class, protocol_id, priority_flag, planificación, registered_delivery, data_coding, sm_length y short_message, seguidos opcionalmente de TLV. submit_sm_resp devuelve el message_id del SMSC.

DiagramaUna sesión SMPP entre su plataforma y BroadNet
Su plataforma (ESME)
BroadNet SMSC
Una conexión TCP/TLS persistente
  1. bind_transceiverAbrir y autenticar la sesión
  2. bind_transceiver_respSesión aceptada
  3. submit_smEnviar un mensaje
  4. submit_sm_respAceptado, ID de mensaje devuelto
  5. deliver_smConfirmación de entrega o mensaje entrante
  6. deliver_sm_respConfirmado
  7. enquire_linkKeepalive en estado de inactividad
§01

El orden completo de los campos obligatorios

El cuerpo de submit_sm es una secuencia fija y ordenada: no hay etiquetas de campo, así que el orden y el tamaño lo son todo. La tabla enumera todos los parámetros obligatorios en el orden del cable. short_message puede estar vacío cuando el texto se transporta en un TLV message_payload; no rellenes ambos.

Parámetros obligatorios de submit_sm (en orden del cable)
#CampoTipoNotas
1service_typeC-Octet String (6)Categoría de servicio; generalmente vacía
2source_addr_tonInteger (1)Tipo de número del remitente
3source_addr_npiInteger (1)Plan de numeración del remitente
4source_addrC-Octet String (21)Dirección del remitente / ID alfanumérico
5dest_addr_tonInteger (1)Tipo de número del destinatario
6dest_addr_npiInteger (1)Plan de numeración del destinatario
7destination_addrC-Octet String (21)MSISDN del destinatario
8esm_classInteger (1)Modo de mensaje + tipo + indicador UDHI
9protocol_idInteger (1)GSM TP-PID; usualmente 0
10priority_flagInteger (1)0 (normal) – 3 (máximo)
11schedule_delivery_timeC-Octet String (1|17)Vacío = inmediato
12validity_periodC-Octet String (1|17)Vacío = SMSC por defecto
13registered_deliveryInteger (1)Solicitar confirmación de entrega
14replace_if_present_flagInteger (1)0 = no, 1 = reemplazar
15data_codingInteger (1)Codificación / DCS
16sm_default_msg_idInteger (1)ID de mensaje predefinido; normalmente 0
17sm_lengthInteger (1)Longitud de short_message (0–254)
18short_messageOctet String (0–254)La carga útil del mensaje
§02

Direccionamiento: TON y NPI

source_addr y destination_addr transportan cada uno un Type of Number (TON) y un Numbering Plan Indicator (NPI). Para un MSISDN internacional usa TON 1 (International) con NPI 1 (ISDN/E.164). Para un remitente alfanumérico usa TON 5 (Alphanumeric): source_addr contiene entonces hasta 11 caracteres GSM-7. Equivocarse con TON/NPI es una de las principales causas de tráfico no entregado o mal enrutado.

Valores comunes de TON y NPI
TONSignificadoNPISignificado
0Desconocido0Desconocido
1Internacional1ISDN (E.163/E.164)
2Nacional3Datos (X.121)
3Específico de la red4Telex (F.69)
4Número de abonado6Móvil terrestre (E.212)
5Alfanumérico8Nacional
6Abreviado9Privado
§03

esm_class

esm_class es un campo de bits que fija el modo de mensajería, el tipo de mensaje y funciones específicas de GSM. El bit más importante para los remitentes es UDHI (0x40): actívalo cuando short_message empiece con un User Data Header, por ejemplo una cabecera de concatenación. El bit 0x80 solicita la ruta de respuesta de GSM.

Significado de los bits de esm_class (selección)
BitsCampoValor → significado
1–0Modo de mensajería0 predeterminado · 1 datagrama · 2 reenvío · 3 almacenar y reenviar
5–2Tipo de mensaje0 predeterminado · 0x04 confirmación de entrega · 0x08 acuse de entrega · 0x10 acuse del usuario
6UDHI0x40 = short_message begins with a UDH
7Ruta de respuesta0x80 = set GSM reply path
§04

data_coding, registered_delivery y validez

data_coding selecciona la codificación del texto: 0x00 = valor por defecto del SMSC (normalmente GSM 7-bit), 0x04 = binario de 8 bits, 0x08 = UCS-2 para Unicode. Los dos bits bajos de registered_delivery controlan los acuses: 0 = ninguno, 1 = acuse en el éxito o fallo final, 2 = solo en caso de fallo. validity_period y schedule_delivery_time usan la forma absoluta YYMMDDhhmmsstnnp o una forma relativa; una cadena vacía significa entrega inmediata y la validez por defecto del SMSC. Mantén validity_period ajustado para los OTP, para que un código retrasado caduque en lugar de llegar caducado.

data_coding — los valores que realmente usas
ValorCodificación
0x00Alfabeto predeterminado del SMSC (normalmente GSM de 7 bits)
0x03Latin-1 (ISO-8859-1)
0x04binario de 8 bits (octeto no especificado)
0x08UCS-2 (UTF-16BE) — Unicode
§05

La respuesta

submit_sm_resp (0x80000004) devuelve command_status y, si tiene éxito, un message_id (C-Octet String, hasta 65 caracteres) que el SMSC asigna al mensaje. Guárdalo: es la clave que cotejas contra el receipted_message_id de la confirmación de entrega. Cuidado con la deriva de formato: algunos SMSC devuelven el identificador en hexadecimal en el envío y en decimal en el DLR, así que normaliza ambos al correlacionar.

Preguntas frecuentes

Preguntas frecuentes

¿Qué TON/NPI uso para un remitente alfanumérico?

Usa source_addr_ton = 5 (Alphanumeric) y source_addr_npi = 0 (Unknown). source_addr contiene entonces hasta 11 caracteres GSM-7. Los remitentes alfanuméricos son solo de visualización y no pueden recibir respuestas.

¿Cómo solicito una confirmación de entrega en submit_sm?

Ajusta registered_delivery = 1 para obtener un acuse en la entrega o el fallo final, o 2 solo en caso de fallo. Solicita acuses solo donde realmente los consumas, ya que los DLR sin leer desperdician rendimiento.

¿Cuál es la longitud máxima de short_message?

El campo short_message admite hasta 254 octetos, y sm_length indica el recuento exacto. Para textos más largos, segmenta con un UDH en varias PDU submit_sm o transporta toda la carga en el TLV message_payload en lugar de en short_message.

¿Puedo fijar a la vez short_message y message_payload?

No. Rellena uno u otro. Los proveedores rechazan un submit_sm que transporta el mensaje tanto en el campo obligatorio short_message como en el TLV message_payload.

¿Cómo envío un mensaje Unicode?

Ajusta data_coding = 0x08 (UCS-2) y codifica el texto como UTF-16 big-endian en short_message. Un único SMS UCS-2 admite 70 caracteres; el texto Unicode más largo se segmenta a 67 caracteres por parte.

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.