Os conteúdos de SMS acima de uma mensagem são divididos em segmentos e recompostos no terminal usando um User Data Header (UDH). O UDH de concatenação padrão de 6 bytes transporta um número de referência, a contagem total de segmentos e a sequência deste segmento. Consome conteúdo, cortando a capacidade para 153 caracteres GSM-7 ou 67 UCS-2 por segmento.
Porque existe a concatenação
Um SMS único está limitado a 140 octetos de dados de utilizador. Texto mais longo é enviado como vários SMS que o terminal recetor remonta numa só mensagem. Isto faz-se com um User Data Header (UDH) colocado no início dos dados de utilizador de cada segmento, junto com uma flag (o bit UDHI) que indica ao terminal que existe um cabeçalho. A rede transporta cada segmento como um SMS independente; só o terminal os recombina.
O UDH de concatenação de 6 bytes
O cabeçalho de concatenação mais comum tem 6 octetos: um comprimento de cabeçalho, um identificador de elemento de informação para concatenação de 8 bits, o seu comprimento, e depois os três valores que conduzem a remontagem — um número de referência partilhado por todos os segmentos de uma mensagem, o número total de segmentos e a posição deste segmento. Existe uma variante com referência de 16 bits (IEI 0x08) que tem 7 octetos.
| Octeto | Campo | Valor / significado |
|---|---|---|
| 1 | UDHL | 0x05 — comprimento do cabeçalho seguinte |
| 2 | IEI | 0x00 — mensagem curta concatenada, referência de 8 bits |
| 3 | IEDL | 0x03 — comprimento deste elemento de informação |
| 4 | Referência | Partilhado em todos os segmentos da mensagem |
| 5 | Total de segmentos | Quantas partes no total |
| 6 | Número de sequência | Posição deste segmento (1..total) |
Capacidade por segmento
O UDH vive dentro do conteúdo de 140 octetos, pelo que reduz o texto que cada segmento pode transportar. Para GSM-7, o UDH de 6 octetos tem de ser alinhado a septeto, custando efetivamente 7 septetos e deixando 153 caracteres por segmento. Para UCS-2, os 6 octetos deixam 134 octetos — 67 caracteres. Para dados de 8 bits, restam 134 bytes. É por isso que uma mensagem GSM-7 de 161 caracteres se torna dois segmentos de até 153, não 160 + 1.
| Codificação | SMS único | Por segmento (com UDH) |
|---|---|---|
| GSM-7 | 160 | 153 |
| UCS-2 | 70 | 67 |
| 8-bit | 140 bytes | 134 bytes |
Sequenciamento e remontagem
Os segmentos de uma mensagem lógica partilham um número de referência; o terminal agrupa por referência e ordena por número de sequência para reconstruir o texto. Os segmentos podem chegar fora de ordem ou atrasados, pelo que uma parte em falta deixa a mensagem incompleta até aparecer (ou expirar). No SMPP pode concatenar quer com os bytes de UDH no short_message (ativando o bit UDHI do esm_class) quer com os TLVs sar_* — escolha um método por rota e mantenha-o consistente.
Perguntas frequentes
Quantos caracteres por segmento num SMS concatenado?
153 para GSM-7 e 67 para UCS-2, porque o User Data Header de 6 bytes consome parte do conteúdo de 140 octetos. Os segmentos de dados de 8 bits simples transportam 134 bytes cada.
O que é o UDH no SMS?
O User Data Header é uma pequena estrutura no início dos dados de utilizador de um segmento que transporta informação de controlo — para concatenação, um número de referência, a contagem total de segmentos e a sequência deste segmento. O bit UDHI sinaliza a sua presença.
Porque é que uma mensagem de 161 caracteres custa dois segmentos de 153?
Porque assim que uma mensagem precisa de concatenação, cada segmento transporta um UDH que reduz a capacidade para 153 caracteres GSM-7. Assim, 161 caracteres dividem-se em dois segmentos (até 306 caracteres no total), cada um cobrado como um SMS separado.
Qual é a diferença entre concatenação por UDH e por SAR?
Ambas dividem mensagens longas da mesma forma. O UDH incorpora os bytes do cabeçalho no corpo da mensagem e ativa o bit UDHI do esm_class; o SAR transporta a referência, o total e a sequência em TLVs sar_* do SMPP, mantendo o corpo limpo. Use o que a sua rota suportar.
Os segmentos concatenados podem chegar fora de ordem?
Sim. Cada segmento viaja como um SMS independente, pelo que podem chegar fora de ordem ou atrasados. O terminal remonta por número de referência e sequência; um segmento em falta deixa a mensagem incompleta até chegar.
Especificações de origem
Os padrões publicados nos quais esta página se baseia. Abre num novo separador.