Olá! Embora os mensageiros e redes sociais estejam substituindo cada vez mais as formas tradicionais de comunicação, isso não diminui a popularidade das mensagens SMS. A verificação em um site popular ou a notificação sobre uma transação ainda são feitas e continuarão a ser. Já se perguntou como isso tudo funciona? Muitas vezes, para o envio de mensagens em massa, utiliza-se o protocolo SMPP, que é o que iremos discutir a seguir.
Já houve artigos sobre SMPP no Habré, ,, mas eles não tinham como objetivo a descrição do próprio protocolo. Sem dúvida, você pode começar diretamente pela fonte original — , mas acho que seria bom ter um breve resumo também. Vou explicar usando o exemplo da versão 3.4. Agradeço sua crítica objetiva.
O protocolo SMPP é um protocolo de mensagens peer-to-peer. Isso significa que cada par/hub servidor é igual. No caso mais simples, o esquema de troca de mensagens SMS é o seguinte:

No entanto, se o operador nacional não tiver uma rota para uma região remota, ele pede ajuda a um intermediário — um hub SMS. Às vezes, para enviar uma única SMS, é necessário estabelecer uma cadeia entre vários países ou até mesmo continentes.
Sobre o protocolo
O SMPP é um protocolo de camada de aplicação que se baseia na troca de PDUs e é transmitido sobre sessões TCP/IP ou X.25 para o envio de mensagens SMS e USSD. Normalmente, o SMPP é usado em modo de conexão permanente, o que ajuda a economizar tempo. O SMPP utiliza o modelo de comunicação cliente-servidor.
Modo de comunicação

A troca de mensagens entre o remetente e o centro de SMS através do SMPP pode ocorrer nos seguintes modos:
Transmitter (transmissor) — envio de mensagens em uma única direção, sequencialmente
Receiver (receptor) — apenas recebimento de mensagens do centro de SMS.
Transreceiver (transceptor) — troca de mensagens entre o centro de SMS e o usuário
Estrutura

Comprimento da mensagem
Uma mensagem SMS pode conter 70 caracteres ao usar o alfabeto cirílico e não mais de 157 caracteres latinos + 3 UDH. Se você enviar um SMS com um número maior de caracteres, ele será dividido em vários segmentos e reunido no dispositivo receptor. No caso da segmentação, o número de caracteres é reduzido devido aos cabeçalhos das mensagens que indicam a parte da mensagem. Portanto, ao enviar uma grande mensagem SMS, ela conterá no máximo 153 caracteres latinos ou 67 caracteres não usuais.
Data Coding Scheme
No entanto, para transmitir uma mensagem, os caracteres precisam ser codificados. No protocolo SMPP, a codificação é responsabilidade de um campo especial — Data Coding Scheme, ou DCS. Este campo indica como as mensagens devem ser reconhecidas. Além disso, o campo DCS inclui:
- o conjunto de caracteres que define a codificação;
- a classe da mensagem;
- uma solicitação para exclusão automática após a leitura;
- uma indicação de compressão da mensagem;
- o idioma da mensagem de broadcast;
Alfabeto padrão de 7 bits (GSM 03.38). Foi desenvolvido para o sistema de mensagens no GSM. Essa codificação é adequada para o inglês e vários idiomas latinos. Cada caractere consiste em 7 bits e é codificado em um octeto.
UTF-16 (em GSM UCS2). Para incluir os caracteres ausentes no alfabeto de 7 bits, foi desenvolvida a codificação UTF-16, que adiciona caracteres adicionais (incluindo cirílico) à custa da redução do tamanho da mensagem de 160 para 70. Este tipo de codificação quase replica completamente o Unicode.
Dados de 8 bits definidos pelo usuário. Isso inclui KOI8-R e Windows-1251. Embora essa solução pareça mais econômica em comparação com UTF-16, surge a questão da compatibilidade em diferentes dispositivos. Nesse caso, ambos os dispositivos devem estar configurados previamente.
Classe da mensagem
- Class0, ou flash, mensagem que é armazenada na memória do telefone a critério do usuário;
- Class1, ou aquelas que são armazenadas na memória do telefone;
- Class1, ou aquelas que são armazenadas na memória do telefone;
- Class2 deve garantir que a mensagem seja salva na memória do terminal móvel, caso contrário, deve enviar uma notificação ao centro de SMS sobre a impossibilidade de salvar;
- Class3 — nesse caso, o telefone deve emitir uma notificação de que a mensagem pode ser salva, independentemente da quantidade de memória no dispositivo. Esse tipo de mensagem implica que a mensagem chegou ao destinatário;
Tipo de mensagem
Mensagem silenciosa (SMS0) Tipo de SMS sem conteúdo. Esse SMS chega sem notificação e não é exibido na tela do dispositivo.
PDU
Cada operação PDU é pareada e consiste em uma solicitação e uma resposta. Por exemplo: um comando que informa sobre o estabelecimento de uma conexão (bind_transmitter / bind_transmitter_resp), ou sobre a entrega da mensagem (deliver_sm / deliver_sm_resp)

Cada pacote PDU consiste em duas partes — cabeçalho (header) e corpo (body). A estrutura do cabeçalho é a mesma para qualquer pacote PDU: command length é o comprimento do pacote, id é o nome do pacote, e o comando status indica se a mensagem foi enviada com sucesso ou com erro.
Parâmetros adicionais TLV
TLV (Tag Length Value), ou campos adicionais. Esses parâmetros são usados para expandir as funções do protocolo e não são obrigatórios. Este campo é especificado no final do campo PDU. Como exemplo, utilizando o TLV dest_addr_np_information pode-se organizar a transmissão de informações sobre a portabilidade do número.
Ton e Npi
TON (Type of Number) é um parâmetro que informa ao SMSC sobre o formato de endereçamento e tipo de rede.
NPI (Numbering Plan Identification) é um parâmetro que indica o plano de numeração.

Endereço de origem da mensagem, ou nome alfa
As mensagens enviadas para o telefone podem ser de dois tipos: digitais e alfanuméricas. As digitais podem ser longas (semelhantes a um número de telefone) e curtas. Às vezes, os operadores têm restrições sobre o envio de nomes neutros, como Infosms, Alert, etc. Às vezes, os operadores não permitem o tráfego se o nome não estiver registrado em sua rede. No entanto, isso é mais uma característica do operador.
Estágios de envio
![]()
SMS-SUBMIT — é o envio de uma mensagem MO FSM (mensagem curta do terminal móvel)
SMS-SUBMIT REPORT — confirmação de que a mensagem foi enviada ao SMSC
SRI SM (SendRoutingInfo) — o SMSC recebe informações do HLR sobre a localização do MSC / VLR do assinante
SRI SM RESP — resposta do HLR sobre a localização do assinante
MT-FSM — após receber a localização, a mensagem é enviada usando a operação ‘Forward Short Message’
MT-FSM ACK — resposta do SMSC informando que a mensagem foi enviada
SMS-STATUS REPORT — o SMSC envia o status da entrega da mensagem.
O status de entrega da mensagem
SMS-STATUS REPORT pode assumir vários valores:
DELIVRD mensagem entregue com sucesso
REJECTD — mensagem rejeitada pelo SMSC
EXPIRED — mensagem removida da fila de envio após o término do TTL (tempo de vida da mensagem)
UNDELIV — outros casos de não entrega
UNKNOWN- não houve resposta sobre o envio.
Erros de transmissão
Às vezes, existem razões pelas quais as mensagens SMS não são entregues ao assinante. As causas dessas razões resultam em erros. Os erros são retornados nos PDUs_sms_resp. Todos os erros podem ser divididos em temporários (Temporary) e permanentes (Permanent).
Como exemplo, erros temporários incluem o caso em que o assinante está ausente ou fora da rede, enquanto erros permanentes indicam que o assinante não existe. Dependendo dos erros que ocorrem, é formulada uma política de reenvio dessas mensagens.
Por exemplo, se o assinante estava em uma chamada e recebeu o erro MT handset is busy, a mensagem pode ser reenviada após alguns minutos; no entanto, se o serviço de recebimento de mensagens estiver bloqueado para o assinante, o reenvio não fará sentido. A lista de erros pode ser encontrada nas páginas do SMSC, por exemplo, como .
Fonte: habr.com
