Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的Fecebook Messenger机器人不';不要总是回复用户_Php_Facebook_Bots_Messenger - Fatal编程技术网

PHP中的Fecebook Messenger机器人不';不要总是回复用户

PHP中的Fecebook Messenger机器人不';不要总是回复用户,php,facebook,bots,messenger,Php,Facebook,Bots,Messenger,出于研究目的,我在php中使用了相对简单的Facebook Messenger机器人: $access_token = "xxxxxxx"; $challenge = $_REQUEST['hub_challenge']; $verify_token = $_REQUEST['hub_verify_token']; if ($verify_token === 'MY_VERIFICATION_TOKEN') { echo $challenge; } $input = json_decod

出于研究目的,我在php中使用了相对简单的Facebook Messenger机器人:

$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”(作为页面所有者和应用程序所有者)时,我的机器人总是正确响应,但当其他人试图说hi时,机器人有时响应,有时不响应(通常不响应,在5种情况下机器人响应一次)

此外,当我访问脚本url时,它会给我错误信息:

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

请帮助我将此设置正确。

只有在应用程序角色()中列为管理员开发人员测试人员的用户才能与聊天机器人webhook交互。除非你的应用程序得到Facebook的批准并公开发布,否则其他用户将无法使用。从:

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

关于你的第二个问题,Facebook以JSON数据的形式向你的webhook发送一个API调用,其中包括HTTP请求正文中的发送者id&接收者id。但是当您手动访问webhook时,您的请求正文中没有这些参数,因此在您的案例中,$sender将为空。这就是为什么对Facebook API的CURL请求失败,错误为“参数recipient is required”,因为
“recipient”:{“id”:“.$sender.”“},
将为空

如果要手动尝试webhook,请使用实际的收件人id,类似于:

Curl命令:

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

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

“出于研究目的”尼斯免责声明;)我也有同样的问题,这对我来说很有效。