it-swarm.com.ru

Facebook Messenger настроен, но не запущен

Поэтому я пытаюсь настроить бота для нового API Facebook Messenger.

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

Я настроил webhook хорошо, и вижу это в моих webhooks,

Я назвал это:

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

и это не бросило никаких ошибок,

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

Любой способ отладки этой или каких-либо идей?

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

30
James

Поэтому моя проблема была в том, что я звонил 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? Кто-нибудь знает ответ на этот вопрос, или вам нужно создать новое приложение и получить разрешение для каждой страницы?

10
James

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

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

Важно

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

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

  • Попробуйте поразить ваш webhook вручную и посмотрите, отвечает ли он. Вы можете использовать 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
43
Mukarram Khalid

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

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

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

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

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

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

6
elMarquis

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

protected $except = [
        '/your_bot_route'
    ];
4
SlowSuperman

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

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

0
Kin Cheng

У меня тоже была такая же проблема, когда я работал над ботом пару дней назад. После этого 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);
        }

    }

Примечание : убедитесь, что роли пользователей на странице приложения получены от веб-хука. Я установил Администратор и Тестер пользователя. Только там смогли получить ответы. Другие пользователи получат, как только это будет опубликовано. Также измените токен проверки и токен страницы соответственно.

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

0
Rajesh