BroadNet
SMPPOperações

SMPP submit_sm: todos os campos obrigatórios

Atualizado em 4 min de leituraBaseado em padrões
Resposta direta

O submit_sm (command_id 0x00000004) envia uma mensagem terminada no terminal do ESME para o SMSC. O seu corpo é uma sequência fixa de campos obrigatórios — endereçamento (TON/NPI + endereço), esm_class, protocol_id, priority_flag, agendamento, registered_delivery, data_coding, sm_length e short_message — opcionalmente seguidos de TLVs. O submit_sm_resp devolve o message_id do SMSC.

DiagramaUma sessão SMPP entre a sua plataforma e BroadNet
A sua plataforma (ESME)
BroadNet SMSC
Uma conexão TCP/TLS persistente
  1. bind_transceiverAbrir e autenticar a sessão
  2. bind_transceiver_respSessão aceita
  3. submit_smEnviar uma mensagem
  4. submit_sm_respAceito, ID da mensagem devolvida
  5. deliver_smRelatório de entrega ou mensagem recebida
  6. deliver_sm_respConfirmado
  7. enquire_linkKeepalive em modo ocioso
§01

A ordem completa dos campos obrigatórios

O corpo do submit_sm é uma sequência fixa e ordenada — não há etiquetas de campo, pelo que a ordem e o tamanho são tudo. A tabela lista todos os parâmetros obrigatórios por ordem de transmissão. O short_message pode estar vazio quando o texto é transportado num TLV message_payload; não preencha ambos.

Parâmetros obrigatórios de submit_sm (por ordem de transmissão)
#CampoTipoNotas
1service_typeC-Octet String (6)Categoria de serviço; geralmente vazia
2source_addr_tonInteger (1)Tipo de número do remetente
3source_addr_npiInteger (1)Plano de numeração do remetente
4source_addrC-Octet String (21)Endereço do remetente / ID alfanumérico
5dest_addr_tonInteger (1)Tipo de número do destinatário
6dest_addr_npiInteger (1)Plano de numeração do destinatário
7destination_addrC-Octet String (21)MSISDN do destinatário
8esm_classInteger (1)Modo de mensagem + tipo + flag UDHI
9protocol_idInteger (1)GSM TP-PID; geralmente 0
10priority_flagInteger (1)0 (normal) – 3 (máximo)
11schedule_delivery_timeC-Octet String (1|17)Vazio = imediato
12validity_periodC-Octet String (1|17)Vazio = padrão SMSC
13registered_deliveryInteger (1)Solicitar relatório de entrega
14replace_if_present_flagInteger (1)0 = não, 1 = substituir
15data_codingInteger (1)Codificação / DCS
16sm_default_msg_idInteger (1)ID da mensagem predefinida; geralmente 0
17sm_lengthInteger (1)Comprimento de short_message (0–254)
18short_messageOctet String (0–254)O payload da mensagem
§02

Endereçamento: TON e NPI

Cada um de source_addr e destination_addr transporta um Type of Number (TON) e um Numbering Plan Indicator (NPI). Para um MSISDN internacional use TON 1 (International) com NPI 1 (ISDN/E.164). Para um remetente alfanumérico use TON 5 (Alphanumeric) — o source_addr contém então até 11 caracteres GSM-7. Errar o TON/NPI é uma das principais causas de tráfego não entregue ou mal encaminhado.

Valores comuns de TON e NPI
TONSignificadoNPISignificado
0Desconhecido0Desconhecido
1Internacional1ISDN (E.163/E.164)
2Nacional3Dados (X.121)
3Específico da rede4Telex (F.69)
4Número do assinante6Land Mobile (E.212)
5Alfanumérico8Nacional
6Abreviado9Privado
§03

esm_class

O esm_class é um campo de bits que define o modo de mensagem, o tipo de mensagem e funcionalidades específicas do GSM. O bit mais importante para os remetentes é o UDHI (0x40): ative-o quando o short_message começa com um User Data Header, por exemplo um cabeçalho de concatenação. O bit 0x80 pede o reply path do GSM.

Significado dos bits de esm_class (selecionados)
BitsCampoValor → significado
1–0Modo de mensagens0 padrão · 1 datagrama · 2 encaminhamento · 3 armazenamento e encaminhamento
5–2Tipo de mensagem0 padrão · 0x04 relatório de entrega · 0x08 ack de entrega · 0x10 ack do utilizador
6UDHI0x40 = short_message begins with a UDH
7Caminho de resposta0x80 = set GSM reply path
§04

data_coding, registered_delivery e validade

O data_coding seleciona a codificação de texto: 0x00 = predefinição do SMSC (tipicamente GSM 7-bit), 0x04 = binário de 8 bits, 0x08 = UCS-2 para Unicode. Os dois bits mais baixos de registered_delivery controlam os recibos: 0 = nenhum, 1 = recibo no sucesso ou falha final, 2 = apenas em falha. O validity_period e o schedule_delivery_time usam a forma absoluta YYMMDDhhmmsstnnp ou uma forma relativa; uma string vazia significa entrega imediata e a validade predefinida do SMSC. Mantenha o validity_period curto para OTPs, para que um código atrasado expire em vez de chegar obsoleto.

data_coding — os valores que realmente usa
ValorCodificação
0x00Alfabeto padrão do SMSC (geralmente GSM de 7 bits)
0x03Latin-1 (ISO-8859-1)
0x04binário de 8 bits (octeto não especificado)
0x08UCS-2 (UTF-16BE) — Unicode
§05

A resposta

O submit_sm_resp (0x80000004) devolve o command_status e, em caso de sucesso, um message_id (C-Octet String, até 65 caracteres) que o SMSC atribui à mensagem. Guarde-o: é a chave que compara com o receipted_message_id no relatório de entrega. Atenção à variação de formato — alguns SMSCs devolvem o id em hexadecimal no submit e em decimal no DLR, por isso normalize ambos ao correlacionar.

Perguntas frequentes

Perguntas frequentes

Que TON/NPI uso para um remetente alfanumérico?

Use source_addr_ton = 5 (Alphanumeric) e source_addr_npi = 0 (Unknown). O source_addr contém então até 11 caracteres GSM-7. Os remetentes alfanuméricos são apenas para exibição e não podem receber respostas.

Como peço um relatório de entrega no submit_sm?

Defina registered_delivery = 1 para obter um recibo na entrega final ou falha, ou 2 apenas em falha. Peça recibos apenas onde efetivamente os consome, pois DLRs não lidos desperdiçam débito.

Qual é o comprimento máximo de short_message?

O campo short_message contém até 254 octetos, sendo sm_length a contagem exata. Para texto mais longo, ou segmente com um UDH em vários PDUs submit_sm ou transporte todo o conteúdo no TLV message_payload em vez do short_message.

Posso definir short_message e message_payload em simultâneo?

Não. Preencha um ou outro. Os fornecedores rejeitam um submit_sm que transporte a mensagem tanto no campo obrigatório short_message como no TLV message_payload.

Como envio uma mensagem Unicode?

Defina data_coding = 0x08 (UCS-2) e codifique o texto como UTF-16 big-endian no short_message. Um único SMS UCS-2 contém 70 caracteres; texto Unicode mais longo é segmentado a 67 caracteres por parte.

Referências

Especificações de origem

Os padrões publicados nos quais esta página se baseia. Abre num novo separador.

BNMantido pela equipa de engenharia BroadNet·Mensagens de nível de operadora desde 2003
Coloque-o no fio.

Construa com uma vinculação SMPP real e uma API REST.

Solicite acesso de teste com chaves de teste reais: envie primeiro para o seu próprio número verificado e, em seguida, passe para o ambiente de produção em mais de 200 países assim que a sua identidade de remetente e rotas forem aprovadas.