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.
Visão Geral
A integração n8n-Slack oferece:
- Envio automático de mensagens para canais e usuários
- Criação de bots inteligentes para automação de tarefas
- Notificações baseadas em eventos de sistemas externos
- Integração com workflows de aprovação e processos de negócio
- Monitoramento e alertas em tempo real
- Sincronização de dados entre Slack e outros sistemas
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
Nós Disponíveis
1. Slack Trigger
Dispara workflows baseados em eventos do Slack.
Eventos disponíveis:
- Nova mensagem em canalmessage
- Reação adicionadareaction_added
- Usuário entrou no canaluser_joined_channel
- Arquivo compartilhadofile_shared
- Canal criadochannel_created
Configuração:
{
"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
// Log 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.
Dica: Use a integração Slack para criar uma ponte entre seus sistemas automatizados e sua equipe. Mantenha as mensagens relevantes e organizadas para maximizar a eficiência da comunicação.