BroadNet
SMPPSesión

Operaciones bind y estados de sesión en SMPP

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

Un bind autentica y abre una sesión SMPP. bind_transmitter solo permite enviar, bind_receiver solo recibir y bind_transceiver ambos sobre una única conexión. El ESME aporta system_id, password y system_type; el SMSC responde con un bind_resp. Un bind correcto lleva la sesión a un estado enlazado hasta el unbind o la desconexión.

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

Los tres tipos de bind

El tipo de bind fija la dirección del tráfico para la sesión. Elige transmitter para solo salida (envío MT), receiver para solo entrada (MO y confirmaciones de entrega) o transceiver para transportar ambas direcciones por una sola conexión: la opción habitual en v3.4, ya que reduce a la mitad el número de conexiones que hay que mantener.

Operaciones bind
Operacióncommand_idLa sesión puede
bind_transmitter0x00000002Enviar mensajes (MT) solamente
bind_receiver0x00000001Solo recibir mensajes/confirmaciones (MO + DLR)
bind_transceiver0x00000009Enviar y recibir en una misma conexión
§02

Campos de la solicitud bind

El cuerpo del bind transporta las credenciales y las capacidades declaradas del ESME. system_id y password autentican la cuenta; system_type categoriza opcionalmente el ESME; interface_version declara la versión de SMPP; addr_ton, addr_npi y address_range permiten al SMSC enrutar hacia este bind el tráfico originado en el móvil. Un address_range mal ajustado bloquea de forma silenciosa el enrutamiento de MO/DLR en un bind receiver o transceiver, un fallo de integración habitual.

Cuerpo de bind_transmitter/receiver/transceiver
CampoTipoMáx.Notas
system_idC-Octet String16Identificador de cuenta/inicio de sesión
passwordC-Octet String9Contraseña de la cuenta
system_typeC-Octet String13Categoría ESME opcional (a menudo vacía)
interface_versionInteger10x34 = v3.4, 0x50 = v5.0
addr_tonInteger1Tipo de número para enrutar el MO a este ESME
addr_npiInteger1Indicador del plan de numeración
address_rangeC-Octet String41Dirección/regex que el SMSC enruta a este bind
§03

Respuesta al bind

El SMSC responde con el bind_resp correspondiente (por ejemplo bind_transceiver_resp, 0x80000009). command_status es ESME_ROK si tiene éxito, o un error como ESME_RINVPASWD (contraseña no válida), ESME_RINVSYSID (identificador de sistema no válido) o ESME_RBINDFAIL. El cuerpo devuelve el system_id del SMSC y, en v3.4+, un TLV opcional sc_interface_version que indica al ESME qué versión admite realmente el SMSC.

Intercambio de bind transceiver correctotext
ESME → SMSC   bind_transceiver   seq=1  system_id=acme  password=****
SMSC → ESME   bind_transceiver_resp seq=1  status=ESME_ROK  system_id=smsc01
  (session now BOUND_TRX — submit_sm and deliver_sm may flow)
§04

Estados de sesión

Una sesión SMPP es una pequeña máquina de estados. Comienza en OPEN tras la conexión TCP, pasa a un estado BOUND con un bind correcto y vuelve a UNBOUND y luego CLOSED con el unbind o la desconexión. Enviar una operación ilegal para el estado actual devuelve ESME_RINVBNDSTS (estado de bind incorrecto). Hacer bind dos veces en una conexión devuelve ESME_RALYBND (ya enlazado).

Estados de sesión SMPP
EstadoSignificado
OPENConectado por TCP, aún sin bind
BOUND_TXVinculado como transmisor: puede enviar
BOUND_RXVinculado como receptor: puede recibir
BOUND_TRXVinculado como transceptor: puede enviar y recibir
UNBOUNDUnbind emitido, pendiente de cierre
CLOSEDConexión cerrada
§05

Unbind y outbind

unbind (0x00000006) solicita un cierre ordenado de la sesión; el otro extremo responde unbind_resp y ambos cierran la conexión TCP. outbind (0x0000000B) es el caso inverso: el SMSC pide a un ESME en escucha que inicie un bind receiver, se usa cuando el SMSC necesita entregar tráfico MO a un ESME que normalmente espera conexiones.

Preguntas frecuentes

Preguntas frecuentes

¿Debo usar pares transmitter/receiver o un transceiver?

Prefiere un transceiver cuando el proveedor lo permita: una sola conexión transporta envío y recepción, reduce a la mitad el número de conexiones y simplifica la correlación de las confirmaciones de entrega. Usa bind transmitter y receiver separados solo cuando el proveedor exija separación por dirección.

¿Para qué sirve system_type?

system_type identifica opcionalmente la categoría del ESME (por ejemplo, una clase de aplicación concreta). Muchos proveedores lo dejan vacío. Ajústalo solo al valor exacto que provisione el proveedor, ya que algunos enrutan en función de él.

¿Por qué mi bind receiver no recibe confirmaciones de entrega?

La causa más común es un desajuste de address_range / addr_ton / addr_npi: el SMSC enruta el tráfico MO y DLR al bind cuyo address_range coincide, así que un valor erróneo los retiene de forma silenciosa. Confirma los valores exactos provisionados con el proveedor.

¿Qué significa ESME_RALYBND?

ESME_RALYBND (0x00000005) significa que el ESME ya está en estado enlazado e intentó hacer bind de nuevo en la misma sesión. Haz bind exactamente una vez por conexión; si viste un bind fallido, abre una conexión nueva en lugar de volver a enlazar la antigua.

¿Cuántos bind simultáneos puedo abrir?

Es un límite comercial fijado por tu proveedor, no por el protocolo. Abrir más bind de los provisionados es una causa frecuente de limitación o suspensión de la cuenta: acuerda por escrito el número de bind y el TPS por bind antes de escalar.

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.