我正在尝试建立一个非常简单的机器人。我生成了一个访问令牌,在我的Web服务器上创建了一个简单的index.php
文件(通过SSL认证),设置了一个指向我index.php
文件的webhook,订阅了我的webhook到我的页面事件(开发人员的一切) .facebook.com),给我的机器人发了消息但没有回答。可能是什么问题?
(我已检查过所有内容:两个令牌,我是管理员等)
这是我的代码:
<?php
$access_token = "i-filled-this-out";
$verify_token = "i-also-filled-this-out";
$hub_verify_token = null;
if(isset($_REQUEST['hub_challenge'])) {
$challenge = $_REQUEST['hub_challenge'];
$hub_verify_token = $_REQUEST['hub_verify_token'];
}
if ($hub_verify_token === $verify_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'];
$message_to_reply = '';
$message_to_reply = 'Huh! what do you mean?';
//API Url
$url = 'https://graph.facebook.com/v2.6/me/messages?access_token='.$access_token;
//Initiate cURL.
$ch = curl_init($url);
//The JSON data.
$jsonData = '{
"recipient":{
"id":"'.$sender.'"
},
"message":{
"text":"'.$message_to_reply.'"
}
}';
//Encode the array into JSON.
$jsonDataEncoded = $jsonData;
//Tell cURL that we want to send a POST request.
curl_setopt($ch, CURLOPT_POST, 1);
//Attach our encoded JSON string to the POST fields.
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);
//Set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
//curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
//Execute the request
if(!empty($input['entry'][0]['messaging'][0]['message'])){
$result = curl_exec($ch);
}
答案 0 :(得分:0)
确保您的webhook正在返回对Facebook发送的POST请求的HTTP 200响应。
您正在运行什么Web服务器?检查日志以查看您的webhook是否从Facebook接收POST请求(并返回200)。
测试你的webhook的最佳方法是使用像邮递员这样的模仿facebook制作的标准POST并检查你正在服务的响应。