Facebook中构建Messenger应用程序的异步框架
aiobook的Python项目详细描述
艾奥博克
aiobook it是用于在facebook中构建messenger应用程序的异步框架
安装
使用包管理器pip安装aiobook。
pip install aiobook
用法
Facebook处理程序
Facebook处理程序可以处理所有facebook webhook events
您可以使用装饰器:
fromaiobookimportFacebookHandlerhandler=FacebookHandler("<page_access_token","<verification_token>",skip_confirm_execution=True)@handler.handle_messageasyncdefhandle_message(event):print("receive your message {}".format(event.text))@handler.handle_postbackasyncdefhandle_postback(event):print("receive your postback with payload {}".format(event.postback))
或直接注册处理程序:
asyncdefhandle_message(event):print("receive your message {}".format(event.text))asyncdefhandle_postback(event):print("receive your postback with payload {}".format(event.postback))handler.set_webhook_handler("message",handle_message)handler.set_webhook_handler("postback",handle_postback)
要获取允许和定义的处理程序列表:
handler.get_allowed_handlers()handler.get_defined_handlers()
也可以在句柄之前和之后设置句柄。它将在处理事件之前(或之后)调用:
@handler.before_handleasyncdeflog_message(event):logging.info("{} handled.".format(event.name))@handler.after_handleasyncdeflog_message(event):logging.info("{} handled.".format(event.name))
要接收消息,您需要在http服务器中注册处理程序:
fromaiohttpimportwebfromaiobookimportFacebookHandlerhandler=FacebookHandler("<page_access_token","<verification_token>",skip_confirm_execution=True)app=web.Application()app.add_routes([web.get("<url_pattern>",handler.handle_get)])app.add_routes([web.post("<url_pattern>",handler.handle_post)])
信使
Messenger支持Send API method。 Messenger中包含Facebook处理程序。
fromaiobookimportMessengermessenger=Messenger("<page_access_token","<verification_token>",skip_confirm_execution=True)@messenger.handler.handle_messageasyncdefhandle_message(event):awaitmessenger.send(event.sender_id,"Your message: {}".format(event.text))@messenger.handler.handle_postbackasyncdefhandle_postback(event):awaitmessenger.send(event.sender_id,"Your press button: {}".format(event.postback))
信使。发送
允许发送文本或模板:
awaitmessenger.send(event.sender_id,message,quick_replies=None,messaging_type=None,metadata=None,notification_type=None,tag=None)
允许的Messenger.send类型
字符串消息和模板
支持的模板
buttonTemplate、genericTemplate、listTemplate、openGraphTemplate、mediateTemplate。
支持的按钮
callbutton、gameplaybutton、loginbutton、logoutbutton、postbackbutton、urlbutton
其他
quickreply、element、medialelement、opengraphelement
fromaiobook.core.facebookimportQuickReplyfromaiobook.core.facebookimportElement,MediaElement,OpenGraphElementfromaiobook.core.facebookimportButtonTemplate,GenericTemplate,ListTemplate,OpenGraphTemplate,MediaTemplatefromaiobook.core.facebookimportCallButton,GamePlayButton,LogInButton,LogOutButton,PostbackButton,UrlButtonawaitmessenger.send(event.sender_id,ButtonTemplate('Hi, press buttons',buttons=[PostbackButton('test','test_payload'),UrlButton(title='test_rl',url='https://www.messenger.com')]))awaitmessenger.send(event.sender_id,GenericTemplate([Element('test',buttons=[PostbackButton('test','test_payload'),UrlButton(title='test_rl',url='https://www.messenger.com')]),Element('test2',image_url,'test2',buttons=[PostbackButton('test','test_payload'),UrlButton(title='test_rl',url='https://www.messenger.com')])]))
Messenger.get_user_profile
允许您使用发件人ID检索用户配置文件信息:
response=awaitmessenger.get_user_profile(event.sender_id,fields=("first_name","last_name"))
下一个字段是supported。
Messenger.获取页面信息
允许您检索页面信息:
response=awaitmessenger.get_page_info()
信使。模拟输入
修饰func以模拟在回答之前定义超时的键入。包括mark_seen,输入 并键入发件人操作。
@messenger.handler.handle_postback@messenger.imitate_typing(1)asyncdefhandle_postback(event):awaitmessenger.send(event.sender_id,"Your press button: {}".format(event.postback))
或者您可以单独使用发件人操作:
信使。马克看到了
将最后一封邮件标记为已读的发件人操作
awaitmessenger.mark_seen(event.sender_id)
信使。键入
打开键入指示器的发件人操作
awaitmessenger.typing_on(event.sender_id)
信使。键入“关闭”
关闭键入指示器的发件人操作
awaitmessenger.typing_off(event.sender_id)
aiobook应用程序
aiobook这是一个小型aiohttp包装器,可帮助管理和部署您的Messenger应用程序
fromaiobookimportAioBookAppfromaiobookimportMessengerapp=AioBookApp(port=3000)messenger=Messenger("<page_access_token","<verification_token>",skip_confirm_execution=True)app.register_messenger(messenger)app.start_bot()