如何无需预先注册接收号码,通过WhatsApp Cloud API发送消息?
无需接收者OTP/注册即可发送WhatsApp消息的实现方法
核心差异:测试模式与正式商业平台的权限区别
你当前使用的是测试版WhatsApp API,这类模式下强制要求OTP验证接收者号码,属于Meta对测试场景的限制。而电商等商家能直接发消息,是因为他们采用了正式的WhatsApp Business Platform(商业平台),并通过合规路径发送消息。
合法发送的两种合规场景
1. 客户主动触发对话窗口
如果客户曾主动给商家的官方WhatsApp号码发过消息(比如咨询商品、下单时主动发起沟通),商家可在24小时对话有效期内发送任意内容的消息,无需额外验证。超过24小时后,仅能发送WhatsApp批准的标准化模板消息。
2. 使用预审核通过的模板消息发送会话外通知
若客户未主动发起对话,商家可发送Meta审核通过的模板消息(Template Messages)。这类模板需提前在Meta后台提交,内容必须是服务类通知(如订单确认、物流更新、支付提醒),审核通过后可直接发送给客户,无需对方OTP验证或提前同意。
具体实现步骤
切换至正式商业平台权限
- 注册Meta Business Manager账号,绑定WhatsApp Business账号,申请正式API权限(脱离测试号模式)。
- 获取正式的Access Token和Business Account ID,替换你当前代码中的对应参数。
创建并审核消息模板
- 在Meta Business Manager的WhatsApp管理后台,创建符合业务场景的模板(如订单详情模板),提交Meta审核。审核通过后会获得模板名称/ID。
调整API请求发送模板消息
发送会话外消息时,将请求体改为模板格式,示例代码如下:$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'https://graph.facebook.com/v16.0/你的Business账号ID/messages', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => json_encode(array( "messaging_product" => "whatsapp", "recipient_type" => "individual", "to" => "客户号码(带国家码,如918420XXXXXX)", "type" => "template", "template" => array( "name" => "审核通过的模板名称", "language" => array("code" => "zh_CN"), "components" => array( array( "type" => "body", "parameters" => array( array("type" => "text", "text" => "订单号:20240501001"), array("type" => "text", "text" => "商品:蓝色M码T恤") ) ) ) ) )), CURLOPT_HTTPHEADER => array( 'Content-Type: application/json', 'Authorization: Bearer 你的正式Access Token' ), )); $response = curl_exec($curl); curl_close($curl);合规要求
- 客户号码需通过合法渠道获取(如客户下单时主动提供并同意接收通知),避免垃圾消息投诉。
- 模板消息内容需严格符合WhatsApp政策,禁止发送未经许可的营销广告。
内容的提问来源于stack exchange,提问作者Tamal Biswas
相关产品推荐
相关产品推荐

