【问题标题】:Fecebook Messenger Bot in PHP doesn't always respond to userPHP 中的 Facebook Messenger Bot 并不总是响应用户
【发布时间】:2016-04-22 21:22:27
【问题描述】:

我在 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"

所以基本上,除了连接和一个响应之外什么都没有。 当我亲自发送“嗨”(作为页面所有者和应用程序所有者)时,我的机器人总是正确响应,但是当其他人尝试说嗨时 - 机器人有时会响应,有时不会(通常不会,在 5 种情况下机器人会响应一次)

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

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

请帮我正确设置。

【问题讨论】:

  • "用于研究目的"很好的免责声明 ;)

标签: php facebook bots messenger


【解决方案1】:

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

【讨论】:

  • 我遇到了完全相同的问题,这对我有用。
【解决方案2】:

只有在您的应用角色 (https://developers.facebook.com/apps/YOUR_APP_ID/roles/) 中列为 AdminsDevelopersTesters 的用户可以与您的聊天机器人 webhook 交互。除非您的应用已获得 Facebook 批准并公开可用,否则其他用户将无法使用该应用。来自Docs

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

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

如果您想手动尝试您的 webhook,请使用实际的收件人 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

【讨论】:

    猜你喜欢
    • 2016-09-08
    • 2018-02-20
    • 2017-03-10
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 2016-11-16
    相关资源
    最近更新 更多