静かなプレビューのためのOpenClaw Matrixプッシュルール
Quietストリーミングが確定した編集に印を付ける仕組み、それを通知する受信者ごとのoverrideルール、受信者のトークンの取得、pusherの確認、ルールのインストールと確認、ボットごとに1つのルール、通常の通知のままになるもの、SynapseとTuwunelに関する注記
quietストリーミングは、Matrixの通知問題の半分を解決します。ボットが編集のたびに通知を鳴らさなくなるのです。残りの半分はホームサーバー側の問題です。どの編集が通知に値するかを指定できるのは、受信者のアカウントにあるプッシュルールだけだからです。このページは、SynapseやTuwunelをセルフホストしていて、受信者ごとにそのルールをインストールしたいオペレーター向けです。仕組み、手順、複数ボットのルール、そして2つのホームサーバーに関する注記を紹介します。
仕組み
- ストリーミングモードをquietに設定すると、OpenClawは1つのプレビューイベントをその場で編集しながら返信をストリーミングします。プレビューは通知しないnoticeイベントとして送信され、確定した編集にはOpenClawの確定済みプレビューを示すプロパティで印が付けられます。クライアントがその最終編集を通知するのは、ユーザーごとのプッシュルールがそのマーカーに一致する場合だけです。
- progressモードも同じ経路で下書きを確定するため、同じルールはprogressモードで確定した編集にも反応します。標準の通知動作だけを望むオペレーターは、partialモードを使うか、ストリーミングをオフのままにします。
- 前提条件は、通知を受け取るべき受信者ユーザー、返信を送るボットユーザー、API呼び出しに使う受信者のアクセストークン、ルールで送信者の照合に使うボットの完全なMatrix ID、そしてすでに正常に動作するpusherを持つ受信者アカウントです。quietプレビューのルールは、通常のプッシュ配信が正常なときにしか機能しないためです。
- 手順は、チャネルブロックでquietモードを設定し、受信者のアクセストークンを取得するところから始まります。可能であれば既存のクライアントセッションのトークンを再利用し、なければホームサーバーに対するパスワードログインのリクエストで発行して、続く呼び出しのためにエクスポートします。
プッシュルールはruleIdをキーにしています。同じIDに対してPUTを再実行すると、1つのルールが更新されます。
ルールのインストール
受信者のトークンでpushersエンドポイントを呼び出してpusherを確認し、何も返ってこない場合は、先に進む前にそのアカウントの通常のプッシュ配信を直してください。次に、ボットごと・受信者ごとに一意なルールIDでoverrideプッシュルールをインストールします。ルールIDは、確定済みプレビューのパターンにボットの名前を加えた形式に従います。4つの条件は、ルームメッセージのイベントタイプ、replaceのリレーションタイプ、trueに設定された確定済みプレビューのプロパティ、ボットの完全なIDと等しい送信者に一致し、アクションはnotify、デフォルトのsoundのtweak、highlightオフです。ホームサーバーのURL、トークン、ルールID、ボットIDを置き換えてください。送信者は受信者ではなくボットであることに注意します。同じルールのURLを取得して確認したら、ストリーミング返信をテストします。quietモードでは、ルームに静かな下書きプレビューが表示され、ブロックまたはターンが終わった時点で通知されます。ルールを後で取り除くには、受信者のトークンを使って同じURLに削除リクエストを送ります。
複数のボットとホームサーバー
- プッシュルールはルールIDをキーにしているため、同じIDでインストールを再実行すると1つのルールが更新されます。同じ受信者に通知する複数のOpenClawボットには、それぞれ異なる送信者照合を持つ、ボットごとに1つのルールが必要です。新しいユーザー定義のoverrideルールはサーバーデフォルトのsuppressルールより前に挿入されるため、順序のパラメーターは不要です。
- ルールが影響するのは、その場で確定できるテキストのみのプレビュー編集だけです。メディアを含む返信、古いプレビューのフォールバック、Matrixのメンションを発動する最終テキストは、代わりに通常の通知付きメッセージとして配信されます。
- Synapseではホームサーバーの設定変更は不要です。必要なのは、プロキシやworkerの構成を問わずpush-rulesのパスがSynapseに届くことと、pusherプロセスが正常であることだけです。ただし、このルールは2023年にSynapseに追加されたevent-property-is条件を使うため、古いリリースはインストールの呼び出しを受け付けても、何も言わずに一致しないままになります。確定した編集がまったく通知されない場合は、アップグレードが必要です。Tuwunelも特別な設定なしで同じ流れに従います。ユーザーが別の場所でアクティブなときに通知が消える場合は、1.4.2で追加されたsuppress-push-when-activeオプションが原因です。このオプションは、1つのデバイスがアクティブな間、ほかのデバイスへのプッシュを意図的に抑制します。
このルールの前提となるチャネルについてはMatrixでのOpenClawガイドを、このルールが補完するquietストリーミングモードについてはOpenClawのMatrixメッセージ動作の解説を参照してください。
受信者ごと、ボットごとに1つのルール
この設計では、判断を受信者側に委ねます。ボットは最終編集に印を付けるだけで、そのマーカーで通知を鳴らすかどうかは、各自がボットごとにインストールするルールで決まります。ルールIDにボットの名前が入っているのはそのためです。1つのホームサーバーで複数のボットアカウントを運用する方法はOpenClawのMatrixアカウントとホームサーバーの解説で、それらのアカウントの信頼を保つ検証についてはOpenClawのMatrix暗号化の解説で説明しています。
Dialiでは
Matrixは、WhatsApp、Telegram、Discord、Slack、Mattermost、SMS、音声と並んで、Dialiで接続できるチャネルの一覧に含まれています。ホームサーバーのアカウントとルームの許可リストはお客様のもので、Gatewayは私たちが運用します。アシスタントについてはDialiのマネージドOpenClawホスティングを、接続した各チャネルに適用される境界についてはDialiのセキュリティを参照してください。
- quietモードは最終編集に印を付け、受信者のルールがそれに反応して通知を鳴らします。
- まず正常なpusher、それからoverrideルール。
- 古いSynapseはルールを受け付けても、決して一致させません。
読むだけでなく、作ってみましょう
エージェントを設定してチャネルを選べば、いつも開いているアプリの中でエージェントが働き始めます。
