---
title: "Slack コネクタ"
description: "Tajo を介して通知を送信し、チャンネルデータを同期し、Slack イベントから Brevo 自動化をトリガーするための完全な Slack 統合ガイド。"
url: https://tajo.io/jp/docs/connectors/custom/slack/
markdown: https://tajo.io/jp/docs/connectors/custom/slack.md
lang: ja-JP
robots: noindex
---

先行利用を申し込む

お名前と会社のメールアドレスを入力してください。Tajoへのアクセス申請を確認するためのリンクをメールでお送りします。

# Slack コネクタ

コネクターのステータス: 予定 まだ構築されていません。Tajo は現在このコネクターを実行していません。

| 送信元フィールド | 送信先フィールド | サンプル値 |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

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

## 概要

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

## 機能

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

## 前提条件

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

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

## 認証

### Bot トークン(推奨)

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

1. [api.slack.com/apps](https://api.slack.com/apps) でアプリを作成
2. 「OAuth & Permissions」で必要な OAuth スコープを追加
3. アプリをワークスペースにインストール
4. Bot User OAuth Token(`xoxb-...`)をコピー

```bash
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 統合を複数のワークスペースに配布する場合:

```bash
# 認可 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 連絡先を照合するために必要です。これがない場合、ユーザーマッピングは表示名に制限されます。

## 設定

### 基本セットアップ

```yaml
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` | モーダルフォーム送信 | 連絡先を作成またはワークフローをトリガー |

## コード例

### コネクタの初期化

```javascript
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
});
```

### マーケティング通知を送信

```javascript
// 高価値注文が行われたときに通知を送信
await tajo.slack.notify({
  channel: 'sales',
  event: 'order_placed',
  data: {
    customerEmail: 'customer@example.com',
    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:*\ncustomer@example.com' },
          { 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 インタラクションの処理

```javascript
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 で応答し、非同期で処理 |

### デバッグモード

詳細ロギングを有効化:

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

### 接続テスト

```bash
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 で暗号化
- **トークンローテーション** - セキュリティ強化のための自動トークンローテーション

## 関連リソース

- [Slack API ドキュメント](https://api.slack.com/methods)
- [Slack Block Kit Builder](https://app.slack.com/block-kit-builder)
- [Slack Events API](https://api.slack.com/events-api)
- [Brevo コネクタ](https://tajo.io/jp/docs/connectors/marketing/brevo)
- [顧客同期スキル](https://tajo.io/jp/docs/skills/data-sync/customer-sync)
