Slack konektor
Poveži svoj Slack radni prostor sa Brevo putem Tajo za obaveštenja o marketingu u realnom vremenu, timska upozorenja o događajima kupaca i automatizaciju toka pokretanu Slack interakcijama.
Pregled
| Svojstvo | Vrednost |
|---|---|
| Platforma | Slack |
| Kategorija | Prilagođena integracija |
| Složenost podešavanja | Lako |
| Zvanična integracija | Da |
| Sinhronizovani podaci | Korisnici, Kanali, Poruke, Događaji |
| Osnovni URL API-ja | https://slack.com/api |
Karakteristike
- Marketing upozorenja - Slanje obaveštenja u realnom vremenu za događaje kampanje, nove pretplatnike i prihodni milestones
- Obaveštenja o događajima kupaca - Upozoravanje timova o akcijama kupaca visoke vrednosti iz Brevo
- Okidači toka - Korišćenje Slack interakcija (klikovi na dugme, slanje formulara) za pokretanje Brevo automatizacija
- Rutiranje zasnovano na kanalima - Rutiranje obaveštenja na specifične kanale prema tipu događaja ili segmentu kupaca
- Sinhronizacija korisnika - Mapiranje korisnika Slack radnog prostora na Brevo kontakte za internu komunikaciju
- Interaktivne poruke - Slanje bogatih poruka sa dugmadima i akcijama za timske tokove
- Zakazane poruke - Zakazivanje obaveštenja za dnevne/nedeljne marketing sažetke
- Podrška za teme - Grupisanje srodnih obaveštenja u temama za organizovanu komunikaciju
Preduslovi
Pre nego što započneš, proveri da imaš:
- Slack radni prostor sa admin pristupom
- Slack aplikaciju kreiranu na api.slack.com/apps
- Bot token sa potrebnim skopovima
- Brevo nalog sa API pristupom
- Tajo nalog
Autentifikacija
Bot Token (preporučeno)
Instaliraj Slack aplikaciju u svom radnom prostoru i koristi bot token za API pristup.
- Kreiraj aplikaciju na api.slack.com/apps
- Dodaj potrebne OAuth skopove pod “OAuth & Permissions”
- Instaliraj aplikaciju u radni prostor
- Kopiraj 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
Za distribuciju Slack integracije na više radnih prostora:
# 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}"Potrebni bot skopovi
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 filesPristup email-u korisnika
Skop users:read.email je potreban za podudaranje Slack korisnika sa Brevo kontaktima. Bez njega, mapiranje korisnika biće ograničeno na prikazana imena.
Konfiguracija
Osnovno podešavanje
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_alertMapiranje polja
Mapiranje Slack korisničkih podataka na Brevo atribute kontakta:
Default Mappings
| Parameter | Type | Description |
|---|---|---|
profile.email required | string | Email korisnika (jedinstveni identifikator za podudaranje Brevo) |
real_name optional | string | Puno ime, podeljeno na FIRSTNAME/LASTNAME |
profile.phone optional | string | Mapira se na SMS atribut |
profile.title optional | string | Naziv posla |
tz optional | string | Vremenska zona korisnika |
is_admin optional | boolean | Status admin korisnika radnog prostora |
team_id optional | string | ID tima radnog prostora |
status_text optional | string | Prilagođeni status korisnika |
API metode
Poruke
| Metoda | Endpoint | Opis |
|---|---|---|
POST | chat.postMessage | Slanje poruke u kanal |
POST | chat.update | Ažuriranje postojeće poruke |
POST | chat.delete | Brisanje poruke |
POST | chat.scheduleMessage | Zakazivanje poruke |
POST | chat.postEphemeral | Slanje efemerne poruke korisniku |
Kanali
| Metoda | Endpoint | Opis |
|---|---|---|
GET | conversations.list | Listanje kanala |
GET | conversations.info | Dohvatanje informacija o kanalu |
GET | conversations.members | Listanje članova kanala |
GET | conversations.history | Dohvatanje poruka kanala |
Korisnici
| Metoda | Endpoint | Opis |
|---|---|---|
GET | users.list | Listanje korisnika radnog prostora |
GET | users.info | Dohvatanje informacija o korisniku |
GET | users.lookupByEmail | Pronalaženje korisnika po emailu |
GET | users.conversations | Listanje kanala korisnika |
Interakcije
| Metoda | Endpoint | Opis |
|---|---|---|
POST | views.open | Otvaranje modalnog prikaza |
POST | views.update | Ažuriranje modalnog prikaza |
POST | reactions.add | Dodavanje emoji reakcije |
Događaji
Obaveštenja Brevo-ka-Slack
| Događaj | Okidač | Slack akcija |
|---|---|---|
new_subscriber | Kontakt kreiran u Brevo | Objavi na #marketing |
campaign_sent | Email kampanja poslata | Objavi sažetak na #marketing |
order_placed | Detektovana porudžbina visoke vrednosti | Objavi na #sales sa detaljima |
cart_abandoned | Korpa napuštena 30 min | Objavi na #sales za praćenje |
ticket_created | Tiket podrške otvoren | Objavi na #support |
unsubscribed | Kontakt otkazao pretplatu | Objavi upozorenje na #marketing |
Okidači Slack-ka-Brevo
| Slack događaj | Okidač | Brevo akcija |
|---|---|---|
message_action | Prilagođena prečica poruke | Dodaj kontakt na listu ili pokreni automatizaciju |
block_actions | Klik na dugme u poruci | Ažuriraj atribut kontakta ili pošalji email |
view_submission | Modalni formular poslat | Kreiraj kontakt ili pokreni tok |
Primeri koda
Inicijalizacija konektora
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});Slanje marketing obaveštenja
// 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' } ] } ] }});Obrada Slack interakcija
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();});Ograničenja brzine
Slack API ograničenja brzine koriste nivoidni sistem:
| Nivo | Limit | Uobičajene metode |
|---|---|---|
| Nivo 1 | 1 zahtev/minut | chat.delete, conversations.kick |
| Nivo 2 | 20 zahteva/minut | conversations.history, users.info |
| Nivo 3 | 50 zahteva/minut | conversations.list, users.list |
| Nivo 4 | 100 zahteva/minut | chat.postMessage |
| Posebno | Zavisi | chat.postMessage na isti kanal: 1/sek |
Dodatna ograničenja:
- Web API: Burst limit sa kratkoročnim prigušenjem
- Events API: 3 pokušaja ponovne isporuke
- Incoming Webhooks: 1 poruka/sekundi po webhook URL-u
- Block Kit: Maksimalno 50 blokova po poruci
Brzina postavljanja na kanal
Postavljanje na isti kanal je ograničeno na otprilike 1 poruku u sekundi. Grupiši obaveštenja ili koristi teme da izbjegneš ograničavanje brzine.
Rešavanje problema
Česti problemi
| Problem | Uzrok | Rešenje |
|---|---|---|
not_authed | Nevažeći bot token | Ponovo instaliraj aplikaciju i kopiraj novi bot token |
channel_not_found | Bot nije u kanalu | Pozovi bot u ciljni kanal |
missing_scope | Potrebni skop nije dodeljen | Dodaj skop i ponovo instaliraj aplikaciju |
| Događaj nije primljen | URL pretplate na događaje nije postavljen | Konfiguriši URL Event Subscriptions |
| Timeout interakcije | Odgovor >3 sekunde | Odmah odgovori sa 200, obradi asinhrono |
Debug režim
Uključi detaljno logovanje:
connectors: slack: debug: true log_level: verbose log_events: trueTestiraj vezu
tajo connectors test slack# ✓ Bot token valid# ✓ Workspace accessible# ✓ Channels readable# ✓ Message posting enabled# ✓ Event subscriptions activeNajbolje prakse
- Koristi Block Kit - Pravi bogate, interaktivne poruke sa Slack Block Kit okvirom
- Odgovaraj brzo - Potvrdi interakcije u roku od 3 sekunde, obradi asinhrono
- Grupiši srodne poruke u temama - Grupiši srodna obaveštenja u temama da smanjiš buku
- Rutiranje po kanalima - Šalji različite tipove događaja na odgovarajuće timske kanale
- Uključi dugmad za akcije - Dodaj dugmad “View in Brevo” za brzi pristup korisničkim podacima
- Implementiraj unfurling - Prikaži bogate preglede za Brevo linkove deljene u Slack-u
Bezbednost
- Bot Token - OAuth-skopovani access token sa granularnim dozvolama
- Potpisivanje zahteva - HMAC SHA-256 verifikacija potpisa za dolazne zahteve
- OAuth 2.0 - Standardna autorizacija za distribuciju na više radnih prostora
- TLS enkripcija - Sva API komunikacija enkriptovana putem HTTPS
- Rotacija tokena - Automatska rotacija tokena za pojačanu bezbednost