#python #flask #chatbot #facebook-messenger #messenger
#python #flask #чат-бот #facebook-messenger #messenger
Вопрос:
Я создаю чат-бота, развернутого через FB Messenger. Согласно документации FB, вы должны отправить этот post-запрос на платформу messenger. Я отправляю строковое представление полезной нагрузки, используя 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"
Ответ №1:
Вы можете использовать оболочку Pymessenger. Просто импортируйте его, создайте экземпляр, передайте свой FB_TOKEN и завершите свои действия. Помните, что при отправке action Facebook doc указывает, что вы должны передавать только recipient_id и action и вызывать метод отдельно от ответа. задайте для действия значение «typing_on» в вашем методе.
ПРИМЕЧАНИЕ: Ваш метод неверен, потому что вы смешиваете sender_id и recipient_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)