Skip to content

Configuração do Slack Bot - URL de Eventos

📋 Resumo

Este documento explica como configurar a URL de eventos do Slack após o deploy do bot.

🔧 Como o Challenge funciona

Quando você configura uma Event Subscription URL no Slack, o Slack envia uma requisição POST de verificação:

{
  "type": "url_verification",
  "challenge": "3eZbrw1aBm2rZgRNFdxV2595E9CY3gmdALWMmHkvFXO7tYXAYM8P",
  "token": "Jhj5dZrVaK7ZwHHjRyZWjbDl"
}

Seu servidor deve responder imediatamente com:

{
  "challenge": "3eZbrw1aBm2rZgRNFdxV2595E9CY3gmdALWMmHkvFXO7tYXAYM8P"
}

✅ Implementação Automática

O slack_bot.py já está configurado para tratar o challenge automaticamente usando o AsyncSlackRequestHandler do Slack Bolt.

Não é necessário implementar nenhum código adicional! O Bolt já faz isso por você.

🚀 Passos para Configurar a URL no Slack

1. Deploy da Aplicação

Primeiro, faça o deploy da aplicação no Cloud Run ou servidor:

./deploy.sh

Anote a URL gerada (exemplo): https://seu-servico-abc123.run.app

2. Configure no Slack App

Acesse: https://api.slack.com/apps

  1. Selecione seu App
  2. Vá em Event Subscriptions (menu lateral)
  3. Ative "Enable Events" (toggle ON)
  4. Em Request URL, coloque:
    https://seu-servico-abc123.run.app/slack/events
    
  5. O Slack vai automaticamente enviar o challenge
  6. ✅ Você verá "Verified" se tudo estiver correto

3. Subscreva aos Eventos

Ainda em Event Subscriptions, role até Subscribe to bot events:

Adicione estes eventos: - message.channels - Mensagens em canais públicos - message.groups - Mensagens em canais privados - message.im - Mensagens diretas (DM) - app_mention - Quando o bot é mencionado com @

Clique em Save Changes no final da página.

4. Reinstale o App (se necessário)

Se você vir uma mensagem amarela no topo pedindo para reinstalar: - Clique em reinstall your app - Autorize novamente

🔍 Endpoints Disponíveis

Endpoint Método Descrição
/slack/events POST Recebe eventos do Slack (incluindo challenge)
/health GET Health check da aplicação

🧪 Testando a URL

Teste 1: Health Check

curl https://seu-servico-abc123.run.app/health

Deve retornar:

{
  "status": "healthy",
  "service": "ifriend_busca_produtos_slack"
}

Teste 2: Verificação Manual do Challenge

curl -X POST https://seu-servico-abc123.run.app/slack/events \
  -H "Content-Type: application/json" \
  -d '{"type": "url_verification", "challenge": "test123"}'

Deve retornar:

{
  "challenge": "test123"
}

🐛 Troubleshooting

Erro: "Your URL didn't respond with the value of the challenge parameter"

Causas possíveis: 1. Servidor não está rodando 2. Firewall bloqueando a porta 3. URL incorreta 4. Timeout (Slack espera resposta em 3 segundos)

Solução: - Verifique os logs: gcloud run logs read --service=seu-servico --limit=50 - Teste o health check primeiro - Verifique se SLACK_SIGNING_SECRET está configurado

Erro: "Invalid signature"

Causa: SLACK_SIGNING_SECRET incorreto ou não configurado

Solução: 1. Vá em Basic Information > App Credentials 2. Copie o Signing Secret 3. Configure no Cloud Run:

gcloud run services update seu-servico \
  --update-env-vars SLACK_SIGNING_SECRET=abc123...

📝 Variáveis de Ambiente Necessárias

Certifique-se de que estas variáveis estão configuradas no Cloud Run:

SLACK_BOT_TOKEN=xoxb-...
SLACK_SIGNING_SECRET=abc123...
GOOGLE_APPLICATION_CREDENTIALS=/app/service-account-key.json

🔐 Segurança

O Signing Secret garante que apenas o Slack pode enviar requisições válidas para seu bot.

O Slack Bolt verifica automaticamente a assinatura de cada requisição usando o SLACK_SIGNING_SECRET.

📚 Referências