Pular para o conteúdo principal

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

  1. Acesse api.slack.com/apps
  2. Clique em "Create New App"
  3. Escolha "From scratch"
  4. Digite o nome do app e selecione o workspace

2. Configurar Permissões (OAuth Scopes)

Adicione os seguintes escopos:

Bot Token Scopes:

  • chat:write
    - Enviar mensagens
  • chat:write.public
    - Enviar para canais públicos
  • channels:read
    - Ler informações de canais
  • users:read
    - Ler informações de usuários
  • channels:join
    - Entrar em canais
  • files:write
    - Enviar arquivos

User Token Scopes:

  • chat:write
    - Enviar mensagens como usuário

3. Instalar App no Workspace

  1. Vá para "OAuth & Permissions"
  2. Clique em "Install to Workspace"
  3. Autorize o app
  4. Copie o Bot User OAuth Token

4. Configurar Credenciais no n8n

  1. No n8n, vá para Settings > Credentials
  2. Clique em "Add Credential"
  3. Selecione "Slack"
  4. Cole o Bot Token
  5. Teste a conexão

Nós Disponíveis

1. Slack Trigger

Dispara workflows baseados em eventos do Slack.

Eventos disponíveis:

  • message
    - Nova mensagem em canal
  • reaction_added
    - Reação adicionada
  • user_joined_channel
    - Usuário entrou no canal
  • file_shared
    - Arquivo compartilhado
  • channel_created
    - Canal criado

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


Nota de Atenção

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.