Você quer enviar mensagens automatizadas para um canal do Discord em horários agendados. Um cron job em um servidor Linux pode acionar uma URL de webhook que publica mensagens no Discord. Essa configuração permite enviar relatórios diários, alertas de servidor ou qualquer notificação periódica sem esforço manual. Este artigo explica como criar um webhook do Discord, escrever um script que envia dados para ele e agendar esse script com cron.
Principais Conclusões: Enviando Webhooks do Discord via Cron
- Configurações do Servidor > Integrações > Webhooks: Crie uma URL de webhook que publique mensagens em um canal específico.
- Comando curl com payload JSON: Envie uma requisição POST com content-type application/json para a URL do webhook.
- crontab -e: Agende o script para rodar em qualquer intervalo usando a sintaxe do cron.
O que é um Webhook do Discord e Como Funciona
Um webhook do Discord é uma forma simples de enviar mensagens para um canal do Discord a partir de uma fonte externa. Você cria uma URL de webhook dentro de um canal do servidor, e qualquer aplicação que envie uma requisição HTTP POST formatada corretamente para essa URL pode publicar uma mensagem. A mensagem pode incluir texto, embeds, anexos de arquivos e menções. Nenhum token de bot ou OAuth é necessário. O webhook age como uma conta de usuário que publica mensagens com o nome e avatar definidos durante a criação.
Pré-requisitos para Enviar Webhooks a Partir do Cron
Antes de começar, você precisa de três coisas. Primeiro, um servidor do Discord onde você tenha permissão Gerenciar Webhooks. Segundo, um servidor Linux ou Unix onde você possa editar o crontab e executar scripts. Terceiro, o comando curl deve estar instalado nesse servidor. A maioria das distribuições Linux inclui curl por padrão. Se estiver faltando, instale-o com seu gerenciador de pacotes, por exemplo sudo apt install curl no Debian ou Ubuntu.
Como o Agendamento Cron Funciona
Cron é um agendador de tarefas baseado em tempo em sistemas operacionais Unix-like. Você define um agendamento usando cinco campos: minuto, hora, dia do mês, mês e dia da semana. Um cron job executa um comando ou script nos horários especificados. Por exemplo, 0 9 executa um job todos os dias às 9:00. O daemon cron executa o job em um ambiente mínimo, então você deve usar caminhos absolutos para scripts e comandos.
Passos para Criar e Agendar um Webhook do Discord com Cron
Passo 1: Criar um Webhook no Discord
- Abra as Configurações do Servidor
Clique com o botão direito no nome do servidor na barra lateral esquerda e selecione Configurações do Servidor. Se você não vir essa opção, não tem permissão Gerenciar Servidor. - Vá para Integrações
No menu esquerdo das Configurações do Servidor, clique em Integrações. Em seguida, clique no botão Webhooks. - Crie um Webhook
Clique no botão Criar Webhook. Uma nova entrada de webhook aparece com um nome e avatar padrão. - Defina o Canal e o Nome
Clique na entrada do webhook para expandi-la. Em Canal, selecione o canal de texto onde as mensagens aparecerão. Em Nome, digite um nome de exibição como Alertas do Servidor. Você também pode enviar um avatar personalizado. - Copie a URL do Webhook
Clique no botão Copiar URL do Webhook. A URL se parece comhttps://discord.com/api/webhooks/1234567890/abcdefg. Salve esta URL em um local seguro. Qualquer pessoa com esta URL pode publicar mensagens no canal.
Passo 2: Escrever um Script que Envia o Webhook
Crie um script shell que use curl para enviar uma requisição POST para a URL do webhook. O payload mínimo é um objeto JSON com um campo content. Abaixo está um exemplo completo de script chamado send-discord.sh.
#!/bin/bash
WEBHOOK_URL="https://discord.com/api/webhooks/1234567890/abcdefg"
MESSAGE="Olá do cron job em $(date)"
curl -H "Content-Type: application/json" \
-X POST \
-d "{\"content\":\"$MESSAGE\"}" \
$WEBHOOK_URL
Substitua o valor de WEBHOOK_URL pela URL que você copiou. Salve o arquivo e torne-o executável com chmod +x send-discord.sh. Teste o script executando ./send-discord.sh no terminal. Você deve ver a mensagem aparecer no seu canal do Discord.
Passo 3: Payloads Avançados com Embeds
Você pode enviar mensagens mais ricas usando objetos embed do Discord. Um embed pode incluir título, descrição, barra de cor, campos, rodapé e timestamp. Abaixo está um exemplo de script que envia um embed.
#!/bin/bash
WEBHOOK_URL="https://discord.com/api/webhooks/1234567890/abcdefg"
curl -H "Content-Type: application/json" \
-X POST \
-d '{
"embeds": [{
"title": "Relatório Diário",
"description": "Status do servidor em $(date)",
"color": 5814783,
"fields": [
{"name": "Carga da CPU", "value": "0.45", "inline": true},
{"name": "Uso de Memória", "value": "3.2 GB / 8 GB", "inline": true}
],
"footer": {"text": "Cron Job"},
"timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"
}]
}' \
$WEBHOOK_URL
O valor da cor é uma representação decimal de uma cor hexadecimal. Por exemplo, 5814783 corresponde à cor hexadecimal #58B9FF. Use um conversor de cores para encontrar o valor decimal de qualquer cor.
Passo 4: Agendar o Script com Cron
- Abra o Editor do Crontab
Executecrontab -eno terminal. Se for a primeira vez, pode ser solicitado que você escolha um editor. Selecione nano ou vim. - Adicione uma Linha de Cron Job
No final do arquivo, adicione uma linha que defina o agendamento e o caminho do script. Use o caminho absoluto para o script. Por exemplo, para executar o script todos os dias às 9h:0 9 /home/usuario/send-discord.sh - Salve e Saia
No nano, pressione Ctrl+O para salvar, depois Ctrl+X para sair. No vim, pressione Esc, digite:wqe pressione Enter. O cron instala o novo agendamento e começa a executar o job nos horários especificados.
Passo 5: Verificar se o Cron Job Está Rodando
Verifique o log do cron para ver se o job foi executado. Na maioria dos sistemas, os logs do cron são gravados em /var/log/syslog ou /var/log/cron. Procure pelo nome do seu script com grep send-discord /var/log/syslog. Você também pode adicionar um arquivo de log simples dentro do seu script acrescentando uma linha como echo "$(date): Mensagem enviada" >> /home/usuario/cron.log.
Problemas Comuns ao Enviar Webhooks a Partir do Cron
Script Roda no Terminal Mas Não no Cron
O cron executa com uma variável de ambiente PATH limitada. Se o curl não estiver no PATH padrão, o script falha. Use o caminho completo para o curl no seu script. Descubra-o executando which curl — tipicamente /usr/bin/curl. Substitua curl por /usr/bin/curl no script. Além disso, use caminhos absolutos para todas as referências de arquivos.
URL do Webhook Exposta no Script
Armazenar a URL do webhook em um arquivo de script é um risco de segurança se o script for legível por outros usuários. Defina permissões restritivas com chmod 700 send-discord.sh. Alternativamente, armazene a URL em uma variável de ambiente e referencie-a no script. Adicione a variável ao seu crontab com WEBHOOK_URL=sua_url antes da linha do job, depois use $WEBHOOK_URL no script.
Payload JSON Malformado
Se a API do Discord retornar um erro 400 Bad Request, o payload JSON é inválido. Erros comuns incluem vírgulas faltando, aspas duplas não escapadas dentro de strings ou vírgulas à direita em arrays. Valide seu JSON com uma ferramenta como jq. Execute echo 'seu_json' | jq . para ver erros de análise.
Limitação de Taxa por Postagens Frequentes
O Discord impõe limites de taxa em requisições de webhook. O limite é de 30 requisições por 60 segundos por webhook. Se seu cron job rodar mais de uma vez a cada dois segundos, você pode receber respostas 429 Too Many Requests. Agende seu cron job em intervalos de pelo menos dois segundos ou implemente lógica de repetição com backoff exponencial.
Padrões de Agendamento Cron vs Tipos de Payload do Webhook do Discord
| Item | Mensagem de Texto Simples | Embed com Campos |
|---|---|---|
| Tamanho do payload | Pequeno, abaixo de 2000 caracteres | Maior, até 6000 caracteres no total |
| Caso de uso | Alertas rápidos ou atualizações de status | Relatórios detalhados com dados estruturados |
| Complexidade do curl | JSON simples de uma linha | JSON de várias linhas com objetos aninhados |
| Suporte a cores | Não | Sim, via campo color |
| Múltiplos campos | Não | Até 25 campos |
Agora você tem um sistema funcional que envia mensagens do Discord automaticamente usando cron. A URL do webhook e o script curl cuidam da comunicação. Para estender essa configuração, considere adicionar lógica condicional no script para enviar mensagens diferentes com base em métricas do servidor. Um próximo passo útil é incluir anexos de arquivos usando o tipo de conteúdo multipart/form-data em vez de JSON.