Slack-connector
Verbind je Slack-workspace met Brevo via Tajo voor realtime marketingnotificaties, teamalerts bij klantgebeurtenissen en workflow-automatisering die getriggerd wordt door Slack-interacties.
Overzicht
| Eigenschap | Waarde |
|---|---|
| Platform | Slack |
| Categorie | Custom Integration |
| Setupcomplexiteit | Eenvoudig |
| Officiële integratie | Ja |
| Gesynchroniseerde data | Gebruikers, Kanalen, Berichten, Events |
| API Base URL | https://slack.com/api |
Functies
- Marketingalerts - Stuur realtime notificaties voor campagne-events, nieuwe abonnees en omzetmijlpalen
- Klantgebeurtenisnotificaties - Waarschuw teams bij waardevolle klantacties vanuit Brevo
- Workflow-triggers - Gebruik Slack-interacties (knopkliks, formulierinzendingen) om Brevo-automatiseringen te triggeren
- Kanaalgebaseerde routing - Route notificaties naar specifieke kanalen op basis van eventtype of klantsegment
- Gebruikerssynchronisatie - Map Slack-workspace-gebruikers naar Brevo-contacten voor interne communicatie
- Interactieve berichten - Stuur rijke berichten met knoppen en acties voor teamworkflows
- Geplande berichten - Plan notificaties voor dagelijkse/wekelijkse marketing-samenvattingen
- Threadsondersteuning - Groepeer gerelateerde notificaties in threads voor georganiseerde communicatie
Vereisten
Voordat je begint, zorg dat je beschikt over:
- Een Slack-workspace met admin-toegang
- Een Slack-app aangemaakt op api.slack.com/apps
- Bot token met de vereiste scopes
- Een Brevo-account met API-toegang
- Een Tajo-account
Authenticatie
Bot Token (aanbevolen)
Installeer een Slack-app in je workspace en gebruik het bot token voor API-toegang.
- Maak een app aan op api.slack.com/apps
- Voeg vereiste OAuth-scopes toe onder “OAuth & Permissions”
- Installeer de app in de workspace
- Kopieer het 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
Voor het distribueren van je Slack-integratie naar meerdere 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}"Vereiste bot-scopes
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 filesToegang tot gebruikers-e-mails
De users:read.email-scope is vereist om Slack-gebruikers te matchen met Brevo-contacten. Zonder deze scope is gebruikersmapping beperkt tot displaynamen.
Configuratie
Basisinstelling
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_alertVeldmapping
Map Slack-gebruikersdata naar Brevo-contactattributen:
Standaardmappings
| Parameter | Type | Description |
|---|---|---|
profile.email required | string | E-mail van gebruiker (unieke identifier voor Brevo-matching) |
real_name optional | string | Volledige naam, gesplitst in FIRSTNAME/LASTNAME |
profile.phone optional | string | Mapt naar SMS-attribuut |
profile.title optional | string | Functietitel |
tz optional | string | Tijdzone van gebruiker |
is_admin optional | boolean | Workspace admin-status |
team_id optional | string | Workspace team-ID |
status_text optional | string | Custom status van gebruiker |
API-methoden
Berichten
| Method | Endpoint | Beschrijving |
|---|---|---|
POST | chat.postMessage | Een bericht naar een kanaal sturen |
POST | chat.update | Een bestaand bericht bijwerken |
POST | chat.delete | Een bericht verwijderen |
POST | chat.scheduleMessage | Een bericht plannen |
POST | chat.postEphemeral | Ephemeral bericht naar gebruiker sturen |
Kanalen
| Method | Endpoint | Beschrijving |
|---|---|---|
GET | conversations.list | Kanalen opvragen |
GET | conversations.info | Kanaalinfo ophalen |
GET | conversations.members | Kanaalleden opvragen |
GET | conversations.history | Kanaalberichten ophalen |
Gebruikers
| Method | Endpoint | Beschrijving |
|---|---|---|
GET | users.list | Workspace-gebruikers opvragen |
GET | users.info | Gebruikersinfo ophalen |
GET | users.lookupByEmail | Gebruiker zoeken op e-mail |
GET | users.conversations | Kanalen van gebruiker opvragen |
Interacties
| Method | Endpoint | Beschrijving |
|---|---|---|
POST | views.open | Een modal-view openen |
POST | views.update | Een modal-view bijwerken |
POST | reactions.add | Emoji-reactie toevoegen |
Events
Brevo-naar-Slack-notificaties
| Event | Trigger | Slack-actie |
|---|---|---|
new_subscriber | Contact aangemaakt in Brevo | Post naar #marketing |
campaign_sent | E-mailcampagne verzonden | Samenvatting posten naar #marketing |
order_placed | Waardevolle order gedetecteerd | Post naar #sales met details |
cart_abandoned | Winkelwagen 30min verlaten | Post naar #sales voor follow-up |
ticket_created | Supportticket geopend | Post naar #support |
unsubscribed | Contact heeft uitgeschreven | Alert posten naar #marketing |
Slack-naar-Brevo-triggers
| Slack-event | Trigger | Brevo-actie |
|---|---|---|
message_action | Custom message shortcut | Contact toevoegen aan lijst of automatisering triggeren |
block_actions | Knopklik in bericht | Contactattribuut bijwerken of e-mail versturen |
view_submission | Modal-formulier ingediend | Contact aanmaken of workflow triggeren |
Codevoorbeelden
Connector initialiseren
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});Marketingnotificaties versturen
// 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' } ] } ] }});Slack-interacties afhandelen
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();});Rate limits
Slack API-rate limits gebruiken een tier-systeem:
| Tier | Limiet | Veelgebruikte methoden |
|---|---|---|
| Tier 1 | 1 request/minuut | chat.delete, conversations.kick |
| Tier 2 | 20 requests/minuut | conversations.history, users.info |
| Tier 3 | 50 requests/minuut | conversations.list, users.list |
| Tier 4 | 100 requests/minuut | chat.postMessage |
| Speciaal | Variabel | chat.postMessage naar hetzelfde kanaal: 1/sec |
Aanvullende limieten:
- Web API: Burst limit met kortetermijn-throttling
- Events API: Delivery-retries voor 3 pogingen
- Incoming Webhooks: 1 bericht/seconde per webhook-URL
- Block Kit: Maximaal 50 blocks per bericht
Posting rate per kanaal
Posten naar hetzelfde kanaal is beperkt tot ongeveer 1 bericht per seconde. Batch notificaties of gebruik threads om rate limiting te voorkomen.
Probleemoplossing
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
not_authed | Ongeldig bot token | Herinstalleer app en kopieer nieuw bot token |
channel_not_found | Bot niet in kanaal | Nodig de bot uit in het doelkanaal |
missing_scope | Vereiste scope niet verleend | Voeg scope toe en herinstalleer app |
| Event niet ontvangen | Event subscription niet ingesteld | Configureer Event Subscriptions URL |
| Interactie-timeout | Response >3 seconden | Reageer direct met 200, verwerk asynchroon |
Debugmodus
Schakel uitgebreide logging in:
connectors: slack: debug: true log_level: verbose log_events: trueVerbinding testen
tajo connectors test slack# ✓ Bot token valid# ✓ Workspace accessible# ✓ Channels readable# ✓ Message posting enabled# ✓ Event subscriptions activeBest practices
- Gebruik Block Kit - Bouw rijke, interactieve berichten met Slack’s Block Kit-framework
- Reageer snel - Bevestig interacties binnen 3 seconden, verwerk asynchroon
- Thread gerelateerde berichten - Groepeer gerelateerde notificaties in threads om ruis te beperken
- Routeer per kanaal - Stuur verschillende eventtypes naar passende teamkanalen
- Voeg actieknoppen toe - Voeg “View in Brevo”-knoppen toe voor snelle toegang tot klantdata
- Implementeer unfurling - Toon rijke previews voor Brevo-links die in Slack worden gedeeld
Beveiliging
- Bot Token - OAuth-gescoopt access token met granulaire rechten
- Request signing - HMAC SHA-256-signatureverificatie voor binnenkomende requests
- OAuth 2.0 - Industriestandaard-autorisatie voor multi-workspace-distributie
- TLS-encryptie - Alle API-communicatie versleuteld via HTTPS
- Tokenrotatie - Automatische tokenrotatie voor extra beveiliging