webhook developers app facebook facebook-graph-api webhooks facebook-messenger

developers - facebook messenger webhook



ConfiguraciĆ³n de webhook de Facebook Messenger, pero no activada (5)

Entonces mi problema era que estaba llamando a GET cuando intentaba suscribirme en lugar de POST

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

GET devolverá las suscripciones actuales (vacío {[]}), POST devuelve {"éxito": "verdadero"}

Algunas otras trampas que golpeé fueron,

Una cosa que todavía me desconcierta es cómo ayudar a administrar varias páginas desde una aplicación de Facebook. ¿Alguien sabe la respuesta a esto o necesitas crear una nueva aplicación y obtener permiso para cada página?

Así que estoy tratando de configurar un bot para la nueva API de Facebook Messenger.

Estoy siguiendo el inicio rápido .

Configuré el webhook ok, y lo veo en mis webhooks,

Llamé a esto:

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

y no arrojó ningún error,

Pero cuando voy a la página en la que generé el token de acceso y envío un mensaje, no llama a mi webhook. Verifico el httpaccess y no lo llama.

¿Alguna forma de depurar esta o cualquier idea?

Además, una cosa que todavía me desconcierta es cómo ayudar a administrar varias páginas desde una aplicación de Facebook. ¿Alguien sabe la respuesta a esto o necesitas crear una nueva aplicación y obtener permiso para cada página?


La exclusión de su derrota de bot de la verificación de CSRF puede ayudar si usa framework. Esto me ayuda (Laravel 5.4, app / Http / Middleware / VerifyCsrfToken.php):

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


Otra cosa que puede evitar que se envíen algunas respuestas a su webhook es cuando un tipo de mensaje se bloquea en una cola.

Si un tipo de mensaje particular se entrega a su webhook pero no recibe su respuesta de 200 en 20 segundos, seguirá intentando enviarle ese mensaje nuevamente durante horas.

Además, Facebook Messenger dejará de enviarle más de ese tipo de mensaje hasta que se haya confirmado el primero. En esencia, los pone en una cola.

Mientras tanto, otros tipos de mensajes seguirán enviando bien.

Esto me sucedió cuando accidentalmente introduje una variable no declarada dentro de mi código que manejaba mensajes estándar. Significaba que todos los mensajes de devolución funcionaban bien, pero las respuestas rápidas y los mensajes normales nunca se enviarían a mi webhook. Tan pronto como arreglas el error, todos vienen a la vez.

Como lo mencionaron otros, el uso de un servicio como POSTMAN para enviar mensajes a su webhook es una gran manera de encontrar este tipo de errores; de lo contrario, el messenger simplemente falla silenciosamente.


Recientemente trabajé con la nueva API de chat bot y hay muchas cosas que pueden salir mal. Entonces, aquí hay algunas Ideas.

  • Asegúrate de haber verificado tu enlace web en la pestaña de configuración del producto.
  • suscribe tu aplicación a la página usando tu token de acceso a la página. Devuelve {"success" : "true"} si todo va bien.

Importante

  • Asegúrese de que el usuario de Facebook desde el que está enviando el mensaje figure como Administrador, Desarrollador o Tester en los roles de su aplicación ( https://developers.facebook.com/apps/YOUR_APP_ID/roles/ ). Los mensajes de otros usuarios no funcionarán a menos que su aplicación sea aprobada y publicada.

  • ¿Has recibido alguna llamada de la API de Facebook? o solo son los mensajes? Eche un vistazo a los registros de su servidor web y verifique si obtiene visitas en el webhook. También verifica los registros de errores.

  • Intente golpear su webhook manualmente y vea si responde. Puede usar curl para generar una solicitud manual. Así es como se ve la solicitud de Facebook:

Mando:

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


Yo también tuve el mismo problema cuando estaba trabajando en un robot hace unos días. Seguí esta gist y modifiqué el código de la siguiente manera, y todo funciona 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); } }

Nota : asegúrese de que las funciones del usuario dentro de la página de la aplicación obtengan las respuestas del enlace web. Configuré el administrador y el usuario del comprobador. Solo allí pudieron obtener las respuestas. Otros usuarios obtendrán una vez que esto se publique. Además, cambie el token de verificación y el token de página en consecuencia.

Hay una opción que se solicita al publicar la aplicación sobre la cantidad de negocios que va a utilizar este bot. Pero no tengo idea de cómo usarlo. Aún buscando eso sin embargo.