Konektor Slack
Hubungkan workspace Slack Anda ke Brevo melalui Tajo untuk notifikasi pemasaran real-time, peringatan tim atas event pelanggan, dan otomatisasi alur kerja yang dipicu oleh interaksi di Slack.
Ikhtisar
| Properti | Nilai |
|---|---|
| Platform | Slack |
| Kategori | Integrasi custom |
| Kompleksitas penyiapan | Mudah |
| Integrasi resmi | Ya |
| Data tersinkron | Pengguna, channel, pesan, event |
| URL dasar API | https://slack.com/api |
Fitur
- Peringatan pemasaran - Kirim notifikasi real-time untuk event kampanye, pelanggan email baru, dan pencapaian pendapatan
- Notifikasi event pelanggan - Beri tahu tim tentang aksi pelanggan bernilai tinggi dari Brevo
- Pemicu alur kerja - Gunakan interaksi Slack (klik tombol, pengiriman formulir) untuk memicu otomatisasi Brevo
- Perutean berbasis channel - Arahkan notifikasi ke channel tertentu berdasarkan jenis event atau segmen pelanggan
- Sinkronisasi pengguna - Petakan pengguna workspace Slack ke kontak Brevo untuk komunikasi internal
- Pesan interaktif - Kirim pesan kaya dengan tombol dan aksi untuk alur kerja tim
- Pesan terjadwal - Jadwalkan notifikasi untuk ringkasan pemasaran harian atau mingguan
- Dukungan thread - Kelompokkan notifikasi terkait dalam thread agar komunikasi tetap rapi
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
- Workspace Slack dengan akses admin
- Aplikasi Slack yang dibuat di api.slack.com/apps
- Bot token dengan scope yang diperlukan
- Akun Brevo dengan akses API
- Akun Tajo
Autentikasi
Bot token (disarankan)
Pasang aplikasi Slack ke workspace Anda dan gunakan bot token untuk akses API.
- Buat aplikasi di api.slack.com/apps
- Tambahkan scope OAuth yang diperlukan pada “OAuth & Permissions”
- Pasang aplikasi ke workspace
- Salin 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
Untuk mendistribusikan integrasi Slack Anda ke banyak workspace:
# 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}"Scope bot yang diperlukan
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 filesAkses email pengguna
Scope users:read.email diperlukan untuk mencocokkan pengguna Slack dengan kontak Brevo. Tanpa scope tersebut, pemetaan pengguna hanya terbatas pada nama tampilan.
Konfigurasi
Penyiapan dasar
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_alertPemetaan field
Petakan data pengguna Slack ke atribut kontak Brevo:
Pemetaan bawaan
| Parameter | Type | Description |
|---|---|---|
profile.email required | string | Email pengguna (pengenal unik untuk pencocokan di Brevo) |
real_name optional | string | Nama lengkap, dipecah menjadi FIRSTNAME/LASTNAME |
profile.phone optional | string | Dipetakan ke atribut SMS |
profile.title optional | string | Jabatan |
tz optional | string | Zona waktu pengguna |
is_admin optional | boolean | Status admin workspace |
team_id optional | string | ID tim workspace |
status_text optional | string | Status kustom pengguna |
Metode API
Perpesanan
| Metode | Endpoint | Deskripsi |
|---|---|---|
POST | chat.postMessage | Mengirim pesan ke sebuah channel |
POST | chat.update | Memperbarui pesan yang sudah ada |
POST | chat.delete | Menghapus sebuah pesan |
POST | chat.scheduleMessage | Menjadwalkan sebuah pesan |
POST | chat.postEphemeral | Mengirim pesan ephemeral ke pengguna |
Channel
| Metode | Endpoint | Deskripsi |
|---|---|---|
GET | conversations.list | Menampilkan daftar channel |
GET | conversations.info | Mengambil info channel |
GET | conversations.members | Menampilkan daftar anggota channel |
GET | conversations.history | Mengambil pesan dalam channel |
Pengguna
| Metode | Endpoint | Deskripsi |
|---|---|---|
GET | users.list | Menampilkan daftar pengguna workspace |
GET | users.info | Mengambil info pengguna |
GET | users.lookupByEmail | Mencari pengguna berdasarkan email |
GET | users.conversations | Menampilkan daftar channel pengguna |
Interaksi
| Metode | Endpoint | Deskripsi |
|---|---|---|
POST | views.open | Membuka tampilan modal |
POST | views.update | Memperbarui tampilan modal |
POST | reactions.add | Menambahkan reaksi emoji |
Event
Notifikasi Brevo ke Slack
| Event | Pemicu | Aksi Slack |
|---|---|---|
new_subscriber | Kontak dibuat di Brevo | Kirim ke #marketing |
campaign_sent | Kampanye email terkirim | Kirim ringkasan ke #marketing |
order_placed | Pesanan bernilai tinggi terdeteksi | Kirim ke #sales beserta detailnya |
cart_abandoned | Keranjang ditinggalkan selama 30 menit | Kirim ke #sales untuk tindak lanjut |
ticket_created | Tiket dukungan dibuka | Kirim ke #support |
unsubscribed | Kontak berhenti berlangganan | Kirim peringatan ke #marketing |
Pemicu Slack ke Brevo
| Event Slack | Pemicu | Aksi Brevo |
|---|---|---|
message_action | Pintasan pesan kustom | Tambahkan kontak ke list atau picu otomatisasi |
block_actions | Klik tombol dalam pesan | Perbarui atribut kontak atau kirim email |
view_submission | Formulir modal dikirim | Buat kontak atau picu alur kerja |
Contoh kode
Inisialisasi konektor
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});Kirim notifikasi pemasaran
// 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' } ] } ] }});Tangani interaksi Slack
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();});Batas rate
Batas rate API Slack memakai sistem berjenjang:
| Tier | Batas | Metode umum |
|---|---|---|
| Tier 1 | 1 permintaan/menit | chat.delete, conversations.kick |
| Tier 2 | 20 permintaan/menit | conversations.history, users.info |
| Tier 3 | 50 permintaan/menit | conversations.list, users.list |
| Tier 4 | 100 permintaan/menit | chat.postMessage |
| Khusus | Bervariasi | chat.postMessage ke channel yang sama: 1/detik |
Batas tambahan:
- Web API: batas burst dengan throttle jangka pendek
- Events API: pengiriman ulang hingga 3 percobaan
- Incoming Webhooks: 1 pesan/detik per URL webhook
- Block Kit: maksimum 50 block per pesan
Laju pengiriman ke channel
Pengiriman ke channel yang sama dibatasi sekitar 1 pesan per detik. Kelompokkan notifikasi atau gunakan thread agar tidak terkena rate limit.
Pemecahan masalah
Masalah umum
| Masalah | Penyebab | Solusi |
|---|---|---|
not_authed | Bot token tidak valid | Pasang ulang aplikasi dan salin bot token yang baru |
channel_not_found | Bot belum ada di channel | Undang bot ke channel tujuan |
missing_scope | Scope yang diperlukan belum diberikan | Tambahkan scope lalu pasang ulang aplikasi |
| Event tidak diterima | Langganan event belum disetel | Konfigurasikan URL Event Subscriptions |
| Interaksi timeout | Respons lebih dari 3 detik | Balas 200 seketika, proses secara asinkron |
Mode debug
Aktifkan logging verbose:
connectors: slack: debug: true log_level: verbose log_events: trueUji koneksi
tajo connectors test slack# ✓ Bot token valid# ✓ Workspace accessible# ✓ Channels readable# ✓ Message posting enabled# ✓ Event subscriptions activePraktik terbaik
- Gunakan Block Kit - Bangun pesan interaktif yang kaya dengan framework Block Kit milik Slack
- Balas dengan cepat - Konfirmasi interaksi dalam 3 detik, lalu proses secara asinkron
- Kelompokkan pesan dalam thread - Satukan notifikasi terkait dalam thread untuk menekan noise
- Rutekan per channel - Kirim jenis event yang berbeda ke channel tim yang sesuai
- Sertakan tombol aksi - Tambahkan tombol “View in Brevo” agar data pelanggan cepat diakses
- Terapkan unfurling - Tampilkan pratinjau kaya untuk tautan Brevo yang dibagikan di Slack
Keamanan
- Bot token - Token akses ber-scope OAuth dengan izin yang granular
- Penandatanganan permintaan - Verifikasi tanda tangan HMAC SHA-256 untuk permintaan masuk
- OAuth 2.0 - Standar industri untuk otorisasi distribusi lintas workspace
- Enkripsi TLS - Seluruh komunikasi API terenkripsi melalui HTTPS
- Rotasi token - Rotasi token otomatis untuk keamanan yang lebih baik