用途:接收 WhatsApp Business Platform(Cloud API)经 Meta Graph API 投递的 webhook。WhatsApp webhook 属于 Meta webhook,需一次性 GET 验证握手,并对每个 POST 用 X-Hub-Signature-256 签名,不遵循 Standard Webhooks 规范。
主要能力与必要用法: 1)GET 握手:Meta 发送 GET,带 hub.mode=subscribe、hub.verify_token、hub.challenge;若 mode 为 subscribe 且 token 匹配,需返回 200,响应体为原始 hub.challenge 值(无 JSON、无引号)。 2)POST 签名校验:对原始请求体用 app secret 计算 HMAC-SHA256,与 X-Hub-Signature-256 中 sha256= 后的十六进制摘要做时序安全比较。必须使用原始字节,因 Meta 会转义非 ASCII 字符(如 é),重新序列化已解析 JSON 会导致摘要不符。 3)事件分发:遍历 entry[].changes[],按 change.field 分支。messages 字段下,入站消息在 value.messages[],出站状态回执在 value.statuses[],同一字段承载两者。常见字段还包括 message_template_status_update、account_update、phone_number_quality_update。
环境变量:WHATSAPP_APP_SECRET(Meta App Dashboard 的 App Secret)、WHATSAPP_VERIFY_TOKEN(自定义随机串,须与后台一致)。本地开发可用 npx hookdeck-cli listen 3000 whatsapp --path /webhooks/whatsapp。
限制与注意:Meta 官方 whatsapp Node SDK 面向云 API 发消息,不提供 webhook HMAC 校验,需自行按标准算法验证;重试最长 7 天且频率递减,每次 POST 可批量最多 1000 条、载荷至 3 MB,应按 message/event id 去重;app secret 与 verify token 是两个不同值;部分 webhook 仅在 Live 模式触发且需有效 TLS 证书。生成文件时按要求在顶部添加注释。完整处理器示例见 examples/express、examples/nextjs、examples/fastapi。