项目作者: Valenookua

项目描述 :
Asyncronous Python Library for create Facebook Messenger Application
高级语言: Python
项目地址: git://github.com/Valenookua/aiobook.git
创建时间: 2019-07-19T14:49:28Z
项目社区:https://github.com/Valenookua/aiobook

开源协议:MIT License

下载


AioBook

AioBook it is async framework for build messenger application in facebook

Installation

Use the package manager pip to install aiobook.

  1. pip install aiobook

Usage

Facebook Handler

Facebook Handler can handle all facebook webhook events

You can use decorators:

  1. from aiobook import FacebookHandler
  2. handler = FacebookHandler("<page_access_token", "<verification_token>", skip_confirm_execution=True)
  3. @handler.handle_message
  4. async def handle_message(event):
  5. print("receive your message {}".format(event.text))
  6. @handler.handle_postback
  7. async def handle_postback(event):
  8. print("receive your postback with payload {}".format(event.postback))

Or directly register handlers:

  1. async def handle_message(event):
  2. print("receive your message {}".format(event.text))
  3. async def handle_postback(event):
  4. print("receive your postback with payload {}".format(event.postback))
  5. handler.set_webhook_handler("message", handle_message)
  6. handler.set_webhook_handler("postback", handle_postback)

To get list allowed and defined handlers:

  1. handler.get_allowed_handlers()
  2. handler.get_defined_handlers()

Also you can set handler before_handle, and after_handle. It will be called before(or after) handle_event:

  1. @handler.before_handle
  2. async def log_message(event):
  3. logging.info("{} handled.".format(event.name))
  4. @handler.after_handle
  5. async def log_message(event):
  6. logging.info("{} handled.".format(event.name))

To receive message you need register handler in HTTP Server:

  1. from aiohttp import web
  2. from aiobook import FacebookHandler
  3. handler = FacebookHandler("<page_access_token", "<verification_token>", skip_confirm_execution=True)
  4. app = web.Application()
  5. app.add_routes([web.get("<url_pattern>", handler.handle_get)])
  6. app.add_routes([web.post("<url_pattern>", handler.handle_post)])

Messenger

Messenger supports Send API method.
Facebook Handler included in Messenger.

  1. from aiobook import Messenger
  2. messenger = Messenger("<page_access_token", "<verification_token>", skip_confirm_execution=True)
  3. @messenger.handler.handle_message
  4. async def handle_message(event):
  5. await messenger.send(event.sender_id, "Your message: {}".format(event.text))
  6. @messenger.handler.handle_postback
  7. async def handle_postback(event):
  8. await messenger.send(event.sender_id, "Your press button: {}".format(event.postback))

messenger.send

Allow to send text or templates:

  1. await messenger.send(event.sender_id, message, quick_replies=None,
  2. messaging_type=None, metadata=None, notification_type=None,
  3. tag=None)

Allowed types for messenger.send

String message and templates

Supported Templates

ButtonTemplate, GenericTemplate, ListTemplate, OpenGraphTemplate, MediaTemplate.

Supported Buttons

CallButton, GamePlayButton, LogInButton, LogOutButton, PostbackButton, UrlButton

Other

QuickReply, Element, MediaElement, OpenGraphElement

  1. from aiobook.core.facebook import QuickReply
  2. from aiobook.core.facebook import Element, MediaElement, OpenGraphElement
  3. from aiobook.core.facebook import ButtonTemplate, GenericTemplate, ListTemplate, OpenGraphTemplate, MediaTemplate
  4. from aiobook.core.facebook import CallButton, GamePlayButton, LogInButton, LogOutButton, PostbackButton, UrlButton
  5. await messenger.send(event.sender_id,
  6. ButtonTemplate('Hi, press buttons',
  7. buttons=[PostbackButton('test', 'test_payload'),
  8. UrlButton(title='test_rl', url='https://www.messenger.com')]))
  9. await messenger.send(event.sender_id,
  10. GenericTemplate([Element('test',
  11. buttons=[PostbackButton('test', 'test_payload'),
  12. UrlButton(title='test_rl', url='https://www.messenger.com')]),
  13. Element('test2', image_url, 'test2',
  14. buttons=[PostbackButton('test', 'test_payload'),
  15. UrlButton(title='test_rl', url='https://www.messenger.com')])]))

messenger.get_user_profile

Allows you to use a sender_id to retrieve user profile information:

  1. response = await messenger.get_user_profile(event.sender_id, fields=("first_name", "last_name"))

Next fields are supported.

messenger.get_page_info

Allows you to retrieve your page information:

  1. response = await messenger.get_page_info()

messenger.imitate_typing

Decorate func to imitate typing with defined timeout before answer. Included mark_seen, typing_on
and typing_off sender_actions.

  1. @messenger.handler.handle_postback
  2. @messenger.imitate_typing(1)
  3. async def handle_postback(event):
  4. await messenger.send(event.sender_id, "Your press button: {}".format(event.postback))

Or you can use sender actions independently:

messenger.mark_seen

Sender action to mark last message as read

  1. await messenger.mark_seen(event.sender_id)

messenger.typing_on

Sender action to turn typing indicators on

  1. await messenger.typing_on(event.sender_id)

messenger.typing_off

Sender action to turn typing indicators off

  1. await messenger.typing_off(event.sender_id)

AioBook App

AioBook it is small aiohttp wrapper that helps manage and deploy your messenger app

  1. from aiobook import AioBookApp
  2. from aiobook import Messenger
  3. app = AioBookApp(port=3000)
  4. messenger = Messenger("<page_access_token", "<verification_token>", skip_confirm_execution=True)
  5. app.register_messenger(messenger)
  6. app.start_bot()

License

MIT