コンテンツへスキップ
ガイド

OpenClawのSlackスレッドとセッション

DM、チャンネル、グループDMがセッションにどう対応するか、スレッドのサフィックスとシードされたルート、履歴のスコープと親の継承、暗黙のメンション、返信モードとブロードキャスト、トップレベルのオプトアウト、Agent ViewのDM

6分で読めます

Slackのスレッドはメッセージをチャンネルから隠します。だからこそ、セッションモデルは、メッセージがどのOpenClawセッションに属し、返信がどこに届くのかを正確に定めなければなりません。ここでは、Slackの各サーフェスからセッションへの対応、スレッドのルール、覚えておくべきTelegramとの違いが1つある返信の制御、そしてSlack自身がスレッドを管理するAgent Viewの体験を紹介します。

セッション

  • DMはdirect、チャンネルはchannel、グループDMはgroupとしてルーティングされます。ルートバインディングは、生のピアIDに加えて、チャンネル、ユーザー、ユーザーメンションを表すSlackのターゲット形式を受け付けます。デフォルトのmainのDMスコープでは、通常のDMはエージェントのメインセッションにまとめられますが、Agent Viewのルートと既存のAssistant Viewのスレッドはスレッドセッションとして分離されたままです。チャンネルのセッションは、エージェント、チャネル、チャンネルIDをキーとします。
  • 通常のトップレベルのチャンネルメッセージは、返信モードがoffでなくてもチャンネルごとのセッションにとどまります。一方、チャンネル、グループDM、Agent View、Assistant Viewのスレッド返信は、親スレッドのタイムスタンプをスレッドのサフィックスとして使います。通常のDMの返信スレッドは、ベースのDMセッション上のUIの便宜にとどまります。
  • ルートが目に見えるスレッドを開始すると見込まれる場合、OpenClawは対象となるトップレベルのチャンネルのルートを、そのルートのタイムスタンプをキーとするスレッドセッションにシードします。これにより、ルートとその後の返信が1つのセッションを共有します。これが適用されるのは、app-mentionイベント、ボットへの明示的なメンションまたは設定されたメンションパターンへの一致、そしてメンション要件がなく返信モードがoffでないチャンネルです。
  • スレッドの履歴スコープはデフォルトでthread、親の継承はデフォルトでfalseです。最初の履歴の上限は、新しいスレッドセッションの開始時に既存のスレッドメッセージを何件取得するかを決め、デフォルトは20、0で無効になります。
Slackのスレッドはメッセージをチャンネルから隠しますが、Telegramの返信はインラインで表示されたままです。

返信、タグ、ブロードキャスト

2つの暗黙のメンションのフラグが、何がメンションのゲートを迂回するかを決めます。ボット自身のメッセージへの返信と、ボットが返信したスレッドでの続きのメッセージです。どちらもデフォルトでtrueで、続きのメッセージでも改めて明示的なメンションを求めたい場合は2つ目をfalseにします。doctor fixは、以前のrequire-explicit-mentionスレッドキーをこの肯定形のフラグに移行します。アカウントごとの上書きはアカウントのimplicit-mentionsブロックの下に、共有のデフォルトはチャネルのデフォルトの下に置きます。返信モードはデフォルトでoffで、代わりにfirst、all、batchedを選べます。チャンネルごと、direct、group、channelのチャットタイプごと、そしてダイレクトチャットについてはレガシーのDM返信モードで設定できます。手動の返信タグは、現在のメッセージまたは特定のメッセージIDを対象にします。messageツールからの明示的なスレッド返信ではreply-broadcastを設定でき、Slackは返信を親チャンネルにも投稿します。これはpost-messageのbroadcastフラグに対応し、テキストまたはBlock Kitの送信でのみ機能し、メディアのアップロードでは機能しません。スレッド内で実行され同じチャンネルを対象とするmessageツールの呼び出しは、通常、有効なアカウント、チャットタイプ、またはチャンネルごとの返信モードに従って現在のスレッドを継承します。自動返信と同じチャンネルへの送信・アップロードの呼び出しも同じ上書きを使い、top-levelフラグまたはnullのスレッドIDを指定すると、代わりに親チャンネルへの新しいメッセージになります。返信モードoffは、明示的なタグを含め任意の送信スレッド化を無効にします。これはTelegramとは異なり、Telegramではoffでも明示的なタグが引き続き尊重されます。Agent ViewとAssistant ViewはSlackが管理するスレッド形式の体験で、その返信とステータスはいずれにしても目に見えるルートにとどまり、offはそれ以外の受信スレッドセッションを平坦化しません。

Agent ViewのDM

  • Agent Viewは、AIアプリ向けのSlackのメッセージング体験です。Slackはアプリをエージェントとして表示し、Messagesタブのトップレベルの入力欄で入力された各メッセージは、Slackが独自にスレッド化する新しいルートを開始し、続きのメッセージはそのルートのスレッド内に属します。OpenClawは、DMスコープが選んだベースのセッションにスレッドのサフィックスを加えることで、すべてのルートを別々の会話として扱うため、mainスコープの下でもルートは分離されたままです。
  • ルートのスレッド内の続きのメッセージはそのルートのセッションにとどまり、入力欄からの新しいメッセージは新しいセッションを開始します。Slackがスレッドを管理しているため、返信とスレッドのステータスは返信モードに関係なく目に見えるルートにとどまります。アクティブビューのエンティティは、Slackの関連度順に並んだ構造化された信頼できないコンテキストとしてのみエージェントに届き、エンティティを含まないDMでは、古いものを再利用するのではなく、そのターンについてはエンティティがクリアされます。
  • Slackはアプリがどちらの体験を使っているかを明示しないため、OpenClawは最初に観測したシグナルからAgent Viewを記録します。シグナルは、app-context-changedイベント、アプリコンテキストを伴うDM、またはメンバーがMessagesタブを開いたときにOpenClawが行うスレッドなしのsuggested-prompts呼び出しで、この呼び出しではokとinternal-errorのどちらも根拠として数えられ、not-agent-appという応答はAssistant Viewを意味します。スレッドのタイムスタンプが自身のタイムスタンプと等しいDMは、それ自体でSlackが管理するルートとして認識されます。マーカーは永続的で、アカウント、ワークスペース、アプリIDをキーとします。Socket Modeは起動時にアプリトークンからアプリIDを読み取り、HTTPモードは最初の署名付きイベントからそれを学習して一度だけログに記録し、relayモードは実行中のプロセス内でのみマーカーを保持します。

これらのセッションが属するチャネルについてはSlack上のOpenClawを、返信が生成されている間の会話の見え方についてはOpenClawのSlackメッセージの挙動をご覧ください。

スレッドごとに1セッション、意図的に

ルートをスレッドセッションにシードすることで、にぎやかなチャンネルでのメンションは、すべての返信がチャンネルの共有セッションに戻ってくるのではなく、独自のメモリを持つプライベートな作業スレッドになります。チャンネルのセッションがエージェントをどう選ぶかはOpenClawのチャネルルーティングで、こうしたスレッドセッションを後で見つけ直す方法はOpenClawのセッション検索で解説しています。

Dialiでは

Slackは、Dialiがダッシュボードから接続するチャネルの一つで、ランタイムの設定は生成されてリリースごとに置き換えられます。そのため、ここで紹介したスレッドと返信のキーは、あなたが管理するファイルではなく、ホストされたエージェントがあなたのワークスペースでどう振る舞うかを説明するものです。DialiでのこのチャネルについてはDialiでのSlackを、その背後にあるアシスタントについてはDialiのマネージドOpenClawホスティングをご覧ください。

  • メンションされたルートとそのスレッドは1つのセッションを共有します。
  • Slackのoffは明示的な返信タグも止めますが、Telegramではタグが残ります。
  • Agent Viewのルートはそれぞれが独立した会話です。
今すぐ始める

読むだけでなく、作ってみましょう

エージェントを設定してチャネルを選べば、いつも開いているアプリの中でエージェントが働き始めます。