PHP中的Fecebook Messenger机器人不';不要总是回复用户
出于研究目的,我在php中使用了相对简单的Facebook 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
$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
如果您忘记设置内容类型,也可能发生这种情况。“出于研究目的”尼斯免责声明;)我也有同样的问题,这对我来说很有效。