You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Facebook Messenger Webhooks 执行cURL POST请求时无法发送消息

问题原因与修复方案

核心代码错误

你代码中最直接的问题是变量名不匹配:send_reply函数的入参名为$reply_message,但你在设置CURLOPT_POSTFIELDS参数时调用了未定义的变量$json_string,这会导致提交给Facebook接口的请求体为空,自然无法成功发送消息。
直接修改这一行即可修复该问题:

// 原错误代码
curl_setopt($curl, CURLOPT_POSTFIELDS, $json_string);
// 修改为
curl_setopt($curl, CURLOPT_POSTFIELDS, $reply_message);

其他排查修复步骤

如果修改后仍有问题,按以下顺序排查:

  • 打印接口返回信息确认错误原因:你当前看到的200 OK是你自己的webhook接口的响应状态,不是Facebook Graph API的返回结果。在curl_exec执行后增加错误校验逻辑,查看具体报错:
    $data = curl_exec($curl);
    // 增加curl错误校验
    if(curl_errno($curl)){
        var_dump(curl_error($curl));
    }
    $result = json_decode($data, TRUE);
    // 打印Facebook返回的完整结果
    var_dump($result);
    
    常见的Facebook返回错误包括令牌无效、权限不足、接收者ID错误、消息类型不符合规则等,根据返回的错误码针对性处理即可。
  • 校验Access Token权限:确认你使用的页面访问令牌已申请pages_messaging权限,且未过期,令牌绑定的页面和webhook接收事件的页面为同一个。
  • 校验消息发送规则:RESPONSE类型的消息仅能在用户给你发消息后的24小时窗口期内发送,超过窗口期需要使用带合规标签的MESSAGE_TAG类型才能发送。
  • 避免手动拼接JSON:手动写JSON容易出现多余空格、换行、引号不匹配等语法错误,建议用PHP内置的json_encode生成请求体,示例如下:
    $reply_data = [
        "messaging_type" => "RESPONSE",
        "recipient" => ["id" => $sender_id],
        "message" => ["text" => "hello, world!"]
    ];
    $reply_message = json_encode($reply_data);
    
  • 校验接收者ID正确性:确认你填写的接收者ID是webhook事件中拿到的用户sender.id,不要和页面ID、接收者ID填反。

内容的提问来源于stack exchange,提问作者Kawin Cheong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:30:04