Read receipts
Set native.readPolicy to choose when a chat is marked read:
readPolicy | Marks the chat read |
|---|---|
on_inbound (default) | After OpenClaw has handled the message: it passed the access checks and the agent ran, or a built-in command answered it |
never | Never. Chats stay unread on your phone. |
on_model_dispatch | Only after confirming the model actually received the message. Stricter, and needs extra setup (below). |
Marking read covers the whole chat, up to the newest message. WeChat is told, so your phone and other devices can clear the unread badge too.
"native": { "readPolicy": "on_inbound"}Strict mode
on_model_dispatch waits for proof that the exact message, and any images, reached the model. It needs this permission:
"plugins": { "entries": { "agent-wechat": { "hooks": { "allowConversationAccess": true } } }}Without it, messages stay unread and the channel status shows handoffUnconfirmed. Some providers’ history formats prevent confirmation even when the agent replied. For a normal bot, use on_inbound.