Integração Slack
O Slack é uma das plataformas de comunicação mais populares para equipes, e a integração com n8n permite automatizar notificações, criar bots inteligentes e melhorar a colaboração através de workflows automatizados.
Configuração
1. Criar App no Slack
- Acesse api.slack.com/apps
- Clique em "Create New App"
- Escolha "From scratch"
- Digite o nome do app e selecione o workspace
2. Configurar Permissões (OAuth Scopes)
Adicione os seguintes escopos:
Bot Token Scopes:
- Enviar mensagenschat:write
- Enviar para canais públicoschat:write.public
- Ler informações de canaischannels:read
- Ler informações de usuáriosusers:read
- Entrar em canaischannels:join
- Enviar arquivosfiles:write
User Token Scopes:
- Enviar mensagens como usuáriochat:write
3. Instalar App no Workspace
- Vá para "OAuth & Permissions"
- Clique em "Install to Workspace"
- Autorize o app
- Copie o Bot User OAuth Token
4. Configurar Credenciais no n8n
- No n8n, vá para Settings > Credentials
- Clique em "Add Credential"
- Selecione "Slack"
- Cole o Bot Token
- Teste a conexão
Nodes Disponíveis
1. Slack Trigger
Monitora eventos do Slack em tempo real.
Configuração básica:
{
"event": "message",
"channel": "C1234567890",
"filters": {
"user": "U1234567890",
"text": "alert"
}
}
2. Send Message
Envia mensagens para canais ou usuários.
Tipos de mensagem:
- Text: Mensagem simples
- Blocks: Mensagem estruturada com blocos
- Attachments: Mensagem com anexos
Exemplo básico:
{
"channel": "#geral",
"text": "Olá! Esta é uma mensagem automática do n8n."
}
Exemplo com blocos:
{
"channel": "#alertas",
"blocks": [
{
"type": "header",
"text": {
"type": "plain_text",
"text": "🚨 Alerta do Sistema"
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*Erro detectado:* API não está respondendo"
}
},
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": "*Status:* Crítico"
},
{
"type": "mrkdwn",
"text": "*Tempo:* {{$now}}"
}
]
}
]
}
3. Upload File
Envia arquivos para o Slack.
Configuração:
{
"channel": "#documentos",
"file": "{{$binary.data}}",
"filename": "relatorio.pdf",
"title": "Relatório Mensal"
}
Casos de Uso Práticos
1. Sistema de Notificações de Monitoramento
Cenário: Alertas automáticos quando sistemas críticos falham.
Configuração do Slack Node:
{
"channel": "#monitoramento",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "⚠️ *Sistema Offline*\n\nO sistema {{$json.system}} não está respondendo.\n\n*Detalhes:*\n• Status: {{$json.status}}\n• Última verificação: {{$now}}\n• Tentativa: {{$runIndex + 1}}"
}
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": {
"type": "plain_text",
"text": "Verificar Agora"
},
"url": "{{$json.dashboard_url}}"
}
]
}
]
}
2. Bot de Aprovação de Despesas
Cenário: Sistema que envia solicitações de aprovação via Slack.
Configuração do Trigger:
{
"event": "reaction_added",
"filters": {
"reaction": "white_check_mark",
"channel": "C1234567890"
}
}
Configuração da Mensagem:
{
"channel": "#aprovacoes",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "💰 *Nova Solicitação de Despesa*\n\n*Solicitante:* {{$json.solicitante}}\n*Valor:* R$ {{$json.valor}}\n*Descrição:* {{$json.descricao}}"
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Reaja com ✅ para aprovar ou ❌ para rejeitar"
}
}
]
}
3. Integração com CRM
Cenário: Notificações automáticas quando novos leads são criados.
Configuração:
{
"channel": "#vendas",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "🎯 *Novo Lead Capturado*\n\n*Nome:* {{$json.nome}}\n*Email:* {{$json.email}}\n*Telefone:* {{$json.telefone}}\n*Origem:* {{$json.origem}}"
}
},
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": "*Score:* {{$json.score}}"
},
{
"type": "mrkdwn",
"text": "*Prioridade:* {{$json.prioridade}}"
}
]
}
]
}
4. Relatórios Automáticos
Cenário: Envio diário de relatórios de performance.
Configuração:
{
"channel": "#relatorios",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "📊 *Relatório Diário - {{$now.format('DD/MM/YYYY')}}*\n\n*Resumo:*\n• Vendas: R$ {{$json.vendas}}\n• Leads: {{$json.leads}}\n• Conversões: {{$json.conversoes}}%"
}
}
]
}
Expressões e Data Mapping
Mensagens Dinâmicas
// Mensagem com dados dinâmicos
{
"channel": "{{$json.canal}}",
"text": "Olá {{$json.usuario}}, seu pedido #{{$json.pedido_id}} foi processado com sucesso!"
}
// Mensagem condicional
{
"channel": "#alertas",
"text": "{{$json.status === 'error' ? '❌ Erro detectado' : '✅ Operação concluída'}}"
}
Canais Dinâmicos
// Canal baseado no tipo de alerta
{
"channel": "{{$json.severidade === 'critico' ? '#alertas-criticos' : '#notificacoes'}}"
}
// Canal baseado no departamento
{
"channel": "{{$json.departamento === 'vendas' ? '#vendas' : '#suporte'}}"
}
Tratamento de Erros
Retry com Backoff
// Configuração de retry para Slack
{
"maxTries": 3,
"waitBetweenTries": 5000,
"continueOnFail": false
}
Fallback para Email
Boas Práticas
1. Organização de Canais
- #monitoramento - Alertas de sistema
- #notificacoes - Notificações gerais
- #vendas - Atividades comerciais
- #suporte - Tickets e suporte
- #relatorios - Relatórios automáticos
2. Formatação de Mensagens
- Use negrito para títulos importantes
- Use emojis para categorizar mensagens
- Mantenha mensagens concisas e objetivas
- Inclua links para ações rápidas
3. Rate Limiting
// Respeitar limites do Slack
{
"waitBetweenMessages": 1000, // 1 segundo entre mensagens
"maxMessagesPerMinute": 50
}
4. Privacidade e Segurança
- Não envie dados sensíveis via Slack
- Use canais privados para informações confidenciais
- Configure permissões adequadas nos canais
- Monitore logs de acesso
Troubleshooting
Problemas Comuns
Erro: "channel_not_found"
- Verifique se o canal existe
- Confirme se o bot tem acesso ao canal
- Use ID do canal em vez do nome
Erro: "missing_scope"
- Adicione os escopos necessários no app
- Reinstale o app no workspace
- Verifique as permissões do token
Erro: "rate_limited"
- Implemente delays entre mensagens
- Reduza a frequência de envio
- Use webhooks em vez de polling
Debugging
// Para debugging
console.log('Slack Debug:', {
channel: $json.channel,
message: $json.text,
timestamp: $now,
user: $json.user
});
Integração com Outros Nós
Fluxo Completo
Exemplo de Workflow Completo
// 1. Webhook - Receber dados
{
"url": "/webhook/lead",
"method": "POST"
}
// 2. Code Node - Processar lead
const lead = $json;
const score = calcularScore(lead);
const prioridade = score > 80 ? 'Alta' : 'Normal';
return {
...lead,
score,
prioridade,
canal: score > 80 ? '#leads-quentes' : '#leads-frios'
};
// 3. Slack - Enviar notificação
{
"channel": "{{$json.canal}}",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "🎯 *Novo Lead - Score {{$json.score}}*\n\n*{{$json.nome}}*\n{{$json.email}}\n{{$json.telefone}}"
}
}
]
}
// 4. Database - Salvar lead
{
"operation": "insert",
"table": "leads",
"data": $json
}
Referências
- Webhook Trigger - Triggers baseados em webhooks
- HTTP Request - Requisições HTTP customizadas
- Code Node - Lógica customizada
- Error Handling - Tratamento de erros
Esta documentação está em processo de validação. Os exemplos práticos e configurações de nós apresentados precisam ser testados e validados em ambientes reais. A intenção é sempre fornecer práticas e exemplos que funcionem corretamente em produção. Se encontrar inconsistências ou problemas, por favor, reporte para que possamos melhorar a qualidade da documentação.