Alterações na integração HTTP e SMPP para SMS A2P: como validar a compatibilidade antes da implantação
Um guia para definir contratos de integração e testes de regressão em HTTP e SMPP, comparar alterações com base em evidências e distinguir a aceitação técnica da entrega efetiva ao telemóvel.

Que alterações justificam uma regressão e o que fica fora do seu âmbito
Uma regressão de integração verifica se uma alteração modificou o contrato técnico entre uma aplicação e a sua interface de SMS. É conveniente executá-la quando se altera a aplicação cliente, o conector, a configuração de transporte ou a forma como as respostas e os estados são interpretados. HTTP e SMPP são interfaces distintas: um teste bem-sucedido numa delas não valida automaticamente a outra.
O âmbito deve ser explícito. Uma resposta HTTP satisfatória confirma o resultado do pedido segundo a semântica HTTP, não a entrega do SMS ao dispositivo. Do mesmo modo, estabelecer uma sessão SMPP ou receber uma resposta a uma operação de envio não demonstra, por si só, que o destinatário recebeu a mensagem. A entrega e o significado dos estados posteriores dependem das evidências disponíveis e da documentação aplicável.
- Inclui: compatibilidade dos pedidos, campos, codificação acordada, interpretação das respostas, correlação de identificadores e tratamento de desconexões.
- Trata separadamente: aceitação técnica, evolução posterior da mensagem e receção comprovada num terminal.
- Não uses um teste de integração como substituto de uma avaliação da rota, da cobertura ou da qualidade da entrega.

Contrato técnico: campos, codificação, remetente, referências e semântica
Antes de escrever testes, converte a documentação atual da API ou do fornecedor SMPP num contrato verificável. A documentação genérica não permite assumir que campos são obrigatórios, como o remetente é expresso, que codificação é aceite, que formato tem um identificador ou que estados são devolvidos. Regista cada regra e a respetiva fonte, e confirma qualquer ponto ambíguo com a especificação ou o fornecedor correspondente.
Para cada campo, indica se é obrigatório ou opcional, o respetivo formato, os limites documentados, o valor predefinido, se existir, e o comportamento esperado quando está em falta ou é inválido. Quanto à codificação, define os casos de texto permitidos pelo contrato e como verificarás que o conteúdo recebido pela interface mantém o significado esperado. Não pressuponhas que dois conectores interpretam da mesma forma os caracteres, os remetentes ou as referências.
Define também a semântica das respostas: o que significa a aceitação ou a rejeição nessa interface, que identificador é devolvido e como se correlaciona com o estado posterior. Em SMPP, utiliza a especificação da versão acordada e a implementação contratada para interpretar operações, respostas, campos e estados; não infiras detalhes de uma integração com base na documentação de outra.
- Mantém uma tabela por interface com o campo, a regra documentada, a validação e o resultado esperado.
- Separa o identificador do pedido do identificador da mensagem, caso o contrato os distinga; documenta o respetivo âmbito e utilização.
- Guarda exemplos representativos e seguros, sem dados pessoais reais nem credenciais, para repetir os testes.

Casos de teste HTTP e SMPP: aceitação, rejeição e recuperação
Cria um conjunto de testes por interface. Para HTTP, verifica pedidos válidos e dados que o contrato define como inválidos; confirma que a aplicação interpreta corretamente a resposta e preserva a correlação necessária. Os códigos de estado HTTP descrevem o resultado da interação HTTP de acordo com a RFC 9110, mas o seu significado para o envio de SMS deve ser obtido no contrato da API.
Para SMPP, testa separadamente a ligação e as operações de envio definidas para a versão e o fornecedor utilizados. Verifica a resposta do protocolo e o tratamento das rejeições documentadas. A especificação SMPP v3.4 serve de referência para as operações e respostas dessa versão, mas os detalhes concretos que deves esperar dependem do contrato aplicável.
Acrescenta cenários de timeout, desconexão e recuperação, mas não imponhas um comportamento universal. Define primeiro o que o contrato estabelece sobre tentativas repetidas, pedidos cujo resultado é desconhecido e reconexão. Se não existir uma regra documentada, regista o caso como uma decisão pendente, em vez de transformar uma suposição num critério de aprovação.
- Testa a aceitação técnica com dados de teste autorizados e um destino controlado.
- Inclui rejeições esperadas e confirma que o sistema não as regista como aceitação.
- Simula timeouts e desconexões num ambiente controlado; verifica o comportamento acordado e guarda as evidências.
- Não voltes a enviar automaticamente uma mensagem cujo resultado seja incerto, salvo se o contrato e a conceção da aplicação definirem como evitar consequências indesejadas.
Callbacks e estados correlacionados: o que demonstra um DLR
Se a integração utilizar callbacks ou notificações de estado, testa todo o percurso entre a aceitação inicial e o evento posterior definido pelo contrato. Verifica se a notificação pode ser associada ao envio correto através dos identificadores documentados e se a aplicação distingue entre ausência de evento, evento recebido e estado final comunicado.
Não pressuponhas que um callback tem os mesmos campos, ordem ou semântica em todos os fornecedores. Compara o formato, a autenticidade, a repetição e o tratamento de eventos tardios com a documentação da integração. Se algum aspeto não estiver especificado, delimita-o como uma incerteza e acorda como será observado operacionalmente.
Um DLR comunica um estado dentro do sistema que o emite e transmite; por si só, não equivale necessariamente a uma confirmação independente de receção no telemóvel. Nas evidências da regressão, identifica claramente o que observaste: resposta da API, resposta SMPP, callback ou verificação independente do terminal, se esta existir.
- Confirma que cada evento é correlacionado com a referência correta de acordo com o contrato.
- Regista a origem e o momento de observação de cada estado.
- Distingue os estados comunicados pela rota da receção verificada de forma independente.
Comparar antes e depois com critérios e evidências
Executa o mesmo conjunto de casos na versão anterior e na nova, em condições comparáveis. Compara os resultados por interface e cenário, não apenas a percentagem global de testes aprovados. Uma diferença pode ser esperada se o contrato tiver sido alterado deliberadamente; nesse caso, deve estar documentada, aprovada e refletida nos testes antes da implantação.
Guarda a versão da aplicação e do conector, a configuração relevante não secreta, o caso executado, a resposta observada e o resultado esperado. Armazena os dados sensíveis de acordo com as políticas aplicáveis e evita incluir credenciais ou informações pessoais desnecessárias em registos partilhados.
Define os critérios de aprovação antes da execução. No mínimo, os casos obrigatórios do contrato devem produzir o resultado esperado e as diferenças não explicadas devem ser investigadas. Não estabeleças limites de latência, disponibilidade ou entrega sem uma especificação aplicável e uma medição adequada.
- Classifica cada diferença como alteração prevista, regressão confirmada ou resultado ainda não explicado.
- Compara os códigos e os corpos HTTP segundo a API; compara as respostas SMPP segundo a versão e a implementação acordadas.
- Anexa evidências suficientes para repetir o caso sem expor segredos.
Implantação gradual e reversão sem misturar testes com produção
Testa primeiro num ambiente e com destinos autorizados para ensaios, sempre que estejam disponíveis e documentados. Mantém as credenciais, a configuração e as evidências de teste separadas das de produção. Se não existir um ambiente de teste adequado, limita qualquer validação ao que foi aprovado para produção e às regras de consentimento e conformidade aplicáveis.
Antes da implantação, acorda quem decide se a alteração avança ou é interrompida, que casos têm de ser aprovados e que sinais exigem investigação ou reversão. A reversão deve corresponder a um procedimento testado para a aplicação e o conector; não é possível estabelecer uma regra universal de infraestrutura sem conhecer o sistema.
Durante qualquer implantação gradual, identifica claramente que versão gera cada pedido e conserva observabilidade suficiente para distinguir erros de integração dos resultados posteriores da entrega. Não interpretes uma resposta técnica satisfatória como prova da qualidade da rota.
- Confirma que existe uma versão ou configuração anterior recuperável e que o procedimento de reversão foi validado.
- Define os responsáveis, os critérios de interrupção e as evidências mínimas antes de iniciar a alteração.
- Mantém o tráfego de teste identificado e separado do tráfego de produção.
Lista de verificação para manter a compatibilidade
Uma integração mantém-se compatível quando as suas regras podem ser consultadas, os seus testes podem ser repetidos e as alterações intencionais se distinguem das regressões. Revê o contrato quando mudar uma versão da API, uma especificação SMPP, um conector ou uma configuração que afete campos, respostas ou estados. A referência deve ser sempre a documentação atual da interface concreta.
Utiliza esta lista antes de aprovar uma alteração:
- A versão e a interface HTTP ou SMPP sob teste estão documentadas?
- Cada campo, codificação, remetente e identificador tem uma regra sustentada por documentação?
- Existem casos separados para aceitação, rejeição, timeout, desconexão e recuperação?
- Os callbacks e estados são correlacionados de acordo com o contrato e está identificado quem os comunica?
- As evidências distinguem a aceitação técnica, o DLR e a receção verificada no terminal?
- As diferenças em relação à versão anterior estão explicadas e aprovadas?
- Estão definidos os responsáveis, os critérios de interrupção e o procedimento de reversão?
- Os testes e o tráfego de produção estão separados e cumprem as regras aplicáveis?
Perguntas frequentes
Uma resposta HTTP satisfatória significa que o SMS chegou ao telemóvel?
Não. Descreve o resultado do pedido HTTP segundo a semântica do protocolo e o contrato da API. Por si só, não demonstra a entrega ao terminal.
Uma resposta SMPP positiva confirma a receção da mensagem?
Não necessariamente. Confirma uma etapa da interação SMPP de acordo com a operação e a implementação. A receção no terminal exige evidências posteriores, e o seu significado deve ser verificado separadamente.
Posso reutilizar os testes HTTP para validar SMPP?
Não como substituto de testes específicos. HTTP e SMPP têm contratos e formas de intercâmbio distintos; podes partilhar os objetivos de negócio, mas deves validar cada interface segundo a respetiva documentação.
O que devo fazer se a documentação não especificar como agir perante um timeout?
Regista a incerteza e acorda o comportamento com o fornecedor e os responsáveis pela integração antes de automatizar tentativas repetidas. Não transformes uma suposição numa regra de compatibilidade.
Um DLR é uma prova independente de receção no terminal?
Não, por si só. É um estado comunicado por um sistema da cadeia de entrega; identifica a sua origem e não o equipares a uma receção confirmada de forma independente.
Fontes consultadas
- SMPP Protocol Specification v3.4, Issue 1.2SMPP Developers Forum
- HTTP Semantics (RFC 9110)IETF
- SMS API documentationVOX Solutions
- SMPP integration documentationWauSMS