Slack コネクタ
Slack ワークスペースを Tajo 経由で Brevo に接続し、リアルタイムのマーケティング通知、顧客イベントに関するチームアラート、Slack インタラクションによってトリガーされるワークフロー自動化を実現します。
概要
| プロパティ | 値 |
|---|---|
| プラットフォーム | Slack |
| カテゴリ | カスタム統合 |
| セットアップの複雑さ | 簡単 |
| 公式統合 | はい |
| 同期データ | ユーザー、チャンネル、メッセージ、イベント |
| API ベース URL | https://slack.com/api |
機能
- マーケティングアラート - キャンペーンイベント、新規購読者、収益マイルストーンのリアルタイム通知を送信
- 顧客イベント通知 - Brevo からの高価値顧客アクションについてチームにアラート
- ワークフロートリガー - Slack インタラクション(ボタンクリック、フォーム送信)を使用して Brevo 自動化をトリガー
- チャンネルベースのルーティング - イベントタイプや顧客セグメントに基づいて特定のチャンネルに通知をルーティング
- ユーザー同期 - 社内コミュニケーション用に Slack ワークスペースユーザーを Brevo 連絡先にマッピング
- インタラクティブメッセージ - チームワークフロー用にボタンとアクション付きのリッチメッセージを送信
- スケジュールメッセージ - 日次/週次のマーケティング概要用に通知をスケジュール
- スレッドサポート - 整理されたコミュニケーションのため関連する通知をスレッドにグループ化
前提条件
開始する前に、以下を準備してください。
- 管理者アクセス権を持つ Slack ワークスペース
- api.slack.com/apps で作成した Slack アプリ
- 必要なスコープを持つ Bot トークン
- API アクセス可能な Brevo アカウント
- Tajo アカウント
認証
Bot トークン(推奨)
Slack アプリをワークスペースにインストールし、API アクセスに bot トークンを使用します。
- api.slack.com/apps でアプリを作成
- 「OAuth & Permissions」で必要な OAuth スコープを追加
- アプリをワークスペースにインストール
- 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 統合を複数のワークスペースに配布する場合:
# 認可 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 スコープ
chat:write # メッセージを送信channels:read # チャンネルを一覧取得channels:history # チャンネルメッセージを読み取るusers:read # ワークスペースユーザーを一覧取得users:read.email # ユーザーのメールアドレスを読み取るreactions:write # メッセージにリアクションを追加files:write # ファイルをアップロードユーザーメールアクセス
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 | ユーザーのメール(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 | メールでユーザーを検索 |
GET | users.conversations | ユーザーのチャンネルを一覧取得 |
インタラクション
| メソッド | エンドポイント | 説明 |
|---|---|---|
POST | views.open | モーダルビューを開く |
POST | views.update | モーダルビューを更新 |
POST | reactions.add | 絵文字リアクションを追加 |
イベント
Brevo から Slack への通知
| イベント | トリガー | Slack アクション |
|---|---|---|
new_subscriber | Brevo で連絡先が作成された | #marketing に投稿 |
campaign_sent | メールキャンペーンが送信された | #marketing に概要を投稿 |
order_placed | 高価値注文が検出された | 詳細付きで #sales に投稿 |
cart_abandoned | カートが 30 分放置された | フォローアップのため #sales に投稿 |
ticket_created | サポートチケットが開かれた | #support に投稿 |
unsubscribed | 連絡先が購読解除した | #marketing にアラートを投稿 |
Slack から Brevo へのトリガー
| Slack イベント | トリガー | Brevo アクション |
|---|---|---|
message_action | カスタムメッセージショートカット | 連絡先をリストに追加または自動化をトリガー |
block_actions | メッセージ内のボタンクリック | 連絡先属性を更新またはメール送信 |
view_submission | モーダルフォーム送信 | 連絡先を作成またはワークフローをトリガー |
コード例
コネクタの初期化
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Slack を接続await 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: 短期スロットリング付きのバースト制限
- Events API: 3 回までの配信リトライ
- Incoming Webhooks: Webhook URL ごとに 1 メッセージ/秒
- Block Kit: メッセージあたり最大 50 ブロック
チャンネル投稿レート
同じチャンネルへの投稿は約 1 メッセージ/秒に制限されます。レート制限を回避するために通知をバッチ処理するかスレッドを使用してください。
トラブルシューティング
一般的な問題
| 問題 | 原因 | 解決策 |
|---|---|---|
not_authed | Bot トークンが無効 | アプリを再インストールして新しい bot トークンをコピー |
channel_not_found | ボットがチャンネルにいない | 対象チャンネルにボットを招待 |
missing_scope | 必要なスコープが付与されていない | スコープを追加してアプリを再インストール |
| イベントを受信できない | イベントサブスクリプションが未設定 | Event Subscriptions URL を設定 |
| インタラクションタイムアウト | レスポンスが 3 秒を超過 | すぐに 200 で応答し、非同期で処理 |
デバッグモード
詳細ロギングを有効化:
connectors: slack: debug: true log_level: verbose log_events: true接続テスト
tajo connectors test slack# ✓ Bot トークンが有効# ✓ ワークスペースにアクセス可能# ✓ チャンネル読み取り可能# ✓ メッセージ投稿が有効# ✓ イベントサブスクリプションが有効ベストプラクティス
- Block Kit を使用する - Slack の Block Kit フレームワークでリッチでインタラクティブなメッセージを構築
- 迅速に応答する - インタラクションを 3 秒以内に確認し、非同期で処理
- 関連メッセージをスレッド化する - ノイズを減らすため関連通知をスレッドにグループ化
- チャンネルでルーティングする - 異なるイベントタイプを適切なチームチャンネルに送信
- アクションボタンを含める - 顧客データに素早くアクセスするための「View in Brevo」ボタンを追加
- アンファーリングを実装する - Slack で共有された Brevo リンクのリッチプレビューを表示
セキュリティ
- Bot トークン - 細かい権限を持つ OAuth スコープ付きアクセストークン
- リクエスト署名 - 受信リクエストの HMAC SHA-256 署名検証
- OAuth 2.0 - マルチワークスペース配布用の業界標準認可
- TLS 暗号化 - すべての API 通信は HTTPS で暗号化
- トークンローテーション - セキュリティ強化のための自動トークンローテーション