SLACK_SEND_MESSAGE - Enviar Mensagem para Canal
O que é esta Tool?
A SLACK_SEND_MESSAGE é a tool responsável por enviar mensagens para canais públicos ou privados do Slack usando a API oficial do Slack via Slack Bot.
Por que esta Tool existe?
Enviar mensagens para o Slack requer autenticação via Bot Token e tratamento correto de canais. A SLACK_SEND_MESSAGE existe para:
- Notificações automatizadas: Enviar alertas, notificações e atualizações para equipes
- Integração com workflows: Conectar sistemas externos com canais do Slack
- Mensagens formatadas: Suporte a Markdown e Blocks API do Slack
- Comunicação assíncrona: Enviar mensagens sem interação manual
Como funciona internamente?
Quando a SLACK_SEND_MESSAGE é executada, o sistema:
- Autentica usando o Bot Token configurado
- Valida o canal (channel ID ou nome do canal)
- Formata a mensagem (texto simples, Markdown ou Blocks)
- Envia via API usando endpoint
chat.postMessage - Se erro: Retorna erro detalhado (canal não encontrado, sem permissão, etc.)
- Se sucesso: Retorna timestamp da mensagem (ts) e dados do canal
Código interno (productivity-executors.service.ts - implementação futura):
async executeSlackSendMessage(data: any, variables: Record<string, any>): Promise<any> {
const { channel, text, botToken, blocks, threadTs } = data;
const slackApiUrl = 'https://slack.com/api/chat.postMessage';
const headers = {
'Authorization': `Bearer ${botToken}`,
'Content-Type': 'application/json',
};
const payload = {
channel: channel,
text: text,
blocks: blocks || undefined,
thread_ts: threadTs || undefined,
};
const response = await axios.post(slackApiUrl, payload, { headers });
if (!response.data.ok) {
throw new Error(`Slack API error: ${response.data.error}`);
}
return {
success: true,
ts: response.data.ts,
channel: response.data.channel,
message: 'Message sent to Slack successfully',
};
}
Quando você DEVE usar esta Tool?
Use SLACK_SEND_MESSAGE sempre que precisar de enviar mensagens para canais do Slack:
Casos de uso
- Notificações de vendas: "Nova venda realizada! Cliente: João - Valor: R$ 1.500"
- Alertas de sistema: "⚠️ Servidor #3 atingiu 90% de CPU"
- Atualizações de pipeline: "Lead convertido em cliente - CRM atualizado"
- Reports automatizados: "📊 Report diário: 150 tickets resolvidos hoje"
- Integrações: Enviar dados de formulários, webhooks, APIs externas
- Threads: Responder em threads existentes usando thread_ts
Quando NÃO usar SLACK_SEND_MESSAGE
- Mensagens diretas: Use SLACK_SEND_DM para DMs individuais
- Upload de arquivos: Use SLACK_UPLOAD_FILE para enviar arquivos
- Criar canais: Use SLACK_CREATE_CHANNEL para criar novos canais
Parâmetros Detalhados
botToken (string, obrigatório)
O que é: Token de autenticação do Slack Bot (começa com xoxb-).
Como obter:
- Acesse https://api.slack.com/apps
- Crie um App ou selecione um existente
- Vá em OAuth & Permissions
- Adicione os scopes necessários:
chat:write,chat:write.public - Instale o App no workspace
- Copie o Bot User OAuth Token (xoxb-...)
Flow completo para testar:
{
"name": "Teste Slack - Enviar Mensagem Simples",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "slack_1",
"type": "slack_send_message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Enviar para Slack",
"parameters": {
"botToken": "xoxb-seu-token-aqui",
"channel": "C01234567",
"text": "Olá do Lumina Flow Builder!"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "✅ Mensagem enviada para o 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 aparecerá no canal do Slack especificado.
channel (string, obrigatório)
O que é: ID do canal ou nome do canal onde a mensagem será enviada.
Formatos aceitos:
- Channel ID:
C01234567(recomendado - mais confiável) - Channel name:
#geralougeral(com ou sem #)
Como obter o Channel ID:
- No Slack, clique com botão direito no canal
- Selecione View channel details
- Role até o final e copie o Channel ID
Flow completo para testar:
{
"name": "Teste Slack - Channel ID vs Name",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "slack_1",
"type": "slack_send_message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Enviar por ID",
"parameters": {
"botToken": "xoxb-seu-token-aqui",
"channel": "C01234567",
"text": "Enviado usando Channel ID"
}
}
},
{
"id": "slack_2",
"type": "slack_send_message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Enviar por Nome",
"parameters": {
"botToken": "xoxb-seu-token-aqui",
"channel": "geral",
"text": "Enviado usando channel name"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "slack_1" },
{ "source": "slack_1", "target": "slack_2" },
{ "source": "slack_2", "target": "end_1" }
]
}
Teste: Mensagens aparecerão no canal #geral.
text (string, obrigatório)
O que é: Conteúdo da mensagem que será enviada.
Formatação Markdown:
*negrito*
_itálico_
~riscado~
`código`
```código em bloco```
<https://exemplo.com|Texto do link>
Emojis:
:smile: :rocket: :fire: :tada:
Flow completo para testar:
{
"name": "Teste Slack - Mensagem Formatada",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "slack_1",
"type": "slack_send_message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Mensagem Rica",
"parameters": {
"botToken": "xoxb-seu-token-aqui",
"channel": "C01234567",
"text": "🚀 *Nova Venda Realizada!*\n\nCliente: João Silva\nValor: R$ 1.500,00\nStatus: ~Pendente~ *Aprovado*\n\n<https://crm.exemplo.com/venda/123|Ver detalhes>"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 500, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "slack_1" },
{ "source": "slack_1", "target": "end_1" }
]
}
blocks (array, opcional)
O que é: Array de blocos para mensagens interativas e visualmente ricas usando Slack Blocks API.
Padrão: undefined (usa apenas text)
Estrutura de Blocks:
{
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*Título da Seção*\nTexto formatado"
}
},
{
"type": "divider"
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": { "type": "plain_text", "text": "Aprovar" },
"style": "primary",
"action_id": "approve"
}
]
}
]
}
Teste: Use o Block Kit Builder do Slack: https://api.slack.com/block-kit/building
threadTs (string, opcional)
O que é: Timestamp da mensagem pai para responder em uma thread.
Padrão: undefined (cria nova mensagem no canal)
Como usar:
- Capture o
tsde uma mensagem anterior - Use esse valor em
threadTspara responder na thread
{
"parameters": {
"botToken": "xoxb-...",
"channel": "C01234567",
"text": "Esta é uma resposta na thread",
"threadTs": "1234567890.123456"
}
}
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| botToken | string | Sim | Token de autenticação do Bot (xoxb-...) |
| channel | string | Sim | ID ou nome do canal (#geral, C01234567) |
| text | string | Sim | Texto da mensagem (suporta Markdown) |
| blocks | array | Não | Blocks API para mensagens interativas |
| threadTs | string | Não | Timestamp para responder em thread |
Exemplo 1: Notificação de Venda
Objetivo: Notificar equipe de vendas sobre nova conversão
JSON para Importar
{
"name": "Notificação Venda 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 da Venda",
"parameters": {
"variableName": "venda",
"value": {
"cliente": "Maria Santos",
"valor": 2500,
"produto": "Plano Premium"
}
}
}
},
{
"id": "slack_1",
"type": "slack_send_message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Notificar Vendas",
"parameters": {
"botToken": "xoxb-seu-token-aqui",
"channel": "vendas",
"text": "💰 *Nova Venda Realizada!*\n\n👤 Cliente: {{venda.cliente}}\n💵 Valor: R$ {{venda.valor}}\n📦 Produto: {{venda.produto}}\n\n✅ Parabéns à equipe!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "slack_1" },
{ "source": "slack_1", "target": "end_1" }
]
}
Saída esperada no Slack:
💰 Nova Venda Realizada!
👤 Cliente: Maria Santos
💵 Valor: R$ 2500
📦 Produto: Plano Premium
✅ Parabéns à equipe!
Exemplo 2: Alerta de Sistema
Objetivo: Enviar alertas de monitoramento para canal de DevOps
JSON para Importar
{
"name": "Alert Sistema Slack",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "slack_1",
"type": "slack_send_message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Alerta Crítico",
"parameters": {
"botToken": "xoxb-seu-token-aqui",
"channel": "devops-alerts",
"text": "🚨 *ALERTA CRÍTICO*\n\n🖥️ Servidor: api-prod-01\n📊 CPU: 95%\n💾 Memória: 88%\n⏰ Timestamp: 2025-01-15 10:30:00\n\n@channel Por favor, verificar imediatamente!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 500, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "slack_1" },
{ "source": "slack_1", "target": "end_1" }
]
}
Saída esperada no Slack:
🚨 ALERTA CRÍTICO
🖥️ Servidor: api-prod-01
📊 CPU: 95%
💾 Memória: 88%
⏰ Timestamp: 2025-01-15 10:30:00
@channel Por favor, verificar imediatamente!
Exemplo 3: Report Diário
Objetivo: Enviar relatório automatizado todos os dias
JSON para Importar
{
"name": "Report Diário Slack",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "slack_1",
"type": "slack_send_message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Report",
"parameters": {
"botToken": "xoxb-seu-token-aqui",
"channel": "reports",
"text": "📊 *Report Diário - 15/01/2025*\n\n✅ Tickets resolvidos: 150\n⏳ Tickets pendentes: 45\n📈 Taxa de resolução: 77%\n⭐ Satisfação média: 4.5/5\n\n_Report gerado automaticamente às 18:00_"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 500, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "slack_1" },
{ "source": "slack_1", "target": "end_1" }
]
}
Resposta da Tool
{
"success": true,
"ts": "1234567890.123456",
"channel": "C01234567",
"message": "Message sent to Slack successfully"
}
Setup do Slack App
1. Criar Slack App
- Acesse https://api.slack.com/apps
- Clique em Create New App
- Escolha From scratch
- Nome: "Lumina Flow Builder"
- Workspace: Selecione seu workspace
2. Configurar Permissões (Scopes)
Em OAuth & Permissions, adicione Bot Token Scopes:
✅ Obrigatórios:
chat:write- Enviar mensagens como botchat:write.public- Enviar em canais públicos sem ser membro
✅ Opcionais:
channels:read- Ler informações de canais públicosgroups:read- Ler informações de canais privados
3. Instalar App no Workspace
- Clique em Install to Workspace
- Autorize as permissões
- Copie o Bot User OAuth Token (xoxb-...)
4. Adicionar Bot aos Canais
Para canais privados:
- Abra o canal no Slack
- Digite
/invite @Lumina Flow Builder - Confirme
Para canais públicos: Não é necessário (scope chat:write.public)
Boas Práticas
✅ SIM:
- Usar Channel IDs ao invés de nomes (mais confiável)
- Formatar mensagens com Markdown para melhor legibilidade
- Incluir emojis para destacar informações importantes
- Usar @channel ou @here com moderação (notifica todos)
- Armazenar Bot Token em variáveis de ambiente (segurança)
- Usar Blocks API para mensagens interativas
- Capturar
tspara responder em threads
❌ NÃO:
- Não exponha o Bot Token no código
- Não envie mensagens muito longas (limite: 4000 caracteres)
- Não abuse de @channel (causa fadiga de notificações)
- Não envie informações sensíveis sem criptografia
Dicas
💡 Channel ID vs Name: Use sempre Channel ID (C01234567) para evitar erros se o canal for renomeado
💡 Markdown: Use *negrito* para destacar informações importantes
💡 Threads: Salve o ts retornado para criar threads organizadas
💡 Blocks API: Para mensagens complexas com botões e campos, use blocks: https://api.slack.com/block-kit
💡 Rate Limits: Slack permite 1 mensagem por segundo. Para alto volume, implemente throttling
💡 Testes: Use https://api.slack.com/methods/chat.postMessage/test para testar payloads
Erros Comuns
not_in_channel
Causa: Bot não foi adicionado ao canal privado
Solução: Adicione o bot com /invite @Lumina Flow Builder
channel_not_found
Causa: Channel ID inválido ou canal não existe Solução: Verifique o Channel ID no Slack
invalid_auth
Causa: Bot Token inválido ou expirado Solução: Gere novo token em api.slack.com/apps
token_revoked
Causa: App foi desinstalado do workspace Solução: Reinstale o app no workspace
Próxima Tool
→ SLACK_SEND_DM - Enviar mensagem direta → SLACK_UPLOAD_FILE - Upload de arquivos → SLACK_CREATE_CHANNEL - Criar canal