PHP中的Fecebook Messenger Bot并不总是响应用户

时间:2016-04-22 21:22:27

标签: php facebook bots messenger

我在php中有相对简单的Facebook Messenger bot用于研究目的:

$access_token = "xxxxxxx";
$challenge = $_REQUEST['hub_challenge'];
$verify_token = $_REQUEST['hub_verify_token'];

if ($verify_token === 'MY_VERIFICATION_TOKEN') {
  echo $challenge;
}

$input = json_decode(file_get_contents('php://input'), true);

$sender = $input['entry'][0]['messaging'][0]['sender']['id'];
$message = $input['entry'][0]['messaging'][0]['message']['text'];

$url = 'https://graph.facebook.com/v2.6/me/messages?access_token='.$access_token.';

$ch = curl_init($url);

if($message=="hi")
{
        $jsonData = '{
        "recipient":{
                "id":"'.$sender.'"
        },
    "message":{
            "text":"hello!"
    }
    }';
}

$jsonDataEncoded = $jsonData;

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

$result = curl_exec($ch);

和我的cron作业与开发人员指南中的相同

curl -ik -X POST "https://graph.facebook.com/v2.6/me/subscribed_apps?access_token=xxxxxx"

基本上,除了连接和一个响应之外什么都没有。 当我个人发送“hi”(作为页面所有者和应用程序所有者)时,我的机器人总是正确响应,但当其他人试图打个招呼时 - 机器人有时会响应,有时候不会(通常不会,在5个机器人中,机器人响应一次)< / p>

此外,当我访问我的脚本网址时,它会给我错误:

{"error":{"message":"(#100) The parameter recipient is required","type":"OAuthException","code":100,"fbtrace_id":"DvrO1UEw5BJ"}}

请帮我设置好。

2 个答案:

答案 0 :(得分:6)

如果您忘记设置内容类型,也可能会发生这种情况。

答案 1 :(得分:4)

只有您的应用角色(https://developers.facebook.com/apps/YOUR_APP_ID/roles/)中列为管理员开发人员测试人员的用户才能与您的聊天机器人进行互动网络挂接。除非您的应用经Facebook批准并公开发布,否则其他用户无法使用。来自Docs

  

当您准备向公众发布应用时,它必须经过审批流程。这将引导您完成提交过程以及可接受和不可接受的用法。

关于您的第二个问题,Facebook以JSON数据的形式向您的webhook发送API调用,其中包括发件人ID &amp; HTTP请求正文中的收件人ID 。但是,当您手动访问自己的网络连接时,您的请求正文中没有这些参数,因此 $ sender 在您的情况下将为空。这就是为什么CURL对Facebook API的请求失败,并显示错误“需要参数收件人”,因为"recipient":{"id":"'.$sender.'"},将为空。

如果您想手动尝试自己的网络连接,请使用实际收件人ID ,例如:

卷曲命令:

curl -i -X POST -H 'Content-Type: application/json' -d '{"object":"page","entry":[{"id":43674671559,"time":1460620433256,"messaging":[{"sender":{"id":853241244787916},"recipient":{"id":43674671559},"timestamp":1460620433123,"message":{"mid":"mid.1460620432888:f8e3412003d2d1cd93","seq":12604,"text":"Testing Chat Bot .."}}]}]}' https://YOUR_WEBHOOK_URL_HERE