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

EigenschapWaarde
PlatformSlack
CategorieCustom Integration
SetupcomplexiteitEenvoudig
Officiële integratieJa
Gesynchroniseerde dataGebruikers, Kanalen, Berichten, Events
API Base URLhttps://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:

  1. Een Slack-workspace met admin-toegang
  2. Een Slack-app aangemaakt op api.slack.com/apps
  3. Bot token met de vereiste scopes
  4. Een Brevo-account met API-toegang
  5. Een Tajo-account

Authenticatie

Bot Token (aanbevolen)

Installeer een Slack-app in je workspace en gebruik het bot token voor API-toegang.

  1. Maak een app aan op api.slack.com/apps
  2. Voeg vereiste OAuth-scopes toe onder “OAuth & Permissions”
  3. Installeer de app in de workspace
  4. Kopieer het Bot User OAuth Token (xoxb-...)
Terminal window
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:

Terminal window
# Authorization URL
https://slack.com/oauth/v2/authorize?
client_id={client_id}&
scope=chat:write,channels:read,users:read&
redirect_uri={redirect_uri}
# Token exchange
curl -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 messages
channels:read # List channels
channels:history # Read channel messages
users:read # List workspace users
users:read.email # Read user email addresses
reactions:write # Add reactions to messages
files:write # Upload files

Toegang 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_alert

Veldmapping

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

MethodEndpointBeschrijving
POSTchat.postMessageEen bericht naar een kanaal sturen
POSTchat.updateEen bestaand bericht bijwerken
POSTchat.deleteEen bericht verwijderen
POSTchat.scheduleMessageEen bericht plannen
POSTchat.postEphemeralEphemeral bericht naar gebruiker sturen

Kanalen

MethodEndpointBeschrijving
GETconversations.listKanalen opvragen
GETconversations.infoKanaalinfo ophalen
GETconversations.membersKanaalleden opvragen
GETconversations.historyKanaalberichten ophalen

Gebruikers

MethodEndpointBeschrijving
GETusers.listWorkspace-gebruikers opvragen
GETusers.infoGebruikersinfo ophalen
GETusers.lookupByEmailGebruiker zoeken op e-mail
GETusers.conversationsKanalen van gebruiker opvragen

Interacties

MethodEndpointBeschrijving
POSTviews.openEen modal-view openen
POSTviews.updateEen modal-view bijwerken
POSTreactions.addEmoji-reactie toevoegen

Events

Brevo-naar-Slack-notificaties

EventTriggerSlack-actie
new_subscriberContact aangemaakt in BrevoPost naar #marketing
campaign_sentE-mailcampagne verzondenSamenvatting posten naar #marketing
order_placedWaardevolle order gedetecteerdPost naar #sales met details
cart_abandonedWinkelwagen 30min verlatenPost naar #sales voor follow-up
ticket_createdSupportticket geopendPost naar #support
unsubscribedContact heeft uitgeschrevenAlert posten naar #marketing

Slack-naar-Brevo-triggers

Slack-eventTriggerBrevo-actie
message_actionCustom message shortcutContact toevoegen aan lijst of automatisering triggeren
block_actionsKnopklik in berichtContactattribuut bijwerken of e-mail versturen
view_submissionModal-formulier ingediendContact 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 Slack
await 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 placed
await tajo.slack.notify({
channel: 'sales',
event: 'order_placed',
data: {
customerEmail: '[email protected]',
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: '*Customer:*\n[email protected]' },
{ 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:

TierLimietVeelgebruikte methoden
Tier 11 request/minuutchat.delete, conversations.kick
Tier 220 requests/minuutconversations.history, users.info
Tier 350 requests/minuutconversations.list, users.list
Tier 4100 requests/minuutchat.postMessage
SpeciaalVariabelchat.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

ProbleemOorzaakOplossing
not_authedOngeldig bot tokenHerinstalleer app en kopieer nieuw bot token
channel_not_foundBot niet in kanaalNodig de bot uit in het doelkanaal
missing_scopeVereiste scope niet verleendVoeg scope toe en herinstalleer app
Event niet ontvangenEvent subscription niet ingesteldConfigureer Event Subscriptions URL
Interactie-timeoutResponse >3 secondenReageer direct met 200, verwerk asynchroon

Debugmodus

Schakel uitgebreide logging in:

connectors:
slack:
debug: true
log_level: verbose
log_events: true

Verbinding testen

Terminal window
tajo connectors test slack
# ✓ Bot token valid
# ✓ Workspace accessible
# ✓ Channels readable
# ✓ Message posting enabled
# ✓ Event subscriptions active

Best practices

  1. Gebruik Block Kit - Bouw rijke, interactieve berichten met Slack’s Block Kit-framework
  2. Reageer snel - Bevestig interacties binnen 3 seconden, verwerk asynchroon
  3. Thread gerelateerde berichten - Groepeer gerelateerde notificaties in threads om ruis te beperken
  4. Routeer per kanaal - Stuur verschillende eventtypes naar passende teamkanalen
  5. Voeg actieknoppen toe - Voeg “View in Brevo”-knoppen toe voor snelle toegang tot klantdata
  6. 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

Gerelateerde bronnen

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI-assistent

Hallo! Stel me vragen over de documentatie.