wake-up-neo.com

Facebook Messenger-Webhook-Einrichtung, aber nicht ausgelöst

Daher versuche ich, einen Bot für die neue Facebook Messenger-API einzurichten.

Ich verfolge den Schnellstart .

Ich richte den Webhook in Ordnung ein und sehe ihn in meinen Webhooks.

Ich nannte das:

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

und es hat keine Fehler geworfen,

Wenn ich jedoch zu der Seite gehe, auf der ich das Zugriffstoken erstellt habe, und eine Nachricht sende, wird mein Webhook nicht aufgerufen. Ich überprüfe den httpaccess und er ruft ihn nicht auf.

Gibt es eine Möglichkeit, diese oder andere Ideen zu debuggen?

Außerdem ist eine Sache, über die ich immer noch verblüfft bin, wie ich die Verwaltung mehrerer Seiten von einer Facebook-App aus unterstützen kann. Kennt jemand die Antwort darauf oder müssen Sie eine neue App erstellen und die Erlaubnis für jede Seite einholen?

30
James

Mein Problem war also, dass ich GET anrief, als ich versuchte, anstelle von POST zu abonnieren

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

GET gibt die aktuellen Abonnements zurück (leer {[]}), POST gibt {"success": "true"} zurück

Einige andere Fallstricke, die ich getroffen habe, waren:

Eine Sache, über die ich immer noch verblüfft bin, ist, wie ich die Verwaltung mehrerer Seiten über eine Facebook-App unterstützen kann. Kennt jemand die Antwort darauf oder müssen Sie eine neue App erstellen und die Erlaubnis für jede Seite einholen?

10
James

Ich habe kürzlich mit der neuen Chat-Bot-API gearbeitet und es gibt eine Menge, die schief gehen kann. Also, hier sind einige Ideen.

  • Stellen Sie sicher, dass Sie Ihren Webhook auf der Registerkarte "Produkteinstellungen" überprüft haben.
  • abonnieren Sie Ihre App für die Seite mit Ihrem Seitenzugriffstoken. Es gibt {"success" : "true"} wenn alles gut geht.

Wichtig

  • Stellen Sie sicher, dass der Facebook-Benutzer, von dem Sie die Nachricht senden, als Admin oder Developer oder Tester in aufgeführt ist Ihre App-Rollen ( https://developers.facebook.com/apps/YOUR_APP_ID/roles/ ). Nachrichten von anderen Benutzern funktionieren nur, wenn Ihre App genehmigt und öffentlich freigegeben wurde.

  • Haben Sie einen Rückruf von der Facebook-API erhalten? oder sind es nur die nachrichten? Sehen Sie sich die Protokolle Ihres Webservers an und prüfen Sie, ob der Webhook Zugriffe enthält. Überprüfen Sie auch die Fehlerprotokolle.

  • Versuchen Sie, Ihren Webhook manuell zu betätigen, und prüfen Sie, ob er reagiert. Sie können curl verwenden, um eine manuelle Anforderung zu generieren. So sieht die Anfrage von Facebook aus:

Befehl:

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

Eine andere Sache, die verhindern kann, dass einige Antworten an Ihren Webhook gesendet werden, ist, wenn ein Nachrichtentyp in einer Warteschlange blockiert wird.

Wenn ein bestimmter Nachrichtentyp an Ihren Webhook übermittelt wird, aber nicht innerhalb von 20 Sekunden eine Antwort von 200 erhalten wird, wird er stundenlang versuchen, Ihnen diese Nachricht erneut zu senden.

Was mehr ist, hört Facebook Messenger auf, Ihnen mehr von diesem Nachrichtentyp zu senden, bis der erste bestätigt wurde. Es stellt sie im Wesentlichen in eine Warteschlange.

In der Zwischenzeit werden andere Nachrichtentypen weiterhin einwandfrei gesendet.

Dies passierte mir, als ich versehentlich eine nicht deklarierte Variable in meinen Code einführte, die Standardnachrichten handhabte. Dies bedeutete, dass alle Postback-Nachrichten einwandfrei funktionierten, aber schnelle Antworten und normale Nachrichten niemals an meinen Webhook gesendet wurden. Sobald Sie den Fehler behoben haben, stapeln sich alle auf einmal.

Wie von anderen erwähnt, ist die Verwendung eines Dienstes wie POSTMAN zum Senden von Nachrichten an Ihren Webhook eine großartige Möglichkeit, um diese Art von Fehlern zu finden. Andernfalls schlägt der Messenger nur im Hintergrund fehl.

6
elMarquis

Das Ausschließen Ihrer Bootsroute von der CSRF-Überprüfung kann hilfreich sein, wenn Sie ein Framework verwenden. Das hilft mir (Laravel 5.4, app/Http/Middleware/VerifyCsrfToken.php):

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

Wenn Sie Ihr Problem immer noch nicht lösen können, versuchen Sie, den Link zu Ihren Datenschutzrichtlinien zu überprüfen und zu aktualisieren.

Ich habe den Link zur Datenschutzrichtlinie aktualisiert und Facebook zeigt 404 Fehler an, auch wenn der Webhoob verifiziert ist ...

0
Kin Cheng

Ich hatte das gleiche Problem, als ich vor ein paar Tagen an einem Bot arbeitete. Befolgte dieses Gist und änderte den Code wie folgt, und alles funktioniert gut.

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

    }

Hinweis : Stellen Sie sicher, dass die Benutzerrollen auf der Anwendungsseite vorhanden sind, damit die Antworten vom Web-Hook abgerufen werden. Ich habe Administrator und Tester Benutzer eingestellt. Nur dort konnten die Antworten abgerufen werden. Andere Benutzer erhalten, sobald dies veröffentlicht ist. Ändern Sie auch das Verifizierungstoken und das Seitentoken entsprechend.

Es gibt eine Option, die beim Veröffentlichen der App nach der Anzahl der Unternehmen gefragt wird, von denen dieser Bot verwendet werden soll. Aber ich habe keine Ahnung, wie ich es verwenden soll. Ich suche immer noch danach.

0
Rajesh