Python wrapper for the WhatsApp Cloud API
Project description
PyWa • Python wrapper for the WhatsApp Cloud API
PyWa is a Fast, Simple, Modern and easy-to-use asynchronous Python framework for building WhatsApp bots using the WhatsApp Cloud API.
📄 Quick Documentation Index
Get Started • WhatsApp Client • Handlers • Listeners • Filters • Updates • Flows • Examples
⚡ Features
- 🚀 Fast and simple to use. No need to worry about the low-level details.
- 💬 Send text messages with interactive keyboards, images, videos, documents, audio, locations, contacts, etc.
- 📩 Receive messages, callbacks, message status updates, etc.
- ♻️ Create, send and listen to Flows (NEW!)
- 🔄 Built-in support for webhooks (Flask, FastAPI, etc.)
- 🔬 Filters for handling incoming updates
- 📄 Send and create templates
- ✅ Fully typed, documented and tested
👨💻 Usage
- Create a WhatsApp client and send a message
See Getting Started for more information.
from pywa import WhatsApp
wa = WhatsApp(
phone_id="100458559237541",
token="EAAEZC6hUxkTIB"
)
wa.send_message(
to="9876543210",
text="Hello from PyWa!"
)
- To listen to updates, create a
WhatsApp
client, pass a web server app (FastAPI in this example) and register callbacks:
See Handlers for more information.
# wa.py
from pywa import WhatsApp, filters, types
from fastapi import FastAPI
fastapi_app = FastAPI()
wa = WhatsApp(
phone_id="1234567890",
token="xxxxxxx",
server=fastapi_app,
callback_url="https://yourdomain.com/",
verify_token="xyz123",
app_id=123456,
app_secret="yyyyyy"
)
@wa.on_message(filters.matches("Hello", "Hi"))
def hello(client: WhatsApp, msg: types.Message):
msg.react("👋")
msg.reply_text(
text=f"Hello {msg.from_user.name}!",
buttons=[
types.Button(
title="Click me!",
callback_data="id:123"
)
]
)
@wa.on_callback_button(filters.startswith("id"))
def click_me(client: WhatsApp, clb: types.CallbackButton):
clb.reply_text("You clicked me!")
- To run the server, use fastapi-cli (
pip install "fastapi[standard]"
):
fastapi dev wa.py # see uvicorn docs for more options (port, host, reload, etc.)
💫 Async Usage
- PyWa has async support! To use the async version, replace all the imports from
pywa
topywa_async
and useasync
/await
:
# wa.py
import fastapi
from pywa_async import WhatsApp, types
fastapi_app = fastapi.FastAPI()
wa = WhatsApp(..., server=fastapi_app)
async def main():
await wa.send_message(...)
@wa.on_message()
async def hello(_: WhatsApp, msg: types.Message):
await msg.react("👋")
await msg.reply(...)
fastapi dev wa.py
🎛 Installation
- Install using pip3:
pip3 install -U pywa
- Install from source (the bleeding edge):
pip3 install -U git+https://github.com/david-lev/pywa.git
- If you going to use the webhook features, here is shortcut to install the required dependencies:
pip3 install -U "pywa[fastapi]"
pip3 install -U "pywa[flask]"
- If you going to use the Flow features and want to use the default FlowRequestDecryptor and the default FlowResponseEncryptor, here is shortcut to install the required dependencies:
pip3 install -U "pywa[cryptography]"
💾 Requirements
- Python 3.10 or higher - https://www.python.org
📖 Setup and Usage
See the Documentation for detailed instructions
☑️ TODO
Add support for asyncAdd support for more web frameworks (Django, aiohttp, etc.)Add support for flows- Add support for more types of updates (
account_alerts
,phone_number_quality_updates
,template_category_updates
, etc.) - Add more examples and guides
Feel free to open an issue if you have any suggestions. or even better - submit a PR!
⚖️ License
This project is licensed under the MIT License - see the LICENSE file for details
🔱 Contributing
Contributions are welcome! Please see the Contributing Guide for more information.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pywa-2.0.0rc2.tar.gz
.
File metadata
- Download URL: pywa-2.0.0rc2.tar.gz
- Upload date:
- Size: 166.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b0a0ed038c813f9cba6c250359826a72b3121e37dd062f43694df54270f2af71 |
|
MD5 | c95a7285f1d36b98b975d045a9c3217f |
|
BLAKE2b-256 | 42cde18e5b59af9ed64f0903cc945885a13c1c9235cbaf2e3d7a882e23771f12 |
File details
Details for the file pywa-2.0.0rc2-py3-none-any.whl
.
File metadata
- Download URL: pywa-2.0.0rc2-py3-none-any.whl
- Upload date:
- Size: 168.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1d74310ecd3c6163eb2f947b6001ddf884d7a87441de5d89b6e8db46d1a6242c |
|
MD5 | 0f18d279d476cba051612742faa89925 |
|
BLAKE2b-256 | 9bd7f267d4990f3e86c977499175337e13e3f36daa35eac5f1b255bf4b6a7f3c |