TL;DR — Sumário Executivo
Por trás dos panos das infraestruturas de mensageria que garantem a entrega de alertas Pix em menos de 3 segundos para milhões de correntistas no Brasil.
Desde o seu lançamento pelo Banco Central em 2020, o Pix tornou-se o meio de pagamento mais popular do Brasil, superando com folga modalidades tradicionais como TED, DOC, boleto bancário e cartões de débito. Com picos transacionais que superam 120 milhões de transações em um único dia, o ecossistema financeiro brasileiro exige não apenas liquidação instantânea em menos de 2 segundos, mas também uma comunicação imediata e confiável com o cliente final.
Para bancos digitais, fintechs e carteiras de pagamento, notificar o correntista sobre a recepção ou o envio de um Pix em tempo real não é apenas uma questão de conveniência (UX); é um mecanismo de segurança crítico contra fraudes e sequestros de contas. Entregar um SMS ou notificação push em menos de 3 segundos exige uma infraestrutura de mensageria altamente escalável, tolerante a falhas e de baixa latência.
---
1. Desafios de Engenharia na Mensageria Pix
Processar confirmações de Pix em escala corporativa apresenta três desafios técnicos fundamentais:
- Volume Massivo de Requisições Simultâneas: Em dias de pico transacional, como o quinto dia útil de cada mês (pagamento de salários), feriados nacionais e grandes eventos do varejo (Black Friday), o volume de transações por segundo (TPS) pode crescer até dez vezes.
- Latência Rígida: Uma confirmação de pagamento Pix entregue com atraso (ex: 2 minutos depois) perde sua utilidade prática no momento do checkout e causa pânico no usuário, que pode achar que o dinheiro desapareceu. O tempo ideal entre a liquidação no Banco Central e o aviso na tela do smartphone é de no máximo 3 segundos.
- Garantia de Entrega sem Duplicidade: O processamento deve ser estritamente idempotente. Enviar o mesmo alerta de Pix duas vezes para o usuário gera confusão, fazendo com que ele acredite que houve um débito ou crédito duplicado em sua conta corrente.
---
2. Arquitetura de Mensageria para Alta Disponibilidade
Para lidar com esse volume sob baixíssima latência, os bancos digitais abandonaram integrações síncronas de API em favor de uma arquitetura orientada a eventos (EDA) com brokers distribuídos de alto throughput.
mermaid graph TD BC[Banco Central do Brasil] -->|Liquidação Pix| API[API Gateway / Webhook Pix] API -->|Evento Pix| Kafka[Apache Kafka / Event Broker] Kafka -->|Consumo Assíncrono| Work[Worker Pool / Microserviços] Work -->|Validação Idempotência| Cache[(Redis Cache)] Work -->|API REST SMPP| Carrier[Bulk SMS Gateway Tier-1] Carrier -->|SMS A2P < 3s| Phone[Dispositivo do Usuário]
Componentes da Arquitetura:
- Webhook de Liquidação Pix: O sistema do banco liquida a transação e publica um evento contendo o ID transacional (
endToEndId), número do telefone do correntista e o valor. - Broker de Eventos (Apache Kafka ou RabbitMQ): O evento é publicado de forma assíncrona em tópicos específicos de mensageria. O Kafka atua como um buffer elástico, permitindo absorver picos repentinos sem sobrecarregar a API de envio de SMS.
- Fila com Redis para Desduplicação: Antes de realizar o envio, o microsserviço de mensageria consulta um cache rápido em Redis contendo as chaves
endToEndId. Se a transação já foi processada nos últimos 10 minutos, o envio é descartado para evitar duplicidade. - SMPP Binds com Rotas Tier-1: Os microsserviços efetuam a chamada à API do gateway de CPaaS através de conexões permanentes de alta velocidade HTTP keep-alive ou sessões SMPP ativas, garantindo latência de transmissão de rede abaixo de 50 milissegundos.
---
3. Implementação Prática: Fila de Processamento Assíncrono em Node.js
Para simular o processamento dessa arquitetura, veja abaixo um exemplo técnico em Node.js utilizando Express para receber as confirmações de transação do banco de dados do Pix e o pacote Bull (fila gerenciada por Redis) para processar o enfileiramento assíncrono dos SMS de confirmação de forma estável:
javascript const express = require('express'); const Queue = require('bull'); const axios = require('axios'); const app = express(); app.use(express.json());
const BULK_SMS_API_URL = 'https://api.bulksmsbrazil.com/v1'; const API_TOKEN = 'seu_token_fintech_aqui';
// 1. Cria a fila de processamento de confirmações Pix usando Redis const pixNotificationQueue = new Queue('pix-notifications', { redis: { port: 6379, host: '127.0.0.1' } });
// 2. Endpoint público que simula o listener de transações liquidadas app.post('/webhooks/pix-settled', async (req, res) => { const { endToEndId, amount, phone, clientName } = req.body;
if (!endToEndId || !amount || !phone) { return res.status(400).json({ error: 'Payload transacional incompleto.' }); }
console.log(Pix liquidado no BACEN: ${endToEndId} - Valor: R$ ${amount});
// Enfileira a tarefa de notificação para processamento assíncrono imediato // O uso de Bull permite priorização e retentativas automáticas await pixNotificationQueue.add({ endToEndId, amount, phone, clientName }, { attempts: 3, // Tenta retransmitir até 3 vezes se o gateway apresentar falha backoff: 1000, // Espera 1 segundo antes de tentar novamente removeOnComplete: true // Mantém a memória do Redis livre limpando tarefas concluídas });
// Retorna HTTP 202 (Accepted) para sinalizar que o processamento agora é assíncrono return res.sendStatus(202); });
// 3. Processador da Fila (Worker Pool que roda de forma isolada) pixNotificationQueue.process(async (job) => { const { endToEndId, amount, phone, clientName } = job.data;
// Formata a mensagem com o padrão bancário brasileiro const messageText = PIX RECEBIDO: Voce recebeu um Pix de R$ ${amount} de ${clientName} em sua conta.;
try { const response = await axios.post(${BULK_SMS_API_URL}/sms/send, { to: phone, message: messageText, // Passa a chave endToEndId como metadado para desduplicação no gateway externalId: endToEndId }, { headers: { 'Authorization': Bearer ${API_TOKEN}, 'Content-Type': 'application/json' } });
console.log(Notificacao Pix enviada para ${phone}. ID de envio: ${response.data.messageId}); return response.data; } catch (error) { console.error(Falha ao disparar SMS do Pix para o número ${phone}:, error.message); throw new Error('Falha no envio de SMS para o gateway.'); // Dispara gatilho de retentativa da fila } });
app.listen(3000, () => console.log('Servidor de mensageria Pix rodando na porta 3000'));
---
4. Idempotência e Desduplicação com Pix endToEndId
A desduplicação em bancos digitais deve ser realizada tanto na origem (backend do banco) quanto no destino (Bulk SMS Gateway). O Pix disponibiliza uma chave alfanumérica única universal de 32 caracteres gerada pelo Banco Central do Brasil para cada transação efetuada, o endToEndId (ex: E00038166202606021345123456789AB).
Como o gateway da Bulk SMS oferece suporte à inserção de chaves externas (externalId no payload JSON), nossa infraestrutura descarta automaticamente requisições duplicadas que contenham o mesmo ID num período de até 24 horas, atuando como uma camada de segurança robusta para evitar disparos duplicados na telefonia celular.
Para saber mais sobre nossa infraestrutura de mensageria de alta throughput e rotas diretas SMPP de baixa latência, consulte nossa seção de Fintech Verticals ou fale com nossa equipe técnica de suporte em SMS APIs.
Camila Rodrigues
CTO, Bulk SMS
Especialista sênior em infraestrutura de telecomunicações móveis, mensageria corporativa de alto rendimento e conformidade LGPD para plataformas de comunicação e APIs inteligentes no Brasil.