Conector Slack
Conecte seu workspace Slack ao Brevo via Tajo para notificações de marketing em tempo real, alertas para a equipe sobre eventos de clientes e automação de workflow disparada por interações no Slack.
Visão geral
| Propriedade | Valor |
|---|---|
| Plataforma | Slack |
| Categoria | Integração Personalizada |
| Complexidade de configuração | Fácil |
| Integração oficial | Sim |
| Dados sincronizados | Usuários, Canais, Mensagens, Eventos |
| URL base da API | https://slack.com/api |
Recursos
- Alertas de marketing - Envie notificações em tempo real para eventos de campanha, novos inscritos e marcos de receita
- Notificações de eventos de clientes - Alerte as equipes sobre ações de clientes de alto valor a partir do Brevo
- Gatilhos de workflow - Use interações do Slack (cliques em botões, envios de formulário) para disparar automações do Brevo
- Roteamento baseado em canal - Roteie notificações para canais específicos com base no tipo de evento ou segmento de cliente
- Sincronização de usuários - Mapeie usuários do workspace Slack para contatos do Brevo em comunicações internas
- Mensagens interativas - Envie mensagens ricas com botões e ações para workflows de equipe
- Mensagens agendadas - Agende notificações para resumos diários/semanais de marketing
- Suporte a threads - Agrupe notificações relacionadas em threads para comunicação organizada
Pré-requisitos
Antes de começar, certifique-se de ter:
- Um workspace Slack com acesso de admin
- Um app Slack criado em api.slack.com/apps
- Bot token com os escopos necessários
- Uma conta Brevo com acesso à API
- Uma conta Tajo
Autenticação
Bot Token (Recomendado)
Instale um app Slack no seu workspace e use o bot token para acesso à API.
- Crie o app em api.slack.com/apps
- Adicione os escopos OAuth necessários em “OAuth & Permissions”
- Instale o app no workspace
- Copie o Bot User OAuth Token (
xoxb-...)
curl -X POST "https://slack.com/api/chat.postMessage" \ -H "Authorization: Bearer xoxb-YOUR-BOT-TOKEN" \ -H "Content-Type: application/json" \ -d '{"channel": "C01234567", "text": "Hello from Tajo!"}'OAuth 2.0
Para distribuir sua integração Slack para múltiplos workspaces:
# Authorization URLhttps://slack.com/oauth/v2/authorize? client_id={client_id}& scope=chat:write,channels:read,users:read& redirect_uri={redirect_uri}
# Token exchangecurl -X POST "https://slack.com/api/oauth.v2.access" \ -d "client_id={client_id}" \ -d "client_secret={client_secret}" \ -d "code={auth_code}"Escopos de bot necessários
chat:write # Send messageschannels:read # List channelschannels:history # Read channel messagesusers:read # List workspace usersusers:read.email # Read user email addressesreactions:write # Add reactions to messagesfiles:write # Upload filesAcesso a e-mail do usuário
O escopo users:read.email é necessário para associar usuários do Slack a contatos do Brevo. Sem ele, o mapeamento de usuários ficará limitado a nomes de exibição.
Configuração
Configuração básica
connectors: slack: enabled: true bot_token: "${SLACK_BOT_TOKEN}" signing_secret: "${SLACK_SIGNING_SECRET}"
# Notification channels channels: marketing: "C01234567" sales: "C01234568" support: "C01234569" alerts: "C01234570"
# Event routing notifications: new_subscriber: channel: marketing template: subscriber_alert high_value_order: channel: sales template: order_alert support_ticket: channel: support template: ticket_alertMapeamento de campos
Mapeie dados de usuário do Slack para atributos de contato do Brevo:
Mapeamentos padrão
| Parameter | Type | Description |
|---|---|---|
profile.email required | string | E-mail do usuário (identificador único para correspondência no Brevo) |
real_name optional | string | Nome completo, dividido em FIRSTNAME/LASTNAME |
profile.phone optional | string | Mapeia para o atributo SMS |
profile.title optional | string | Cargo profissional |
tz optional | string | Fuso horário do usuário |
is_admin optional | boolean | Status de admin do workspace |
team_id optional | string | ID da equipe do workspace |
status_text optional | string | Status personalizado do usuário |
Métodos da API
Mensagens
| Método | Endpoint | Descrição |
|---|---|---|
POST | chat.postMessage | Enviar uma mensagem para um canal |
POST | chat.update | Atualizar uma mensagem existente |
POST | chat.delete | Excluir uma mensagem |
POST | chat.scheduleMessage | Agendar uma mensagem |
POST | chat.postEphemeral | Enviar mensagem efêmera ao usuário |
Canais
| Método | Endpoint | Descrição |
|---|---|---|
GET | conversations.list | Listar canais |
GET | conversations.info | Obter informações do canal |
GET | conversations.members | Listar membros do canal |
GET | conversations.history | Obter mensagens do canal |
Usuários
| Método | Endpoint | Descrição |
|---|---|---|
GET | users.list | Listar usuários do workspace |
GET | users.info | Obter informações do usuário |
GET | users.lookupByEmail | Buscar usuário por e-mail |
GET | users.conversations | Listar canais do usuário |
Interações
| Método | Endpoint | Descrição |
|---|---|---|
POST | views.open | Abrir uma view modal |
POST | views.update | Atualizar uma view modal |
POST | reactions.add | Adicionar reação emoji |
Eventos
Notificações Brevo-para-Slack
| Evento | Gatilho | Ação no Slack |
|---|---|---|
new_subscriber | Contato criado no Brevo | Publicar em #marketing |
campaign_sent | Campanha de e-mail enviada | Publicar resumo em #marketing |
order_placed | Pedido de alto valor detectado | Publicar em #sales com detalhes |
cart_abandoned | Carrinho abandonado por 30min | Publicar em #sales para follow-up |
ticket_created | Ticket de suporte aberto | Publicar em #support |
unsubscribed | Contato cancelou inscrição | Publicar alerta em #marketing |
Gatilhos Slack-para-Brevo
| Evento do Slack | Gatilho | Ação no Brevo |
|---|---|---|
message_action | Atalho de mensagem personalizado | Adicionar contato à lista ou disparar automação |
block_actions | Clique em botão na mensagem | Atualizar atributo do contato ou enviar e-mail |
view_submission | Formulário modal enviado | Criar contato ou disparar workflow |
Exemplos de código
Inicializar o conector
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Connect Slackawait tajo.connectors.connect('slack', { botToken: process.env.SLACK_BOT_TOKEN, signingSecret: process.env.SLACK_SIGNING_SECRET});Enviar notificações de marketing
// Send a notification when a high-value order is placedawait tajo.slack.notify({ channel: 'sales', event: 'order_placed', data: { orderValue: '$1,250.00', products: ['Premium Widget', 'Pro Service'], isFirstOrder: true }, template: { blocks: [ { type: 'header', text: { type: 'plain_text', text: 'New High-Value Order' } }, { type: 'section', fields: [ { type: 'mrkdwn', text: '*Amount:*\n$1,250.00' } ] }, { type: 'actions', elements: [ { type: 'button', text: { type: 'plain_text', text: 'View in Brevo' }, url: 'https://app.brevo.com/contacts' } ] } ] }});Tratar interações do Slack
import crypto from 'crypto';
app.post('/slack/interactions', async (req, res) => { // Verify Slack request signature const timestamp = req.headers['x-slack-request-timestamp']; const signature = req.headers['x-slack-signature']; const sigBasestring = `v0:${timestamp}:${req.rawBody}`; const mySignature = 'v0=' + crypto .createHmac('sha256', process.env.SLACK_SIGNING_SECRET) .update(sigBasestring) .digest('hex');
if (signature !== mySignature) { return res.status(401).send('Unauthorized'); }
const payload = JSON.parse(req.body.payload);
// Handle button actions if (payload.type === 'block_actions') { await tajo.connectors.handleWebhook('slack', { type: 'interaction', action: payload.actions[0].action_id, userId: payload.user.id, payload }); }
res.status(200).send();});Limites de taxa
Os limites de taxa da API Slack usam um sistema em camadas:
| Camada | Limite | Métodos comuns |
|---|---|---|
| Tier 1 | 1 requisição/minuto | chat.delete, conversations.kick |
| Tier 2 | 20 requisições/minuto | conversations.history, users.info |
| Tier 3 | 50 requisições/minuto | conversations.list, users.list |
| Tier 4 | 100 requisições/minuto | chat.postMessage |
| Especial | Varia | chat.postMessage para o mesmo canal: 1/seg |
Limites adicionais:
- Web API: Limite de burst com throttle de curto prazo
- Events API: Tentativas de entrega por 3 tentativas
- Incoming Webhooks: 1 mensagem/segundo por URL de webhook
- Block Kit: Máximo 50 blocos por mensagem
Taxa de publicação em canal
A publicação no mesmo canal é limitada a aproximadamente 1 mensagem por segundo. Agrupe notificações em lote ou use threads para evitar limitação de taxa.
Solução de problemas
Problemas comuns
| Problema | Causa | Solução |
|---|---|---|
not_authed | Bot token inválido | Reinstale o app e copie o novo bot token |
channel_not_found | Bot não está no canal | Convide o bot para o canal alvo |
missing_scope | Escopo necessário não concedido | Adicione o escopo e reinstale o app |
| Evento não recebido | Event subscription não configurada | Configure a URL de Event Subscriptions |
| Timeout de interação | Resposta >3 segundos | Responda com 200 imediatamente, processe de forma assíncrona |
Modo de depuração
Habilite logging detalhado:
connectors: slack: debug: true log_level: verbose log_events: trueTestar conexão
tajo connectors test slack# ✓ Bot token valid# ✓ Workspace accessible# ✓ Channels readable# ✓ Message posting enabled# ✓ Event subscriptions activeMelhores práticas
- Use Block Kit - Construa mensagens ricas e interativas com o framework Block Kit do Slack
- Responda rapidamente - Confirme as interações em 3 segundos, processe de forma assíncrona
- Agrupe mensagens relacionadas em thread - Agrupe notificações relacionadas em threads para reduzir ruído
- Roteie por canal - Envie diferentes tipos de eventos para canais apropriados da equipe
- Inclua botões de ação - Adicione botões “Ver no Brevo” para acesso rápido aos dados do cliente
- Implemente unfurling - Exiba previews ricos para links do Brevo compartilhados no Slack
Segurança
- Bot Token - Token de acesso com escopo OAuth e permissões granulares
- Assinatura de requisições - Verificação de assinatura HMAC SHA-256 para requisições recebidas
- OAuth 2.0 - Autorização padrão da indústria para distribuição em múltiplos workspaces
- Criptografia TLS - Toda a comunicação com a API é criptografada via HTTPS
- Rotação de tokens - Rotação automática de tokens para segurança aprimorada