Conector de Slack
Conecta tu workspace de Slack con Brevo mediante Tajo para recibir notificaciones de marketing en tiempo real, alertas de equipo ante eventos de cliente y automatizaciones de flujo activadas por interacciones en Slack.
Resumen
| Propiedad | Valor |
|---|---|
| Plataforma | Slack |
| Categoría | Integración personalizada |
| Complejidad de configuración | Fácil |
| Integración oficial | Sí |
| Datos sincronizados | Usuarios, Canales, Mensajes, Eventos |
| URL base de la API | https://slack.com/api |
Funcionalidades
- Alertas de marketing - Envía notificaciones en tiempo real de eventos de campaña, nuevos suscriptores e hitos de ingresos
- Notificaciones de eventos de cliente - Alerta a los equipos sobre acciones de cliente de alto valor desde Brevo
- Triggers de workflow - Usa interacciones de Slack (clics de botones, envíos de formularios) para activar automatizaciones de Brevo
- Enrutamiento por canal - Enruta las notificaciones a canales específicos según el tipo de evento o el segmento de cliente
- Sincronización de usuarios - Asocia los usuarios del workspace de Slack con contactos de Brevo para comunicaciones internas
- Mensajes interactivos - Envía mensajes enriquecidos con botones y acciones para flujos de equipo
- Mensajes programados - Programa notificaciones para resúmenes de marketing diarios o semanales
- Soporte de hilos - Agrupa notificaciones relacionadas en hilos para una comunicación organizada
Requisitos previos
Antes de empezar, asegúrate de tener:
- Un workspace de Slack con acceso de administrador
- Una app de Slack creada en api.slack.com/apps
- Un bot token con los scopes necesarios
- Una cuenta de Brevo con acceso a la API
- Una cuenta de Tajo
Autenticación
Bot Token (recomendado)
Instala una app de Slack en tu workspace y usa el bot token para acceder a la API.
- Crea la app en api.slack.com/apps
- Añade los scopes de OAuth necesarios en “OAuth & Permissions”
- Instala la app en el workspace
- Copia el 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 tu integración de Slack a varios 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}"Scopes de bot obligatorios
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 filesAcceso al email del usuario
El scope users:read.email es obligatorio para emparejar usuarios de Slack con contactos de Brevo. Sin él, la asignación de usuarios se limitará a los nombres mostrados.
Configuración
Configuración 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_alertAsignación de campos
Asocia los datos de usuario de Slack con los atributos de contacto de Brevo:
Default Mappings
| Parameter | Type | Description |
|---|---|---|
profile.email required | string | Email del usuario (identificador único para emparejar con Brevo) |
real_name optional | string | Nombre completo, dividido en FIRSTNAME/LASTNAME |
profile.phone optional | string | Se asigna al atributo SMS |
profile.title optional | string | Cargo profesional |
tz optional | string | Zona horaria del usuario |
is_admin optional | boolean | Si el usuario es administrador del workspace |
team_id optional | string | ID del equipo del workspace |
status_text optional | string | Estado personalizado del usuario |
Métodos de la API
Mensajería
| Método | Endpoint | Descripción |
|---|---|---|
POST | chat.postMessage | Enviar un mensaje a un canal |
POST | chat.update | Actualizar un mensaje existente |
POST | chat.delete | Eliminar un mensaje |
POST | chat.scheduleMessage | Programar un mensaje |
POST | chat.postEphemeral | Enviar un mensaje efímero a un usuario |
Canales
| Método | Endpoint | Descripción |
|---|---|---|
GET | conversations.list | Listar canales |
GET | conversations.info | Obtener información del canal |
GET | conversations.members | Listar miembros del canal |
GET | conversations.history | Obtener mensajes del canal |
Usuarios
| Método | Endpoint | Descripción |
|---|---|---|
GET | users.list | Listar usuarios del workspace |
GET | users.info | Obtener información del usuario |
GET | users.lookupByEmail | Buscar usuario por email |
GET | users.conversations | Listar canales del usuario |
Interacciones
| Método | Endpoint | Descripción |
|---|---|---|
POST | views.open | Abrir una vista modal |
POST | views.update | Actualizar una vista modal |
POST | reactions.add | Añadir una reacción de emoji |
Eventos
Notificaciones de Brevo a Slack
| Evento | Desencadenante | Acción en Slack |
|---|---|---|
new_subscriber | Contacto creado en Brevo | Publicar en #marketing |
campaign_sent | Campaña de email enviada | Publicar resumen en #marketing |
order_placed | Pedido de alto valor detectado | Publicar en #sales con los detalles |
cart_abandoned | Carrito abandonado durante 30 min | Publicar en #sales para seguimiento |
ticket_created | Ticket de soporte abierto | Publicar en #support |
unsubscribed | Contacto dado de baja | Publicar alerta en #marketing |
Triggers de Slack a Brevo
| Evento de Slack | Desencadenante | Acción en Brevo |
|---|---|---|
message_action | Shortcut de mensaje personalizado | Añadir contacto a lista o activar automatización |
block_actions | Clic de botón en mensaje | Actualizar atributo de contacto o enviar email |
view_submission | Formulario modal enviado | Crear contacto o activar workflow |
Ejemplos de código
Inicializar el 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 notificaciones 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' } ] } ] }});Gestionar interacciones de 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();});Límites de velocidad
Los límites de velocidad de la API de Slack usan un sistema por niveles:
| Nivel | Límite | Métodos habituales |
|---|---|---|
| Tier 1 | 1 petición/minuto | chat.delete, conversations.kick |
| Tier 2 | 20 peticiones/minuto | conversations.history, users.info |
| Tier 3 | 50 peticiones/minuto | conversations.list, users.list |
| Tier 4 | 100 peticiones/minuto | chat.postMessage |
| Especial | Varía | chat.postMessage al mismo canal: 1/s |
Límites adicionales:
- Web API: Límite por ráfagas con throttling a corto plazo
- Events API: Reintentos de entrega durante 3 intentos
- Incoming Webhooks: 1 mensaje/segundo por URL de webhook
- Block Kit: Máximo 50 bloques por mensaje
Frecuencia de publicación en canal
La publicación en el mismo canal está limitada a aproximadamente 1 mensaje por segundo. Agrupa notificaciones o usa hilos para evitar el rate limiting.
Resolución de problemas
Problemas habituales
| Problema | Causa | Solución |
|---|---|---|
not_authed | Bot token no válido | Reinstala la app y copia el nuevo bot token |
channel_not_found | El bot no está en el canal | Invita al bot al canal de destino |
missing_scope | Scope requerido no concedido | Añade el scope y reinstala la app |
| Evento no recibido | Suscripción de eventos no configurada | Configura la URL de Event Subscriptions |
| Timeout de interacción | Respuesta >3 segundos | Responde con 200 de inmediato y procesa de forma asíncrona |
Modo depuración
Activa el logging detallado:
connectors: slack: debug: true log_level: verbose log_events: trueProbar la conexión
tajo connectors test slack# ✓ Bot token valid# ✓ Workspace accessible# ✓ Channels readable# ✓ Message posting enabled# ✓ Event subscriptions activeBuenas prácticas
- Usa Block Kit - Crea mensajes ricos e interactivos con el framework Block Kit de Slack
- Responde con rapidez - Confirma las interacciones en menos de 3 segundos y procesa de forma asíncrona
- Agrupa mensajes en hilos - Agrupa notificaciones relacionadas en hilos para reducir el ruido
- Enruta por canal - Envía distintos tipos de eventos a los canales de equipo apropiados
- Incluye botones de acción - Añade botones “Ver en Brevo” para acceder rápido a los datos del cliente
- Implementa unfurling - Muestra vistas previas enriquecidas para enlaces de Brevo compartidos en Slack
Seguridad
- Bot Token - Token de acceso con scopes de OAuth y permisos granulares
- Firma de peticiones - Verificación de firma HMAC SHA-256 para peticiones entrantes
- OAuth 2.0 - Autorización estándar del sector para distribución en varios workspaces
- Cifrado TLS - Toda la comunicación con la API cifrada vía HTTPS
- Rotación de tokens - Rotación automática de tokens para mayor seguridad