Exemplo completo de fluxo OTP (2FA) com SMSGo, Node.js, Express e Redis: geração de código, envio de SMS, validação e webhook de status assinado.
- Geração segura de código OTP de 6 dígitos.
- Armazenamento do código no Redis com TTL de 5 minutos.
- Envio de SMS via SDK oficial @orynlabs/smsgo.
- Validação de OTP com comparação em tempo constante.
- Recebimento de webhooks de entrega (DLR) assinados com HMAC-SHA256.
- Testes com chave de teste, sem gastar créditos reais.
smsgo-otp-example/
├── src/
│ ├── index.ts # Servidor Express
│ ├── otp.service.ts # Gera, armazena e valida códigos no Redis
│ ├── sms.service.ts # Cliente SMSGo encapsulado
│ └── webhook.controller.ts # Recebe e verifica DLR assinado
├── tests/
│ └── otp.test.ts # Testes com chave test_
├── package.json
├── tsconfig.json
├── .env.example
├── .github/workflows/ci.yml
└── LICENSE
npm install
cp .env.example .envConfigure o .env:
SMSGO_KEY="test_sua_chave_aqui"
SMSGO_WEBHOOK_SECRET="whsec_..."
REDIS_URL="redis://localhost:6379"
PORT=3000Inicie o Redis localmente (ou use Docker):
docker run -d -p 6379:6379 redis:7-alpine- O usuário solicita OTP via
POST /otp/requestinformando o telefone. - O
OtpServicegera um código de 6 dígitos e armazena no Redis com TTL de 5 minutos. - O
SmsServiceenvia o SMS usando o SDK Node.js. - A SMSGo entrega o status de entrega (DLR) via
POST /webhooks/smsgo, assinado com HMAC-SHA256.
| Método | Rota | Descrição |
|---|---|---|
| POST | /otp/request |
Solicita envio de OTP |
| POST | /otp/verify |
Verifica código de OTP |
| POST | /webhooks/smsgo |
Recebe callback de status da SMSGo |
# Solicitar OTP
curl -X POST http://localhost:3000/otp/request \
-H "Content-Type: application/json" \
-d '{"phone":"+5511999990000"}'
# Verificar OTP
curl -X POST http://localhost:3000/otp/verify \
-H "Content-Type: application/json" \
-d '{"phone":"+5511999990000","code":"123456"}'npm testnpm run dev
# ou
npm run build
npm start- SDK Node.js: https://github.com/sms-go/smsgo-sdk-nodejs
- API completa: https://smsgo.apidog.io
- Painel SMSGo: https://smsgo.com.br
MIT © SMSGo