I've discovered that the Page.handle_message callback gets called before any function decorated with @Page.callback. I would expect that this function is called last and after other callback is executed no other callbacks are called including unless this callback returns True or something.
Here is a minimal example:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
from os import getenv
from fbmq import Page, QuickReply
from flask import Flask, request
app = Flask(__name__)
page = Page(getenv('FB_PAGE_TOKEN'))
page.show_starting_button('HOLA')
logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s: %(message)s',
level=logging.DEBUG)
@app.route('/webhook', methods=['GET', 'POST'])
def webhook():
if request.method == 'GET':
if request.args.get('hub.verify_token') == getenv('FB_VERIFY_TOKEN'):
return request.args.get('hub.challenge') or 'FAIL'
return 'FB_VERIFY_TOKEN does not match.'
elif request.method == 'POST':
# Maneja las solicitudes enviadas desde Facebook
if "facebookexternalhit" in request.headers.get('User-Agent'):
page.handle_webhook(request.get_data(as_text=True))
return 'OK'
@page.callback(['HOLA'])
def start_callback(payload, event):
replies = [QuickReply("Hello World!", "PAYLOAD")]
page.send(event.sender_id, "Say:", replies)
@page.callback(['PAYLOAD'])
def callback_qr_vitrina(payload, event):
print("message proceed")
@page.handle_message
def message_handler(event):
print("message was not processed?!")
When this example is ran, the following happens:
127.0.0.1 - - [23/Mar/2018 20:07:59] "POST /webhook HTTP/1.0" 200 -
2018-03-23 20:07:59,961 - werkzeug - INFO: 127.0.0.1 - - [23/Mar/2018 20:07:59] "POST /webhook HTTP/1.0" 200 -
message was not processed?!
2018-03-23 20:08:02,554 - urllib3.connectionpool - DEBUG: Starting new HTTPS connection (1): graph.facebook.com
2018-03-23 20:08:04,484 - urllib3.connectionpool - DEBUG: https://graph.facebook.com:443 "POST /v2.6/me/messages?access_token=<access token> HTTP/1.1" 200 85
message proceed
I've discovered that the
Page.handle_messagecallback gets called before any function decorated with@Page.callback. I would expect that this function is called last and after other callback is executed no other callbacks are called including unless this callback returnsTrueor something.Here is a minimal example:
When this example is ran, the following happens: