Slack コネクタ

Slack ワークスペースを Tajo 経由で Brevo に接続し、リアルタイムのマーケティング通知、顧客イベントに関するチームアラート、Slack インタラクションによってトリガーされるワークフロー自動化を実現します。

概要

プロパティ
プラットフォームSlack
カテゴリカスタム統合
セットアップの複雑さ簡単
公式統合はい
同期データユーザー、チャンネル、メッセージ、イベント
API ベース URLhttps://slack.com/api

機能

  • マーケティングアラート - キャンペーンイベント、新規購読者、収益マイルストーンのリアルタイム通知を送信
  • 顧客イベント通知 - Brevo からの高価値顧客アクションについてチームにアラート
  • ワークフロートリガー - Slack インタラクション(ボタンクリック、フォーム送信)を使用して Brevo 自動化をトリガー
  • チャンネルベースのルーティング - イベントタイプや顧客セグメントに基づいて特定のチャンネルに通知をルーティング
  • ユーザー同期 - 社内コミュニケーション用に Slack ワークスペースユーザーを Brevo 連絡先にマッピング
  • インタラクティブメッセージ - チームワークフロー用にボタンとアクション付きのリッチメッセージを送信
  • スケジュールメッセージ - 日次/週次のマーケティング概要用に通知をスケジュール
  • スレッドサポート - 整理されたコミュニケーションのため関連する通知をスレッドにグループ化

前提条件

開始する前に、以下を準備してください。

  1. 管理者アクセス権を持つ Slack ワークスペース
  2. api.slack.com/apps で作成した Slack アプリ
  3. 必要なスコープを持つ Bot トークン
  4. API アクセス可能な Brevo アカウント
  5. Tajo アカウント

認証

Bot トークン(推奨)

Slack アプリをワークスペースにインストールし、API アクセスに bot トークンを使用します。

  1. api.slack.com/apps でアプリを作成
  2. 「OAuth & Permissions」で必要な OAuth スコープを追加
  3. アプリをワークスペースにインストール
  4. Bot User OAuth Token(xoxb-...)をコピー
Terminal window
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 統合を複数のワークスペースに配布する場合:

Terminal window
# 認可 URL
https://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 メソッド

メッセージング

メソッドエンドポイント説明
POSTchat.postMessageチャンネルにメッセージを送信
POSTchat.update既存メッセージを更新
POSTchat.deleteメッセージを削除
POSTchat.scheduleMessageメッセージをスケジュール
POSTchat.postEphemeralユーザーに一時メッセージを送信

チャンネル

メソッドエンドポイント説明
GETconversations.listチャンネルを一覧取得
GETconversations.infoチャンネル情報を取得
GETconversations.membersチャンネルメンバーを一覧取得
GETconversations.historyチャンネルメッセージを取得

ユーザー

メソッドエンドポイント説明
GETusers.listワークスペースユーザーを一覧取得
GETusers.infoユーザー情報を取得
GETusers.lookupByEmailメールでユーザーを検索
GETusers.conversationsユーザーのチャンネルを一覧取得

インタラクション

メソッドエンドポイント説明
POSTviews.openモーダルビューを開く
POSTviews.updateモーダルビューを更新
POSTreactions.add絵文字リアクションを追加

イベント

Brevo から Slack への通知

イベントトリガーSlack アクション
new_subscriberBrevo で連絡先が作成された#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: {
customerEmail: '[email protected]',
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: '*Customer:*\n[email protected]' },
{ 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 11 リクエスト/分chat.deleteconversations.kick
Tier 220 リクエスト/分conversations.historyusers.info
Tier 350 リクエスト/分conversations.listusers.list
Tier 4100 リクエスト/分chat.postMessage
特殊変動同じチャンネルへの chat.postMessage: 1/秒

追加の制限:

  • Web API: 短期スロットリング付きのバースト制限
  • Events API: 3 回までの配信リトライ
  • Incoming Webhooks: Webhook URL ごとに 1 メッセージ/秒
  • Block Kit: メッセージあたり最大 50 ブロック

チャンネル投稿レート

同じチャンネルへの投稿は約 1 メッセージ/秒に制限されます。レート制限を回避するために通知をバッチ処理するかスレッドを使用してください。

トラブルシューティング

一般的な問題

問題原因解決策
not_authedBot トークンが無効アプリを再インストールして新しい bot トークンをコピー
channel_not_foundボットがチャンネルにいない対象チャンネルにボットを招待
missing_scope必要なスコープが付与されていないスコープを追加してアプリを再インストール
イベントを受信できないイベントサブスクリプションが未設定Event Subscriptions URL を設定
インタラクションタイムアウトレスポンスが 3 秒を超過すぐに 200 で応答し、非同期で処理

デバッグモード

詳細ロギングを有効化:

connectors:
slack:
debug: true
log_level: verbose
log_events: true

接続テスト

Terminal window
tajo connectors test slack
# ✓ Bot トークンが有効
# ✓ ワークスペースにアクセス可能
# ✓ チャンネル読み取り可能
# ✓ メッセージ投稿が有効
# ✓ イベントサブスクリプションが有効

ベストプラクティス

  1. Block Kit を使用する - Slack の Block Kit フレームワークでリッチでインタラクティブなメッセージを構築
  2. 迅速に応答する - インタラクションを 3 秒以内に確認し、非同期で処理
  3. 関連メッセージをスレッド化する - ノイズを減らすため関連通知をスレッドにグループ化
  4. チャンネルでルーティングする - 異なるイベントタイプを適切なチームチャンネルに送信
  5. アクションボタンを含める - 顧客データに素早くアクセスするための「View in Brevo」ボタンを追加
  6. アンファーリングを実装する - Slack で共有された Brevo リンクのリッチプレビューを表示

セキュリティ

  • Bot トークン - 細かい権限を持つ OAuth スコープ付きアクセストークン
  • リクエスト署名 - 受信リクエストの HMAC SHA-256 署名検証
  • OAuth 2.0 - マルチワークスペース配布用の業界標準認可
  • TLS 暗号化 - すべての API 通信は HTTPS で暗号化
  • トークンローテーション - セキュリティ強化のための自動トークンローテーション

関連リソース

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AIアシスタント

こんにちは!ドキュメントについて何でもお聞きください。