Bug Description
openclaw health --json reports "running": false, "connected": false for all channels (WhatsApp and Mattermost) even when they are actively running and connected. All timestamp fields (lastConnectedAt, lastDisconnect, lastMessageAt, lastEventAt, lastStartAt, lastStopAt) are null. The botTokenSource for Mattermost shows "none" despite the bot being authenticated and operational.
The overall health reports "ok": true, and the Mattermost probe embedded in the same response shows "ok": true, "status": 200 — contradicting the running: false at the channel level.
Affected Version
- First observed: v2026.2.9
- Still present: v2026.2.15 (latest as of 2026-02-15)
- Install type: source (git clone + pnpm build)
- Platform: Linux (Docker container, Node.js 22)
Steps to Reproduce
- Start the gateway with WhatsApp and Mattermost channels configured
- Verify channels are working:
openclaw channels status --probe shows both running + connected
- Run
openclaw health --json
- Observe
running: false, connected: false for both channels
Expected Behavior
health --json should report running: true, connected: true when channels are actively connected and processing messages, consistent with channels status --probe.
Actual Behavior
{
"ok": true,
"channels": {
"whatsapp": {
"configured": true,
"linked": true,
"running": false,
"connected": false,
"lastConnectedAt": null,
"lastMessageAt": null,
"lastEventAt": null
},
"mattermost": {
"configured": true,
"botTokenSource": "none",
"running": false,
"connected": false,
"lastStartAt": null,
"lastStopAt": null,
"baseUrl": null,
"probe": { "ok": true, "status": 200 }
}
}
}
Meanwhile openclaw channels status --probe correctly shows:
- WhatsApp default: enabled, configured, linked, running, connected
- Mattermost default: enabled, configured, running, connected, bot:@luca, works
Impact
- Monitoring tools that rely on
health --json for channel state get false negatives
- Watchdog scripts must use the slower
channels status --probe CLI as a workaround
- The
running/connected fields and all timestamp fields appear to never be populated after gateway startup
Workaround
Use openclaw channels status --probe (or --probe --json) instead of health --json for accurate channel state.
Bug Description
openclaw health --jsonreports"running": false, "connected": falsefor all channels (WhatsApp and Mattermost) even when they are actively running and connected. All timestamp fields (lastConnectedAt,lastDisconnect,lastMessageAt,lastEventAt,lastStartAt,lastStopAt) arenull. ThebotTokenSourcefor Mattermost shows"none"despite the bot being authenticated and operational.The overall health reports
"ok": true, and the Mattermost probe embedded in the same response shows"ok": true, "status": 200— contradicting therunning: falseat the channel level.Affected Version
Steps to Reproduce
openclaw channels status --probeshows both running + connectedopenclaw health --jsonrunning: false, connected: falsefor both channelsExpected Behavior
health --jsonshould reportrunning: true, connected: truewhen channels are actively connected and processing messages, consistent withchannels status --probe.Actual Behavior
{ "ok": true, "channels": { "whatsapp": { "configured": true, "linked": true, "running": false, "connected": false, "lastConnectedAt": null, "lastMessageAt": null, "lastEventAt": null }, "mattermost": { "configured": true, "botTokenSource": "none", "running": false, "connected": false, "lastStartAt": null, "lastStopAt": null, "baseUrl": null, "probe": { "ok": true, "status": 200 } } } }Meanwhile
openclaw channels status --probecorrectly shows:Impact
health --jsonfor channel state get false negativeschannels status --probeCLI as a workaroundrunning/connectedfields and all timestamp fields appear to never be populated after gateway startupWorkaround
Use
openclaw channels status --probe(or--probe --json) instead ofhealth --jsonfor accurate channel state.