Webhook do Discord a partir do AWS Lambda com Node.js: Configuração
🔍 WiseChecker

Webhook do Discord a partir do AWS Lambda com Node.js: Configuração

Você quer enviar mensagens automáticas de uma função AWS Lambda para um canal do Discord. Webhooks do Discord permitem postar mensagens sem um bot. Este guia cobre a configuração completa usando Node.js. Você aprenderá a criar um webhook no Discord, escrever uma função Lambda que envia uma requisição POST e lidar com erros comuns.

Principais pontos: Configuração de Webhook do Discord com AWS Lambda

  • Configurações do Servidor Discord > Integrações > Webhooks: Crie uma URL de webhook que sua função Lambda irá chamar.
  • Módulo HTTPS do Node.js: Use o módulo https nativo para enviar requisições POST — sem necessidade de pacotes npm extras.
  • Variáveis de ambiente do AWS Lambda: Armazene a URL do webhook em uma variável de ambiente para mantê-la segura e fácil de atualizar.

Como os Webhooks do Discord Funcionam com AWS Lambda

Um webhook do Discord é um endpoint HTTP simples. Quando sua função Lambda envia uma requisição POST para este endpoint, o Discord publica o payload da mensagem no canal configurado. Não são necessários cabeçalhos de autenticação ou tokens OAuth — a própria URL do webhook contém o token de autorização.

O AWS Lambda executa código Node.js em resposta a gatilhos como uma chamada do API Gateway, um evento do bucket S3 ou um evento agendado do CloudWatch. A função Lambda constrói um payload JSON e o envia via HTTPS para a URL do webhook. Todo o fluxo é serverless, ou seja, você paga apenas pelo tempo de execução e não precisa manter servidores.

Pré-requisitos

Você precisa do seguinte antes de começar:

  • Uma conta AWS com permissões para criar funções Lambda e papéis IAM
  • Um servidor Discord onde você tenha permissão de Gerenciar Webhooks
  • Node.js 18 ou superior selecionado como runtime na sua função Lambda

Passos para Criar um Webhook do Discord e Conectá-lo ao AWS Lambda

Passo 1: Criar o Webhook do Discord

  1. Abra as Configurações do Servidor
    No Discord, clique no nome do servidor no canto superior esquerdo. Selecione Configurações do Servidor no menu suspenso.
  2. Vá para Integrações
    No menu à esquerda, clique em Integrações. Depois clique em Webhooks.
  3. Crie um Novo Webhook
    Clique no botão azul Criar Webhook. Dê um nome como Notificações AWS. Selecione o canal onde as mensagens aparecerão.
  4. Copie a URL do Webhook
    Clique em Copiar URL do Webhook. Salve esta URL com segurança — é sua única credencial. Qualquer pessoa com esta URL pode postar no seu canal.

Passo 2: Escrever a Função AWS Lambda

  1. Abra o Console AWS Lambda
    Faça login na AWS e vá para Lambda. Clique em Criar função. Escolha Criar do zero. Defina Runtime como Node.js 18.x ou superior. Clique em Criar função.
  2. Defina a URL do Webhook como Variável de Ambiente
    Role até Variáveis de ambiente. Clique em Editar. Adicione uma variável com chave DISCORD_WEBHOOK_URL e cole sua URL do webhook como valor. Salve.
  3. Escreva o Código da Função
    No editor de código fonte, substitua o código padrão pelo seguinte. Este exemplo envia uma mensagem de texto simples quando a função é invocada.
    const https = require('https');
    
    exports.handler = async (event) => {
        const webhookUrl = process.env.DISCORD_WEBHOOK_URL;
        if (!webhookUrl) {
            throw new Error('Variável de ambiente DISCORD_WEBHOOK_URL não definida');
        }
    
        const message = {
            content: 'Olá do AWS Lambda!'
        };
    
        const data = JSON.stringify(message);
        const url = new URL(webhookUrl);
    
        const options = {
            hostname: url.hostname,
            path: url.pathname + url.search,
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'Content-Length': data.length
            }
        };
    
        return new Promise((resolve, reject) => {
            const req = https.request(options, (res) => {
                let body = '';
                res.on('data', chunk => body += chunk);
                res.on('end', () => {
                    if (res.statusCode === 204) {
                        resolve({ statusCode: 200, body: 'Mensagem enviada' });
                    } else {
                        reject(new Error(`Discord retornou ${res.statusCode}: ${body}`));
                    }
                });
            });
    
            req.on('error', (e) => reject(e));
            req.write(data);
            req.end();
        });
    };
  4. Implante e Teste
    Clique em Implantar. Depois clique em Testar. Crie um evento de teste com JSON padrão. Clique em Testar novamente. Se bem-sucedido, seu canal do Discord exibirá a mensagem.

Passo 3: Configurar um Gatilho (Opcional)

  1. Adicione um Gatilho
    Na visão geral da função Lambda, clique em Adicionar gatilho. Escolha uma fonte como API Gateway, S3 ou EventBridge (CloudWatch Events).
  2. Defina Permissões
    Para API Gateway, selecione Criar uma nova API ou use uma existente. Para EventBridge, defina uma expressão de agendamento como rate(1 hour) para enviar uma mensagem a cada hora.
  3. Teste o Fluxo Completo
    Invoque o gatilho e verifique seu canal do Discord para a mensagem.

Problemas Comuns ao Configurar Webhooks do Discord com AWS Lambda

Lambda Retorna Erro de Timeout

O timeout padrão do Lambda é de 3 segundos. As respostas do webhook do Discord geralmente são rápidas, mas problemas de rede podem causar atrasos. Aumente o timeout na configuração do Lambda para 10 segundos. Vá para Configuração > Configuração geral > Editar e defina Timeout para 10 segundos.

URL do Webhook Inválida ou Retorna 404

Certifique-se de copiar a URL completa do webhook do Discord. O formato da URL é https://discord.com/api/webhooks/ID/TOKEN. Se você a truncou acidentalmente, o Discord retorna um erro 404. Verifique também se o webhook não foi excluído do servidor Discord.

Payload da Mensagem Excede os Limites do Discord

As mensagens do webhook do Discord têm um limite de 2000 caracteres para o campo content. Se sua função Lambda enviar uma mensagem mais longa, o Discord retorna um erro 400 Bad Request. Divida mensagens longas em várias chamadas de webhook ou use embeds, que têm um limite combinado maior de 6000 caracteres.

Variável de Ambiente Não Lida

Se a função lançar o erro “Variável de ambiente DISCORD_WEBHOOK_URL não definida”, verifique se o nome da variável corresponde exatamente. Os nomes das variáveis de ambiente da AWS diferenciam maiúsculas de minúsculas. Verifique também se a variável está definida na mesma versão da função Lambda que você implantou.

Tipos de Payload do Webhook do Discord: Mensagem Simples vs Embed

Item Mensagem Simples Mensagem com Embed
Estrutura do payload { "content": "texto" } { "embeds": [{ "title": "...", "description": "..." }] }
Limite de caracteres 2000 caracteres 6000 caracteres no total em todos os embeds
Suporta formatação Apenas Markdown Formatação rica: autor, campos, rodapé, cor, timestamp
Caso de uso Alertas simples, mensagens de status curtas Relatórios detalhados, dados estruturados, logs

Agora você tem um webhook do Discord funcional integrado com AWS Lambda. A função envia mensagens para seu canal do Discord sem infraestrutura adicional. Para estender a configuração, adicione tratamento de erros para falhas de rede ou use variáveis de ambiente para alterar o conteúdo da mensagem sem editar o código. Para uso avançado, explore objetos embed do Discord para enviar notificações ricas com barras laterais coloridas e vários campos.