OpenClaw WhatsApp
WhatsApp bridge for OpenClaw — send/receive messages, auto-reply agents, QR pairing, message search, contact sync
WhatsApp bridge for OpenClaw — send/receive messages, auto-reply agents, QR pairing, message search, contact sync
Real data. Real impact.
Growing
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
WhatsApp bridge that connects OpenClaw agents to WhatsApp. Send messages, auto-reply to DMs with AI, search message history, and sync contacts — all from a single Go binary.
# Check status openclaw-whatsapp statusSend a message
openclaw-whatsapp send "NUMBER@s.whatsapp.net" "Your message"
View logs (if running as service)
journalctl --user -u openclaw-whatsapp.service -f
View worker logs
tail -f /tmp/openclaw-wa-agent/worker.log
Follow these steps to set up WhatsApp auto-reply from scratch.
curl -fsSL https://raw.githubusercontent.com/0xs4m1337/openclaw-whatsapp/main/install.sh | bash
Verify installation:
openclaw-whatsapp version
which openclaw # Example output: /home/USER/.nvm/versions/node/v22.22.0/bin/openclaw
Save this path — you'll need it in Step 4.
Copy scripts from this skill directory:
SKILL_DIR="$(dirname "$(realpath "$0")")" # or use absolute path to skillCopy scripts
sudo cp "$SKILL_DIR/scripts/wa-notify.sh" /usr/local/bin/wa-notify.sh sudo cp "$SKILL_DIR/scripts/wa-notify-worker.sh" /usr/local/bin/wa-notify-worker.sh sudo chmod +x /usr/local/bin/wa-notify.sh /usr/local/bin/wa-notify-worker.sh
Or if running as agent, use the skill directory path directly:
cp ~/clawd/skills/openclaw-whatsapp/scripts/wa-notify.sh /usr/local/bin/ cp ~/clawd/skills/openclaw-whatsapp/scripts/wa-notify-worker.sh /usr/local/bin/ chmod +x /usr/local/bin/wa-notify.sh /usr/local/bin/wa-notify-worker.sh
Edit
/usr/local/bin/wa-notify-worker.sh and update the PATH line with your openclaw binary path from Step 2:
# Find this line near the top: export PATH="/home/oussama/.nvm/versions/node/v22.22.0/bin:$PATH"Change it to your actual path:
export PATH="/home/YOUR_USER/.nvm/versions/node/vXX.XX.X/bin:$PATH"
Also update the worker script path in
/usr/local/bin/wa-notify.sh:
# Find this line near the bottom: nohup /home/oussama/dev/openclaw-whatsapp/scripts/wa-notify-worker.shChange to:
nohup /usr/local/bin/wa-notify-worker.sh
mkdir -p ~/.openclaw-whatsapp cat > ~/.openclaw-whatsapp/config.yaml << 'EOF' port: 8555 data_dir: ~/.openclaw-whatsapp auto_reconnect: true reconnect_interval: 30s log_level: infoagent: enabled: true mode: "command" command: "/usr/local/bin/wa-notify.sh '{name}' '{message}' '{chat_jid}' '{message_id}'" ignore_from_me: true dm_only: true timeout: 30s system_prompt: | You are a helpful WhatsApp assistant. Be concise and natural. EOF
mkdir -p ~/.config/systemd/usercat > ~/.config/systemd/user/openclaw-whatsapp.service << 'EOF' [Unit] Description=OpenClaw WhatsApp Bridge After=network.target
[Service] Type=simple ExecStart=/usr/local/bin/openclaw-whatsapp start -c %h/.openclaw-whatsapp/config.yaml Restart=always RestartSec=5
[Install] WantedBy=default.target EOF
systemctl --user daemon-reload systemctl --user enable openclaw-whatsapp.service systemctl --user start openclaw-whatsapp.service
openclaw-whatsapp statushttp://localhost:8555/qrSend a WhatsApp message to the linked number from another phone. Check:
# Bridge logs journalctl --user -u openclaw-whatsapp.service -n 20Worker logs
cat /tmp/openclaw-wa-agent/worker.log
WhatsApp DM → Bridge → wa-notify.sh (enqueue) → wa-notify-worker.sh (background, file-locked) → Fetches last 10 messages for context → openclaw agent (processes message) → openclaw-whatsapp send <JID> <reply> → WhatsApp reply sent
Key features:
Edit
~/.openclaw-whatsapp/config.yaml and update the system_prompt field:
agent: system_prompt: | You are a sales assistant for Acme Corp. Be friendly and professional. When someone wants to book a demo: - Book via: mcporter call composio.GOOGLECALENDAR_CREATE_EVENT ... - Notify team via: message action=send channel=telegram target=CHAT_ID ...
Restart after changes:
systemctl --user restart openclaw-whatsapp.service
Restrict which numbers the agent responds to:
agent: allowlist: ["971586971337"] # only these (empty = all) blocklist: ["spammer123"] # never these
openclaw-whatsapp start [-c config.yaml] # Start the bridge openclaw-whatsapp status [--addr URL] # Check connection status openclaw-whatsapp send NUMBER MESSAGE # Send a message openclaw-whatsapp stop # Stop the bridge openclaw-whatsapp version # Print version
| Problem | Solution |
|---|---|
| QR expired | Refresh http://localhost:8555/qr — auto-refreshes every 3s |
| Bridge disconnected | ; auto-reconnects by default |
| Agent not replying | Check for errors |
| "stream replaced" errors | Multiple bridge instances — ensure only one runs ( + ) |
| "openclaw: not found" | Edit wa-notify-worker.sh PATH to include openclaw binary |
| "not logged in" | Scan QR again — session expired |
| Path | Description |
|---|---|
| Bridge configuration |
| SQLite message store |
| WhatsApp session data |
| Message queue |
| Worker logs |
| Deduplication list |
| Method | Path | Description |
|---|---|---|
| | Connection status |
| | QR code page |
| | Send message |
| | List all chats |
| | Messages for a chat |
| | Full-text search |
See references/api-reference.md for full API docs.
No automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.