Skip to main content

A Python Library For Using The Facebook Messenger Platform API

Project description

FBMQ (Facebook Messenger Platform Python Library)
=================================================

|PyPI| |PyPI|

A Python Library For Using The Facebook Messenger Platform API (Python
Facebook Chat & Chatbot Library) Facebook messenger platform api full
features are supported

Install
=======

::

pip install fbmq

Handle Webhook
==============

Usage (with flask)
------------------

::

from flask import Flask, request
import fbmq

@app.route('/webhook', methods=['POST'])
def webhook():
payload = request.get_data(as_text=True)
fbmq.handle_webhook(payload,
optin=optin_handler,
message=message_handler,
echo=echo_handler,
delivery=delivery_handler,
postback=postback_handler,
read=read_handler,
account_linking=account_linking_handler)
return "ok"

def message_handler(event):
sender_id = event['sender']['id']
message = event['message']

page = fbmq.Page(PAGE_ACCESS_TOKEN)
page.send(sender_id, "thank you! your message is '%s'" % message)

Request
=======

Setting
-------

::

from fbmq import Attachment, Template, QuickReply, Page

page = Page(PAGE_ACCESS_TOKEN)

Basic
-----

Text
^^^^

::

page.send(recipient_id, "hello world!")

Image (jpg, png, gif support)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

::

page.send(recipient_id, Attachment.Image(image_url))

Audio
^^^^^

::

page.send(recipient_id, Attachment.Audio(audio_url))

Video
^^^^^

::

page.send(recipient_id, Attachment.Video(video_url))

File
^^^^

::

page.send(recipient_id, Attachment.File(file_url))

quick reply
^^^^^^^^^^^

::

quick_replies = [
QuickReply(title="Action", payload="PICK_ACTION"),
QuickReply(title="Comedy", payload="PICK_COMEDY")
]

page.send(recipient_id,
"What's your favorite movie genre?",
quick_replies=quick_replies,
metadata="DEVELOPER_DEFINED_METADATA")

you can use dict instead of QuickReply class

::

quick_replies = [{'title': 'Action', 'payload': 'PICK_ACTION'},
{'title': 'Comedy', 'payload': 'PICK_COMEDY'}}

typing on/off
^^^^^^^^^^^^^

::

page.typing_on(recipient_id)
page.typing_off(recipient_id)

Templates
---------

Template : Button
^^^^^^^^^^^^^^^^^

::

buttons = [
Attachment.ButtonWeb("Open Web URL", "https://www.oculus.com/en-us/rift/"),
Attachment.ButtonPostBack("trigger Postback", "DEVELOPED_DEFINED_PAYLOAD"),
Attachment.ButtonPhoneNumber("Call Phone Number", "+16505551234")
]
page.send(recipient_id, Template.Buttons("hello", buttons))

you can use dict instead of Button class

::

buttons = [{'type': 'web_url', 'title': 'Open Web URL', 'value': 'https://www.oculus.com/en-us/rift/'},
{'type': 'postback', 'title': 'trigger Postback', 'value': 'DEVELOPED_DEFINED_PAYLOAD'},
{'type': 'phone_number', 'title': 'Call Phone Number', 'value': '+16505551234'}]

Template : Generic
^^^^^^^^^^^^^^^^^^

::

page.send(recipient_id, Template.Generic([
Template.GenericElement("rift",
subtitle="Next-generation virtual reality",
item_url="https://www.oculus.com/en-us/rift/",
image_url=CONFIG['SERVER_URL'] + "/assets/rift.png",
buttons=[
Template.ButtonWeb("Open Web URL", "https://www.oculus.com/en-us/rift/"),
Template.ButtonPostBack("tigger Postback", "DEVELOPED_DEFINED_PAYLOAD"),
Template.ButtonPhoneNumber("Call Phone Number", "+16505551234")
]),
Template.GenericElement("touch",
subtitle="Your Hands, Now in VR",
item_url="https://www.oculus.com/en-us/touch/",
image_url=CONFIG['SERVER_URL'] + "/assets/touch.png",
buttons=[
Template.ButtonWeb("Open Web URL", "https://www.oculus.com/en-us/rift/"),
Template.ButtonPostBack("tigger Postback", "DEVELOPED_DEFINED_PAYLOAD"),
Template.ButtonPhoneNumber("Call Phone Number", "+16505551234")
])
]))

Template : Receipt
^^^^^^^^^^^^^^^^^^

::

element = Template.ReceiptElement(title="Oculus Rift",
subtitle="Includes: headset, sensor, remote",
quantity=1,
price=599.00,
currency="USD",
image_url=CONFIG['SERVER_URL'] + "/assets/riftsq.png"
)

address = Template.ReceiptAddress(street_1="1 Hacker Way",
street_2="",
city="Menlo Park",
postal_code="94025",
state="CA",
country="US")

summary = Template.ReceiptSummary(subtotal=698.99,
shipping_cost=20.00,
total_tax=57.67,
total_cost=626.66)

adjustment = Template.ReceiptAdjustment(name="New Customer Discount", amount=-50)

fbpage.send(recipient_id, Template.Receipt(recipient_name='Peter Chang',
order_number='1234',
currency='USD',
payment_method='Visa 1234',
timestamp="1428444852",
elements=[element],
address=address,
summary=summary,
adjustments=[adjustment]))

Example
=======

1. fill example/config.py
2. run server

::

cd example
virtualenv env
source env/bin/activate
pip install -r requirements.txt
python server.py

|image2| |image3| |image4| |image5| |image6| |image7| |image8| |image9|
|image10|

.. |PyPI| image:: https://img.shields.io/pypi/v/fbmq.svg?v=1&maxAge=3600
:target: https://pypi.python.org/pypi/fbmq
.. |PyPI| image:: https://img.shields.io/pypi/l/fbmq.svg?v=1&maxAge=2592000
:target: https://pypi.python.org/pypi/fbmq
.. |image2| image:: ./example/assets/screen2.jpg
.. |image3| image:: ./example/assets/screen3.jpg
.. |image4| image:: ./example/assets/screen4.jpg
.. |image5| image:: ./example/assets/screen5.jpg
.. |image6| image:: ./example/assets/screen6.jpg
.. |image7| image:: ./example/assets/screen7.jpg
.. |image8| image:: ./example/assets/screen8.jpg
.. |image9| image:: ./example/assets/screen9.jpg
.. |image10| image:: ./example/assets/screen10.jpg

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
fbmq-1.5.1.tar.gz (5.6 kB) Copy SHA256 hash SHA256 Source None Aug 24, 2016

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page