Webhooks Phase 5
Breaking: WhatsApp inbound requires envelope (Phase 5)
- **Breaking:** Engagive no longer POSTs bare inbound message rows without `event`. Inbound is always `whatsapp.message.received` with the v1 envelope (`api_version`, `event_id`, `data.message`, `data.contact`, …).
- `WHATSAPP_WEBHOOK_LEGACY_INBOUND` defaults to `false` and is not used for dual-write anymore.
- Verify signatures with `X-Engagive-Signature` — see `/webhooks/signing`. BimaEngagive demo documents how to store `webhook_secret` and verify.