




























@@ -0,0 +1,150 @@
1+---
2+summary: "Per-recipient Matrix push rules for quiet finalized preview edits"
3+read_when:
4+ - Setting up Matrix quiet streaming for self-hosted Synapse or Tuwunel
5+ - Users want notifications only on finished blocks, not on every preview edit
6+title: "Matrix push rules for quiet previews"
7+---
8+9+# Matrix push rules for quiet previews
10+11+When `channels.matrix.streaming` is `"quiet"`, OpenClaw edits a single preview event in place and marks the finalized edit with a custom content flag. Matrix clients notify on the final edit only if a per-user push rule matches that flag. This page is for operators who self-host Matrix and want to install that rule for each recipient account.
12+13+If you only want stock Matrix notification behavior, use `streaming: "partial"` or leave streaming off. See [Matrix channel setup](/channels/matrix#streaming-previews).
14+15+## Prerequisites
16+17+- recipient user = the person who should receive the notification
18+- bot user = the OpenClaw Matrix account that sends the reply
19+- use the recipient user's access token for the API calls below
20+- match `sender` in the push rule against the bot user's full MXID
21+- the recipient account must already have working pushers — quiet preview rules only work when normal Matrix push delivery is healthy
22+23+## Steps
24+25+<Steps>
26+<Step title="Configure quiet previews">
27+28+```json5
29+{
30+ channels: {
31+ matrix: {
32+ streaming: "quiet",
33+ },
34+ },
35+}
36+```
37+38+</Step>
39+40+<Step title="Get the recipient's access token">
41+Reuse an existing client session token where possible. To mint a fresh one:
42+43+```bash
44+curl -sS -X POST \
45+"https://matrix.example.org/_matrix/client/v3/login" \
46+ -H "Content-Type: application/json" \
47+ --data '{
48+ "type": "m.login.password",
49+ "identifier": { "type": "m.id.user", "user": "@alice:example.org" },
50+ "password": "REDACTED"
51+ }'
52+```
53+54+</Step>
55+56+<Step title="Verify pushers exist">
57+58+```bash
59+curl -sS \
60+ -H "Authorization: Bearer $USER_ACCESS_TOKEN" \
61+"https://matrix.example.org/_matrix/client/v3/pushers"
62+```
63+64+If no pushers come back, fix normal Matrix push delivery for this account before continuing.
65+66+</Step>
67+68+<Step title="Install the override push rule">
69+OpenClaw marks finalized text-only preview edits with `content["com.openclaw.finalized_preview"] = true`. Install a rule that matches that marker plus the bot MXID as sender:
70+71+```bash
72+curl -sS -X PUT \
73+"https://matrix.example.org/_matrix/client/v3/pushrules/global/override/openclaw-finalized-preview-botname" \
74+ -H "Authorization: Bearer $USER_ACCESS_TOKEN" \
75+ -H "Content-Type: application/json" \
76+ --data '{
77+ "conditions": [
78+ { "kind": "event_match", "key": "type", "pattern": "m.room.message" },
79+ {
80+ "kind": "event_property_is",
81+ "key": "content.m\\.relates_to.rel_type",
82+ "value": "m.replace"
83+ },
84+ {
85+ "kind": "event_property_is",
86+ "key": "content.com\\.openclaw\\.finalized_preview",
87+ "value": true
88+ },
89+ { "kind": "event_match", "key": "sender", "pattern": "@bot:example.org" }
90+ ],
91+ "actions": [
92+ "notify",
93+ { "set_tweak": "sound", "value": "default" },
94+ { "set_tweak": "highlight", "value": false }
95+ ]
96+ }'
97+```
98+99+Replace before running:
100+101+- `https://matrix.example.org`: your homeserver base URL
102+- `$USER_ACCESS_TOKEN`: the recipient user's access token
103+- `openclaw-finalized-preview-botname`: a rule ID unique per bot per recipient (pattern: `openclaw-finalized-preview-<botname>`)
104+- `@bot:example.org`: your OpenClaw bot MXID, not the recipient's
105+106+</Step>
107+108+<Step title="Verify">
109+110+```bash
111+curl -sS \
112+ -H "Authorization: Bearer $USER_ACCESS_TOKEN" \
113+"https://matrix.example.org/_matrix/client/v3/pushrules/global/override/openclaw-finalized-preview-botname"
114+```
115+116+Then test a streamed reply. In quiet mode the room shows a quiet draft preview and notifies once the block or turn finishes.
117+118+</Step>
119+</Steps>
120+121+To remove the rule later, `DELETE` the same rule URL with the recipient's token.
122+123+## Multi-bot notes
124+125+Push rules are keyed by `ruleId`: re-running `PUT` against the same ID updates a single rule. For multiple OpenClaw bots notifying the same recipient, create one rule per bot with a distinct sender match.
126+127+New user-defined `override` rules are inserted ahead of default suppress rules, so no extra ordering parameter is needed. The rule only affects text-only preview edits that can be finalized in place; media fallbacks and stale-preview fallbacks use normal Matrix delivery.
128+129+## Homeserver notes
130+131+<AccordionGroup>
132+<Accordion title="Synapse">
133+No special `homeserver.yaml` change is required. If normal Matrix notifications already reach this user, the recipient token + `pushrules` call above is the main setup step.
134+135+If you run Synapse behind a reverse proxy or workers, make sure `/_matrix/client/.../pushrules/` reaches Synapse correctly. Push delivery is handled by the main process or `synapse.app.pusher` / configured pusher workers — ensure those are healthy.
136+137+</Accordion>
138+139+<Accordion title="Tuwunel">
140+Same flow as Synapse; no Tuwunel-specific config is needed for the finalized preview marker.
141+142+If notifications disappear while the user is active on another device, check whether `suppress_push_when_active` is enabled. Tuwunel added this option in 1.4.2 (September 2025) and it can intentionally suppress pushes to other devices while one device is active.
143+144+</Accordion>
145+</AccordionGroup>
146+147+## Related
148+149+- [Matrix channel setup](/channels/matrix)
150+- [Streaming concepts](/concepts/streaming)
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。