Webhook verification handshake
How Meta's GET verification works and how Callduck responds.
Webhook verification handshake
Before Meta sends any events, it verifies that your callback URL is yours. This is a one-time GET handshake. Callduck handles it automatically once your verify token matches.
What Meta sends
When you save the callback URL in Meta's dashboard, Meta calls your endpoint with three query parameters:
hub.mode=subscribehub.verify_token=<the token you configured>hub.challenge=<a random string>
How Callduck responds
- Callduck loads the channel from the URL's
{channelId}. - It compares
hub.verify_tokenagainst the channel's verify token (falling back to theWHATSAPP_VERIFY_TOKENenv value). - If
hub.modeissubscribeand the token matches, Callduck echoes the rawhub.challengeback with HTTP 200 andContent-Type: text/plain. - If the token does not match, Callduck returns 403 and Meta marks verification as failed.
What success looks like
> In Meta's WhatsApp Configuration panel, the callback URL flips to Verified (a green check). If it fails, the token on both sides does not match — the #1 cause. Re-check the value in Callduck (Channels → WhatsApp), in Meta's webhook config, and in your WHATSAPP_VERIFY_TOKEN env.
See Verify token and Webhook callback URL.
تذكير: تبدأ كال داك في الوضع التجريبي الذي لا يرسل رسائل حقيقية. اربط بيانات اعتماد منصة واتساب للأعمال الرسمية الخاصة بك للانتقال إلى التشغيل الفعلي.