Get Hedhog updates in your inbox
New releases, fresh recipes, and breaking changes — no spam.
Hedhog can send WhatsApp messages through a self-hosted Evolution API instance, via a Webhook Integration action — fired automatically whenever an external system calls one of your Hedhog webhooks (e.g. a third-party form submission triggers a WhatsApp notification).
whatsapp-official (the official WhatsApp Business Cloud API) is seeded as a catalog provider for future use, but has no implemented consumer yet in this version — only Evolution API actually sends messages today.
Status: ⚠️ Partial — Evolution API works through the Webhook Integration action;
whatsapp-officialis catalog-only with no consumer.

Quick Setup
- Self-host Evolution API and create a WhatsApp instance (commands below)
- Go to Settings → Integrations and Webhooks, open (or create) a Webhook Integration, and add a WhatsApp (Evolution API) action
- Fill in the
whatsapp_*fields directly on the action — no Integration Profile needed - Send a test message and confirm it's actually delivered to the linked phone, not just an HTTP
200
Self-Hosting Evolution API
docker run -d \
--name evolution-api \
-p 8080:8080 \
-e AUTHENTICATION_API_KEY=your-api-key \
atendai/evolution-api:latest
Replace your-api-key with a secure random string — this becomes the apikey header Hedhog sends on every request. The management dashboard is available at http://localhost:8080.
Create a WhatsApp session ("instance") before sending anything:
curl -X POST http://localhost:8080/instance/create \
-H "apikey: your-api-key" \
-H "Content-Type: application/json" \
-d '{"instanceName": "my-instance", "qrcode": true}'
Scan the returned QR code from a phone with WhatsApp → Linked Devices → Link a Device. The session stays active as long as that phone has internet access — losing the phone's connection drops the session and messages will start failing until you re-link.
Webhook Integration Action
- Go to Settings → Integrations and Webhooks, open (or create) a Webhook Integration
- Add an action of type WhatsApp (Evolution API) and fill in, directly on the action:
| Action field | Description |
|---|---|
whatsapp_base_url | Evolution API base URL |
whatsapp_token | Evolution API key (sent as the apikey header) |
whatsapp_instance | The instance name created above — Hedhog builds the request URL as {base_url}/message/sendText/{instance} |
whatsapp_target_type | phone or group |
whatsapp_target | Phone number or group ID — supports template placeholders resolved from the incoming webhook payload |
whatsapp_template | Message text — also supports template placeholders |
This action only sends plain text via sendText — it doesn't support media, buttons, or lists.
Limitations
- WhatsApp Business Policy restricts bulk/unsolicited messaging to opted-in contacts — sending to people who never consented risks the number being banned by WhatsApp, not just by Evolution API
- Sessions tied to a personal phone number are inherently fragile: a dead battery, app logout, or lost connectivity on that phone breaks every integration relying on it
whatsapp-official(Meta's Cloud API) is cataloged but not wired up — if you need official, rate-stable support, you'll need to build that integration yourself for now- For serious production volume, evaluate the official WhatsApp Business Cloud API via a Meta Business Solution Provider instead of a phone-tethered Evolution API session
Verify It Worked
- Trigger the webhook action once and confirm the message actually lands on the linked phone — not just that the HTTP call returned
200 - Check Evolution API's own dashboard to confirm the instance still shows as connected
Troubleshooting
| Symptom | Likely cause |
|---|---|
| Webhook action error "WhatsApp action is missing required configuration" | One of whatsapp_target, whatsapp_template, whatsapp_instance, whatsapp_base_url, whatsapp_token is blank on the action |
| Messages silently stop sending | The phone running Evolution API's session lost connection — re-link the device |
401/403 from Evolution API | whatsapp_token doesn't match Evolution API's AUTHENTICATION_API_KEY |