Skip to main content

Python wrapper for the WhatsApp Cloud API

Project description

PyWa Logo

PyWa • Python wrapper for the WhatsApp Cloud API

PyPi Downloads PyPI Version Tests Docs License CodeFactor Telegram


PyWa is a Fast, Simple, Modern and easy-to-use asynchronous Python framework for building WhatsApp bots using the WhatsApp Cloud API.

⚠️ Important: pywa has introduced breaking changes. Please see the Migration Guide for instructions on updating from earlier versions.

📄 Quick Documentation Index

Get StartedWhatsApp ClientHandlersListenersFiltersUpdatesFlowsExamples


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 to pywa_async and use async/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

📖 Setup and Usage

See the Documentation for detailed instructions

☑️ TODO

  • Add support for async
  • Add 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

pywa-2.0.2.tar.gz (166.3 kB view details)

Uploaded Source

Built Distribution

pywa-2.0.2-py3-none-any.whl (168.1 kB view details)

Uploaded Python 3

File details

Details for the file pywa-2.0.2.tar.gz.

File metadata

  • Download URL: pywa-2.0.2.tar.gz
  • Upload date:
  • Size: 166.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for pywa-2.0.2.tar.gz
Algorithm Hash digest
SHA256 fd9481f0b29524adcdea4ad330bf04fc00ccd9300427e7936b7b6908b7b73213
MD5 afba312820f47c8fe1a01f1600e42894
BLAKE2b-256 90f6b443b0121fa18a572757dbe3e8b8b8c80142ff9c71af21096c118e94cbec

See more details on using hashes here.

File details

Details for the file pywa-2.0.2-py3-none-any.whl.

File metadata

  • Download URL: pywa-2.0.2-py3-none-any.whl
  • Upload date:
  • Size: 168.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for pywa-2.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0398a853e0ad264c912ee7c89246e7425f29f8bc00664665751fa42c196273e4
MD5 9fc20d1d36f0751a10d47b76531aa1a7
BLAKE2b-256 3ddfcdc1be8f375351216661bb5417ce815a16f72bcac14aaeee061b9cea7b29

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page