All Projects → conbus → Fbmq

conbus / Fbmq

Licence: mit
(Deprecated) Facebook Messenger Platform Python Library (Facebook Chatbot Library)

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Fbmq

fbbot
FBbot - Facebook Messenger bot framework for Humans, for Go
Stars: ✭ 28 (-83.72%)
Mutual labels:  chatbot, facebook-messenger-bot
messenger-bot
A Node bot server for the Facebook Messenger Platform
Stars: ✭ 23 (-86.63%)
Mutual labels:  chatbot, facebook-messenger-bot
Urban Bot
🤖 The universal chatbot library based on React. Write once, launch Telegram, Facebook, Slack, ... every messenger with chatbots
Stars: ✭ 223 (+29.65%)
Mutual labels:  chatbot, facebook-messenger-bot
Caloriecounter
AWS Lex based chatbot that calculates calories based on different fast food restaurants. This was an entry for a coding challenge on DevPost, and is actively used on Facebook Messenger. The issues list is actively managed as what defects or improvements are found by real world usage.
Stars: ✭ 46 (-73.26%)
Mutual labels:  chatbot, facebook-messenger-bot
C4bot
Chat bot that plays Connect Four with you
Stars: ✭ 21 (-87.79%)
Mutual labels:  chatbot, facebook-messenger-bot
Stealth
An open source Ruby framework for text and voice chatbots. 🤖
Stars: ✭ 481 (+179.65%)
Mutual labels:  chatbot, facebook-messenger-bot
facebook-messenger
Go (GoLang) package for Facebook Messenger API and Chat bot
Stars: ✭ 62 (-63.95%)
Mutual labels:  chatbot, facebook-messenger-bot
Facebook Messenger Bot
Facebook chatbot that I trained to talk like me using Seq2Seq
Stars: ✭ 602 (+250%)
Mutual labels:  chatbot, facebook-messenger-bot
Api Ai Tutorial Demo
A simple example of Facebook Messenger chatbot built with api.ai and node.js
Stars: ✭ 33 (-80.81%)
Mutual labels:  chatbot, facebook-messenger-bot
Chatblocks
Declarative Messenger chatbot framework
Stars: ✭ 48 (-72.09%)
Mutual labels:  chatbot, facebook-messenger-bot
Ptt Alertor
📢 Ptt 文章通知機器人!Notify Ptt Article in Realtime
Stars: ✭ 150 (-12.79%)
Mutual labels:  chatbot
Tensorflow.net
.NET Standard bindings for Google's TensorFlow for developing, training and deploying Machine Learning models in C# and F#.
Stars: ✭ 2,188 (+1172.09%)
Mutual labels:  chatbot
Fantasy football chat bot
GroupMe Discord and Slack Chatbot for ESPN Fantasy Football
Stars: ✭ 166 (-3.49%)
Mutual labels:  chatbot
Transcriberbot
TranscriberBot for Telegram
Stars: ✭ 170 (-1.16%)
Mutual labels:  chatbot
Magento Chatbot
Magento Chatbot Integration with Telegram, Messenger, Whatsapp, WeChat, Skype and wit.ai.
Stars: ✭ 149 (-13.37%)
Mutual labels:  chatbot
Telegram Bot Sdk
🤖 Telegram Bot API PHP SDK. Lets you build Telegram Bots easily! Supports Laravel out of the box.
Stars: ✭ 2,212 (+1186.05%)
Mutual labels:  chatbot
Go Bot Drl
Goal-Oriented Chatbot trained with Deep Reinforcement Learning
Stars: ✭ 149 (-13.37%)
Mutual labels:  chatbot
Mojo Webqq
【重要通知:WebQQ将在2019年1月1日停止服务,此项目目前已停止维护,感谢大家四年来的一路陪伴】使用Perl语言(不会没关系)编写的smartqq/webqq客户端框架(非GUI),可通过插件提供基于HTTP协议的api接口供其他语言或系统调用
Stars: ✭ 1,755 (+920.35%)
Mutual labels:  chatbot
Conversation Tensorflow
TensorFlow implementation of Conversation Models
Stars: ✭ 143 (-16.86%)
Mutual labels:  chatbot
Chatskills
Run and debug Alexa skills on the command-line. Create bots. Run them in Slack. Run them anywhere!
Stars: ✭ 171 (-0.58%)
Mutual labels:  chatbot

(Deprecated Project)

FBMQ (Facebook Messenger Platform Python Library)

PyPI Build Status Coverage Status PyPI

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

Table of Contents

Install

pip install fbmq

Handle webhook

how to handle messages from user to facebook page

Usage (with flask)

from flask import Flask, request
from fbmq import Page

page = Page(PAGE_ACCESS_TOKEN)

@app.route('/webhook', methods=['POST'])
def webhook():
  page.handle_webhook(request.get_data(as_text=True))
  return "ok"

@page.handle_message
def message_handler(event):
  """:type event: fbmq.Event"""
  sender_id = event.sender_id
  message = event.message_text
  
  page.send(sender_id, "thank you! your message is '%s'" % message)

@page.after_send
def after_send(payload, response):
  """:type payload: fbmq.Payload"""
  print("complete")

handlers

A spec in detail - https://developers.facebook.com/docs/messenger-platform/webhook-reference

@page.handle_message - This callback will occur when a message has been sent to your page. (quick reply is also handled in here)

@page.handle_echo - This callback will occur when a message has been sent by your page

@page.handle_delivery - This callback will occur when a message a page has sent has been delivered.

@page.handle_optin - This callback will occur when the Send-to-Messenger plugin has been tapped

@page.handle_postback - Postbacks occur when a Postback button, Get Started button, Persistent menu or Structured Message is tapped.

@page.handle_read - This callback will occur when a message a page has sent has been read by the user.

@page.handle_account_linking - This callback will occur when the Linked Account or Unlink Account call-to-action have been tapped.

@page.after_send - This callback will occur when page.send function has been called.

Event parameter (fbmq.Event class)

event.sender_id str : message sender id, user id

event.recipient_id str : message receiver id, page id

event.timestamp number : timestamp when message is received

event.message dict : message dict that is received. more detail

event.message_text str : event.message.get('text')

event.message_attachments str : event.message.get('attachments')

event.quick_reply dict : quick reply dict that is received. more detail

event.quick_reply_payload str : `event.quick_reply.get('payload')

event.postback dict : postback dict that is received. more detail

event.postback_payload str : `event.postback.get('payload')

event.optin dict : dict that is received. more detail

event.account_linking dict: dict that is received. more detail

event.delivery dict: dict that is received. more detail

event.read dict: dict that is received. more detail

event.is_* bool - True if event type is valid

if you don't need a decorator

page = fbmq.Page(PAGE_ACCESS_TOKEN, after_send=after_send)

@app.route('/webhook', methods=['POST'])
def webhook():
  page.handle_webhook(request.get_data(as_text=True),
                      message=message_handler)
  return "ok"

def message_handler(event):
  """:type event: fbmq.Event"""
  sender_id = event.sender_id
  message = event.message_text
  
  page.send(sender_id, "thank you! your message is '%s'" % message)

def after_send(payload, response):
  """:type event: fbmq.Payload"""
  print("complete")

Send a message

how to send a message from facebook page to user

Basic

Import
from fbmq import Attachment, Template, QuickReply, Page
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")
]

# you can use a dict instead of a QuickReply class
#
# quick_replies = [{'title': 'Action', 'payload': 'PICK_ACTION'},
#                {'title': 'Comedy', 'payload': 'PICK_COMEDY'}]


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

you can define easily a quick reply callback method.

@page.callback(['PICK_ACTION', 'PICK_COMEDY'])
def callback_picked_genre(payload, event):
  print(payload, event)
  
# Also supported regex, it works corretly
# @page.callback(['PICK_(.+)'])

if you want to handle only quick_reply callback without button postback

@page.callback(['PICK_ACTION', 'PICK_COMEDY'], types=['QUICK_REPLY'])
typing on/off
page.typing_on(recipient_id)
page.typing_off(recipient_id)

Templates

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

# you can use a dict instead of a 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'}]

page.send(recipient_id, Template.Buttons("hello", buttons))
button callback

you can define easily a button postback method (it works only postback type buttons).

@page.callback(['DEVELOPED_DEFINED_PAYLOAD'])
def callback_clicked_button(payload, event):
  print(payload, event)
  
# Also supported regex, it works corretly
# @page.callback(['DEVELOPED_DEFINE(.+)'])

if you want to handle only button's postback without quick_reply callback

@page.callback(['DEVELOPED_DEFINED_PAYLOAD'], types=['POSTBACK'])
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)

    page.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]))

Options

notification type

support notification_type as a option

NotificationType.REGULAR (default), NotificationType.SILENT_PUSH, NotificationType.NO_PUSH

page.send(recipient_id, 'hello', notification_type=NotificationType.NO_PUSH)
callback

you can set a callback function to each page.send

def callback(payload, response):
  print('response : ' + response.text)
  
page.send(recipient_id, 'hello', callback=callback)

Thread settings

Greeting text

page.greeting("Welcome!")

Get started button

page.show_starting_button("START_PAYLOAD")

@page.callback(['START_PAYLOAD'])
def start_callback(payload, event):
  print("Let's start!")

Persistent menu

page.show_persistent_menu([Template.ButtonPostBack('MENU1', 'MENU_PAYLOAD/1'),
                           Template.ButtonPostBack('MENU2', 'MENU_PAYLOAD/2')])

@page.callback(['MENU_PAYLOAD/(.+)'])
def click_persistent_menu(payload, event):
  click_menu = payload.split('/')[1]
  print("you clicked %s menu" % click_menu)

Fetch user/page profile

page_id = page.page_id
page_name = page.page_name
user_profile = page.get_user_profile(event.sender_id) # return dict
print(user_profile)

#{"first_name":"...", "last_name":"...", "profile_pic":"...", "locale":"...", "timezone":9, "gender":"..."}

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].