Как отправить текстовое сообщение в мессенджер FB через Flask и pymessenger?

Я создаю чат-бот, развернутый через мессенджер FB. Согласно документации FB, вы должны отправить это отправить запрос на платформу мессенджера. Я отправляю строковое представление полезной нагрузки, используя json.dumps. Тем не менее, я никогда не вижу пузырек ввода и получаю только фактическое ответное сообщение от бота. Вот соответствующий код из приложения Flask.

@app.route('/', methods=['GET', 'POST'])
def receive_message():
    global tag, latest_message
    if request.method == 'GET':
        # Before allowing people to message your bot Facebook has implemented a verify token
        # that confirms all requests that your bot receives came from Facebook.
        token_sent = request.args.get("hub.verify_token")
        return verify_fb_token(token_sent)
    # If the request was not GET, it  must be POSTand we can just proceed with sending a message
    # back to user
    else:
            # get whatever message a user sent the bot
        output = request.get_json()
        for event in output['entry']:
            messaging = event['messaging']
            for message in messaging:
                if message.get('message'):
                    # Facebook Messenger ID for user so we know where to send response back to
                    recipient_id = message['sender']['id']
                    typing_payload = json.dumps({"recipient":{"id":recipient_id}, "sender_action":"typing_on"})
                    bot.send_raw(typing_payload)
                    time.sleep(3)
                    if message['message'].get('text'):
                        response_sent_text = send(message['message'].get('text'))
                        send_message(recipient_id, response_sent_text)
                        latest_message = response_sent_text
    return "Message Processed"

person Jamerson2    schedule 24.08.2020    source источник


Ответы (1)


Вы можете использовать оболочку Pymessenger. Просто импортируйте его, создайте экземпляр, передайте свой FB_TOKEN и завершите свои действия. Помните, что при отправке действия в документе Facebook указано, что вы должны передавать только идентификатор получателя и действие и вызывать метод отдельно от ответа. установите действие на typing_on в вашем методе.

NB: ваш метод неверен, потому что вы смешиваете sender_id и Receiver_id

from pymessenger import Bot
bot = Bot(<FB_ACCESS_TOKEN>)
def send_typing_bubble(sender_id, recipient_id, action, response_sent_text):
    bot.send_action(sender_id, action)
    bot.send_text_message(sender_id, response_sent_text)

После того, как вы создадите метод, вы можете просто вызвать send_typing_bubble() внутри вашего метода webhook receive_message().

if messaging_event.get('message'):

   #your code here

   send_typing_bubble(sender_id, recipient_id, action, 
       response_sent_text)
person Bonface Mudiri    schedule 13.09.2020