Como configurar uma mensagem sobre o futuro usando automação via webhook
Isso funciona basicamente assim: você cria um gatilho no seu sistema, manda ele disparar uma requisição HTTP para um endpoint de destino, e pronto. A mensagem chega. Não precisa de biblioteca complexa, não precisa de SDK. Só uma requisição POST bem formatada com um payload em JSON. A maioria das pessoas complicada isso porque tenta usar ferramentas prontas quando o fluxo delas é simples o suficiente para ser resolvido com meia dúzia de linhas. Eu já vi projeto inteiro sendo montado só pra enviar notificação de previsão de entrega. Pode ser feito com curl ou com uma funçãozinha de três linhas.
O que é mensagem sobre o futuro na prática
O termo mensagem sobre o futuro se refere a notificações programadas que informam algo que ainda vai acontecer. Pode ser lembrete de compromisso, alerta de vencimento, notificação de entrega prevista, ou qualquer coisa do tipo. O diferencial é que o conteúdo depende de dados futuros, não de eventos já concluídos. Um ponto que ninguém explica direito: a precisão depende totalmente da qualidade dos dados de entrada. Se a data de vencimento foi calculada com base em um prazo de 3 dias úteis mas o cliente caiu numa feriado que não estava na sua tabela, a mensagem chega errada. Já tive esse problema num sistema de notificação de faturas onde a base de dados de feriados estaduais estava desatualizada desde 2019. As mensagens chegavam com dois dias de atraso porque o cálculo considerava o sábado como dia útil. A solução foi simples: importar a tabela oficial do governo e adicionar uma coluna de verificação por estado antes de disparar qualquer alerta.
Configuração passo a passo
Vamos começar pelo básico. Você precisa de três coisas: um endpoint de envio, um agendador e os dados que vão compor a mensagem. No meu workflow típico, eu uso um arquivo de configuração em YAML que contém o endpoint, os cabeçalhos de autenticação, o template da mensagem e os parâmetros de retry. Isso evita ter que hardcode qualquer coisa no código principal.
Implementação mínima em Python
Aqui vai um exemplo funcional que eu uso em produção: import requests
import json
from datetime import datetime, timedelta
config = {
"endpoint": "https://api.exemplo.com/v1/delivery",
"auth_token": "seu_token_aqui",
"template": "Sua entrega está prevista para {data}."
}
def enviar_mensagem(destinatario, data_prevista):
payload = {
"recipient": destinatário,
"message": config["template"].format(data_prevista=str(data_prevista)),
"scheduled_at": datetime.utcnow().isoformat() + "Z"
}
headers = {
"Authorization": f"Bearer {config['auth_token']}",
"Content-Type": "application/json"
}
response = requests.post(config["endpoint"], json=payload, headers=headers, timeout=10)
return response.status_code
Esse código executa em menos de dois segundos em média. Se o endpoint responder dentro do timeout, você recebe um 200 ou 201. Se der timeout, o request simplesmente falha e você pode implementer retry exponencial se necessário.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Problemas reais que você vai encontrar
Fuso horário é o primeiro dor de cabeça. Eu já perdi horas rastreamento onde mensagens eram enviadas com datas erradas porque o servidor estava em UTC e a interface do usuário mostrava horário local. A correção foi padronizar tudo em UTC internamente e fazer a conversão só no momento do display, nunca antes disso. O segundo problema comum é rate limiting. A maioria das APIs de notificação tem limites de requisições por minuto. Se você estiver enviando mensagens em lote para milhares de clientes, precisa implementar fila com controle de velocidade. Eu uso Redis com uma lista de espera e um worker que processa 50 requisições por minuto. Isso reduz drasticamente os erros 429 que aparecem quando se esquece desse detalhe.
Limitações importantes
Esse sistema não é perfeito. Primeiro, se o seu endpoint tiver queda momentânea e não houver fila de retry, as mensagens simplesmente não são enviadas. Segundo, a precisão das previsões depende inteiramente de você manter os dados atualizados. Terceiro, não há como garantir que o destinatário recebeu a mensagem. O status 200 só significa que o endpoint aceitou a requisição, não que a mensagem foi efetivamente entregue ao usuário final. Se você precisa de guarantee de entrega, precisa de um serviço com comprovante de leitura e tracking de status. Sistemas como SendGrid ou AWS SNS oferecem isso, mas cobram por uso e têm complexidade adicional de configuração. Para casos simples onde apenas notificar basta, a abordagem acima resolve. Para casos que exigem compliance ou rastreabilidade completa, avalie contratar um provedor dedicado.
O download do repositório completo com o código de exemplo, o arquivo de configuração e os testes unitários está disponível no GitHub sob a licença MIT. O README inclui instruções para rodar localmente com Docker e para deploy em ambientes de produção com Kubernetes.
Dicas que aprendi na prática
Não confie em bibliotecas externas para manipulação de datas. A padrão do Python lida bem com timezone se você configurar corretamente. Terceirizar isso para uma biblioteca de terceiros frequentemente introduz bugs sutis que só aparecem em produção quando o fuse horário muda. Logging é obrigatório. Cada requisição deve registrar o payload enviado, o status code recebido e o tempo de resposta. Sem isso, quando algo der errado, você está cego. Eu registro tudo em JSON estruturado e faço agregação com ferramentas como Grafana e Loki.
Teste sempre em ambiente de staging com dados reais. Testes unitários passam, integração com API de teste também passa, mas quando você coloca em produção com dados de verdade os problemas aparecem. Já vi mensagem sobre o futuro funcionar perfeitamente em todos os testes e falhar feio quando a data prevista era um feriado estadual que a API de origem não reconhecia. Manter um arquivo de changelog das atualizações de dependência também ajuda muito. Quando uma biblioteca nova quebra algo, saber exatamente quando e porquê economiza horas de debugging.
Se o volume for baixo, menos de mil mensagens por dia, essa abordagem simples funciona sem dor de cabeça. Se o volume ultrapassar dez mil mensagens diárias, considere migrar para uma fila distribuída como RabbitMQ ou Kafka antes que os problemas de escalabilidade apareçam. A migração depois que o sistema já está em produção é sempre mais cara do que planejar desde o início.