如何在pymessenger上向FB Messenger发送“ typing_on”帖子?

问题描述

我正在尝试将聊天机器人设置为在向用户发送响应之前显示气泡,以使其更人性化。我遵循了文档,但是仍然从机器人那里获得了即时响应,没有键入气泡。根据{{​​3}},我正在使用此发送者操作:

{"recipient":{"id":recipient_id},"sender_action":"typing_on"}

并把它放在上下文中,这是我在烧瓶应用程序中使用它的方式:

@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']
                    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"

def send_message(recipient_id,response):
    # sends user the text message provided via input response parameter
    typing_payload = {"recipient":{"id":recipient_id},"sender_action":"typing_on"}
    bot.send_raw(typing_payload)
    print(bot.send_raw(typing_payload))
    bot.send_text_message(recipient_id,response)
    return "success"

任何想法将不胜感激!

解决方法

您应该传递有效负载的字符串表示形式(而不是字典)。

尝试执行以下操作:

import json

...


def send_message(recipient_id,response):
    # sends user the text message provided via input response parameter
    typing_payload = json.dumps({"recipient":{"id":recipient_id},"sender_action":"typing_on"})
    bot.send_raw(typing_payload)
    print(bot.send_raw(typing_payload))
    bot.send_text_message(recipient_id,response)
    return "success"

与直接发送消息之前相反,最好的做法是在接收消息时发送这些指示符(在处理时显示打字指示符)。

documentation

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...