Skip to content

Read receipts

Set native.readPolicy to choose when a chat is marked read:

readPolicyMarks 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
neverNever. Chats stay unread on your phone.
on_model_dispatchOnly 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.