Skip to content

david-lev/pywa

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ba6704a Β· Oct 12, 2023
Oct 1, 2023
Oct 12, 2023
Oct 12, 2023
Oct 3, 2023
Jun 22, 2023
Oct 1, 2023
Jun 22, 2023
Oct 2, 2023
Oct 11, 2023
Oct 1, 2023
Jul 9, 2023

Repository files navigation

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 Python framework for building WhatsApp bots using the WhatsApp Cloud API.

πŸ“„ Quick Documentation Index

>> Get Started β€’ WhatsApp Client β€’ Handlers β€’ Filters β€’ Updates β€’ 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.
  • πŸ”„ 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
from pywa import WhatsApp

wa = WhatsApp(
    phone_id='100458559237541',
    token='xxxxxxxxxxxxxxx'
)

wa.send_message(
    to='9876543210',
    text='Hello from PyWa!'
)
  • Create a WhatsApp client, pass a web server app (Flask in this example) and start the webhook:
from pywa import WhatsApp
from flask import Flask
from pywa.types import Message, CallbackButton, Button
from pywa.filters import text, callback

flask_app = Flask(__name__)
wa = WhatsApp(
    phone_id='1234567890',
    token='xxxxxxxxxxxxxxx',
    server=flask_app,
    verify_token='XYZXYZ',
)

@wa.on_message(text.matches('Hello', 'Hi'))
def hello(client: WhatsApp, msg: Message):
    msg.react('πŸ‘‹')
    msg.reply_text(
        text=f'Hello {msg.from_user.name}!',
        keyboard=[
            Button(
                title='Click me!',
                callback_data='id:123'
            )
        ]
    )

@wa.on_callback_button(callback.data_startswith('id'))
def click_me(client: WhatsApp, clb: CallbackButton):
    clb.reply_text('You clicked me!')

flask_app.run()  # Run the flask app to start the server

πŸŽ› Installation

  • Install using pip3:
pip3 install -U pywa
  • Install from source (the bleeding edge):
git clone https://github.com/david-lev/pywa.git
cd pywa && pip3 install -U .
  • If you going to use the webhook features, here is shortcut to install the required dependencies:
pip3 install -U pywa[flask]
pip3 install -U pywa[fastapi]

πŸ’Ύ Requirements

πŸ“– Setup and Usage

See the Documentation for detailed instructions

β˜‘οΈ TODO

  • Add tests
  • Add support for async
  • Move from threading
  • Add support for more web frameworks (Django, etc.)
  • Add support for more types of updates (account_alerts, message_template_status_updates, etc.)
  • Add more examples

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 feel free to submit a Pull Request.

πŸ™ Acknowledgments