{
  "schemaVersion": "1.0",
  "item": {
    "slug": "gowa",
    "name": "GOWA - WhatsApp Automation",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/aldinokemal/gowa",
    "canonicalUrl": "https://clawhub.ai/aldinokemal/gowa",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/gowa",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=gowa",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/api-endpoints.md"
    ],
    "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/gowa"
    },
    "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/gowa",
    "agentPageUrl": "https://openagent3.xyz/skills/gowa/agent",
    "manifestUrl": "https://openagent3.xyz/skills/gowa/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/gowa/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": "GOWA - WhatsApp Automation via REST API",
        "body": "Interact with WhatsApp through GOWA (Go WhatsApp Web Multi-Device) REST API for personal automation tasks."
      },
      {
        "title": "Installation & Setup",
        "body": "GOWA is available at: https://github.com/aldinokemal/go-whatsapp-web-multidevice"
      },
      {
        "title": "Download",
        "body": "Go to the releases page and download the zip matching your OS and architecture.\n\nRelease files are named: whatsapp_VERSION_OS_ARCH.zip\n\nAvailable platforms: linux (amd64/arm64/386), darwin (amd64/arm64), windows (amd64/386)"
      },
      {
        "title": "Run REST Server",
        "body": "./gowa rest\n\nThe server starts on http://localhost:3000 by default."
      },
      {
        "title": "Login (First Time)",
        "body": "Open http://localhost:3000 in a browser, scan the QR code with WhatsApp on your phone to link the device."
      },
      {
        "title": "Production Setup",
        "body": "GOWA runs in REST mode:\n\nBase URL: http://localhost:3000\nGOWA auto-connects to the device stored in the database — no X-Device-Id header needed for single-device setups.\n\n⚠️ Important: Use REST API (port 3000) only. Do NOT use MCP mode - all schedulers and automation depend on REST."
      },
      {
        "title": "Ghost Mention (mention all without @)",
        "body": "curl -X POST http://localhost:3000/send/message \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"phone\": \"120363040656010581@g.us\",\n    \"message\": \"Important announcement\",\n    \"mentions\": [\"@everyone\"]\n  }'"
      },
      {
        "title": "Send Text Message",
        "body": "curl -X POST http://localhost:3000/send/message \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"phone\": \"628123456789\", \"message\": \"Hello!\"}'"
      },
      {
        "title": "Send Image",
        "body": "curl -X POST http://localhost:3000/send/image \\\n  -F \"phone=628xxx\" \\\n  -F \"caption=Photo\" \\\n  -F \"image=@/path/to/image.jpg\""
      },
      {
        "title": "Check Status",
        "body": "curl http://localhost:3000/app/status | jq ."
      },
      {
        "title": "Messages",
        "body": "Send Text with Ghost Mention:\n\nEndpoint: POST /send/message\nBody: {\"phone\": \"group@g.us\", \"message\": \"text\", \"mentions\": [\"@everyone\"]}\n@everyone mentions all members without showing @ in text ✅\n\nReply to Message:\n\nBody: {\"phone\": \"...\", \"message\": \"...\", \"reply_message_id\": \"msg_id\"}\n\nDisappearing Message:\n\nBody: {\"phone\": \"...\", \"message\": \"...\", \"duration\": 86400} (seconds)\n\nForward Message:\n\nBody: {\"phone\": \"...\", \"message\": \"...\", \"is_forwarded\": true}"
      },
      {
        "title": "Media",
        "body": "Send Image:\n\nEndpoint: POST /send/image\nForm data: phone, caption, image (file), compress (bool)\n\nSend Document:\n\nEndpoint: POST /send/file\nForm data: phone, caption, file\n\nSend Video:\n\nEndpoint: POST /send/video\nForm data: phone, caption, video, compress (bool)\n\nSend Audio:\n\nEndpoint: POST /send/audio\nForm data: phone, audio\n\nSend Sticker:\n\nEndpoint: POST /send/sticker\nForm data: phone, sticker (auto-converts to WebP)\n\nSend Contact:\n\nEndpoint: POST /send/contact\nBody: {\"phone\": \"...\", \"contact_name\": \"...\", \"contact_phone\": \"...\"}\n\nSend Location:\n\nEndpoint: POST /send/location\nBody: {\"phone\": \"...\", \"latitude\": 0.0, \"longitude\": 0.0}\n\nSend Link:\n\nEndpoint: POST /send/link\nBody: {\"phone\": \"...\", \"link\": \"...\", \"caption\": \"...\"}\n\nSend Poll:\n\nEndpoint: POST /send/poll\nBody: {\"phone\": \"...\", \"question\": \"...\", \"options\": [\"A\", \"B\"]}"
      },
      {
        "title": "Connection & Status",
        "body": "Get Status:\n\nGET /app/status\nReturns: {\"is_connected\": true, \"is_logged_in\": true}\n\nReconnect:\n\nGET /app/reconnect\n\nLogout:\n\nGET /app/logout\n\nGet QR Code (for login):\n\nGET /app/login\nReturns: PNG image (QR code to scan)\n\nLogin with Pairing Code:\n\nGET /app/login-with-code?phone=628xxx"
      },
      {
        "title": "Groups",
        "body": "List My Groups:\n\nGET /user/my/groups\nReturns: {results: {data: [...]}} - groups array is at .results.data\nExample: curl ... | jq '.results.data[] | {Name, JID, Members: .Participants | length}'\nMax 500 groups (WhatsApp protocol limit)\n\nGet Group Info:\n\nGET /group/info?group_jid=xxx@g.us\n\nCreate Group:\n\nPOST /group\nBody: {\"name\": \"Group Name\", \"participants\": [\"628xxx@s.whatsapp.net\"]}\n\nGet Group Participants:\n\nGET /group/participants?group_jid=xxx@g.us\n\nAdd Participant:\n\nPOST /group/participants\nBody: {\"group_jid\": \"...\", \"participants\": [\"628xxx@s.whatsapp.net\"]}\n\nRemove Participant:\n\nPOST /group/participants/remove\nBody: {\"group_jid\": \"...\", \"participants\": [\"628xxx@s.whatsapp.net\"]}\n\nPromote to Admin:\n\nPOST /group/participants/promote\nBody: {\"group_jid\": \"...\", \"participants\": [\"628xxx@s.whatsapp.net\"]}\n\nDemote from Admin:\n\nPOST /group/participants/demote\nBody: {\"group_jid\": \"...\", \"participants\": [\"628xxx@s.whatsapp.net\"]}\n\nLeave Group:\n\nPOST /group/leave\nBody: {\"group_jid\": \"...\"}\n\nSet Group Photo:\n\nPOST /group/photo\nForm data: group_jid, photo\n\nSet Group Name:\n\nPOST /group/name\nBody: {\"group_jid\": \"...\", \"name\": \"...\"}\n\nSet Group Description:\n\nPOST /group/topic\nBody: {\"group_jid\": \"...\", \"topic\": \"...\"}\n\nGet Invite Link:\n\nGET /group/invite-link?group_jid=xxx@g.us\n\nJoin via Link:\n\nPOST /group/join-with-link\nBody: {\"link\": \"https://chat.whatsapp.com/...\"}"
      },
      {
        "title": "Contacts & Chats",
        "body": "List Contacts:\n\nGET /user/my/contacts\n\nGet Chats:\n\nGET /chats\n\nGet User Info:\n\nGET /user/info?phone=628xxx\n\nCheck if User Exists:\n\nGET /user/check?phone=628xxx"
      },
      {
        "title": "Message Operations",
        "body": "Revoke/Delete Message:\n\nPOST /message/{message_id}/revoke\n\nReact to Message:\n\nPOST /message/{message_id}/reaction\nBody: {\"emoji\": \"👍\"}\n\nEdit Message:\n\nPOST /message/{message_id}/update\nBody: {\"message\": \"edited text\"}\n\nMark as Read:\n\nPOST /message/{message_id}/read\n\nStar Message:\n\nPOST /message/{message_id}/star\n\nDownload Media:\n\nGET /message/{message_id}/download"
      },
      {
        "title": "Phone Number Format",
        "body": "User JID: 628123456789@s.whatsapp.net\nGroup JID: 120363040656010581@g.us\nPhone only: 628123456789 (without +)"
      },
      {
        "title": "Ghost Mention Feature",
        "body": "How it works:\n\nUse \"mentions\": [\"@everyone\"] in /send/message\nAll group members get notification\nNo @ symbol shown in message text (true ghost mention)\nTested and confirmed working ✅\n\nExample for schedulers:\n\ncurl -s -X POST http://localhost:3000/send/message \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"phone\": \"120363040656010581@g.us\", \"message\": \"Reminder text\", \"mentions\": [\"@everyone\"]}' | jq ."
      },
      {
        "title": "API Reference",
        "body": "Full OpenAPI 3.0 spec available at:\n\nOpenAPI: https://raw.githubusercontent.com/aldinokemal/go-whatsapp-web-multidevice/refs/heads/main/docs/openapi.yaml\nGitHub: https://github.com/aldinokemal/go-whatsapp-web-multidevice"
      },
      {
        "title": "Notes",
        "body": "Auto-compresses images and videos before sending\nAuto-converts images to WebP for stickers\nMax 500 groups can be retrieved (WhatsApp protocol limit)\nAll media files can be sent as file upload or URL\nSupports disappearing messages with custom duration\nMulti-device support available via X-Device-Id header when running multiple devices\nBuilt by @aldinokemal: https://github.com/aldinokemal/go-whatsapp-web-multidevice"
      }
    ],
    "body": "GOWA - WhatsApp Automation via REST API\n\nInteract with WhatsApp through GOWA (Go WhatsApp Web Multi-Device) REST API for personal automation tasks.\n\nInstallation & Setup\n\nGOWA is available at: https://github.com/aldinokemal/go-whatsapp-web-multidevice\n\nDownload\n\nGo to the releases page and download the zip matching your OS and architecture.\n\nRelease files are named: whatsapp_VERSION_OS_ARCH.zip\n\nAvailable platforms: linux (amd64/arm64/386), darwin (amd64/arm64), windows (amd64/386)\n\nRun REST Server\n./gowa rest\n\n\nThe server starts on http://localhost:3000 by default.\n\nLogin (First Time)\n\nOpen http://localhost:3000 in a browser, scan the QR code with WhatsApp on your phone to link the device.\n\nProduction Setup\n\nGOWA runs in REST mode:\n\nBase URL: http://localhost:3000\nGOWA auto-connects to the device stored in the database — no X-Device-Id header needed for single-device setups.\n\n⚠️ Important: Use REST API (port 3000) only. Do NOT use MCP mode - all schedulers and automation depend on REST.\n\nQuick Examples\nGhost Mention (mention all without @)\ncurl -X POST http://localhost:3000/send/message \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"phone\": \"120363040656010581@g.us\",\n    \"message\": \"Important announcement\",\n    \"mentions\": [\"@everyone\"]\n  }'\n\nSend Text Message\ncurl -X POST http://localhost:3000/send/message \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"phone\": \"628123456789\", \"message\": \"Hello!\"}'\n\nSend Image\ncurl -X POST http://localhost:3000/send/image \\\n  -F \"phone=628xxx\" \\\n  -F \"caption=Photo\" \\\n  -F \"image=@/path/to/image.jpg\"\n\nCheck Status\ncurl http://localhost:3000/app/status | jq .\n\nComplete API Operations\nMessages\n\nSend Text with Ghost Mention:\n\nEndpoint: POST /send/message\nBody: {\"phone\": \"group@g.us\", \"message\": \"text\", \"mentions\": [\"@everyone\"]}\n@everyone mentions all members without showing @ in text ✅\n\nReply to Message:\n\nBody: {\"phone\": \"...\", \"message\": \"...\", \"reply_message_id\": \"msg_id\"}\n\nDisappearing Message:\n\nBody: {\"phone\": \"...\", \"message\": \"...\", \"duration\": 86400} (seconds)\n\nForward Message:\n\nBody: {\"phone\": \"...\", \"message\": \"...\", \"is_forwarded\": true}\nMedia\n\nSend Image:\n\nEndpoint: POST /send/image\nForm data: phone, caption, image (file), compress (bool)\n\nSend Document:\n\nEndpoint: POST /send/file\nForm data: phone, caption, file\n\nSend Video:\n\nEndpoint: POST /send/video\nForm data: phone, caption, video, compress (bool)\n\nSend Audio:\n\nEndpoint: POST /send/audio\nForm data: phone, audio\n\nSend Sticker:\n\nEndpoint: POST /send/sticker\nForm data: phone, sticker (auto-converts to WebP)\n\nSend Contact:\n\nEndpoint: POST /send/contact\nBody: {\"phone\": \"...\", \"contact_name\": \"...\", \"contact_phone\": \"...\"}\n\nSend Location:\n\nEndpoint: POST /send/location\nBody: {\"phone\": \"...\", \"latitude\": 0.0, \"longitude\": 0.0}\n\nSend Link:\n\nEndpoint: POST /send/link\nBody: {\"phone\": \"...\", \"link\": \"...\", \"caption\": \"...\"}\n\nSend Poll:\n\nEndpoint: POST /send/poll\nBody: {\"phone\": \"...\", \"question\": \"...\", \"options\": [\"A\", \"B\"]}\nConnection & Status\n\nGet Status:\n\nGET /app/status\nReturns: {\"is_connected\": true, \"is_logged_in\": true}\n\nReconnect:\n\nGET /app/reconnect\n\nLogout:\n\nGET /app/logout\n\nGet QR Code (for login):\n\nGET /app/login\nReturns: PNG image (QR code to scan)\n\nLogin with Pairing Code:\n\nGET /app/login-with-code?phone=628xxx\nGroups\n\nList My Groups:\n\nGET /user/my/groups\nReturns: {results: {data: [...]}} - groups array is at .results.data\nExample: curl ... | jq '.results.data[] | {Name, JID, Members: .Participants | length}'\nMax 500 groups (WhatsApp protocol limit)\n\nGet Group Info:\n\nGET /group/info?group_jid=xxx@g.us\n\nCreate Group:\n\nPOST /group\nBody: {\"name\": \"Group Name\", \"participants\": [\"628xxx@s.whatsapp.net\"]}\n\nGet Group Participants:\n\nGET /group/participants?group_jid=xxx@g.us\n\nAdd Participant:\n\nPOST /group/participants\nBody: {\"group_jid\": \"...\", \"participants\": [\"628xxx@s.whatsapp.net\"]}\n\nRemove Participant:\n\nPOST /group/participants/remove\nBody: {\"group_jid\": \"...\", \"participants\": [\"628xxx@s.whatsapp.net\"]}\n\nPromote to Admin:\n\nPOST /group/participants/promote\nBody: {\"group_jid\": \"...\", \"participants\": [\"628xxx@s.whatsapp.net\"]}\n\nDemote from Admin:\n\nPOST /group/participants/demote\nBody: {\"group_jid\": \"...\", \"participants\": [\"628xxx@s.whatsapp.net\"]}\n\nLeave Group:\n\nPOST /group/leave\nBody: {\"group_jid\": \"...\"}\n\nSet Group Photo:\n\nPOST /group/photo\nForm data: group_jid, photo\n\nSet Group Name:\n\nPOST /group/name\nBody: {\"group_jid\": \"...\", \"name\": \"...\"}\n\nSet Group Description:\n\nPOST /group/topic\nBody: {\"group_jid\": \"...\", \"topic\": \"...\"}\n\nGet Invite Link:\n\nGET /group/invite-link?group_jid=xxx@g.us\n\nJoin via Link:\n\nPOST /group/join-with-link\nBody: {\"link\": \"https://chat.whatsapp.com/...\"}\nContacts & Chats\n\nList Contacts:\n\nGET /user/my/contacts\n\nGet Chats:\n\nGET /chats\n\nGet User Info:\n\nGET /user/info?phone=628xxx\n\nCheck if User Exists:\n\nGET /user/check?phone=628xxx\nMessage Operations\n\nRevoke/Delete Message:\n\nPOST /message/{message_id}/revoke\n\nReact to Message:\n\nPOST /message/{message_id}/reaction\nBody: {\"emoji\": \"👍\"}\n\nEdit Message:\n\nPOST /message/{message_id}/update\nBody: {\"message\": \"edited text\"}\n\nMark as Read:\n\nPOST /message/{message_id}/read\n\nStar Message:\n\nPOST /message/{message_id}/star\n\nDownload Media:\n\nGET /message/{message_id}/download\nPhone Number Format\nUser JID: 628123456789@s.whatsapp.net\nGroup JID: 120363040656010581@g.us\nPhone only: 628123456789 (without +)\nGhost Mention Feature\n\nHow it works:\n\nUse \"mentions\": [\"@everyone\"] in /send/message\nAll group members get notification\nNo @ symbol shown in message text (true ghost mention)\nTested and confirmed working ✅\n\nExample for schedulers:\n\ncurl -s -X POST http://localhost:3000/send/message \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"phone\": \"120363040656010581@g.us\", \"message\": \"Reminder text\", \"mentions\": [\"@everyone\"]}' | jq .\n\nAPI Reference\n\nFull OpenAPI 3.0 spec available at:\n\nOpenAPI: https://raw.githubusercontent.com/aldinokemal/go-whatsapp-web-multidevice/refs/heads/main/docs/openapi.yaml\nGitHub: https://github.com/aldinokemal/go-whatsapp-web-multidevice\nNotes\nAuto-compresses images and videos before sending\nAuto-converts images to WebP for stickers\nMax 500 groups can be retrieved (WhatsApp protocol limit)\nAll media files can be sent as file upload or URL\nSupports disappearing messages with custom duration\nMulti-device support available via X-Device-Id header when running multiple devices\nBuilt by @aldinokemal: https://github.com/aldinokemal/go-whatsapp-web-multidevice"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/aldinokemal/gowa",
    "publisherUrl": "https://clawhub.ai/aldinokemal/gowa",
    "owner": "aldinokemal",
    "version": "1.4.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/gowa",
    "downloadUrl": "https://openagent3.xyz/downloads/gowa",
    "agentUrl": "https://openagent3.xyz/skills/gowa/agent",
    "manifestUrl": "https://openagent3.xyz/skills/gowa/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/gowa/agent.md"
  }
}