Connettore Slack
Collega il tuo workspace Slack a Brevo tramite Tajo per notifiche marketing in real-time, alert di team sugli eventi cliente e automazione di workflow attivata da interazioni Slack.
Panoramica
| Proprietà | Valore |
|---|---|
| Piattaforma | Slack |
| Categoria | Custom Integration |
| Complessità di setup | Facile |
| Integrazione ufficiale | Sì |
| Dati sincronizzati | Utenti, Canali, Messaggi, Eventi |
| API Base URL | https://slack.com/api |
Funzionalità
- Alert marketing - Invia notifiche in real-time per eventi di campagna, nuovi iscritti e milestone di revenue
- Notifiche eventi cliente - Avverti i team sulle azioni dei clienti high-value da Brevo
- Trigger di workflow - Usa interazioni Slack (click sui pulsanti, invio form) per attivare automazioni Brevo
- Routing per canale - Instrada le notifiche verso canali specifici in base al tipo di evento o segmento cliente
- Sync utenti - Mappa gli utenti del workspace Slack sui contatti Brevo per comunicazioni interne
- Messaggi interattivi - Invia messaggi ricchi con pulsanti e azioni per i workflow del team
- Messaggi pianificati - Pianifica notifiche per riepiloghi marketing giornalieri/settimanali
- Supporto thread - Raggruppa notifiche correlate nei thread per una comunicazione organizzata
Prerequisiti
Prima di iniziare, assicurati di avere:
- Un workspace Slack con accesso admin
- Un’app Slack creata su api.slack.com/apps
- Un bot token con gli scope richiesti
- Un account Brevo con accesso API
- Un account Tajo
Autenticazione
Bot Token (consigliato)
Installa un’app Slack sul tuo workspace e usa il bot token per l’accesso API.
- Crea l’app su api.slack.com/apps
- Aggiungi gli scope OAuth richiesti sotto “OAuth & Permissions”
- Installa l’app nel workspace
- Copia il 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": "Ciao da Tajo!"}'OAuth 2.0
Per distribuire la tua integrazione Slack su più workspace:
# URL di autorizzazionehttps://slack.com/oauth/v2/authorize? client_id={client_id}& scope=chat:write,channels:read,users:read& redirect_uri={redirect_uri}
# Scambio del tokencurl -X POST "https://slack.com/api/oauth.v2.access" \ -d "client_id={client_id}" \ -d "client_secret={client_secret}" \ -d "code={auth_code}"Scope bot richiesti
chat:write # Invia messaggichannels:read # Elenca canalichannels:history # Leggi i messaggi del canaleusers:read # Elenca gli utenti del workspaceusers:read.email # Leggi gli indirizzi email degli utentireactions:write # Aggiungi reazioni ai messaggifiles:write # Carica fileAccesso all'email utente
Lo scope users:read.email è necessario per associare gli utenti Slack ai contatti Brevo. Senza di esso, il mapping utente sarà limitato ai nomi visualizzati.
Configurazione
Setup di base
connectors: slack: enabled: true bot_token: "${SLACK_BOT_TOKEN}" signing_secret: "${SLACK_SIGNING_SECRET}"
# Canali di notifica channels: marketing: "C01234567" sales: "C01234568" support: "C01234569" alerts: "C01234570"
# Routing eventi notifications: new_subscriber: channel: marketing template: subscriber_alert high_value_order: channel: sales template: order_alert support_ticket: channel: support template: ticket_alertMapping dei campi
Mappa i dati utente Slack sugli attributi dei contatti Brevo:
Mapping di default
| Parameter | Type | Description |
|---|---|---|
profile.email required | string | Email utente (identificatore univoco per il matching Brevo) |
real_name optional | string | Nome completo, suddiviso in FIRSTNAME/LASTNAME |
profile.phone optional | string | Mappa sull'attributo SMS |
profile.title optional | string | Titolo professionale |
tz optional | string | Fuso orario dell'utente |
is_admin optional | boolean | Stato admin del workspace |
team_id optional | string | ID team del workspace |
status_text optional | string | Stato personalizzato dell'utente |
Metodi API
Messaggistica
| Metodo | Endpoint | Descrizione |
|---|---|---|
POST | chat.postMessage | Invia un messaggio a un canale |
POST | chat.update | Aggiorna un messaggio esistente |
POST | chat.delete | Elimina un messaggio |
POST | chat.scheduleMessage | Pianifica un messaggio |
POST | chat.postEphemeral | Invia un messaggio effimero a un utente |
Canali
| Metodo | Endpoint | Descrizione |
|---|---|---|
GET | conversations.list | Elenca i canali |
GET | conversations.info | Ottieni info di un canale |
GET | conversations.members | Elenca i membri del canale |
GET | conversations.history | Ottieni i messaggi del canale |
Utenti
| Metodo | Endpoint | Descrizione |
|---|---|---|
GET | users.list | Elenca gli utenti del workspace |
GET | users.info | Ottieni info di un utente |
GET | users.lookupByEmail | Trova un utente tramite email |
GET | users.conversations | Elenca i canali dell’utente |
Interazioni
| Metodo | Endpoint | Descrizione |
|---|---|---|
POST | views.open | Apri una modal view |
POST | views.update | Aggiorna una modal view |
POST | reactions.add | Aggiungi una reazione emoji |
Eventi
Notifiche Brevo-Slack
| Evento | Trigger | Azione Slack |
|---|---|---|
new_subscriber | Contatto creato in Brevo | Pubblica su #marketing |
campaign_sent | Campagna email inviata | Pubblica il riepilogo su #marketing |
order_placed | Ordine high-value rilevato | Pubblica su #sales con i dettagli |
cart_abandoned | Carrello abbandonato per 30 min | Pubblica su #sales per il follow-up |
ticket_created | Ticket di supporto aperto | Pubblica su #support |
unsubscribed | Contatto disiscritto | Pubblica un alert su #marketing |
Trigger Slack-Brevo
| Evento Slack | Trigger | Azione Brevo |
|---|---|---|
message_action | Scorciatoia messaggio personalizzata | Aggiungi contatto a lista o attiva automazione |
block_actions | Click su un pulsante in un messaggio | Aggiorna attributo contatto o invia email |
view_submission | Form modale inviato | Crea contatto o attiva workflow |
Esempi di codice
Inizializzare il connettore
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Collega Slackawait tajo.connectors.connect('slack', { botToken: process.env.SLACK_BOT_TOKEN, signingSecret: process.env.SLACK_SIGNING_SECRET});Inviare notifiche marketing
// Invia una notifica quando viene effettuato un ordine high-valueawait 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: 'Nuovo ordine high-value' } }, { type: 'section', fields: [ { type: 'mrkdwn', text: '*Importo:*\n$1,250.00' } ] }, { type: 'actions', elements: [ { type: 'button', text: { type: 'plain_text', text: 'Vedi in Brevo' }, url: 'https://app.brevo.com/contacts' } ] } ] }});Gestire le interazioni Slack
import crypto from 'crypto';
app.post('/slack/interactions', async (req, res) => { // Verifica la firma della richiesta Slack 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);
// Gestisci le azioni sui pulsanti 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();});Limiti di rate
I rate limit dell’API Slack usano un sistema a tier:
| Tier | Limite | Metodi comuni |
|---|---|---|
| Tier 1 | 1 richiesta/minuto | chat.delete, conversations.kick |
| Tier 2 | 20 richieste/minuto | conversations.history, users.info |
| Tier 3 | 50 richieste/minuto | conversations.list, users.list |
| Tier 4 | 100 richieste/minuto | chat.postMessage |
| Speciale | Variabile | chat.postMessage sullo stesso canale: 1/sec |
Limiti aggiuntivi:
- Web API: Limite di burst con throttle a breve termine
- Events API: 3 retry di consegna
- Incoming Webhooks: 1 messaggio/secondo per URL webhook
- Block Kit: Massimo 50 block per messaggio
Rate di pubblicazione sul canale
La pubblicazione sullo stesso canale è limitata a circa 1 messaggio al secondo. Raggruppa le notifiche o usa i thread per evitare il rate limiting.
Risoluzione dei problemi
Problemi comuni
| Problema | Causa | Soluzione |
|---|---|---|
not_authed | Bot token non valido | Reinstalla l’app e copia il nuovo bot token |
channel_not_found | Bot non nel canale | Invita il bot nel canale target |
missing_scope | Scope richiesto non concesso | Aggiungi lo scope e reinstalla l’app |
| Evento non ricevuto | Sottoscrizione evento non impostata | Configura l’URL di Event Subscriptions |
| Timeout di interazione | Risposta >3 secondi | Rispondi con 200 immediatamente, elabora in modo asincrono |
Modalità debug
Abilita il logging verboso:
connectors: slack: debug: true log_level: verbose log_events: trueTestare la connessione
tajo connectors test slack# ✓ Bot token valido# ✓ Workspace accessibile# ✓ Canali leggibili# ✓ Pubblicazione messaggi abilitata# ✓ Event subscription attiveBest practice
- Usa Block Kit - Costruisci messaggi ricchi e interattivi con il framework Block Kit di Slack
- Rispondi rapidamente - Acknowledging delle interazioni entro 3 secondi, elabora in modo asincrono
- Metti in thread i messaggi correlati - Raggruppa le notifiche correlate nei thread per ridurre il rumore
- Instrada per canale - Invia tipi di evento diversi ai canali di team appropriati
- Includi pulsanti d’azione - Aggiungi pulsanti “Vedi in Brevo” per accesso rapido ai dati cliente
- Implementa l’unfurling - Mostra anteprime ricche per i link Brevo condivisi in Slack
Sicurezza
- Bot Token - Access token OAuth con scope e permessi granulari
- Request signing - Verifica firma HMAC SHA-256 per le richieste in ingresso
- OAuth 2.0 - Autorizzazione standard di settore per distribuzione multi-workspace
- Cifratura TLS - Tutte le comunicazioni API cifrate via HTTPS
- Rotazione token - Rotazione automatica dei token per maggiore sicurezza