Um bind autentica e abre uma sessão SMPP. O bind_transmitter permite apenas enviar, o bind_receiver apenas receber e o bind_transceiver ambos numa só ligação. O ESME fornece system_id, password e system_type; o SMSC responde com um bind_resp. Um bind bem-sucedido move a sessão para um estado bound até ao unbind ou à desligação.
bind_transceiverAbrir e autenticar a sessãobind_transceiver_respSessão aceitasubmit_smEnviar uma mensagemsubmit_sm_respAceito, ID da mensagem devolvidadeliver_smRelatório de entrega ou mensagem recebidadeliver_sm_respConfirmadoenquire_linkKeepalive em modo ocioso
Os três tipos de bind
O tipo de bind fixa a direção do tráfego para a sessão. Escolha transmitter para apenas saída (submit MT), receiver para apenas entrada (MO e relatórios de entrega) ou transceiver para transportar ambas as direções numa única ligação — a escolha habitual na v3.4, pois reduz para metade o número de ligações que tem de manter.
| Operação | command_id | A sessão pode |
|---|---|---|
| bind_transmitter | 0x00000002 | Somente enviar mensagens (MT) |
| bind_receiver | 0x00000001 | Somente receber mensagens / relatórios de entrega (MO + DLR) |
| bind_transceiver | 0x00000009 | Enviar e receber numa única conexão |
Campos do pedido de bind
O corpo do bind transporta as credenciais e as capacidades declaradas do ESME. O system_id e a password autenticam a conta; o system_type categoriza opcionalmente o ESME; o interface_version declara a versão SMPP; addr_ton, addr_npi e address_range permitem ao SMSC encaminhar tráfego originado no terminal para este bind. Um address_range incorreto bloqueia silenciosamente o encaminhamento de MO/DLR num bind receiver ou transceiver — um erro de integração comum.
| Campo | Tipo | Máx. | Notas |
|---|---|---|---|
| system_id | C-Octet String | 16 | Identificador de conta/login |
| password | C-Octet String | 9 | Palavra-passe da conta |
| system_type | C-Octet String | 13 | Categoria ESME opcional (geralmente vazia) |
| interface_version | Integer | 1 | 0x34 = v3.4, 0x50 = v5.0 |
| addr_ton | Integer | 1 | Tipo de número para encaminhar MO para este ESME |
| addr_npi | Integer | 1 | Indicador do plano de numeração |
| address_range | C-Octet String | 41 | Endereço/regex que o SMSC encaminha para este bind |
Resposta de bind
O SMSC responde com o bind_resp correspondente (por exemplo bind_transceiver_resp, 0x80000009). O command_status é ESME_ROK em caso de sucesso ou um erro como ESME_RINVPASWD (password inválida), ESME_RINVSYSID (ID de sistema inválido) ou ESME_RBINDFAIL. O corpo devolve o system_id do SMSC e, na v3.4+, um TLV opcional sc_interface_version que indica ao ESME qual a versão que o SMSC realmente suporta.
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)Estados de sessão
Uma sessão SMPP é uma pequena máquina de estados. Começa OPEN após a ligação TCP, passa a um estado BOUND num bind bem-sucedido e regressa a UNBOUND e depois a CLOSED com o unbind ou a desligação. Enviar uma operação ilegal para o estado atual devolve ESME_RINVBNDSTS (estado de bind incorreto). Fazer bind duas vezes numa ligação devolve ESME_RALYBND (já bound).
| Estado | Significado |
|---|---|
| OPEN | TCP conectado, bind ainda não realizado |
| BOUND_TX | Vinculado como transmitter — pode enviar |
| BOUND_RX | Vinculado como receiver — pode receber |
| BOUND_TRX | Vinculado como transceiver — pode enviar e receber |
| UNBOUND | Unbind emitido, aguardando encerramento |
| CLOSED | Conexão desfeita |
Unbind e outbind
O unbind (0x00000006) pede um fecho gracioso da sessão; o par responde unbind_resp e ambos os lados fecham a ligação TCP. O outbind (0x0000000B) é o caso na direção inversa: o SMSC pede a um ESME em escuta que inicie um bind receiver, usado quando o SMSC precisa de entregar tráfego MO a um ESME que normalmente aguarda ligações.
Perguntas frequentes
Devo usar pares transmitter/receiver ou um transceiver?
Prefira um transceiver quando o fornecedor o permitir — uma ligação transporta submit e receção, reduzindo para metade a contagem de ligações e simplificando a correlação dos relatórios de entrega. Use binds transmitter e receiver separados apenas quando o fornecedor exigir separação por direção.
Para que serve o system_type?
O system_type identifica opcionalmente a categoria do ESME (por exemplo uma classe de aplicação específica). Muitos fornecedores deixam-no vazio. Defina-o apenas com o valor exato que o fornecedor aprovisionar, pois alguns encaminham com base nele.
Porque é que o meu bind receiver não recebe relatórios de entrega?
A causa mais comum é uma incompatibilidade de address_range / addr_ton / addr_npi: o SMSC encaminha tráfego MO e DLR para o bind cujo address_range corresponde, pelo que um valor errado retém-nos silenciosamente. Confirme os valores exatos aprovisionados com o fornecedor.
O que significa ESME_RALYBND?
ESME_RALYBND (0x00000005) significa que o ESME já está num estado bound e tentou fazer bind novamente na mesma sessão. Faça bind exatamente uma vez por ligação; se detetou um bind falhado, abra uma nova ligação em vez de refazer o bind da anterior.
Quantos binds concorrentes posso abrir?
Isso é um limite comercial definido pelo seu fornecedor, não pelo protocolo. Abrir mais binds do que os aprovisionados é uma causa frequente de limitação de taxa ou suspensão de conta — acorde por escrito a contagem de binds e o TPS por bind antes de escalar.
Especificações de origem
Os padrões publicados nos quais esta página se baseia. Abre num novo separador.