{
  "schemaVersion": "1.0",
  "item": {
    "slug": "openclaw-whatsapp",
    "name": "OpenClaw WhatsApp",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/0xs4m1337/openclaw-whatsapp",
    "canonicalUrl": "https://clawhub.ai/0xs4m1337/openclaw-whatsapp",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/openclaw-whatsapp",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=openclaw-whatsapp",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/api-reference.md",
      "scripts/wa-notify-worker.sh",
      "scripts/wa-notify.sh"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/openclaw-whatsapp"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/openclaw-whatsapp",
    "agentPageUrl": "https://openagent3.xyz/skills/openclaw-whatsapp/agent",
    "manifestUrl": "https://openagent3.xyz/skills/openclaw-whatsapp/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/openclaw-whatsapp/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "openclaw-whatsapp",
        "body": "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."
      },
      {
        "title": "Quick Reference",
        "body": "# Check status\nopenclaw-whatsapp status\n\n# Send a message\nopenclaw-whatsapp send \"NUMBER@s.whatsapp.net\" \"Your message\"\n\n# View logs (if running as service)\njournalctl --user -u openclaw-whatsapp.service -f\n\n# View worker logs\ntail -f /tmp/openclaw-wa-agent/worker.log"
      },
      {
        "title": "Full Setup (Self-Service)",
        "body": "Follow these steps to set up WhatsApp auto-reply from scratch."
      },
      {
        "title": "Step 1: Install the binary",
        "body": "curl -fsSL https://raw.githubusercontent.com/0xs4m1337/openclaw-whatsapp/main/install.sh | bash\n\nVerify installation:\n\nopenclaw-whatsapp version"
      },
      {
        "title": "Step 2: Find your openclaw binary path",
        "body": "which openclaw\n# Example output: /home/USER/.nvm/versions/node/v22.22.0/bin/openclaw\n\nSave this path — you'll need it in Step 4."
      },
      {
        "title": "Step 3: Install relay scripts",
        "body": "Copy scripts from this skill directory:\n\nSKILL_DIR=\"$(dirname \"$(realpath \"$0\")\")\"  # or use absolute path to skill\n\n# Copy scripts\nsudo cp \"$SKILL_DIR/scripts/wa-notify.sh\" /usr/local/bin/wa-notify.sh\nsudo cp \"$SKILL_DIR/scripts/wa-notify-worker.sh\" /usr/local/bin/wa-notify-worker.sh\nsudo chmod +x /usr/local/bin/wa-notify.sh /usr/local/bin/wa-notify-worker.sh\n\nOr if running as agent, use the skill directory path directly:\n\ncp ~/clawd/skills/openclaw-whatsapp/scripts/wa-notify.sh /usr/local/bin/\ncp ~/clawd/skills/openclaw-whatsapp/scripts/wa-notify-worker.sh /usr/local/bin/\nchmod +x /usr/local/bin/wa-notify.sh /usr/local/bin/wa-notify-worker.sh"
      },
      {
        "title": "Step 4: Configure the worker script",
        "body": "Edit /usr/local/bin/wa-notify-worker.sh and update the PATH line with your openclaw binary path from Step 2:\n\n# Find this line near the top:\nexport PATH=\"/home/oussama/.nvm/versions/node/v22.22.0/bin:$PATH\"\n\n# Change it to your actual path:\nexport PATH=\"/home/YOUR_USER/.nvm/versions/node/vXX.XX.X/bin:$PATH\"\n\nAlso update the worker script path in /usr/local/bin/wa-notify.sh:\n\n# Find this line near the bottom:\nnohup /home/oussama/dev/openclaw-whatsapp/scripts/wa-notify-worker.sh\n\n# Change to:\nnohup /usr/local/bin/wa-notify-worker.sh"
      },
      {
        "title": "Step 5: Create config file",
        "body": "mkdir -p ~/.openclaw-whatsapp\ncat > ~/.openclaw-whatsapp/config.yaml << 'EOF'\nport: 8555\ndata_dir: ~/.openclaw-whatsapp\nauto_reconnect: true\nreconnect_interval: 30s\nlog_level: info\n\nagent:\n  enabled: true\n  mode: \"command\"\n  command: \"/usr/local/bin/wa-notify.sh '{name}' '{message}' '{chat_jid}' '{message_id}'\"\n  ignore_from_me: true\n  dm_only: true\n  timeout: 30s\n  system_prompt: |\n    You are a helpful WhatsApp assistant. Be concise and natural.\nEOF"
      },
      {
        "title": "Step 6: Create systemd service (recommended)",
        "body": "mkdir -p ~/.config/systemd/user\n\ncat > ~/.config/systemd/user/openclaw-whatsapp.service << 'EOF'\n[Unit]\nDescription=OpenClaw WhatsApp Bridge\nAfter=network.target\n\n[Service]\nType=simple\nExecStart=/usr/local/bin/openclaw-whatsapp start -c %h/.openclaw-whatsapp/config.yaml\nRestart=always\nRestartSec=5\n\n[Install]\nWantedBy=default.target\nEOF\n\nsystemctl --user daemon-reload\nsystemctl --user enable openclaw-whatsapp.service\nsystemctl --user start openclaw-whatsapp.service"
      },
      {
        "title": "Step 7: Link WhatsApp",
        "body": "Check bridge is running: openclaw-whatsapp status\nOpen QR page: http://localhost:8555/qr\nOn your phone: WhatsApp → Settings → Linked Devices → Link a Device\nScan the QR code"
      },
      {
        "title": "Step 8: Test",
        "body": "Send a WhatsApp message to the linked number from another phone. Check:\n\n# Bridge logs\njournalctl --user -u openclaw-whatsapp.service -n 20\n\n# Worker logs\ncat /tmp/openclaw-wa-agent/worker.log"
      },
      {
        "title": "Architecture",
        "body": "WhatsApp DM → Bridge → wa-notify.sh (enqueue)\n  → wa-notify-worker.sh (background, file-locked)\n  → Fetches last 10 messages for context\n  → openclaw agent (processes message)\n  → openclaw-whatsapp send <JID> <reply>\n  → WhatsApp reply sent\n\nKey features:\n\nFast enqueue — bridge doesn't wait for agent processing\nDeduplication — message IDs tracked to prevent double-replies\nSingle worker — file-locked, sequential processing, no race conditions\nCrash resilience — queue persists across restarts"
      },
      {
        "title": "Customizing System Prompt",
        "body": "Edit ~/.openclaw-whatsapp/config.yaml and update the system_prompt field:\n\nagent:\n  system_prompt: |\n    You are a sales assistant for Acme Corp.\n    Be friendly and professional.\n    When someone wants to book a demo:\n    - Book via: mcporter call composio.GOOGLECALENDAR_CREATE_EVENT ...\n    - Notify team via: message action=send channel=telegram target=CHAT_ID ...\n\nRestart after changes:\n\nsystemctl --user restart openclaw-whatsapp.service"
      },
      {
        "title": "Allowlist / Blocklist",
        "body": "Restrict which numbers the agent responds to:\n\nagent:\n  allowlist: [\"971586971337\"]  # only these (empty = all)\n  blocklist: [\"spammer123\"]     # never these"
      },
      {
        "title": "CLI Reference",
        "body": "openclaw-whatsapp start [-c config.yaml]  # Start the bridge\nopenclaw-whatsapp status [--addr URL]      # Check connection status\nopenclaw-whatsapp send NUMBER MESSAGE      # Send a message\nopenclaw-whatsapp stop                     # Stop the bridge\nopenclaw-whatsapp version                  # Print version"
      },
      {
        "title": "Troubleshooting",
        "body": "ProblemSolutionQR expiredRefresh http://localhost:8555/qr — auto-refreshes every 3sBridge disconnectedopenclaw-whatsapp status; auto-reconnects by defaultAgent not replyingCheck /tmp/openclaw-wa-agent/worker.log for errors\"stream replaced\" errorsMultiple bridge instances — ensure only one runs (systemctl --user status openclaw-whatsapp + pgrep openclaw-whatsapp)\"openclaw: not found\"Edit wa-notify-worker.sh PATH to include openclaw binary\"not logged in\"Scan QR again — session expired"
      },
      {
        "title": "Files",
        "body": "PathDescription~/.openclaw-whatsapp/config.yamlBridge configuration~/.openclaw-whatsapp/messages.dbSQLite message store~/.openclaw-whatsapp/sessions/WhatsApp session data/tmp/openclaw-wa-agent/queue.jsonlMessage queue/tmp/openclaw-wa-agent/worker.logWorker logs/tmp/openclaw-wa-agent/seen_message_ids.txtDeduplication list"
      },
      {
        "title": "API Endpoints",
        "body": "MethodPathDescriptionGET/statusConnection statusGET/qrQR code pagePOST/send/textSend message {\"to\": \"...\", \"message\": \"...\"}GET/chatsList all chatsGET/chats/{jid}/messages?limit=10Messages for a chatGET/messages/search?q=keywordFull-text search\n\nSee references/api-reference.md for full API docs."
      }
    ],
    "body": "openclaw-whatsapp\n\nWhatsApp 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.\n\nQuick Reference\n# Check status\nopenclaw-whatsapp status\n\n# Send a message\nopenclaw-whatsapp send \"NUMBER@s.whatsapp.net\" \"Your message\"\n\n# View logs (if running as service)\njournalctl --user -u openclaw-whatsapp.service -f\n\n# View worker logs\ntail -f /tmp/openclaw-wa-agent/worker.log\n\nFull Setup (Self-Service)\n\nFollow these steps to set up WhatsApp auto-reply from scratch.\n\nStep 1: Install the binary\ncurl -fsSL https://raw.githubusercontent.com/0xs4m1337/openclaw-whatsapp/main/install.sh | bash\n\n\nVerify installation:\n\nopenclaw-whatsapp version\n\nStep 2: Find your openclaw binary path\nwhich openclaw\n# Example output: /home/USER/.nvm/versions/node/v22.22.0/bin/openclaw\n\n\nSave this path — you'll need it in Step 4.\n\nStep 3: Install relay scripts\n\nCopy scripts from this skill directory:\n\nSKILL_DIR=\"$(dirname \"$(realpath \"$0\")\")\"  # or use absolute path to skill\n\n# Copy scripts\nsudo cp \"$SKILL_DIR/scripts/wa-notify.sh\" /usr/local/bin/wa-notify.sh\nsudo cp \"$SKILL_DIR/scripts/wa-notify-worker.sh\" /usr/local/bin/wa-notify-worker.sh\nsudo chmod +x /usr/local/bin/wa-notify.sh /usr/local/bin/wa-notify-worker.sh\n\n\nOr if running as agent, use the skill directory path directly:\n\ncp ~/clawd/skills/openclaw-whatsapp/scripts/wa-notify.sh /usr/local/bin/\ncp ~/clawd/skills/openclaw-whatsapp/scripts/wa-notify-worker.sh /usr/local/bin/\nchmod +x /usr/local/bin/wa-notify.sh /usr/local/bin/wa-notify-worker.sh\n\nStep 4: Configure the worker script\n\nEdit /usr/local/bin/wa-notify-worker.sh and update the PATH line with your openclaw binary path from Step 2:\n\n# Find this line near the top:\nexport PATH=\"/home/oussama/.nvm/versions/node/v22.22.0/bin:$PATH\"\n\n# Change it to your actual path:\nexport PATH=\"/home/YOUR_USER/.nvm/versions/node/vXX.XX.X/bin:$PATH\"\n\n\nAlso update the worker script path in /usr/local/bin/wa-notify.sh:\n\n# Find this line near the bottom:\nnohup /home/oussama/dev/openclaw-whatsapp/scripts/wa-notify-worker.sh\n\n# Change to:\nnohup /usr/local/bin/wa-notify-worker.sh\n\nStep 5: Create config file\nmkdir -p ~/.openclaw-whatsapp\ncat > ~/.openclaw-whatsapp/config.yaml << 'EOF'\nport: 8555\ndata_dir: ~/.openclaw-whatsapp\nauto_reconnect: true\nreconnect_interval: 30s\nlog_level: info\n\nagent:\n  enabled: true\n  mode: \"command\"\n  command: \"/usr/local/bin/wa-notify.sh '{name}' '{message}' '{chat_jid}' '{message_id}'\"\n  ignore_from_me: true\n  dm_only: true\n  timeout: 30s\n  system_prompt: |\n    You are a helpful WhatsApp assistant. Be concise and natural.\nEOF\n\nStep 6: Create systemd service (recommended)\nmkdir -p ~/.config/systemd/user\n\ncat > ~/.config/systemd/user/openclaw-whatsapp.service << 'EOF'\n[Unit]\nDescription=OpenClaw WhatsApp Bridge\nAfter=network.target\n\n[Service]\nType=simple\nExecStart=/usr/local/bin/openclaw-whatsapp start -c %h/.openclaw-whatsapp/config.yaml\nRestart=always\nRestartSec=5\n\n[Install]\nWantedBy=default.target\nEOF\n\nsystemctl --user daemon-reload\nsystemctl --user enable openclaw-whatsapp.service\nsystemctl --user start openclaw-whatsapp.service\n\nStep 7: Link WhatsApp\nCheck bridge is running: openclaw-whatsapp status\nOpen QR page: http://localhost:8555/qr\nOn your phone: WhatsApp → Settings → Linked Devices → Link a Device\nScan the QR code\nStep 8: Test\n\nSend a WhatsApp message to the linked number from another phone. Check:\n\n# Bridge logs\njournalctl --user -u openclaw-whatsapp.service -n 20\n\n# Worker logs\ncat /tmp/openclaw-wa-agent/worker.log\n\nArchitecture\nWhatsApp DM → Bridge → wa-notify.sh (enqueue)\n  → wa-notify-worker.sh (background, file-locked)\n  → Fetches last 10 messages for context\n  → openclaw agent (processes message)\n  → openclaw-whatsapp send <JID> <reply>\n  → WhatsApp reply sent\n\n\nKey features:\n\nFast enqueue — bridge doesn't wait for agent processing\nDeduplication — message IDs tracked to prevent double-replies\nSingle worker — file-locked, sequential processing, no race conditions\nCrash resilience — queue persists across restarts\nCustomizing System Prompt\n\nEdit ~/.openclaw-whatsapp/config.yaml and update the system_prompt field:\n\nagent:\n  system_prompt: |\n    You are a sales assistant for Acme Corp.\n    Be friendly and professional.\n    When someone wants to book a demo:\n    - Book via: mcporter call composio.GOOGLECALENDAR_CREATE_EVENT ...\n    - Notify team via: message action=send channel=telegram target=CHAT_ID ...\n\n\nRestart after changes:\n\nsystemctl --user restart openclaw-whatsapp.service\n\nAllowlist / Blocklist\n\nRestrict which numbers the agent responds to:\n\nagent:\n  allowlist: [\"971586971337\"]  # only these (empty = all)\n  blocklist: [\"spammer123\"]     # never these\n\nCLI Reference\nopenclaw-whatsapp start [-c config.yaml]  # Start the bridge\nopenclaw-whatsapp status [--addr URL]      # Check connection status\nopenclaw-whatsapp send NUMBER MESSAGE      # Send a message\nopenclaw-whatsapp stop                     # Stop the bridge\nopenclaw-whatsapp version                  # Print version\n\nTroubleshooting\nProblem\tSolution\nQR expired\tRefresh http://localhost:8555/qr — auto-refreshes every 3s\nBridge disconnected\topenclaw-whatsapp status; auto-reconnects by default\nAgent not replying\tCheck /tmp/openclaw-wa-agent/worker.log for errors\n\"stream replaced\" errors\tMultiple bridge instances — ensure only one runs (systemctl --user status openclaw-whatsapp + pgrep openclaw-whatsapp)\n\"openclaw: not found\"\tEdit wa-notify-worker.sh PATH to include openclaw binary\n\"not logged in\"\tScan QR again — session expired\nFiles\nPath\tDescription\n~/.openclaw-whatsapp/config.yaml\tBridge configuration\n~/.openclaw-whatsapp/messages.db\tSQLite message store\n~/.openclaw-whatsapp/sessions/\tWhatsApp session data\n/tmp/openclaw-wa-agent/queue.jsonl\tMessage queue\n/tmp/openclaw-wa-agent/worker.log\tWorker logs\n/tmp/openclaw-wa-agent/seen_message_ids.txt\tDeduplication list\nAPI Endpoints\nMethod\tPath\tDescription\nGET\t/status\tConnection status\nGET\t/qr\tQR code page\nPOST\t/send/text\tSend message {\"to\": \"...\", \"message\": \"...\"}\nGET\t/chats\tList all chats\nGET\t/chats/{jid}/messages?limit=10\tMessages for a chat\nGET\t/messages/search?q=keyword\tFull-text search\n\nSee references/api-reference.md for full API docs."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/0xs4m1337/openclaw-whatsapp",
    "publisherUrl": "https://clawhub.ai/0xs4m1337/openclaw-whatsapp",
    "owner": "0xs4m1337",
    "version": "0.3.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/openclaw-whatsapp",
    "downloadUrl": "https://openagent3.xyz/downloads/openclaw-whatsapp",
    "agentUrl": "https://openagent3.xyz/skills/openclaw-whatsapp/agent",
    "manifestUrl": "https://openagent3.xyz/skills/openclaw-whatsapp/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/openclaw-whatsapp/agent.md"
  }
}