send
Skill0 starsChanged 7 months agoMITView on GitHub
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.
- Reads credentials
- Sends data out
4 other projects use a version of this.
Adopted by
Most recently taken up by
- stakeme-team/arc-agent-kittheir own version, first seen Nov 8, 2026
- synaptiai/agent-capability-standardtheir own version, first seen Nov 1, 2026
- ahmetenesdur/starkfitheir own version, first seen Oct 25, 2026
- jorranMLGN/phone-droptheir own version, first seen Oct 20, 2026
Other versions4 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 4
- synaptiai/agent-capability-standard★ 6same name
- ahmetenesdur/starkfi★ 2same name
- jorranMLGN/phone-drop★ 2same name
- stakeme-team/arc-agent-kit★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repositoryOne other file it gives its agents.
- configureSkill
The file
We split this skill into the rules it gives an agent
2 rules. 0 are common, 1 is distinctive, and 1 is very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 22
If no recipients or message are provided, print usage for both formats and show credential status (Step 1), then stop.
- Very specific: line 37
If META_WA_PHONE_NUMBER_ID or META_WA_ACCESS_TOKEN are missing, stop and tell the user:
“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Send WhatsApp messages via the Meta WhatsApp Business API.
Parse the user's request to extract:
- Recipients: one or more phone numbers (comma-separated)
- Message type: plain text OR a named template with optional parameters
- Message content: the text body, or template name + positional params
If no recipients or message are provided, print usage for both formats and show credential status (Step 1), then stop.
Step 1 — Load credentials
cat ~/.claude/channels/whatsapp/.envExtract:
META_WA_PHONE_NUMBER_IDMETA_WA_ACCESS_TOKENMETA_WA_API_VERSION(default:v18.0if 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."
Step 2 — Parse the request
Format A — text message:
<numbers> <message text...>- First token(s) before the message: comma-separated phone numbers
- Remainder: message body
Format B — template message:
template <numbers> <template_name> [param1 param2 ...]- First token: literal
template - Second token: comma-separated phone numbers
- Third token: template name
- Remaining tokens: positional params for
{{1}},{{2}}, etc.
Step 3 — Normalize each phone number
Apply these rules in order:
- Strip spaces, dashes, and parentheses.
- Starts with
+→ use as-is. - Starts with
00→ replace leading00with+. - Exactly 10 digits → prepend
+91(India default). - Otherwise → prepend
+.
Step 4 — Send messages
Text message
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\"
}
}"Template message
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.
Step 5 — Report results
For each number:
- Success (
messages[0].idpresent in response):✓ Sent to <number> — ID: <message_id> - Error: show
error.messagefrom response verbatim
Final summary line: X of Y sent successfully.
Never print the access token. If it must appear in output, mask it as EAAx....
Common errors
- 401 — Token expired. Tell the user to re-run the configure skill with a fresh token.
- 400 — Invalid number, unknown template, or wrong param count — display Meta's error message verbatim.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

