# Operações de bind SMPP e estados de sessão

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

- URL canônico: https://www.broadnet.me/pt/reference/smpp-bind-operations
- Idioma: pt
- Última atualização: 2026-07-18
- Editor: BroadNet (https://www.broadnet.me)

Como uma sessão SMPP se autentica: bind_transmitter, bind_receiver e bind_transceiver, os campos system_id/password/system_type, interface_version, estados de sessão e unbind.

## 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ções de bind*

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

*Corpo de bind_transmitter/receiver/transceiver*

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

*Troca de bind transceiver bem-sucedida*

```text
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).

*Estados de sessão SMPP*

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

## Fontes

- [SMPP v3.4 specification — §4.1 bind operations](https://smpp.org/SMPP_v3_4_Issue1_2.pdf)
- [SMPP v5.0 specification](https://smpp.org/SMPP_v5.pdf)

## Relacionados

- [Referência submit_sm SMPP](https://www.broadnet.me/pt/reference/smpp-submit-sm)
- [enquire_link SMPP e throttling](https://www.broadnet.me/pt/reference/smpp-enquire-link-throttling)
- [Lista de verificação (guia) para integração SMPP](https://www.broadnet.me/pt/guides/smpp-integration-checklist)
- [Gateway SMSC (operadoras)](https://www.broadnet.me/pt/operators/smsc-gateway)
- [Códigos de erro command_status SMPP](https://www.broadnet.me/pt/reference/smpp-command-status-errors)
