Коннектор Slack
Подключите рабочее пространство Slack к Brevo через Tajo для маркетинговых уведомлений в реальном времени, командных оповещений о событиях клиентов и автоматизации рабочих процессов, запускаемых взаимодействиями в Slack.
Обзор
| Свойство | Значение |
|---|---|
| Платформа | Slack |
| Категория | Custom Integration |
| Сложность настройки | Простая |
| Официальная интеграция | Да |
| Синхронизируемые данные | Пользователи, каналы, сообщения, события |
| Базовый URL API | https://slack.com/api |
Возможности
- Маркетинговые оповещения, отправка уведомлений в реальном времени о событиях кампаний, новых подписчиках и доходных вехах
- Уведомления о событиях клиентов, оповещение команд о важных действиях клиентов из Brevo
- Триггеры рабочих процессов, использование взаимодействий в Slack (нажатий кнопок, отправки форм) для запуска автоматизаций Brevo
- Маршрутизация по каналам, направление уведомлений в конкретные каналы в зависимости от типа события или сегмента клиентов
- Синхронизация пользователей, сопоставление пользователей рабочего пространства Slack с контактами Brevo для внутренних коммуникаций
- Интерактивные сообщения, отправка насыщенных сообщений с кнопками и действиями для командных рабочих процессов
- Отложенные сообщения, планирование уведомлений для ежедневных/еженедельных маркетинговых сводок
- Поддержка тредов, группировка связанных уведомлений в тредах для упорядоченного общения
Предварительные требования
Прежде чем начать, убедитесь, что у вас есть:
- Рабочее пространство Slack с правами администратора
- Приложение Slack, созданное на api.slack.com/apps
- Bot token с необходимыми scope
- Аккаунт Brevo с доступом к API
- Аккаунт Tajo
Аутентификация
Bot Token (рекомендуется)
Установите приложение Slack в рабочее пространство и используйте bot token для доступа к API.
- Создайте приложение на api.slack.com/apps
- Добавьте необходимые OAuth scope в разделе “OAuth & Permissions”
- Установите приложение в рабочее пространство
- Скопируйте 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
Для распространения интеграции Slack на несколько рабочих пространств:
# Authorization URLhttps://slack.com/oauth/v2/authorize? client_id={client_id}& scope=chat:write,channels:read,users:read& redirect_uri={redirect_uri}
# Обмен токенаcurl -X POST "https://slack.com/api/oauth.v2.access" \ -d "client_id={client_id}" \ -d "client_secret={client_secret}" \ -d "code={auth_code}"Необходимые Bot Scope
chat:write # Отправка сообщенийchannels:read # Список каналовchannels:history # Чтение сообщений каналаusers:read # Список пользователей рабочего пространстваusers:read.email # Чтение email-адресов пользователейreactions:write # Добавление реакций к сообщениямfiles:write # Загрузка файловДоступ к email пользователей
Scope users:read.email необходим для сопоставления пользователей Slack с контактами Brevo. Без него сопоставление пользователей будет ограничено отображаемыми именами.
Конфигурация
Базовая настройка
connectors: slack: enabled: true bot_token: "${SLACK_BOT_TOKEN}" signing_secret: "${SLACK_SIGNING_SECRET}"
# Каналы уведомлений channels: marketing: "C01234567" sales: "C01234568" support: "C01234569" alerts: "C01234570"
# Маршрутизация событий notifications: new_subscriber: channel: marketing template: subscriber_alert high_value_order: channel: sales template: order_alert support_ticket: channel: support template: ticket_alertСопоставление полей
Сопоставьте данные пользователей Slack с атрибутами контактов Brevo:
Сопоставления по умолчанию
| Parameter | Type | Description |
|---|---|---|
profile.email required | string | Email пользователя (уникальный идентификатор для сопоставления с Brevo) |
real_name optional | string | Полное имя, разделяется на FIRSTNAME/LASTNAME |
profile.phone optional | string | Сопоставляется с атрибутом SMS |
profile.title optional | string | Должность |
tz optional | string | Часовой пояс пользователя |
is_admin optional | boolean | Статус администратора рабочего пространства |
team_id optional | string | ID команды рабочего пространства |
status_text optional | string | Пользовательский статус |
Методы API
Сообщения
| Метод | Эндпоинт | Описание |
|---|---|---|
POST | chat.postMessage | Отправить сообщение в канал |
POST | chat.update | Обновить существующее сообщение |
POST | chat.delete | Удалить сообщение |
POST | chat.scheduleMessage | Запланировать сообщение |
POST | chat.postEphemeral | Отправить эфемерное сообщение пользователю |
Каналы
| Метод | Эндпоинт | Описание |
|---|---|---|
GET | conversations.list | Список каналов |
GET | conversations.info | Информация о канале |
GET | conversations.members | Список участников канала |
GET | conversations.history | Сообщения канала |
Пользователи
| Метод | Эндпоинт | Описание |
|---|---|---|
GET | users.list | Список пользователей рабочего пространства |
GET | users.info | Информация о пользователе |
GET | users.lookupByEmail | Поиск пользователя по email |
GET | users.conversations | Каналы пользователя |
Взаимодействия
| Метод | Эндпоинт | Описание |
|---|---|---|
POST | views.open | Открыть модальное окно |
POST | views.update | Обновить модальное окно |
POST | reactions.add | Добавить emoji-реакцию |
События
Уведомления Brevo → Slack
| Событие | Триггер | Действие в Slack |
|---|---|---|
new_subscriber | Контакт создан в Brevo | Публикация в #marketing |
campaign_sent | Отправлена email-кампания | Сводка в #marketing |
order_placed | Обнаружен заказ на крупную сумму | Публикация в #sales с деталями |
cart_abandoned | Корзина брошена на 30 минут | Публикация в #sales для follow-up |
ticket_created | Открыт тикет поддержки | Публикация в #support |
unsubscribed | Контакт отписался | Оповещение в #marketing |
Триггеры Slack → Brevo
| Событие Slack | Триггер | Действие в Brevo |
|---|---|---|
message_action | Пользовательский шорткат в сообщении | Добавить контакт в лист или запустить автоматизацию |
block_actions | Нажатие кнопки в сообщении | Обновить атрибут контакта или отправить email |
view_submission | Отправка модальной формы | Создать контакт или запустить рабочий процесс |
Примеры кода
Инициализация коннектора
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Подключение Slackawait tajo.connectors.connect('slack', { botToken: process.env.SLACK_BOT_TOKEN, signingSecret: process.env.SLACK_SIGNING_SECRET});Отправка маркетинговых уведомлений
// Отправка уведомления при поступлении крупного заказаawait 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
import crypto from 'crypto';
app.post('/slack/interactions', async (req, res) => { // Проверка подписи запроса Slack 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);
// Обработка действий кнопок 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();});Ограничения скорости
Slack API использует многоуровневую систему лимитов:
| Уровень | Лимит | Типичные методы |
|---|---|---|
| Tier 1 | 1 запрос/минуту | chat.delete, conversations.kick |
| Tier 2 | 20 запросов/минуту | conversations.history, users.info |
| Tier 3 | 50 запросов/минуту | conversations.list, users.list |
| Tier 4 | 100 запросов/минуту | chat.postMessage |
| Особый | Варьируется | chat.postMessage в один канал: 1/сек |
Дополнительные ограничения:
- Web API: Burst-лимит с краткосрочным регулированием
- Events API: До 3 попыток повторной доставки
- Incoming Webhooks: 1 сообщение/секунду на URL вебхука
- Block Kit: Максимум 50 блоков на сообщение
Скорость публикации в канал
Публикация в один канал ограничена примерно 1 сообщением в секунду. Группируйте уведомления или используйте треды, чтобы избежать регулирования.
Устранение неполадок
Частые проблемы
| Проблема | Причина | Решение |
|---|---|---|
not_authed | Недействительный bot token | Переустановите приложение и скопируйте новый bot token |
channel_not_found | Бот не добавлен в канал | Пригласите бота в целевой канал |
missing_scope | Необходимый scope не предоставлен | Добавьте scope и переустановите приложение |
| Событие не получено | Подписка на события не настроена | Настройте URL Event Subscriptions |
| Таймаут взаимодействия | Ответ >3 секунд | Ответьте 200 немедленно, обрабатывайте асинхронно |
Режим отладки
connectors: slack: debug: true log_level: verbose log_events: trueПроверка подключения
tajo connectors test slack# ✓ Bot token valid# ✓ Workspace accessible# ✓ Channels readable# ✓ Message posting enabled# ✓ Event subscriptions activeЛучшие практики
- Используйте Block Kit, создавайте насыщенные интерактивные сообщения с помощью фреймворка Block Kit Slack
- Отвечайте быстро, подтверждайте взаимодействия в течение 3 секунд, обрабатывайте асинхронно
- Группируйте связанные сообщения в тредах, снижает шум в каналах
- Маршрутизируйте по каналам, направляйте разные типы событий в соответствующие командные каналы
- Добавляйте кнопки действий, включайте кнопки “View in Brevo” для быстрого доступа к данным клиентов
- Реализуйте анфёрлинг, показывайте богатые превью для ссылок Brevo, расшаренных в Slack
Безопасность
- Bot Token, токен доступа с ограниченными OAuth-правами
- Подпись запросов, HMAC SHA-256 верификация входящих запросов
- OAuth 2.0, отраслевой стандарт авторизации для распространения на несколько рабочих пространств
- TLS-шифрование, все API-коммуникации зашифрованы через HTTPS
- Ротация токенов, автоматическая ротация токенов для повышения безопасности