Подтвердить что ты не робот

Настройка веб-узла Facebook Messenger, но не активирована

Итак, я пытаюсь настроить бота для нового API Facebook Messenger.

Я следую быстрый старт.

Я настраиваю webhook в порядке, и вижу его в своих webhooks,

Я назвал это:

https://graph.facebook.com/v2.6/me/subscribed_apps?access_token=%3Ctoken%3E

и он не выдавал никаких ошибок,

Но когда я иду на страницу, на которой я сгенерировал токен доступа, и отправляю сообщение, он не вызывает мой webhook. Я проверяю httpaccess, и он не вызывает его.

Любой способ отладить эту или любые идеи?

Кроме того, я все еще озадачен тем, как поддерживать управление несколькими страницами из одного приложения Facebook? Кто-нибудь знает ответ на этот вопрос, или вам нужно создать новое приложение и получить разрешение на каждую страницу?

4b9b3361

Ответ 1

Итак, моя проблема заключалась в том, что я вызывал GET при попытке подписаться вместо POST

https://graph.facebook.com/v2.6/:pageid/subscribed_apps?access_token=:token

GET вернет текущие подписки (пусто {[]}), POST возвращает { "success": "true" }

Некоторые другие ошибки, которые я ударил, были

  • в примерах используется https://graph.facebook.com/v2.6/me/.. но мне, казалось, нужно было использовать https://graph.facebook.com/v2.6/:pageid
  • токен доступа - токен доступа к мессенджеру, а не токен доступа к API
  • Если ваш webhook выдает сообщение об ошибке, Facebook перестанет отправлять вам сообщения какое-то время

Одна вещь, которую я все еще озадачиваю, - это поддержка управления несколькими страницами из одного приложения Facebook? Кто-нибудь знает ответ на этот вопрос, или вам нужно создать новое приложение и получить разрешение на каждую страницу?

Ответ 2

Недавно я работал с новым API-интерфейсом чата и там много, что может пойти не так. Итак, вот некоторые идеи.

  • Убедитесь, что вы проверили свой веб-сайт на вкладке настроек продукта.
  • Подпишитесь на свою страницу, используя маркер доступа к странице. Он возвращает {"success" : "true"}, если все будет правильно.

Внимание!

  • Убедитесь, что пользователь Facebook, с которого вы отправляете сообщение, указан в качестве Администратор или Разработчик или Тестер в роли вашего приложения (https://developers.facebook.com/apps/YOUR_APP_ID/roles/). Сообщения от других пользователей не будут работать, если ваше приложение не будет одобрено и публично опубликовано.

  • Получили ли вы обратный звонок из facebook api? или это просто сообщения? Взгляните на журналы вашего веб-сервера и проверьте, не попали ли вы на веб-сайт. Также проверьте журналы ошибок.

  • Попробуйте вручную нажать на веб-чек и посмотрите, отвечает ли он. Вы можете использовать curl для генерации запроса вручную. Это то, что запрос от Facebook выглядит так:

Команда:

curl -i -X POST -H 'Content-Type: application/json' -d '{"object":"page","entry":[{"id":43674671559,"time":1460620433256,"messaging":[{"sender":{"id":123456789},"recipient":{"id":987654321},"timestamp":1460620433123,"message":{"mid":"mid.1460620432888:f8e3412003d2d1cd93","seq":12604,"text":"Testing Chat Bot .."}}]}]}' https://www.YOUR_WEBHOOK_URL_HERE

Ответ 3

Еще одна вещь, которая может помешать отправке некоторых ответов вашему веб-крюку, - это когда тип сообщения блокируется в очереди.

Если определенный тип сообщения доставляется на ваш веб-крючок, но не получает ответа 200 в течение 20 секунд, он будет пытаться отправить вам это сообщение снова в течение нескольких часов.

Какой еще мессенджер facebook перестанет отправлять вам сообщения такого типа, пока не будет подтверждено первое. По сути, это ставит их в очередь.

В то же время, другие типы сообщений будут продолжать отправлять нормально.

Это случилось со мной, когда я случайно ввел необъявленную переменную в своем коде, которая обрабатывает стандартные сообщения. Это означало, что все сообщения обратной передачи работали нормально, но быстрые ответы и обычные сообщения никогда не отправлялись на мой webhook. Как только вы исправите ошибку, все они сразу же появятся.

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

Ответ 4

Исключение вашего бот-маршрута из проверки CSRF может помочь, если вы используете фреймворк. Это помогает мне (Laravel 5.4, app/Http/Middleware/VerifyCsrfToken.php):

protected $except = [
        '/your_bot_route'
    ];

Ответ 5

У меня тоже была такая же проблема, когда я работал над ботом пару дней назад. После этого gist и изменил код, как показано ниже, и все работает нормально.

public function index()
    {

        $challenge = $_REQUEST['hub_challenge'];
        $verify_token = $_REQUEST['hub_verify_token'];
        // Set this Verify Token Value on your Facebook App
        if ($verify_token === 'MyVerifyToken!') {
            echo $challenge;
        }
        $input = json_decode(file_get_contents('php://input'), true);
        // Get the Senders Graph ID
        $sender = $input['entry'][0]['messaging'][0]['sender']['id'];
        // Get the returned message
        $message = $input['entry'][0]['messaging'][0]['message']['text'];
        //$senderName = $input['entry'][0]['messaging'][0]['sender']['name'];

        $reply="Sorry, I don't understand you";

        switch($message)
        {
            case 'hello':
                $reply = "Hello, Greetings from MyApp.";
                break;
            case 'pricing':
                $reply = "Sample reply for pricing";
                break;
            case 'contact':
                $reply = "Sample reply for contact query";
                break;
            case 'webinar':
                $reply = "Sample reply for webinar";
                break;
            case 'support':
                $reply = "sample reply for support";
                break;
            default:
                $reply="Sorry, I don't understand you";
        }
        //API Url and Access Token, generate this token value on your Facebook App Page
        $url = 'https://graph.facebook.com/v2.6/me/messages?access_token=MYACCESSTOKEN';
        //Initiate cURL.
        $ch = curl_init($url);
        //The JSON data.
        $jsonData = '{
        "recipient":{
        "id":"' . $sender . '"
        },
        "message":{
            "text":"'.$reply.'"
            }
        }';
//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, $jsonData);
//Set the content type to application/json
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
//Execute the request but first check if the message is not empty.
        if (!empty($input['entry'][0]['messaging'][0]['message'])) {
            $result = curl_exec($ch);
        }

    }

Примечание. Убедитесь, что роли пользователя на странице приложения получают ответы от веб-крючка. Я установил пользователя Administrator и Tester. Только ответы были получены. Другие пользователи получат, как только это будет опубликовано. Кроме того, измените токен проверки и токен страницы соответственно.

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

Ответ 6

Я так расстроен, что пытался сделать то же самое, но это не сработало. Я шаг за шагом следовал всем урокам разработчиков Facebook, Webhook проверен с помощью токена, подписан на мою страницу Facebook, отлично работает индекс js. с почтальоном, НО, когда я отправляю сообщение, Facebook не отправляет ни одного свободного события webhook. ДАЖЕ приложение ПУБЛИЧНЫЙ зеленый свет

https://github.com/cristiantorresf/ChatBotLearning

Ответ 7

Если вы все еще не можете решить свою проблему, попробуйте проверить и обновить ссылку на политику конфиденциальности.

Я обновил ссылку для беспокойства на Политику конфиденциальности, и Facebook показывает ошибку 404, даже вебхоб проверен...