fb_messenger

Python API client for FB Messenger


Keywords
fb, facebook, messenger, client, api, chat
License
MIT
Install
pip install fb_messenger==0.2.2

Documentation

Python API client for FB Messenger (under development)

https://travis-ci.org/shananin/fb_messenger.svg?branch=master

Installation

Minimum Requirements

  • Python 2.7+ or Python 3.3+

Install from pip

pip install fb_messenger

Build from source

git clone https://github.com/shananin/fb_messenger
cd fb_messenger
python setup.py install

How to develop

make install # create virtualenv folder and install requirements
make lint # run pylint
make test # run tests
make clean # remove virtualenv folder

How to Use

Send simple text

from fb_messenger.client import FBMessenger
from fb_messenger import attachments
from fb.messenger.exceptions import MessengerAPIError

client = FBMessenger(ACCESS_TOKEN, logger_level=logging.DEBUG)
text = attachments.Text('hello!')

try:
    response = client.send_attachment(RECIPIENT_ID, text)
except MessengerAPIError as e:
    LOGGER.debug(e)

Send attachment

More examples look into examples folder.

image = attachments.Image('http://example.com/img.jpg')

try:
    response = client.send_attachment(RECIPIENT_ID, text)
except MessengerAPIError as e:
    LOGGER.debug(e)

Send action

from fb_messenger.types import action_types

try:
    response = client.send_action(RECIPIENT_ID, action_types.MARK_SEEN)
except MessengerAPIError as e:
    LOGGER.debug(e)

How to process messages in Flask

from flask import Flask, request
import logging
from fb_messenger.client import FBMessenger
from fb_messenger.types import webhook_types

app = Flask(__name__)

logging.basicConfig()
LOGGER = logging.getLogger(__name__)
LOGGER.setLevel(logging.DEBUG)

client = FBMessenger(ACCESS_TOKEN, logger_level=logging.DEBUG)


@app.route('/webhook', methods=['GET'])
def get_webhook():
    if request.args.get('hub.verify_token', '') == VERIFY_TOKEN:
        return request.args.get('hub.challenge', '')

    return 'Error', 400


@app.route('/webhook', methods=['POST'])
def post_webhook():
    try:
        client.process_message(request.get_json())
    except Exception as e:
        LOGGER.debug(e)

    return 'ok'


@client.register_webhook(webhook_types.MESSAGE_RECEIVED)
def message_received(webhook):
    """
    :type webhook: fb_messenger.webhooks.MessageReceived
    """
    LOGGER.debug((webhook_types.MESSAGE_RECEIVED, webhook))


@client.register_webhook(webhook_types.POSTBACK_RECEIVED)
def postback_received(webhook):
    """
    :type webhook: fb_messenger.webhooks.Postback
    """
    LOGGER.debug((webhook_types.POSTBACK_RECEIVED, webhook))


@client.register_webhook(webhook_types.AUTHENTICATION)
def authentication(webhook):
    """
    :type webhook: fb_messenger.webhooks.Authentication
    """
    LOGGER.debug((webhook_types.AUTHENTICATION, webhook))


@client.register_webhook(webhook_types.ACCOUNT_LINKING)
def account_linking(webhook):
    """
    :type webhook: fb_messenger.webhooks.AccountLinking
    """
    LOGGER.debug((webhook_types.ACCOUNT_LINKING, webhook))


@client.register_webhook(webhook_types.MESSAGE_DELIVERED)
def message_delivered(webhook):
    """
    :type webhook: fb_messenger.webhooks.MessageDelivered
    """
    LOGGER.debug((webhook_types.MESSAGE_DELIVERED, webhook))


@client.register_webhook(webhook_types.MESSAGE_READ)
def message_read(webhook):
    """
    :type webhook: fb_messenger.webhooks.MessageRead
    """
    LOGGER.debug((webhook_types.MESSAGE_READ, webhook))


if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')