Auth model
WhatsApp Web session or provider-backed credentials
Huge reach, strong ergonomics, and the strictest need for account-safety discipline.
WhatsApp for OpenClaw: QR linking, session ownership, account-safety posture, DM and group policy, and the failure modes operators need to plan for before going live.
Auth model
WhatsApp Web session or provider-backed credentials
Safety stance
Treat account safety as a first-class operating requirement, not a footnote after setup succeeds.
Verification ritual
Validate QR/session state, outgoing delivery, and reply threading under the exact account mode you plan to run.
Rollout mode
30–45 min setup
WhatsApp Web
WhatsApp is production-ready through a QR-linked Web session, with pairing for unknown senders and the gateway owning the linked session.
Watch linked state
Aggressive automation, stale sessions, or self-chat misunderstandings can break trust very quickly.
WhatsApp is the highest-reach consumer channel in the OpenClaw stack, but it is also the one where operators can hurt themselves fastest. The happy path is deceptively simple: scan a QR code, send a message, watch it work. The real work is deciding which account should own the lane, where the session lives, and how conservative your operating posture needs to be.
Telegram feels like credentials. Slack feels like scopes. Signal feels like host infrastructure.
WhatsApp feels like all three at once.
That is why WhatsApp pages need to be read less like a generic setup guide and more like an operations brief. The two big questions are not only “how do I connect it?” but also:
If you treat WhatsApp as just another Bot API surface, you will probably end up debugging the wrong layer.
OpenClaw uses the WhatsApp Web style flow. That means the lane depends on a linked session that belongs to a specific runtime and a specific state directory.
The key operational questions are:
If this layer breaks, outbound sends often fail even though your config still looks correct.
After the session is healthy, OpenClaw still decides:
A working session does not mean your routing posture is correct. A correctly written policy does not mean your linked session is still alive.
That split is the heart of WhatsApp operations.
This is the most important WhatsApp decision you make.
A dedicated number gives you:
It also makes the documentation cleaner because the assistant behaves like a distinct endpoint instead of sharing identity with the operator.
Running OpenClaw on your personal number can work, but it changes the operating assumptions.
You must think about:
If you use a personal number, treat that as a deliberate exception, not the default recommendation.
If you want the least surprising starting point, use this posture:
allowlist or pairing, not open{
channels: {
whatsapp: {
dmPolicy: 'allowlist',
allowFrom: ['+15551234567'],
},
},
}
Why this is a strong first posture:
If you want tighter operational control but easier onboarding for new senders:
{
channels: {
whatsapp: {
dmPolicy: 'pairing',
},
},
}
This is often better than open, especially for early rollout.
If the lane is not already linked, start the login flow:
openclaw channels login --channel whatsapp
Then scan the QR code from WhatsApp:
If you use a named account:
openclaw channels login --channel whatsapp --account work
This matters because the linked account identity and the runtime state directory are part of the channel itself.
allowlistBest when the assistant is for a known small set of people.
{
channels: {
whatsapp: {
dmPolicy: 'allowlist',
allowFrom: ['+15551234567'],
},
},
}
This is the most durable setup because your trust boundary lives in config.
pairingBest when the lane may receive first contact from people you have not pre-listed.
{
channels: {
whatsapp: {
dmPolicy: 'pairing',
},
},
}
Useful commands:
openclaw pairing list whatsapp
openclaw pairing approve whatsapp <CODE>
This makes first contact safer without turning the channel into a public endpoint.
If you insist on running on your own number, make the special case explicit:
{
channels: {
whatsapp: {
selfChatMode: true,
dmPolicy: 'allowlist',
allowFrom: ['+15551234567'],
},
},
}
This is not the preferred production story, but it can be a pragmatic testing mode if you understand the trade-off.
Related fix:
WhatsApp groups are useful, but they compound the verification burden.
Start with DMs first unless your actual use case is group-first.
The reason is simple:
are easier to reason about after you already trust the DM lane.
If your rollout genuinely depends on groups, write down three separate decisions:
A WhatsApp lane is not “done” when the QR scan succeeds.
Run this verification drill instead.
Restart the gateway:
openclaw gateway restart
Then re-test the same DM flow.
If the lane works only before restart, your operational setup is incomplete.
Verify that the process which should own the WhatsApp socket actually owns it.
This is especially important if you run multiple hosts, restart frequently, or share a state directory incorrectly.
Only after DM stability is proven:
QR login is only the beginning.
The more important questions are:
This is why WhatsApp needs more explicit operational notes than Telegram.
Telegram usually fails in policy or visibility. WhatsApp often fails in session continuity.
401 No cookie auth credentials foundThis usually means the runtime no longer has the valid WhatsApp Web credentials it needs.
Start here:
408 or WebSocket errorsThis often points to network path problems, WebSocket-hostile proxies, or trying to perform login on the wrong machine.
Start here:
No active WhatsApp Web listenerThis usually means the lane is configured, but the runtime that should own the active socket is not healthy.
Start here:
When personal-number mode is involved, self-chat assumptions and loop protections become part of the configuration story.
Start here:
If you want the most stable real-world WhatsApp rollout, bias toward this posture:
| Surface | Recommendation | Why |
|---|---|---|
| Account | Dedicated number | Cleaner trust boundary and lower personal-account risk |
| DMs | allowlist or pairing | Avoids accidental public access |
| Groups | Add later and intentionally | Reduces early debugging complexity |
| Session | One runtime owns the linked state | Prevents listener confusion and stale session drift |
| Recovery | Re-link procedure documented from day one | WhatsApp failures often become session failures |
WhatsApp is best used when you need reach, not when you need the simplest operational story.
That makes it a strong choice for:
A common architecture is:
That mix lets you preserve reliability even when WhatsApp needs re-linking or session repair.
Verification & references
References