Skip to content

whatsapp.send

Schema

Input = {
to: string, // E.164 phone number, e.g. "+447700900123"
text: string, // max 4096 chars
}
Output = {
messageId: string,
provider: string,
}

requiresConnection: 'whatsapp'. PLAN.md §4 describes WhatsApp as a “stub/adapter”, and that’s exactly what this is: the request shape matches the real Meta Cloud API (messaging_product: 'whatsapp', a phoneNumberId in the URL, a bearer accessToken), so wiring it up in production is a matter of creating a whatsapp connection with those two fields, not writing new code. Without them, calling it fails immediately with a plain message: “WhatsApp is not configured: the connection needs { phoneNumberId, accessToken } from the Meta Cloud API.” There is no ingestion side (no whatsapp.read, no learning-loop sync) — this is send-only, and POST /api/twin/sync/whatsapp is explicitly refused elsewhere in the API (see Your Twin).

whatsapp.send is one of the six world-acting skills: an agent’s tool loop calling it directly is refused — a decision Signal goes to your desktop instead, and it only actually sends once you tap “Do it”.

Example

Terminal window
curl -s -X POST http://localhost:4000/api/studio/skills/invoke \
-H 'content-type: application/json' -b cookies.txt \
-d '{"name":"whatsapp.send","input":{"to":"+447700900123","text":"Your table is ready."}}'

Without a configured whatsapp connection, this returns ok: false with the configuration message above rather than a raw HTTP error.