Opensource python wrapper to Messenger API
Features
API
- Verify the webhook
- Send text messages
- Send attachments from a remote file (image, audio, video, file)
- Send attachments from a local file (image, audio, video, file)
- Send templates (generic, buttons, media, receipent)
- Send quick replies
Other functionalities
- Get sender id
- Get type of message received
- Get text of the message received
- Get the url of the attachment received
- Get type of the attachment received
- Download attachments received
Installation
Install Pynani with pip
pip install pynani
Or install with pipenv (requires pipenv installed)
pipenv install pynani
Getting started
Prerequisites
- Python 3.8+ installed
- To get started using this module, you will need page access token which you can get from the Facebook Developer Portal
A simple echo bot
The Messenger class (defined in Messenger.py) encapsulates all API calls in a single class. It provides functions such as send_xyz (send_message, send_attachment etc.) and several ways to listen for incoming messages.
Create a file called echo_bot.py. Then, open the file and create an instance of the Messenger class.
from pynani import Messenger
PAGE_ACCESS_TOKEN = 'EAAxxxxxxx...'
mess = Messenger(PAGE_ACCESS_TOKEN)
[!IMPORTANT] Make sure to actually replace PAGE_ACCESS_TOKEN with your own page access token.
After that declaration, we need to register some message handlers. First, we need to create and verify a webhook with the help of Flask or FastAPI.
from flask import Flask, request, jsonify
app = Flask(__name__)
TOKEN = "abc123"
@app.get("/")
def meta_verify():
return mess.verify_token(request.args, TOKEN)
Now let's define a webhook that handles certain messages
@app.post("/")
def meta_webhook():
data = request.get_json()
sender_id = mess.get_sender_id(data)
message = mess.get_message_text(data)
if message == "Hello":
mess.send_text_message(sender_id, "Hello, World!")
if message == "Bye":
mess.send_text_message(sender_id, "Nice to meet you! 👍🏽")
return jsonify({"status": "success"}), 200
We now have a basic bot which replies a static message to "hello" and "bye" messages. To start the bot, add the following to our source file:
if __name__ =='__main__':
app.run(port=8080, debug=True)
Alright, that's it! Our source file now looks like this:
from flask import Flask, request, jsonify
from pynani import Messenger
PAGE_ACCESS_TOKEN = 'EAAxxxxxxx...'
TOKEN = "abc123"
mess = Messenger(PAGE_ACCESS_TOKEN)
app = Flask(__name__)
@app.get("/")
def meta_verify():
return mess.verify_token(request.args, TOKEN)
@app.post("/")
def meta_webhook():
data = request.get_json()
sender_id = mess.get_sender_id(data)
message = mess.get_message_text(data)
if message == "Hello":
mess.send_text_message(sender_id, "Hello, World!")
if message == "Bye":
mess.send_text_message(sender_id, "Nice to meet you! 👍🏽")
return jsonify({"status": "success"}), 200
if __name__ =='__main__':
app.run(port=8080, debug=True)
To start the bot, simply open up a terminal and enter python echo_bot.py to run the bot! Test it by sending messages ("hello" and "bye").
Related
Here are some related projects that I was inspired by them.
Metadata
Release files for pynani 1.4.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pynani-1.4.2.tar.gz | 11.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pynani-1.4.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 25.9 kB
Release files / pynani-1.4.2.tar.gz
| Download URL | pynani-1.4.2.tar.gz |
|---|---|
| Size | 11.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0b0db0918a9c3c6e3038bff4401c1e81b848f7daca2d073e73b272f7eab318cf
|
|
BLAKE2b-256 checksum How to use checksums |
151229da319059f54df0a0a6134403381ce2f04043ff9191a7e84bc2f69bcfe0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.25 {"installer":{"name":"uv","version":"0.9.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / pynani-1.4.2-py3-none-any.whl
| Download URL | pynani-1.4.2-py3-none-any.whl |
|---|---|
| Size | 14.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
44d82d1efd23f0372e69330dbc48672f25b14a4e818652c8ff242cc212bd6440
|
|
BLAKE2b-256 checksum How to use checksums |
b90ed06e09320393f26055e079a7411d54c46e635ce0a56abc86e5e71ed421ef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.25 {"installer":{"name":"uv","version":"0.9.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|