From meta-whatsapp
This skill should be used when the user says "send a WhatsApp", "send WhatsApp to", "message someone on WhatsApp", "/meta", or wants to send a WhatsApp text or template message to one or more phone numbers via the Meta Business API.
How this skill is triggered — by the user, by Claude, or both
Slash command
/meta-whatsapp:sendThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Send WhatsApp messages via the Meta WhatsApp Business API.
Send WhatsApp messages via the Meta WhatsApp Business API.
Parse the user's request to extract:
If no recipients or message are provided, print usage for both formats and show credential status (Step 1), then stop.
cat ~/.claude/channels/whatsapp/.env
Extract:
META_WA_PHONE_NUMBER_IDMETA_WA_ACCESS_TOKENMETA_WA_API_VERSION (default: v18.0 if unset)If META_WA_PHONE_NUMBER_ID or META_WA_ACCESS_TOKEN are missing, stop and tell the user:
"WhatsApp not configured. Use the configure skill (or say 'configure WhatsApp') to save your credentials first."
Format A — text message:
<numbers> <message text...>
Format B — template message:
template <numbers> <template_name> [param1 param2 ...]
template{{1}}, {{2}}, etc.Apply these rules in order:
+ → use as-is.00 → replace leading 00 with +.+91 (India default).+.For each normalized number, run:
curl -s -X POST \
"https://graph.facebook.com/${META_WA_API_VERSION}/${META_WA_PHONE_NUMBER_ID}/messages" \
-H "Authorization: Bearer ${META_WA_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d "{
\"messaging_product\": \"whatsapp\",
\"recipient_type\": \"individual\",
\"to\": \"NORMALIZED_NUMBER\",
\"type\": \"text\",
\"text\": {
\"preview_url\": false,
\"body\": \"MESSAGE_TEXT\"
}
}"
Build a params array from positional args: [{"type":"text","text":"param1"}, ...]
For each normalized number, run:
curl -s -X POST \
"https://graph.facebook.com/${META_WA_API_VERSION}/${META_WA_PHONE_NUMBER_ID}/messages" \
-H "Authorization: Bearer ${META_WA_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d "{
\"messaging_product\": \"whatsapp\",
\"to\": \"NORMALIZED_NUMBER\",
\"type\": \"template\",
\"template\": {
\"name\": \"TEMPLATE_NAME\",
\"language\": {\"code\": \"en_US\"},
\"components\": [{
\"type\": \"body\",
\"parameters\": PARAMS_ARRAY
}]
}
}"
Omit components entirely if no params were provided.
For each number:
messages[0].id present in response): ✓ Sent to <number> — ID: <message_id>error.message from response verbatimFinal summary line: X of Y sent successfully.
Never print the access token. If it must appear in output, mask it as EAAx....
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub jaimsh/meta-whatsapp --plugin meta-whatsapp