OpenClaw

OpenClaw Slack チャンネル

エンタープライズ
普通

Socket Mode(デフォルト)または HTTP Events API を使用して OpenClaw を Slack に接続します。このエンタープライズグレードの統合により、AI アシスタントが Slack ワークスペースで動作し、ダイレクトメッセージ、チャンネル会話、リアクション、スレッド、スラッシュコマンドを処理できます。Socket Mode はパブリック URL 不要で WebSocket 経由で接続します。HTTP モードは Slack の Events API を使用し、公開アクセス可能なデプロイに適しています。

基本情報
難易度普通
カテゴリエンタープライズ
対応機能数5 / 6

Slack 対応機能

テキストメッセージ

対応

メディア・ファイル

対応

リアクション

対応

スレッド

対応

音声メッセージ

非対応

グループチャット

対応

Slack 前提条件

  • 管理者権限を持つ Slack ワークスペース(カスタムアプリのインストール用)
  • api.slack.com/apps で作成された Slack アプリ
  • connections:write スコープ付きの App Token(xapp-...)(Socket Mode 用)
  • ワークスペースへのアプリインストール後に取得した Bot Token(xoxb-...)
  • OpenClaw ゲートウェイが起動・設定済みであること

Slack クイックセットアップ

1

Slack アプリの作成と Socket Mode の有効化

api.slack.com/apps にアクセスし、「Create New App」→「From scratch」をクリックします。アプリ名を入力してワークスペースを選択します。サイドバーの「Socket Mode」に移動して有効化します。「connections:write」スコープで App-Level Token を生成します — これにより xapp-... トークンが取得できます。

2

OAuth スコープの設定とワークスペースへのインストール

「OAuth & Permissions」に移動し、必要な Bot Token Scopes(chat:write、channels:history、channels:read、im:write、im:history、im:read、users:read、reactions:read、reactions:write、files:write など)を追加します。「Install to Workspace」をクリックして認可します。Bot User OAuth Token(xoxb-...)をコピーします。次に「Event Subscriptions」に移動し、イベントを有効化して以下をサブスクライブします: message.channels、message.groups、message.im、message.mpim、app_mention、reaction_added、reaction_removed。

3

設定の追加、ゲートウェイの起動、ボットの招待

appToken と botToken を含む Slack チャンネル設定を ~/.openclaw/openclaw.json に追加します。ゲートウェイを起動すると、Socket Mode で Slack に接続されます。Slack で「/invite @YourBotName」と入力して、対象チャンネルにボットを招待します。メッセージを送信してテストしてください。

Slack 設定例

config.json
{
  "channels": {
    "slack": {
      "enabled": true,
      "appToken": "xapp-1-YOUR_APP_TOKEN",
      "botToken": "xoxb-YOUR_BOT_TOKEN"
    }
  }
}

Slack 詳細ドキュメント

アーキテクチャ概要

OpenClaw は2つのサポートモードで Slack に接続します: • Socket Mode(デフォルト)— サーバーから Slack への WebSocket 接続を使用します。パブリック URL やファイアウォール設定は不要です。開発環境、内部デプロイ、NAT 背後の環境に最適です。 • HTTP モード(Events API)— Slack がサーバーの HTTPS エンドポイントにイベントをプッシュします。公開アクセス可能な URL が必要です。ロードバランサーを使用した高可用性本番デプロイに適しています。 両モードとも、ボットはリアルタイムイベント(メッセージ、リアクション、メンション)を受信し、Slack API を通じて応答します。セッションルーティングはコンテキストに依存します:ダイレクトメッセージはエージェントのメインセッションを使用し、チャンネル会話はチャンネルごとに分離されたセッション(agent:<agentId>:slack:channel:<channelId>)を作成し、スラッシュコマンドはユーザーごとのセッションを取得します。
Socket Mode はほとんどのセルフホスト環境に推奨されます — ファイアウォールや NAT の背後でもネットワーク設定なしで動作します。
トークンは環境変数(SLACK_APP_TOKEN と SLACK_BOT_TOKEN)または設定ファイルで設定できます。

Slack アプリの作成

Slack アプリのセットアップには、Slack API ポータルで複数のコンポーネントを設定する必要があります: 1. api.slack.com/apps にアクセスし、「Create New App」→「From scratch」をクリック 2. アプリに名前を付けて対象ワークスペースを選択 3. Socket Mode を有効化(Settings → Socket Mode → Enable)。connections:write スコープで App-Level Token を生成 4. OAuth & Permissions で Bot Token Scopes を追加: • chat:write、im:write — メッセージの送信と管理 • channels:history、groups:history、im:history、mpim:history — メッセージ履歴の読み取り • channels:read、groups:read、im:read、mpim:read — 会話情報の読み取り • users:read — ユーザープロフィールの参照 • reactions:read、reactions:write — メッセージへのリアクション • pins:read、pins:write — ピン留めメッセージの管理 • emoji:read — カスタム絵文字の一覧 • files:write — ファイルのアップロード 5. ワークスペースにアプリをインストールし、Bot Token(xoxb-...)をコピー 6. Event Subscriptions を有効化し、ボットイベントをサブスクライブ: • message.channels、message.groups、message.im、message.mpim • app_mention • reaction_added、reaction_removed • member_joined_channel、member_left_channel • channel_rename、pin_added、pin_removed 7. オプションで Slash Commands から /openclaw スラッシュコマンドを作成 8. App Home の Messages Tab を有効化してダイレクトメッセージ対応 ヒント:提供されたアプリマニフェストを使用すると、アプリ作成時にすべてのスコープとイベントを一括で自動設定できます。
トークンは秘密にしてください。App Token(xapp-...)と Bot Token(xoxb-...)はアプリの完全な制御権を付与します。漏洩した場合は、Slack API ポータルで直ちに再生成してください。
アプリ作成時のマニフェストオプションを使用すると、必要なすべてのスコープ、イベント、機能を一括で設定できます。
Event Subscriptions を有効化し、必要なボットイベントをサブスクライブしてください。これがないと、ボットは接続しますがメッセージを受信しません。

ダイレクトメッセージのセキュリティ(ペアリング)

Slack ダイレクトメッセージポリシーは、ダイレクトメッセージで AI アシスタントとやり取りできるユーザーを制御します。OpenClaw は2つのモードをサポートしています: • pairing(デフォルト)— 未知のダイレクトメッセージ送信者に時間制限付きペアリングコード(1時間で期限切れ)が送られます。ターミナルで「openclaw pairing approve slack <code>」を実行して承認します。承認後は自由にチャットできます。チャンネルごとに最大3件の保留中ペアリングリクエスト。 • open — ボットにダイレクトメッセージを送信したすべてのユーザーに応答します。動作には dm.allowFrom=["*"] が必要です。大規模ワークスペースでは注意して使用してください。 許可リストのエントリは複数の形式をサポートしています: • Slack ユーザー ID(例: "U01ABCDEF") • @ユーザー名参照 • メールアドレス 「openclaw pairing list slack」で保留中のペアリングを確認することもできます。
openclaw.json
{
  "channels": {
    "slack": {
      "enabled": true,
      "appToken": "xapp-...",
      "botToken": "xoxb-...",
      "dm": {
        "policy": "pairing",
        "allowFrom": ["U01ABCDEF", "user@company.com"]
      }
    }
  }
}
多数のユーザーがいるワークスペースでは、不正な AI 利用を防ぐためにペアリングポリシーを使用してください。各ペアリングコードは1時間後に期限切れになります。
open モードでは、allowFrom を ["*"] に設定してすべてのユーザーを許可するか、個々のユーザー ID / メールアドレスを指定してアクセスを制限します。

チャンネル設定(グループポリシー)

チャンネルポリシーは、ボットが動作する Slack チャンネルとその動作方法を制御します: トップレベルの groupPolicy: • open — ボットは招待されたすべてのチャンネルで応答 • disabled — ボットはすべてのチャンネルメッセージを無視 • allowlist — ボットは明示的に設定されたチャンネルでのみ応答 チャンネルごとの設定で個々のチャンネルの動作を微調整できます: • allow — 許可リストモードでチャンネルの有効化/無効化 • requireMention — ボットが応答するために @メンションが必要かどうか • users — この特定のチャンネルのユーザー許可リスト • skills — このチャンネルで利用可能なスキル/ツールの制限 • systemPrompt — このチャンネル用のカスタム AI 指示 • allowBots — 他のボットからのメッセージを処理するかどうか(デフォルト: false) • enabled — チャンネル全体の有効化/無効化
openclaw.json
{
  "channels": {
    "slack": {
      "groupPolicy": "allowlist",
      "channels": {
        "C01ABCDEF": {
          "allow": true,
          "requireMention": true,
          "users": ["U01ABCDEF"],
          "skills": ["search", "docs"],
          "systemPrompt": "回答は短く技術的に。"
        },
        "#general": {
          "allow": true,
          "requireMention": true
        }
      }
    }
  }
}
チャンネルキーはチャンネル ID(C01ABCDEF)またはチャンネル名(#general)のいずれかを使用できます。ID はチャンネル名の変更後も有効なため、より信頼性があります。
チャンネルごとの systemPrompt を使用して、異なるチャンネルで AI に異なるパーソナリティや指示を設定できます — 例えば #engineering では技術的に、#watercooler ではカジュアルに。

返信スレッディング

OpenClaw は Slack で柔軟な返信スレッディングをサポートし、ボットがメインチャンネルで応答するかスレッドを作成するかを制御します。 グローバル replyToMode: • off(デフォルト)— メインチャンネルで返信。トリガーメッセージが既にスレッド内にある場合のみスレッドで返信。 • first — 最初の返信はスレッドに、以降の返信はメインチャンネルに。 • all — すべての返信がスレッドレスポンスとして送信。 replyToModeByChatType によるチャットタイプ別のオーバーライド: • direct — 1対1のダイレクトメッセージ会話 • group — グループダイレクトメッセージ / MPIM 会話 • channel — 標準 Slack チャンネル 返信タグによる手動スレッド制御: • [[reply_to_current]] — ボットをトリガーしたメッセージに返信 • [[reply_to:<message_id>]] — 特定のメッセージ ID に返信
openclaw.json
{
  "channels": {
    "slack": {
      "replyToMode": "off",
      "replyToModeByChatType": {
        "direct": "all",
        "group": "first",
        "channel": "off"
      }
    }
  }
}
混雑したチャンネルでは、replyToMode: 'all' を使用して会話をスレッドで整理し、メインチャンネルの混乱を避けてください。
チャットタイプ別のオーバーライドにより、ダイレクトメッセージはスレッド化しつつチャンネル返信はインラインに保つことができます(またはその逆)。

User Token(オプション)

Bot Token に加えて、オプションで User Token(xoxp-...)を設定して読み取りアクセスを強化できます。User Token は履歴、ピン留め、リアクション、カスタム絵文字、メンバー情報に対してより豊富なデータを提供します。 トークンの使用優先順位: • 読み取り操作 — User Token が優先されます。利用不可の場合は Bot Token にフォールバック • 書き込み操作 — デフォルトでは常に Bot Token が使用されます userTokenReadOnly フラグ(デフォルト: true)により、User Token は書き込み操作に使用されません。AI にユーザーとして操作させたい場合のみ false に設定してください(User Token に追加の書き込みスコープが必要)。 User Token を追加するには、OAuth & Permissions の「User Token Scopes」で読み取り専用スコープ(channels:history、channels:read、users:read、reactions:read、pins:read、emoji:read、search:read など)を設定してください。
openclaw.json
{
  "channels": {
    "slack": {
      "enabled": true,
      "appToken": "xapp-...",
      "botToken": "xoxb-...",
      "userToken": "xoxp-...",
      "userTokenReadOnly": true
    }
  }
}
userTokenReadOnly を false に設定すると、AI がインストールしたユーザーとして書き込み操作(メッセージの送信、リアクションの追加、メッセージのピン留め)を実行できるようになります。セキュリティへの影響を理解した場合のみ有効化してください。

スラッシュコマンドと App Home

OpenClaw は Slack のスラッシュコマンドと App Home 設定をサポートしています: スラッシュコマンド: Slack API ポータルの「Slash Commands」で /openclaw コマンドを作成します。Socket Mode ではリクエスト URL は不要です — Slack が WebSocket 接続を通じてコマンドをルーティングします。ネイティブコマンドを使用する場合は、必要に応じて追加のスラッシュコマンドを作成してください。 App Home: App Home の「Messages Tab」を有効化すると、ユーザーはアプリページからボットに直接ダイレクトメッセージを送信できます。これにより、1対1の会話に専用のクリーンなインターフェースが提供されます。 セッションルーティング: • ダイレクトメッセージ → メインセッション(agent:main:main) • チャンネルメッセージ → agent:<agentId>:slack:channel:<channelId> • スラッシュコマンド → agent:<agentId>:slack:slash:<userId> cron/CLI のデリバリーターゲット: • user:<userId> — 特定のユーザーにダイレクトメッセージを送信 • channel:<channelId> — 特定のチャンネルに投稿
openclaw.json
{
  "channels": {
    "slack": {
      "slashCommand": {
        "enabled": true,
        "name": "openclaw",
        "sessionPrefix": "slack:slash",
        "ephemeral": true
      }
    }
  }
}
エフェメラルなスラッシュコマンドの応答は、コマンドを実行したユーザーにのみ表示されます。ephemeral: false に設定すると、チャンネル内の全員に応答が表示されます。
App Home の Messages Tab はダイレクトメッセージ機能に必要です — これがないと、ユーザーはボットとの会話を開始できません。

権限とスコープ

Slack は OAuth スコープを使用してアプリの操作範囲を制御します。必須およびオプションのスコープは以下の通りです: Bot Token 必須スコープ: • chat:write — メッセージの送信、更新、削除 • im:write — ダイレクトメッセージ会話の開始 • channels:history、groups:history、im:history、mpim:history — メッセージ履歴の読み取り • channels:read、groups:read、im:read、mpim:read — 会話情報の読み取り • users:read — ユーザープロフィールの参照 • reactions:read、reactions:write — リアクションの読み取りと追加 • pins:read、pins:write — ピン留めメッセージの管理 • emoji:read — ワークスペースのカスタム絵文字一覧 • files:write — ファイルとメディアのアップロード User Token オプションスコープ(読み取り専用): • channels:history、groups:history、im:history、mpim:history — 拡張履歴アクセス • channels:read、groups:read、im:read、mpim:read — 拡張会話情報 • users:read — ユーザープロフィール参照 • reactions:read、pins:read、emoji:read — リアクション、ピン留め、絵文字の読み取り • search:read — メッセージとファイルの検索
まず Bot Token スコープのみで開始してください。拡張読み取り機能(search:read など)が必要な場合にのみ User Token とそのスコープを追加してください。
提供されたアプリマニフェストには推奨されるすべてのスコープが含まれています — 最速のセットアップのためにアプリ作成時に使用してください。

HTTP モード(Events API)

ゲートウェイが HTTPS で公開アクセス可能な場合、Socket Mode の代わりに HTTP モードを使用できます。HTTP モードでは、Slack がサーバーエンドポイントに直接イベントをプッシュします。 セットアップ手順: 1. Slack アプリを作成しますが、Socket Mode は有効化しない 2. 「Basic Information」→「App Credentials」から Signing Secret を取得 3. アプリをインストールして Bot Token を取得 4. 「Event Subscriptions」で Request URL を設定: https://your-gateway-host/slack/events 5. 「Interactivity & Shortcuts」で同じ Request URL を設定 6. 「Slash Commands」で同じエンドポイントに Request URL を設定 HTTP モードでは App Token は不要です — 受信リクエストが Slack からのものであることを Signing Secret で検証します。
openclaw.json
{
  "channels": {
    "slack": {
      "enabled": true,
      "mode": "http",
      "botToken": "xoxb-...",
      "signingSecret": "your-signing-secret",
      "webhookPath": "/slack/events"
    }
  }
}
HTTP モードでは、3つのエンドポイント(Events、Interactivity、Slash Commands)すべてが同じ URL を指す必要があります: https://your-host/slack/events。
HTTP モードでは Signing Secret(App Token ではなく)を使用してください。Signing Secret は HMAC-SHA256 署名によるリクエストの真正性を検証します。
HTTP モードには有効な SSL 証明書と公開アクセス可能なエンドポイントが必要です。サーバーが Slack の IP 範囲から到達可能であることを確認してください。

高度な設定

OpenClaw は Slack の動作を微調整するための高度な設定を提供しています: 履歴とコンテキスト: • historyLimit(デフォルト: 50)— AI コンテキストに含める最近のメッセージ数。0に設定すると履歴の注入を無効化。 テキストとメディア: • textChunkLimit(デフォルト: 4000)— 長い応答のメッセージチャンクあたりの最大文字数 • chunkMode: "newline" — ハード文字数制限の代わりに段落境界で分割 • mediaMaxMb(デフォルト: 20)— メディアファイルの最大サイズ(メガバイト) ツールアクションゲート: エージェントが実行できる Slack 操作を制御: • reactions: true — リアクションの追加と一覧表示 • messages: true — メッセージの読み取り、送信、編集、削除 • pins: true — メッセージのピン留め、ピン解除、一覧表示 • memberInfo: true — ワークスペースメンバー情報の参照 • emojiList: true — ワークスペースのカスタム絵文字一覧表示 セキュリティに関する注意事項: • 書き込み操作はデフォルトで Bot Token を使用し、アプリケーションレベルの権限分離を維持 • userTokenReadOnly が false で User Token が設定されている場合、書き込みに User Token が使用される可能性があります(インストールしたユーザーとして操作) • チャンネルで allowBots を有効にする場合、ボット間の応答ループを防ぐために requireMention とユーザー許可リストを組み合わせてください
openclaw.json
{
  "channels": {
    "slack": {
      "historyLimit": 50,
      "textChunkLimit": 4000,
      "chunkMode": "newline",
      "mediaMaxMb": 20,
      "actions": {
        "reactions": true,
        "messages": true,
        "pins": true,
        "memberInfo": true,
        "emojiList": true
      }
    }
  }
}

Slack 設定リファレンス

enabled
Type: booleanDefault: true

Slack チャンネルの有効化/無効化

mode
Type: stringDefault: "socket"

接続モード。オプション: socket(Socket Mode、デフォルト)、http(Events API)

appToken
Type: stringDefault: ""

Socket Mode 用の Slack App-Level Token(xapp-...)。環境変数 SLACK_APP_TOKEN も使用可能

botToken
Type: stringDefault: ""

Slack Bot User OAuth Token(xoxb-...)。環境変数 SLACK_BOT_TOKEN も使用可能

userToken
Type: stringDefault: ""

拡張読み取りアクセス用のオプション Slack User Token(xoxp-...)

userTokenReadOnly
Type: booleanDefault: true

User Token を読み取り専用操作に制限。false に設定するとインストールしたユーザーとしての書き込みを許可

signingSecret
Type: stringDefault: ""

HTTP モードのリクエスト検証用 Signing Secret(Basic Information → App Credentials から取得)

webhookPath
Type: stringDefault: "/slack/events"

HTTP モード用の Webhook エンドポイントパス

dm.policy
Type: stringDefault: "pairing"

ダイレクトメッセージアクセス制御ポリシー。オプション: pairing(コードベースの承認)、open(誰でもダイレクトメッセージ可能)

dm.allowFrom
Type: string[]Default: []

ボットへのダイレクトメッセージを許可するユーザー。ユーザー ID、@ユーザー名、メールアドレス、ワイルドカード(*)をサポート

dm.enabled
Type: booleanDefault: true

ダイレクトメッセージを受け入れるかどうか

dm.groupEnabled
Type: booleanDefault: false

グループダイレクトメッセージ(MPIM)処理の有効化

dm.groupChannels
Type: string[]Default: []

許可するグループダイレクトメッセージのチャンネル ID

groupPolicy
Type: stringDefault: "open"

チャンネル処理ポリシー。オプション: open(すべてのチャンネル)、disabled(チャンネルなし)、allowlist(設定済みのみ)

channels.<id>.allow
Type: booleanDefault: true

許可リストモードでこのチャンネルを許可または拒否

channels.<id>.requireMention
Type: booleanDefault: false

このチャンネルでボットが応答するために @メンションが必要かどうか

channels.<id>.users
Type: string[]Default: []

このチャンネルのユーザー許可リスト(ID、@ユーザー名、またはメールアドレス)

channels.<id>.skills
Type: string[]Default: []

このチャンネルで利用可能なスキルの制限(空 = すべてのスキル)

channels.<id>.systemPrompt
Type: stringDefault: ""

このチャンネル用のカスタム AI システムプロンプト

channels.<id>.allowBots
Type: booleanDefault: false

このチャンネルで他のボットからのメッセージを処理

replyToMode
Type: stringDefault: "off"

返信スレッディングモード。オプション: off(メインチャンネル)、first(最初の返信をスレッド化)、all(すべての返信をスレッド化)

replyToModeByChatType
Type: objectDefault: {}

チャットタイプ別のスレッディングオーバーライド。キー: direct、group、channel。値: off、first、all

reactionNotifications
Type: stringDefault: "off"

エージェント通知をトリガーするリアクション。オプション: off、own、all

historyLimit
Type: numberDefault: 50

AI コンテキストに含める最近のメッセージ数。0に設定すると無効化

textChunkLimit
Type: numberDefault: 4000

長い AI 応答のメッセージチャンクあたりの最大文字数

chunkMode
Type: stringDefault: "split"

長い応答の分割方法。オプション: split(ハードリミット)、newline(段落境界)

mediaMaxMb
Type: numberDefault: 20

メディアファイルの最大サイズ(メガバイト)

slashCommand.enabled
Type: booleanDefault: true

スラッシュコマンド処理の有効化

slashCommand.name
Type: stringDefault: "openclaw"

スラッシュコマンド名(/ なし)

slashCommand.ephemeral
Type: booleanDefault: true

スラッシュコマンドの応答が実行者にのみ表示されるかどうか

Slack よくある質問

Slack トラブルシューティング

ボットがチャンネルで応答しない

チャンネルが groupPolicy によってブロックされているか、ボットが許可リストにないか、ボットがチャンネルに招待されていません。

groupPolicy 設定を確認してください。「allowlist」を使用している場合、チャンネル ID または名前が「allow: true」で設定されていることを確認します。ボットがチャンネルに招待されていることを確認してください(/invite @YourBotName)。ゲートウェイログで「blocked by group policy」メッセージを確認してください。
ボットへのダイレクトメッセージが無視される

ダイレクトメッセージポリシーが「pairing」に設定されており送信者が承認されていないか、App Home で Messages Tab が有効化されていません。

ペアリングモードを使用している場合、「openclaw pairing list slack」で保留中のペアリングを確認し、「openclaw pairing approve slack <code>」で承認してください。App Home で Messages Tab を有効化してください(Slack API ポータル → App Home → Show Tab)。dm.policy が「disabled」に設定されていないことを確認してください。
Socket Mode 接続が失敗するか、切断が繰り返される

App Token(xapp-...)が無効または期限切れであるか、サーバーと Slack 間にネットワークの問題があります。

App Token が正しく、connections:write スコープを持っていることを確認してください。必要に応じて Slack API ポータルで App Token を再生成してください。ゲートウェイログで WebSocket 接続エラーを確認してください。サーバーが wss://wss-primary.slack.com への安定したインターネットアクセスを持っていることを確認してください。
API エラー(missing_scope または invalid_auth)

Bot Token に必要な OAuth スコープが不足しているか、トークンが取り消し/再生成されています。

Slack API ポータルの OAuth & Permissions で、必要なすべてのスコープが追加されていることを確認してください。スコープを最近追加した場合は、新しい権限を適用するためにワークスペースにアプリを再インストールしてください。設定内のトークンがポータルの現在のトークンと一致していることを確認してください。
スラッシュコマンドが「dispatch_failed」と表示されるか、表示されない

Slack API ポータルでスラッシュコマンドが作成されていないか、リクエスト URL が正しく設定されていません(HTTP モード)。

API ポータルの Slash Commands で /openclaw コマンドを作成してください。Socket Mode では URL は不要です。HTTP モードでは、Request URL を https://your-host/slack/events に設定してください。コマンドを追加した後、ワークスペースにアプリを再インストールする必要がある場合があります。
メッセージが途中で切れるか、複数のチャンクで送信される

長い AI の応答が OpenClaw の textChunkLimit(デフォルト: 4,000文字)を超えると、自動的に複数のメッセージに分割されます。注: Slack 自体の制限は section ブロックあたり3,000文字、メッセージの text フィールドあたり40,000文字です。

これは予想される動作です。textChunkLimit を調整してチャンクサイズを制御してください(デフォルト: 4000)。chunkMode を「newline」に設定すると、より自然なチャンク分割のために段落境界で分割されます。systemPrompt を通じて AI に応答を簡潔に保つよう指示することを検討してください。