Para testar uma conexão SMPP, você precisa de um cliente SMPP (para fazer bind em um provedor e enviar mensagens) e, no desenvolvimento, de um servidor ou simulador SMPP (para aceitar binds sem enviar SMS reais). Opções open source conhecidas incluem Jasmin e Kannel como gateways completos, e bibliotecas como jSMPP, Cloudhopper SMPP, python-smpplib, node-smpp e gosmpp para scripts e ferramentas próprias.
O que é um cliente SMPP?
Um cliente SMPP (o ESME, na terminologia SMPP) abre uma conexão TCP com um servidor SMPP, faz bind com system ID e senha, envia mensagens com submit_sm e recebe os recibos de entrega como deliver_sm. A sua plataforma de SMS é um cliente em relação a cada rota upstream. Um cliente de teste é a mesma coisa em versão pequena e controlável: você o usa para verificar credenciais, tipos de bind, limites de TPS, codificação e recibos antes de conectar o tráfego de produção. Contexto: o que é SMPP.
O que é um simulador de servidor SMPP?
Um simulador de servidor SMPP aceita binds como um SMSC, confirma as mensagens enviadas e pode devolver recibos de entrega falsos, mas não entrega nada em celulares reais. Ele permite que os desenvolvedores testem o cliente, a lógica de retentativa e o tratamento de DLR sem gastar dinheiro nem mexer em redes reais. Nunca confunda os recibos do simulador com os reais: só a rota real pode mostrar a entrega de verdade. Veja DLR falso para entender por que isso importa em produção.
Ferramentas SMPP open source
Estes projetos existem de fato e são usados ativamente (verifique a licença e a situação de manutenção de cada projeto antes de depender dele):
| Ferramenta | Linguagem | Cliente | Servidor | Bom para |
|---|---|---|---|---|
| Jasmin | Python | Sim | Sim | Gateway SMS open source completo com SMPP e HTTP, roteamento e imagem Docker. Útil como servidor SMPP local para testes. |
| Kannel | C | Sim | Via complemento | Gateway SMS e WAP open source veterano que se conecta a SMSCs por SMPP e outros protocolos. |
| jSMPP | Java | Sim | Sim | Biblioteca com suporte a SMPP 3.3, 3.4 e 5.0; também usada pelo componente SMPP do Apache Camel. |
| Cloudhopper SMPP | Java | Sim | Sim | Biblioteca para clientes e servidores; o repositório principal não é atualizado há vários anos. |
| python-smpplib | Python | Sim | Não | Scripts de teste rápidos: bind, envio, leitura de recibos. |
| node-smpp | Node.js | Sim | Sim | Pequenos servidores e clientes de teste em JavaScript. |
| gosmpp | Go | Sim | Não | Biblioteca de cliente SMPP 3.4 para serviços em Go. |
Para capturar tráfego, o Wireshark decodifica PDUs SMPP, o que ajuda quando você precisa ver exatamente o que foi enviado em um bind ou em um submit_sm. Também existem clientes desktop comerciais e simuladores de SMSC hospedados; avalie-os da mesma forma.
Como testar uma conexão SMPP?
Teste nesta ordem: rede, bind, envio, recibo, throughput. A maioria das configurações que falham para nos dois primeiros passos por causa da whitelist de IP, de porta errada ou de tipo de bind errado.
- Rede. Confirme que o seu IP está na whitelist e que o host e a porta estão acessíveis (um simples teste de conexão TCP basta).
- Bind. Faça bind com o system ID, a senha, o system type (muitas vezes vazio) e o tipo de bind que o provedor informou (TX, RX ou TRX). Uma falha de bind devolve um erro como senha inválida ou system ID inválido.
- Envio. Envie uma mensagem para o seu próprio celular com o sender ID, o TON/NPI e o data_coding combinados, com registered_delivery configurado para pedir recibo.
- Recibo. Verifique se o recibo de entrega chega com o mesmo message ID e um status final. Compare com o celular.
- Keep-alive. Deixe o bind ocioso e confirme que o
enquire_linko mantém ativo. - Throughput. Envie no TPS contratado e observe se aparecem erros de throttling.
Os significados dos erros estão em códigos de erro SMPP; os limites de bind e de TPS em binds SMPP e TPS.
Servidor SMPP gratuito para testes: quais são as opções?
A opção gratuita mais simples é rodar localmente um gateway open source como o Jasmin (ele vem como imagem Docker) e apontar o seu cliente para ele, ou escrever um pequeno servidor com node-smpp ou jSMPP que aceite binds e devolva recibos. Isso cobre os testes de protocolo. Para testar a entrega, nada substitui uma rota real e celulares reais em cada operadora: veja como testar uma rota SMS.
Escolhendo entre SMPP e HTTP para a sua integração
Se o seu volume é pequeno, uma HTTP API pode ser mais fácil do que manter binds SMPP. Se você revende ou envia alto volume, o SMPP é o padrão. Compare em SMPP vs HTTP para SMS e o que é um gateway SMS.
Como obter uma rota SMPP real
Quando o seu cliente funciona com um simulador, você precisa de um upstream real. O VoIPMatcher obtém rotas SMS A2P via SMPP junto às suas operadoras e as gerencia. Solicite uma rota SMPP para testes e produção.
Perguntas frequentes
Existe um cliente SMPP online que eu possa usar?
Alguns fornecedores oferecem clientes SMPP de teste na web e simuladores de SMSC hospedados. Cuidado ao colocar credenciais de produção em sites de terceiros, porque qualquer pessoa que as tenha pode enviar tráfego cobrado de você. Para binds reais, um cliente local feito com uma biblioteca open source, ou o seu próprio gateway, mantém as credenciais sob o seu controle.
Posso rodar um servidor SMPP no Docker?
Sim. O Jasmin, um gateway SMS open source com servidor SMPP, publica uma imagem Docker, e pequenos servidores de teste feitos com bibliotecas como node-smpp ou jSMPP são fáceis de colocar em contêiner. Isso é útil para desenvolvimento e testes automatizados, mas esse servidor não entrega em celulares reais a menos que esteja conectado a rotas reais.
Por que meu bind SMPP falha?
Causas comuns são um endereço IP fora da whitelist do provedor, host ou porta errados, system ID ou senha incorretos, tipo de bind errado ou binds demais já abertos na conta. O código de erro da resposta ao bind indica a causa. Verifique primeiro a conectividade de rede, depois as credenciais e os limites de bind.
O que é enquire_link no SMPP?
Enquire_link é a PDU de keep-alive do SMPP. Qualquer um dos lados a envia periodicamente, muitas vezes a cada 30 a 60 segundos, e o outro lado precisa responder. Ela mantém conexões ociosas abertas através de firewalls e permite que cada lado detecte rapidamente um link morto para reconectar em vez de perder mensagens.
Como testar o throughput SMPP?
Depois de um bind bem-sucedido e de um teste com uma única mensagem, envie uma rajada controlada no número de mensagens por segundo contratado para uma faixa de teste combinada com o provedor, e observe se aparecem erros de throttling e tempos de resposta crescentes. Aumente aos poucos. Teste todos os seus binds juntos, já que os limites podem valer por conta além de por bind.
Precisa de uma rota?
Envie o destino, o tipo de rota e a tarifa alvo. Respondemos com o que podemos entregar.