Slack-koppling
Anslut din Slack-arbetsyta till Brevo via Tajo för marknadsföringsnotifieringar i realtid, teamvarningar om kundhändelser och arbetsflödesautomation utlöst av Slack-interaktioner.
Översikt
| Egenskap | Värde |
|---|---|
| Plattform | Slack |
| Kategori | Anpassad integration |
| Installationskomplexitet | Enkel |
| Officiell integration | Ja |
| Data som synkas | Användare, kanaler, meddelanden, händelser |
| API bas-URL | https://slack.com/api |
Funktioner
- Marknadsföringsvarningar - Skicka realtidsnotifieringar för kampanjhändelser, nya prenumeranter och intäktsmilstolpar
- Notifieringar för kundhändelser - Varna team om värdefulla kundåtgärder från Brevo
- Arbetsflödesutlösare - Använd Slack-interaktioner (knapptryckningar, formulärinlämningar) för att utlösa Brevo-automationer
- Kanalbaserad dirigering - Dirigera notifieringar till specifika kanaler baserat på händelsetyp eller kundsegment
- Användarsynkronisering - Mappa användare i Slack-arbetsytan till Brevo-kontakter för intern kommunikation
- Interaktiva meddelanden - Skicka rika meddelanden med knappar och åtgärder för teamarbetsflöden
- Schemalagda meddelanden - Schemalägg notifieringar för dagliga/veckovisa marknadsföringssammanfattningar
- Trådstöd - Gruppera relaterade notifieringar i trådar för organiserad kommunikation
Förutsättningar
Innan du börjar, se till att du har:
- En Slack-arbetsyta med adminåtkomst
- En Slack-app skapad på api.slack.com/apps
- Bot-token med nödvändiga scopes
- Ett Brevo-konto med API-åtkomst
- Ett Tajo-konto
Autentisering
Bot-token (rekommenderas)
Installera en Slack-app i din arbetsyta och använd bot-token för API-åtkomst.
- Skapa app på api.slack.com/apps
- Lägg till nödvändiga OAuth-scopes under “OAuth & Permissions”
- Installera app i arbetsytan
- Kopiera 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
För att distribuera din Slack-integration till flera arbetsytor:
# 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}"Nödvändiga 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 filesÅtkomst till användares e-post
Scopen users:read.email krävs för att matcha Slack-användare med Brevo-kontakter. Utan den begränsas användarmappning till visningsnamn.
Konfiguration
Grundinställning
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_alertFältmappning
Mappa Slack-användardata till Brevo-kontaktattribut:
Standardmappningar
| Parameter | Type | Description |
|---|---|---|
profile.email required | string | Användarens e-post (unik identifierare för Brevo-matchning) |
real_name optional | string | Fullständigt namn, uppdelat i FIRSTNAME/LASTNAME |
profile.phone optional | string | Mappas till SMS-attributet |
profile.title optional | string | Jobbtitel |
tz optional | string | Användarens tidszon |
is_admin optional | boolean | Status för arbetsytans admin |
team_id optional | string | Arbetsytans team-ID |
status_text optional | string | Användarens anpassade status |
API-metoder
Meddelanden
| Metod | Endpoint | Beskrivning |
|---|---|---|
POST | chat.postMessage | Skicka ett meddelande till en kanal |
POST | chat.update | Uppdatera ett befintligt meddelande |
POST | chat.delete | Radera ett meddelande |
POST | chat.scheduleMessage | Schemalägg ett meddelande |
POST | chat.postEphemeral | Skicka ephemerärt meddelande till användare |
Kanaler
| Metod | Endpoint | Beskrivning |
|---|---|---|
GET | conversations.list | Lista kanaler |
GET | conversations.info | Hämta kanalinfo |
GET | conversations.members | Lista kanalmedlemmar |
GET | conversations.history | Hämta kanalmeddelanden |
Användare
| Metod | Endpoint | Beskrivning |
|---|---|---|
GET | users.list | Lista användare i arbetsytan |
GET | users.info | Hämta användarinfo |
GET | users.lookupByEmail | Hitta användare via e-post |
GET | users.conversations | Lista användarens kanaler |
Interaktioner
| Metod | Endpoint | Beskrivning |
|---|---|---|
POST | views.open | Öppna en modalvy |
POST | views.update | Uppdatera en modalvy |
POST | reactions.add | Lägg till emoji-reaktion |
Händelser
Brevo-till-Slack-notifieringar
| Händelse | Utlösare | Slack-åtgärd |
|---|---|---|
new_subscriber | Kontakt skapad i Brevo | Posta till #marketing |
campaign_sent | E-postkampanj skickad | Posta sammanfattning till #marketing |
order_placed | Värdefull beställning upptäckt | Posta till #sales med detaljer |
cart_abandoned | Kundvagn övergiven i 30 min | Posta till #sales för uppföljning |
ticket_created | Supportärende öppnat | Posta till #support |
unsubscribed | Kontakt avprenumererade | Posta varning till #marketing |
Slack-till-Brevo-utlösare
| Slack-händelse | Utlösare | Brevo-åtgärd |
|---|---|---|
message_action | Anpassad meddelandegenväg | Lägg till kontakt i lista eller utlös automation |
block_actions | Knapptryckning i meddelande | Uppdatera kontaktattribut eller skicka e-post |
view_submission | Modalformulär inskickat | Skapa kontakt eller utlös arbetsflöde |
Kodexempel
Initiera kopplingen
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});Skicka marknadsföringsnotifieringar
// 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' } ] } ] }});Hantera Slack-interaktioner
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();});Hastighetsbegränsningar
Slacks API-hastighetsbegränsningar använder ett nivåbaserat system:
| Nivå | Gräns | Vanliga metoder |
|---|---|---|
| Tier 1 | 1 förfrågan/minut | chat.delete, conversations.kick |
| Tier 2 | 20 förfrågningar/minut | conversations.history, users.info |
| Tier 3 | 50 förfrågningar/minut | conversations.list, users.list |
| Tier 4 | 100 förfrågningar/minut | chat.postMessage |
| Specialfall | Varierar | chat.postMessage till samma kanal: 1/sek |
Ytterligare gränser:
- Web API: Burst-gräns med kortvarig strypning
- Events API: Leveransåterförsök i 3 försök
- Inkommande webhooks: 1 meddelande/sekund per webhook-URL
- Block Kit: Maximalt 50 block per meddelande
Postningshastighet för kanal
Att posta till samma kanal är begränsat till ungefär 1 meddelande per sekund. Batcha notifieringar eller använd trådar för att undvika hastighetsbegränsning.
Felsökning
Vanliga problem
| Problem | Orsak | Lösning |
|---|---|---|
not_authed | Ogiltig bot-token | Installera om appen och kopiera ny bot-token |
channel_not_found | Bot inte i kanal | Bjud in boten till målkanalen |
missing_scope | Nödvändigt scope ej beviljat | Lägg till scope och installera om appen |
| Händelse ej mottagen | Händelseprenumeration ej satt | Konfigurera Event Subscriptions URL |
| Interaktionstimeout | Svar > 3 sekunder | Svara med 200 omedelbart, behandla asynkront |
Felsökningsläge
Aktivera utförlig loggning:
connectors: slack: debug: true log_level: verbose log_events: trueTesta anslutning
tajo connectors test slack# ✓ Bot token valid# ✓ Workspace accessible# ✓ Channels readable# ✓ Message posting enabled# ✓ Event subscriptions activeBästa praxis
- Använd Block Kit - Bygg rika, interaktiva meddelanden med Slacks Block Kit-ramverk
- Svara snabbt - Bekräfta interaktioner inom 3 sekunder, behandla asynkront
- Trådkoppla relaterade meddelanden - Gruppera relaterade notifieringar i trådar för att minska brus
- Dirigera per kanal - Skicka olika händelsetyper till lämpliga teamkanaler
- Inkludera åtgärdsknappar - Lägg till “View in Brevo”-knappar för snabb åtkomst till kunddata
- Implementera unfurling - Visa rika förhandsgranskningar för Brevo-länkar delade i Slack
Säkerhet
- Bot-token - OAuth-scopad åtkomsttoken med granulära behörigheter
- Förfrågningssignering - HMAC SHA-256-signaturverifiering för inkommande förfrågningar
- OAuth 2.0 - Industristandard för auktorisering för distribution till flera arbetsytor
- TLS-kryptering - All API-kommunikation krypterad via HTTPS
- Tokenrotation - Automatisk tokenrotation för förbättrad säkerhet