Ошибка hub_verify_index и hub_challenge в Messenger Bot

Я пытаюсь создать бот-мессенджер с помощью PHP, следуя этим двум руководствам: http://blog.adnansiddiqi.me/develop-your-first-facebook-messenger-bot-in-php/ и https://medium.com/@nadeem.manzoor0/facebook-messenger-platform-web-hook-setup-in-php-893ead06746b#.lcpp0jh9o.

И я использовал nGrok v2.1.18 для работы моего кода localhost из мессенджера. В моем localhost я уже установил xampp control panel v3.2.1.

Вот мой webhook.php:

<?php
/* validate verify token needed for setting up web hook */ 
if (isset($_GET['hub_verify_token'])) { 
   if ($_GET['hub_verify_token'] === 'here_is_my_token') {
       echo $_GET['hub_challenge'];
       return;
   } else {
       echo 'Invalid Verify Token';
       return;
   }
} else {
   echo $_GET['hub_verify_token'];
   echo $_GET['hub_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'];

/**
 * Some Basic rules to validate incoming messages
 */
if(preg_match('[time|current time|now]', strtolower($message))) {

    // Make request to Time API
    ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 6.0)');
    $result = file_get_contents("http://www.timeapi.org/utc/now?format=%25a%20%25b%20%25d%20%25I:%25M:%25S%20%25Y");
    if($result != '') {
        $message_to_reply = $result;
    }
} else {
    $message_to_reply = 'Huh! what do you mean?';
}
print $message_to_reply;
//API Url
$url = 'https://graph.facebook.com/v2.6/me/messages?access_token=<my-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);
}
?>

И я уже установил URL-адрес веб-перехватчиков на своей странице приложения в Facebook, например: https://903....ngrok.io/FunBot/webhook.php, а также установил токен проверки. Нет проблем.

Когда я отправляю сообщение со своей страницы, я вижу ответ в nGrok с 200 OK. Но в мессенджере ничего не отвечает.

Итак, я пытаюсь войти с json_decode(file_get_contents('php://input'), true), и ошибки нет.

Но я получаю ошибки "Undefined index: hub_challenge in C:\xampp\htdocs\FunBot\webhook.php on line ....." и "Undefined index: hub_verify_token in .......", когда пытаюсь напечатать $_GET['hub_verify_token'] и $_GET['hub_challenge'].

Вот результат ошибки undefined index на nGrok. отменить определение изображения результата индекса

Я не уверен, что эти две проблемы "undefined index" могут привести к тому, что бот не ответит.

И мне нужно изменить me/messages? с $url на page id или какой-то другой идентификатор.

Я уже прочитал много сообщений на stackoverflow о проблеме с ботом, который не отвечает, и у меня это не работает. Я действительно не знаю, какая часть неверна, потому что я впервые с ботом.

Я очень признателен за любое предложение.


person Cloud    schedule 26.10.2016    source источник
comment
Не удаляйте номера строк из сообщений об ошибках! Вы используете только $_GET['hub_verify_token'] в верхней части этого скрипта, и он завернут в оператор isset, поэтому практически невозможно получить ошибку Undefined index: hub_verify_token с этим кодом.   -  person CBroe    schedule 26.10.2016
comment
@CBroe Я имею в виду, что когда я просто пытаюсь повторить без проверки с помощью isset(), я получаю эту ошибку undefined index. Я думаю, что это не заслужено отрицательным голосом.   -  person Cloud    schedule 26.10.2016
comment
@CBroe Я уже обновил свой вопрос. Не могли бы вы проверить меня еще раз?   -  person Cloud    schedule 26.10.2016
comment
Попытка вывести содержимое переменной, которая не установлена, не имеет смысла.   -  person CBroe    schedule 26.10.2016
comment
@CBroe Спасибо за ваше замечание. Не могли бы вы подсказать, как мне решить мою проблему?   -  person Cloud    schedule 26.10.2016
comment
Какая проблема? Если переменная не задана, то и не пытайтесь ее вывести…   -  person CBroe    schedule 26.10.2016
comment
Я имею в виду, что бот не отвечает на проблему.   -  person Cloud    schedule 26.10.2016
comment
Вы уже закончили с частью настройки? И я надеюсь, вы работаете не только над внешними учебниками, но и обращались к официальной документации?   -  person CBroe    schedule 26.10.2016
comment
Давайте продолжим это обсуждение в чате.   -  person Cloud    schedule 27.10.2016


Ответы (1)


Наконец, я нашел решение. Основная проблема SSL проблема. Без использования сертификата SSL бот ничего не отвечает, даже код в порядке. А у меня нет SSL. Итак, я застрял в странной проблеме.

Итак, теперь я использовал Heroku, чтобы загрузить свой репозиторий кода и снова настроить веб-хуки с URL-адресом из Heroku. Используя Heroku, вам не нужно беспокоиться о SSL. Теперь все в порядке.

Это ссылка очень полезна для создания мессенджера.

Я надеюсь, что мой ответ может помочь кому-то.

person Cloud    schedule 28.10.2016
comment
В моем случае я использую хост Ipage, в панели администратора есть опция, называемая безопасным сервером, которая позволяет вам получить бесплатную ссылку ssl на любой файл. - person Shady Mohamed Sherif; 11.06.2018