43 votes

Configuration du webhook de Facebook Messenger, mais non déclenchée

Donc, je suis en train de configurer un bot pour le nouveau Facebook Messenger API.

Je suis en suivant le démarrage rapide.

J'ai installé le webhook ok, et le voir dans mon webhooks,

J'ai appelé ce:

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

et il n'a pas de jeter des erreurs,

Mais quand je vais sur la Page que j'ai généré le jeton d'accès, et d'envoyer un message, il n'appelle pas mon webhook. J'ai vérifier le httpaccess, et il n'a pas l'appeler.

De toute façon de débogage ou des idées?

Aussi, une chose que je suis encore perplexe sur est de savoir comment soutenir la gestion de plusieurs pages à partir d'une Facebook app? Quelqu'un sait la réponse à cette question, ou avez-vous besoin pour créer à nouveau de l'app et obtenir une autorisation pour chaque page?

58voto

Mukarram Khalid Points 1676

J'ai récemment travaillé avec le nouveau chat bot API et il y a beaucoup de choses qui peuvent mal se passer. Alors, voici quelques Idées.

  • Assurez-vous que vous avez vérifié votre webhook sous l'onglet paramètres du produit.
  • abonnez-vous à votre application de la page à l'aide de votre page jeton d'accès. Il retourne {"success" : "true"} si tout va bien.

Important

  • Assurez-vous que le Facebook de l'utilisateur à partir de laquelle vous envoyez le message est inscrite en tant qu' Administrateur ou Développeur ou Testeur dans votre application de rôles (https://developers.facebook.com/apps/YOUR_APP_ID/roles/). Les Messages d'autres utilisateurs ne fonctionnera pas à moins que votre application est approuvé et rendu public.

  • Avez-vous reçu un appel de retour de l'facebook api ? ou est-ce juste les messages? Regardez les logs de votre serveur web et de vérifier si vous obtenez des résultats sur le webhook. Vérifiez également les journaux d'erreurs.

  • Essayez de frapper votre webhook manuellement et voir s'il répond. Vous pouvez utiliser curl pour générer une demande manuelle. C'est ce que la demande de Facebook ressemble à:

Commande:

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

14voto

James Points 18355

Donc, ma question, c'est l'appel de GET lorsque vous tentez de vous abonner à la place de la POSTE

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

OBTENEZ de retour les abonnements en cours (vide {[]}), POST renvoie {"succès" : "true"}

Quelques autres astuces je touchés ont été,

Une chose que je suis encore perplexe sur est de savoir comment soutenir la gestion de plusieurs pages à partir d'une Facebook app? Quelqu'un sait la réponse à cette question, ou avez-vous besoin pour créer à nouveau de l'app et obtenir une autorisation pour chaque page?

8voto

elMarquis Points 1927

Une autre chose qui peut empêcher certaines réponses soient envoyées à votre webhook, c'est quand un type de message qui est bloqué dans une file d'attente.

Si un type de message est envoyé à votre webhook mais n'a pas reçu de réponse de 200 dans un délai de 20 secondes, il va continuer d'essayer de vous envoyer ce message à nouveau pendant des heures.

Qui plus est facebook messenger va cesser de vous envoyer plus de ce type de message jusqu'à ce que le premier a été reconnu. Essentiellement, il les met dans une file d'attente.

En attendant, d'autres types de message va continuer à envoyer de l'amende.

Ce qui m'est arrivé lorsque j'ai accidentellement introduit une variable non déclarée à l'intérieur de mon code qui traite les messages standard. Il signifie que la publication de messages tout a bien fonctionné, mais rapidement les réponses et les messages normaux ne serait jamais envoyé à mon webhook. Dès que vous corrigez l'erreur, ils viennent tous de l'empilage à travers à la fois.

Comme mentionné par d'autres, d'utiliser un service comme FACTEUR pour envoyer des messages à vos webhook est un excellent moyen de trouver ce genre d'erreurs, sinon, messenger juste échoue silencieusement.

5voto

SlowSuperman Points 95

L'exclusion de votre déroute de bot de la vérification CSRF peut vous aider si vous utilisez le framework. Cela m'aide (Laravel 5.4, app / Http / Middleware / VerifyCsrfToken.php):

 protected $except = [
        '/your_bot_route'
    ];
 

1voto

Rajesh Points 744

Moi aussi j'avais le même problème lorsque je travaillais sur un bot il ya quelques jours. Suivi ce gist et modifié le code comme ci-dessous, et tout fonctionne bien.

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);
        }

    }

Remarque : s'Assurer de l'utilisateur des rôles au sein de la page de l'application pour obtenir les réponses à partir du web crochet. J'ai mis de l'Administrateur et de Testeur de l'utilisateur. Là seulement ont été en mesure d'obtenir les réponses. D'autres utilisateurs obtiendront une fois que c'est publié. Aussi, le changement de vérifier jeton, et la page jeton en conséquence.

Il y a une option qui est demandé lors de la publication de l'application sur le nombre d'affaires de ce bot va être utilisé par. Mais je n'ai aucune idée de comment l'utiliser. Toujours à la recherche que si.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X