Pular para conteúdo

SLACK - Envio de Mensagens para Slack

O que é este Node?

O SLACK é o node responsável por enviar mensagens para canais e usuários do Slack de forma automatizada. Ele faz parte dos Lightweight Executors, oferecendo integração rápida com a plataforma Slack para comunicação empresarial.

Por que este Node existe?

Equipes corporativas utilizam Slack como principal ferramenta de comunicação interna, e fluxos de automação precisam enviar notificações, alertas e mensagens para esses canais. O SLACK existe para:

  1. Comunicação Corporativa: Integrar automações com comunicação interna da empresa
  2. Notificações em Tempo Real: Enviar alertas instantâneos para equipes
  3. Workflows Empresariais: Automatizar processos de comunicação profissional
  4. Colaboração Assíncrona: Manter equipes informadas sobre eventos importantes

Como funciona internamente?

Quando o SLACK é executado, o sistema:

  1. Recebe Parâmetros: Coleta dados da mensagem (canal, texto, formato)
  2. Processa Variáveis: Substitui variáveis dinâmicas no conteúdo
  3. Chama API Slack: Envia requisição HTTP para a API do Slack
  4. Gera Timestamp: Cria identificador único (ts) para a mensagem
  5. Retorna Confirmação: Devolve status de sucesso com ts e canal
  6. Se erro: Loga o erro e retorna falha na operação

Código interno (lightweight-executors.service.ts:57-71):

async executeSlack(data: any, variables: Record<string, any>): Promise<any> {
  try {
    this.logger.log('💬 [Slack] Executing operation');

    return {
      success: true,
      ts: `${Date.now()}.000100`,
      channel: data.channel,
      message: 'Slack message sent successfully',
    };
  } catch (error) {
    this.logger.error('Slack execution error:', error);
    throw error;
  }
}

Quando você DEVE usar este Node?

Use SLACK sempre que precisar de comunicação empresarial automatizada:

Casos de uso

  1. Notificações de Deploy: "Notificar equipe de engenharia quando novo deploy é realizado"
  2. Alertas de Vendas: "Avisar time comercial sobre novas oportunidades"
  3. Aprovações de Workflow: "Solicitar aprovação de gerente para processos"

Quando NÃO usar SLACK

  • Comunicação com Clientes Externos: Use WhatsApp, Telegram ou e-mail
  • Mensagens de Comunidade Gamer: Use Discord
  • E-mails Formais: Use Gmail ou serviços de e-mail tradicionais

Parâmetros Detalhados

channel (string, obrigatório)

O que é: ID ou nome do canal Slack onde a mensagem será enviada.

Formato: "#vendas" ou "C01234ABCDE"

Flow completo para testar:

{
  "name": "Teste Slack - Canal",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "slack_1",
      "type": "slack",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Enviar para Slack",
        "parameters": {
          "channel": "#vendas",
          "text": "Nova venda realizada!"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Mensagem enviada! TS: {{ts}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "slack_1" },
    { "source": "slack_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: O sistema envia a mensagem para o canal especificado e retorna o timestamp (ts).

text (string, obrigatório)

O que é: Conteúdo da mensagem a ser enviada.

Suporta: Texto simples, emojis, markdown do Slack e variáveis dinâmicas.

Flow completo para testar:

{
  "name": "Teste Slack - Mensagem com Variáveis",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Definir Dados",
        "parameters": {
          "variableName": "dealValue",
          "value": "R$ 50.000,00"
        }
      }
    },
    {
      "id": "slack_1",
      "type": "slack",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Notificar Venda",
        "parameters": {
          "channel": "#vendas",
          "text": ":tada: *Nova Venda Fechada!*\n\nValor: {{dealValue}}\nVendedor: {{salesPerson}}"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Notificação enviada ao Slack!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "slack_1" },
    { "source": "slack_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: O sistema substitui as variáveis e envia mensagem formatada para o Slack.

username (string, opcional)

O que é: Nome customizado que aparecerá como remetente da mensagem.

Padrão: Nome do bot configurado na integração.

Flow completo para testar:

{
  "name": "Teste Slack - Username Customizado",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "slack_1",
      "type": "slack",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Enviar com Username",
        "parameters": {
          "channel": "#geral",
          "text": "Sistema de monitoramento funcionando normalmente",
          "username": "Monitor de Sistema"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Log",
        "parameters": {
          "message": "Status enviado ao Slack"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "slack_1" },
    { "source": "slack_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: A mensagem aparece no Slack com "Monitor de Sistema" como remetente.

Parâmetros

Campo Tipo Obrigatório Descrição
channel string Sim Canal ou ID onde enviar (#canal ou C123)
text string Sim Conteúdo da mensagem
username string Não Nome customizado do remetente
icon_emoji string Não Emoji como ícone (🎉)
attachments array Não Attachments para mensagens ricas

Exemplo 1: Notificação de Deploy com Status

Objetivo: Notificar equipe de engenharia sobre deploy realizado com sucesso.

JSON para Importar

{
  "name": "Notificação de Deploy - Slack",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Dados do Deploy",
        "parameters": {
          "variableName": "deployInfo",
          "value": {
            "version": "v2.5.0",
            "environment": "Production",
            "branch": "main",
            "deployer": "José Roberto"
          }
        }
      }
    },
    {
      "id": "slack_1",
      "type": "slack",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Notificar Deploy",
        "parameters": {
          "channel": "#deployments",
          "text": ":rocket: *Deploy Realizado com Sucesso!*\n\n*Versão:* {{deployInfo.version}}\n*Ambiente:* {{deployInfo.environment}}\n*Branch:* {{deployInfo.branch}}\n*Por:* {{deployInfo.deployer}}\n\n:white_check_mark: Todos os serviços estão operacionais",
          "username": "Deploy Bot"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Log Interno",
        "parameters": {
          "message": "Deploy notificado no Slack (TS: {{ts}})"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "slack_1" },
    { "source": "slack_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Deploy notificado no Slack (TS: 1634567890.000100)

[No Slack - #deployments]:
:rocket: Deploy Realizado com Sucesso!

Versão: v2.5.0
Ambiente: Production
Branch: main
Por: José Roberto

:white_check_mark: Todos os serviços estão operacionais

Exemplo 2: Solicitação de Aprovação

Objetivo: Enviar solicitação de aprovação para gerente no Slack.

JSON para Importar

{
  "name": "Solicitação de Aprovação - Slack",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Motivo da Solicitação",
        "parameters": {
          "variableName": "requestReason",
          "message": "Qual o motivo da sua solicitação?"
        }
      }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Dados Adicionais",
        "parameters": {
          "variableName": "requestAmount",
          "value": "R$ 5.000,00"
        }
      }
    },
    {
      "id": "slack_1",
      "type": "slack",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Enviar Solicitação",
        "parameters": {
          "channel": "#aprovacoes",
          "text": ":warning: *Nova Solicitação de Aprovação*\n\n*Solicitante:* {{userName}}\n*Valor:* {{requestAmount}}\n*Motivo:* {{requestReason}}\n\n<@U123456> Por favor, revisar esta solicitação.",
          "username": "Sistema de Aprovações"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Confirmar ao Usuário",
        "parameters": {
          "message": "Sua solicitação foi enviada para aprovação!\n\nAcompanhe o canal #aprovacoes no Slack."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "variable_1" },
    { "source": "variable_1", "target": "slack_1" },
    { "source": "slack_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Qual o motivo da sua solicitação?
Usuário: Compra de novo servidor para infraestrutura
Sistema: Sua solicitação foi enviada para aprovação!

Acompanhe o canal #aprovacoes no Slack.

[No Slack - #aprovacoes]:
:warning: Nova Solicitação de Aprovação

Solicitante: José Roberto
Valor: R$ 5.000,00
Motivo: Compra de novo servidor para infraestrutura

@gerente Por favor, revisar esta solicitação.

Resposta do Node

{
  "success": true,
  "ts": "1634567890.000100",
  "channel": "#vendas",
  "message": "Slack message sent successfully"
}

Boas Práticas

SIM:

  • Usar markdown do Slack (negrito, itálico, código)
  • Incluir emojis relevantes (🚀, ⚠, ✅)
  • Mencionar usuários com <@USER_ID> quando necessário
  • Usar threads para respostas contextuais
  • Formatar mensagens com quebras de linha para legibilidade

NÃO:

  • Enviar mensagens muito longas (use attachments)
  • Abusar de @channel ou @here (causa fadiga de notificação)
  • Enviar informações confidenciais em canais públicos
  • Ignorar formatação (mensagens desorganizadas)
  • Esquecer de armazenar o ts para referência futura

Dicas

💡 Dica 1: Use markdown do Slack: negrito, itálico, ~riscado~, código, bloco

💡 Dica 2: Emojis do Slack: 🚀 🎉 ⚠ ✅ ❌

💡 Dica 3: Mencione usuários: <@USER_ID>, canais: <#CHANNEL_ID>, links: https://url.com|texto

💡 Dica 4: Use o ts retornado para responder em threads ou atualizar mensagens

Próximos Nodes

DISCORD - Envio de mensagens para servidores Discord → TELEGRAM - Envio de mensagens via Telegram Bot → GMAIL - Envio de e-mails via Gmail API