Slack
ステータス: Slackアプリ連携によるDMおよびチャンネル対応で本番環境対応済み。デフォルトモードはソケットモード。HTTP Events APIモードもサポートされています。
クイックセットアップ
{
channels: {
slack: {
enabled: true,
mode: "socket",
appToken: "xapp-...",
botToken: "xoxb-...",
},
},
}トークンモデル
botToken+appTokenはソケットモードで必須です。- HTTPモードでは
botToken+signingSecretが必要です。 - 設定ファイルのトークンは環境変数のフォールバックを上書きします。
SLACK_BOT_TOKEN/SLACK_APP_TOKEN環境変数のフォールバックはデフォルトアカウントにのみ適用されます。userToken(xoxp-...) は設定ファイル専用(環境変数フォールバックなし)で、デフォルトは読み取り専用動作です (userTokenReadOnly: true)。- オプション: 送信メッセージがアクティブなエージェントのアイデンティティ(カスタム
usernameとアイコン)を使用する場合は、chat:write.customizeを追加します。icon_emojiは:emoji_name:構文を使用します。
💡 アクション/ディレクトリ読み取りでは、設定されている場合、ユーザートークンが優先されることがあります。書き込みでは、ボットトークンが引き続き優先されます。ユーザートークンによる書き込みは、
userTokenReadOnly: falseかつボットトークンが利用できない場合にのみ許可されます。
アクセス制御とルーティング
channels.slack.dmPolicy はDMアクセスを制御します(レガシー: channels.slack.dm.policy):
pairing(デフォルト)allowlistopen(channels.slack.allowFromに"*"を含む必要があります。レガシー:channels.slack.dm.allowFrom)disabled
DMフラグ:
dm.enabled(デフォルト true)channels.slack.allowFrom(推奨)dm.allowFrom(レガシー)dm.groupEnabled(グループDMはデフォルト false)dm.groupChannels(オプションのMPIM許可リスト)
マルチアカウントの優先順位:
channels.slack.accounts.default.allowFromはdefaultアカウントにのみ適用されます。- 名前付きアカウントは、自身の
allowFromが設定されていない場合、channels.slack.allowFromを継承します。 - 名前付きアカウントは
channels.slack.accounts.default.allowFromを継承しません。
DMでのペアリングは openclaw pairing approve slack <code> を使用します。
コマンドとスラッシュ動作
- ネイティブコマンド自動モードはSlackではオフです (
commands.native: "auto"はSlackネイティブコマンドを有効にしません)。 channels.slack.commands.native: true(またはグローバルcommands.native: true) でネイティブSlackコマンドハンドラーを有効にします。- ネイティブコマンドが有効な場合、Slackで一致するスラッシュコマンドを登録します (
/<command>名)。ただし1つの例外があります:- ステータスコマンドには
/agentstatusを登録します (Slackは/statusを予約しています)。
- ステータスコマンドには
- ネイティブコマンドが有効でない場合、
channels.slack.slashCommandを介して単一の設定済みスラッシュコマンドを実行できます。 - ネイティブ引数メニューはレンダリング戦略を適応させます:
- 最大5オプション: ボタンブロック
- 6-100オプション: 静的選択メニュー
- 100を超えるオプション: インタラクティビティオプションハンドラーが利用可能な場合、非同期オプションフィルタリング付き外部選択
- エンコードされたオプション値がSlack制限を超える場合、フローはボタンにフォールバックします。
- 長いオプションペイロードの場合、スラッシュコマンド引数メニューは選択された値をディスパッチする前に確認ダイアログを使用します。
デフォルトのスラッシュコマンド設定:
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
スラッシュセッションは分離されたキーを使用します:
agent:<agentId>:slack:slash:<userId>
また、コマンド実行はターゲット会話セッション (CommandTargetSessionKey) に対してルーティングされます。
スレッド、セッション、返信タグ
- DMは
directとしてルーティングされます。チャンネルはchannel、MPIMはgroupとしてルーティングされます。 - デフォルトの
session.dmScope=mainでは、Slack DMはエージェントのメインセッションに折りたたまれます。 - チャンネルセッション:
agent:<agentId>:slack:channel:<channelId>。 - スレッド返信は、該当する場合、スレッドセッションサフィックス (
:thread:<threadTs>) を作成できます。 channels.slack.thread.historyScopeのデフォルトはthreadです。thread.inheritParentのデフォルトはfalseです。channels.slack.thread.initialHistoryLimitは、新しいスレッドセッションが開始されたときに取得される既存のスレッドメッセージの数を制御します(デフォルト20。無効にするには0を設定)。
返信スレッド制御:
channels.slack.replyToMode:off|first|all(デフォルトoff)channels.slack.replyToModeByChatType:direct|group|channelごと- ダイレクトチャット用レガシーフォールバック:
channels.slack.dm.replyToMode
手動返信タグがサポートされています:
[[reply_to_current]][[reply_to:<id>]]
注意: replyToMode="off" は、明示的な [[reply_to_*]] タグを含む、Slackでのすべての返信スレッド化を無効にします。これは、明示的なタグが "off" モードでも尊重されるTelegramとは異なります。この違いはプラットフォームのスレッドモデルを反映しています。Slackスレッドはメッセージをチャンネルから隠しますが、Telegramの返信はメインチャットフローに表示されたままです。
メディア、チャンク分割、配信
アクションとゲート
Slackアクションは channels.slack.actions.* で制御されます。現在のSlackツーリングで利用可能なアクショングループ:
| グループ | デフォルト |
|---|---|
| messages | enabled |
| reactions | enabled |
| pins | enabled |
| memberInfo | enabled |
| emojiList | enabled |
イベントと運用動作
- メッセージ編集/削除/スレッドブロードキャストはシステムイベントにマッピングされます。
- リアクション追加/削除イベントはシステムイベントにマッピングされます。
- メンバー参加/退出、チャンネル作成/名前変更、ピン追加/削除イベントはシステムイベントにマッピングされます。
- アシスタントスレッドステータス更新(スレッド内の「入力中…」インジケーター用)は
assistant.threads.setStatusを使用し、ボットスコープassistant:writeが必要です。 channel_id_changedは、configWritesが有効な場合、チャンネル設定キーを移行できます。- チャンネルトピック/目的メタデータは信頼できないコンテキストとして扱われ、ルーティングコンテキストに注入される可能性があります。
- ブロックアクションとモーダルインタラクションは、豊富なペイロードフィールドを持つ構造化された
Slack interaction: ...システムイベントを発行します:- ブロックアクション: 選択された値、ラベル、ピッカー値、
workflow_*メタデータ - ルーティングされたチャンネルメタデータとフォーム入力を持つモーダル
view_submissionおよびview_closedイベント
- ブロックアクション: 選択された値、ラベル、ピッカー値、
Ackリアクション
ackReaction は、OpenClawがインバウンドメッセージを処理している間に確認用の絵文字を送信します。解決順序:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- エージェントアイデンティティ絵文字フォールバック (
agents.list[].identity.emoji, それ以外は ”👀”)
注意:
- Slackはショートコードを期待します(例:
"eyes")。 - Slackアカウントまたはグローバルにリアクションを無効にするには
""を使用します。
タイピングリアクションフォールバック
typingReaction は、OpenClawが返信を処理している間、インバウンドSlackメッセージに一時的なリアクションを追加し、実行が終了すると削除します。これは、特にDMで、Slackネイティブのアシスタントタイピングが利用できない場合に便利なフォールバックです。解決順序:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
注意:
- Slackはショートコードを期待します(例:
"hourglass_flowing_sand")。 - リアクションはベストエフォートであり、返信または失敗パス完了後に自動的にクリーンアップが試みられます。
マニフェストとスコープチェックリスト
トラブルシューティング
テキストストリーミング
OpenClawは、Agents and AI Apps APIを介したSlackネイティブテキストストリーミングをサポートしています。channels.slack.streaming はライブプレビュー動作を制御します:
off: ライブプレビューストリーミングを無効にします。partial(デフォルト): プレビューテキストを最新の部分出力で置き換えます。block: チャンク化されたプレビュー更新を追加します。progress: 生成中に進行状況ステータステキストを表示し、最終テキストを送信します。
channels.slack.nativeStreaming は、streaming が partial の場合にSlackのネイティブストリーミングAPI (chat.startStream / chat.appendStream / chat.stopStream) を制御します(デフォルト: true)。ネイティブSlackストリーミングを無効にする(ドラフトプレビュー動作を維持):
channels:
slack:
streaming: partial
nativeStreaming: false
レガシーキー:
channels.slack.streamMode(replace | status_final | append) は自動的にchannels.slack.streamingに移行されます。- ブール値
channels.slack.streamingは自動的にchannels.slack.nativeStreamingに移行されます。
要件
- Slackアプリ設定で Agents and AI Apps を有効にします。
- アプリに
assistant:writeスコープがあることを確認します。 - そのメッセージに対して返信スレッドが利用可能である必要があります。スレッド選択は引き続き
replyToModeに従います。
動作
- 最初のテキストチャンクでストリームを開始します (
chat.startStream)。 - 後のテキストチャンクは同じストリームに追加されます (
chat.appendStream)。 - 返信終了でストリームを確定します (
chat.stopStream)。 - メディアおよび非テキストペイロードは通常の配信にフォールバックします。
- ストリーミングが返信中に失敗した場合、OpenClawは残りのペイロードに対して通常の配信にフォールバックします。
設定リファレンスポインタ
主なリファレンス:
- 設定リファレンス - Slack 高シグナルのSlackフィールド:
- モード/認証:
mode,botToken,appToken,signingSecret,webhookPath,accounts.* - DMアクセス:
dm.enabled,dmPolicy,allowFrom(レガシー:dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - 互換性トグル:
dangerouslyAllowNameMatching(非常用; 必要な場合を除きオフのまま) - チャンネルアクセス:
groupPolicy,channels.*,channels.*.users,channels.*.requireMention - スレッド/履歴:
replyToMode,replyToModeByChatType,thread.*,historyLimit,dmHistoryLimit,dms.*.historyLimit - 配信:
textChunkLimit,chunkMode,mediaMaxMb,streaming,nativeStreaming - 運用/機能:
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
- モード/認証: