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
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.