pywa


Namepywa JSON
Version 2.11.0 PyPI version JSON
download
home_pageNone
SummaryBuild WhatsApp Bots in Python • Fast, Effortless, Powerful 🚀
upload_time2025-06-17 06:11:27
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseMIT
keywords whatsapp whatsapp-api whatsapp-cloud-api whatsapp-cloud whatsapp-api-python whatsapp-cloud-api-python pywa wapy wa wa-api wa-cloud-api wa-cloud wa-api-python wa-cloud-api-python whatsapp-webhook whatsapp-webhook-python whatsapp-webhook-api whatsapp-flows whatsapp-cloud-api-flows
VCS
bugtrack_url
requirements httpx
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <img alt="PyWa Logo" height="250" src="https://pywa.readthedocs.io/en/latest/_static/pywa-logo.png" width="250"/>

________________________

# [PyWa](https://github.com/david-lev/pywa) • Build WhatsApp Bots in Python • Fast, Effortless, Powerful 🚀

[![PyPi Downloads](https://img.shields.io/pypi/dm/pywa)](https://pypi.org/project/pywa/)
[![PyPI Version](https://badge.fury.io/py/pywa.svg)](https://pypi.org/project/pywa/)
[![Tests](https://img.shields.io/github/actions/workflow/status/david-lev/pywa/tests.yml?label=Tests)](https://github.com/david-lev/pywa/actions/workflows/tests.yml)
[![Coverage](https://img.shields.io/codecov/c/github/david-lev/pywa)](https://codecov.io/gh/david-lev/pywa)
[![Docs](https://readthedocs.org/projects/pywa/badge/?version=latest&)](https://pywa.readthedocs.io)
[![License](https://img.shields.io/github/license/david-lev/pywa)](https://github.com/david-lev/pywa/blob/master/LICENSE)
[![CodeFactor](https://www.codefactor.io/repository/github/david-lev/pywa/badge/master)](https://www.codefactor.io/repository/github/david-lev/pywa/overview/master)
[![Telegram](https://badges.aleen42.com/src/telegram.svg)](https://t.me/py_wa)

________________________

**💫 PyWa is the all-in-one Python framework for the WhatsApp Cloud API**

**Send rich messages with media and interactive buttons, Listen to user events in real time, Build and send flows, Create and send template messages, Enjoy blazing-fast async support and seamless integration with FastAPI, Flask, and more. Fully typed, documented, and production-ready. Build powerful WhatsApp bots in minutes.**

📄 **Quick Documentation Index**
--------------------------------

> [Get Started](https://pywa.readthedocs.io/en/latest/content/getting-started.html)
• [WhatsApp Client](https://pywa.readthedocs.io/en/latest/content/client/overview.html)
• [Handlers](https://pywa.readthedocs.io/en/latest/content/handlers/overview.html)
• [Listeners](https://pywa.readthedocs.io/en/latest/content/listeners/overview.html)
• [Filters](https://pywa.readthedocs.io/en/latest/content/filters/overview.html)
• [Updates](https://pywa.readthedocs.io/en/latest/content/updates/overview.html)
• [Flows](https://pywa.readthedocs.io/en/latest/content/flows/overview.html)
• [Examples](https://pywa.readthedocs.io/en/latest/content/examples/overview.html)

------------------------

⚡ **Why PyWa?**
---------------
- **🚀 Fast and Simple**: Focus on building your bot without worrying about low-level details.
- **💬 Rich Messaging**: Send text, images, videos, documents, audio, locations, contacts, and interactive keyboards.
- **📩 Real-Time Updates**: Receive messages, callbacks, and message status updates effortlessly.
- **🔔 Listeners**: Use powerful listeners to wait for specific user events.
- **♻️ Flows Support**: Create, send, and listen to Flows seamlessly.
- **🔄 Webhook Integration**: Built-in support for popular frameworks like Flask and FastAPI.
- **🔬 Advanced Filters**: Handle incoming updates with powerful filtering options.
- **📄 Template Messaging**: Easily create and send template messages.
- **✅ Production-Ready**: Fully typed, documented, and rigorously tested for reliability.

------------------------

👨‍💻 **How to Use**
------------------

- **Send a message**
> See [WhatsApp Client](https://pywa.readthedocs.io/en/latest/content/client/overview.html) for all the options.

```python
from pywa import WhatsApp, types

# Create a WhatsApp client
wa = WhatsApp(
    phone_id="100458559237541",
    token="EAAEZC6hUxkTIB"
)

# Send a text message with buttons
wa.send_message(
    to="9876543210",
    text="Hello from PyWa!",
    buttons=[
        types.Button(title="Menu", callback_data="menu"),
        types.Button(title="Help", callback_data="help")
    ]
)

# Send a image message from URL
wa.send_image(
    to="9876543210",
    image="https://example.com/image.jpg",
    caption="Check out this image!",
)
```

- **Handle incoming updates** (with [FastAPI](https://fastapi.tiangolo.com/) in this example)
> See [Handlers](https://pywa.readthedocs.io/en/latest/content/handlers/overview.html) for fully detailed guide.

```python
# wa.py
from pywa import WhatsApp, filters, types
from fastapi import FastAPI

fastapi_app = FastAPI() # FastAPI server

# Create a WhatsApp client
wa = WhatsApp(
    phone_id=1234567890,
    token="************",
    server=fastapi_app, # the server to listen to incoming updates
    callback_url="https://yourdomain.com/",  # the public URL of your server
    verify_token="xyz123", # some random string to verify the webhook
    app_id=123456, # your app id
    app_secret="*******" # your app secret
)

# Register callback to handle incoming messages
@wa.on_message(filters.matches("Hello", "Hi")) # Filter to match text messages that contain "Hello" or "Hi"
def hello(client: WhatsApp, msg: types.Message):
    msg.react("👋") # React to the message with a wave emoji
    msg.reply_text( # Short reply to the message
        text=f"Hello {msg.from_user.name}!", # Greet the user
        buttons=[ # Add buttons to the reply
            types.Button(
                title="About me",
                callback_data="about_me" # Callback data to identify the click
            )
        ]
    )
    # Use the `wait_for_reply` listener to wait for a reply from the user
    age = msg.reply(text="What's your age?").wait_for_reply(filters=filters.text).text
    msg.reply_text(f"Your age is {age}.")

# Register another callback to handle incoming button clicks
@wa.on_callback_button(filters.matches("about_me")) # Filter to match the button click
def click_me(client: WhatsApp, clb: types.CallbackButton):
    clb.reply_text(f"Hello {clb.from_user.name}, I am a WhatsApp bot built with PyWa!") # Reply to the button click
```

- To run the server, use [fastapi-cli](https://fastapi.tiangolo.com/#run-it) (`pip install "fastapi[standard]"`):

```bash
fastapi dev wa.py  # see uvicorn docs for more options (port, host, reload, etc.)
```

- **Async Usage**

- PyWa also supports async usage with the same API. This is useful if you want to use async/await in your code. To use the async version, replace **all** the imports from `pywa` to `pywa_async`:

```python
# wa.py
import fastapi
from pywa_async import WhatsApp, types  # Same API, just different imports

fastapi_app = fastapi.FastAPI()
wa = WhatsApp(..., server=fastapi_app)

async def main():
    await wa.send_message(...) # async call

@wa.on_message
async def hello(_: WhatsApp, msg: types.Message): # async callback
    await msg.react("👋")
    await msg.reply(...)
```

- **Create and send flows**
> See [Flows](https://pywa.readthedocs.io/en/latest/content/flows/overview.html) for much more details and examples.

```python
from pywa import WhatsApp, types
from pywa.types.flows import *

# Create a WhatsApp client
wa = WhatsApp(..., business_account_id=123456)

# Build a flow
my_flow_json = FlowJSON(
    screens=[
        Screen(
            id="NEWSLETTER",
            title="PyWa Newsletter",
            layout=Layout(
                children=[
                    TextHeading(text="Subscribe to our newsletter"),
                    name := TextInput(
                        name="name",
                        label="Name",
                        input_type=InputType.TEXT,
                        required=False,
                    ),
                    email := TextInput(
                        name="email",
                        label="Email",
                        input_type=InputType.EMAIL,
                        required=True,
                    ),
                    Footer(
                        label="Subscribe",
                        on_click_action=CompleteAction(
                            payload={ # Payload to send to the server
                                "name": name.ref,
                                "email": email.ref,
                            }
                        )
                    )
                ]
            )
        )
    ]
)

# Create the flow
wa.create_flow(
    name="subscribe_to_newsletter",
    categories=[FlowCategory.SIGN_UP, FlowCategory.OTHER],
    flow_json=my_flow_json,
    publish=True
)

# Send the flow to a user
wa.send_text(
    to="9876543210",
    text="Hello from PyWa!",
    buttons=types.FlowButton(
        title="Subscribe to our newsletter!",
        flow_name="subscribe_to_newsletter",
    )
)

# Handle the flow response
@wa.on_flow_completion
def handle_flow_response(_: WhatsApp, flow: types.FlowCompletion):
    flow.reply(
        text=f"Thank you for subscribing to our newsletter, {flow.response['name']}! "
             f"We will send you updates to {flow.response['email']}.",
        buttons=[types.Button(title="Unsubscribe", callback_data="unsubscribe")]
    )
```

- **Create and send template messages**

```python
from pywa import WhatsApp, types

# Create a WhatsApp client
wa = WhatsApp(..., business_account_id=123456)

# Create a template
created = wa.create_template(
    template=types.NewTemplate(
        name="buy_new_iphone_x",
        category=types.NewTemplate.Category.MARKETING,
        language=types.NewTemplate.Language.ENGLISH_US,
        header=types.NewTemplate.Text(text="The New iPhone {15} is here!"),
        body=types.NewTemplate.Body(text="Buy now and use the code {WA_IPHONE_15} to get {15%} off!"),
        footer=types.NewTemplate.Footer(text="Powered by PyWa"),
        buttons=[
            types.NewTemplate.UrlButton(title="Buy Now", url="https://example.com/shop/{iphone15}"),
            types.NewTemplate.PhoneNumberButton(title="Call Us", phone_number='1234567890'),
            types.NewTemplate.QuickReplyButton(text="Unsubscribe from marketing messages"),
            types.NewTemplate.QuickReplyButton(text="Unsubscribe from all messages"),
        ],
    ),
)

# Send the template message
wa.send_template(
    to="9876543210",
    template=types.Template(
        name="buy_new_iphone_x",
        language=types.Template.Language.ENGLISH_US,
        header=types.Template.TextValue(value="15"),
        body=[
            types.Template.TextValue(value="John Doe"),
            types.Template.TextValue(value="WA_IPHONE_15"),
            types.Template.TextValue(value="15%"),
        ],
        buttons=[
            types.Template.UrlButtonValue(value="iphone15"),
            types.Template.QuickReplyButtonData(data="unsubscribe_from_marketing_messages"),
            types.Template.QuickReplyButtonData(data="unsubscribe_from_all_messages"),
        ],
    ),
)
```

🎛 **Installation**
--------------------

- **Install using pip3:**

```bash
pip3 install -U pywa
```

- **Install from source (the bleeding edge):**

```bash
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:**

```bash
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:**

```bash
pip3 install -U "pywa[cryptography]"
```

💾 **Requirements**
--------------------

- Python 3.10 or higher - https://www.python.org

📖 **Setup and Usage**
-----------------------

See the [Documentation](https://pywa.readthedocs.io/) 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](https://github.com/david-lev/pywa/blob/master/LICENSE) file for details


🔱 **Contributing**
--------------------

Contributions are welcome! Please see the [Contributing Guide](https://github.com/david-lev/pywa/blob/master/CONTRIBUTING.md) for more information.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "pywa",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "whatsapp, whatsapp-api, whatsapp-cloud-api, whatsapp-cloud, whatsapp-api-python, whatsapp-cloud-api-python, pywa, wapy, wa, wa-api, wa-cloud-api, wa-cloud, wa-api-python, wa-cloud-api-python, whatsapp-webhook, whatsapp-webhook-python, whatsapp-webhook-api, whatsapp-flows, whatsapp-cloud-api-flows",
    "author": null,
    "author_email": "David Lev <david@davidlev.dev>",
    "download_url": "https://files.pythonhosted.org/packages/37/36/749c5ff348e5eadc5f59b96f40be299af66f897a0148867871a820397735/pywa-2.11.0.tar.gz",
    "platform": null,
    "description": "<img alt=\"PyWa Logo\" height=\"250\" src=\"https://pywa.readthedocs.io/en/latest/_static/pywa-logo.png\" width=\"250\"/>\n\n________________________\n\n# [PyWa](https://github.com/david-lev/pywa) \u2022 Build WhatsApp Bots in Python \u2022 Fast, Effortless, Powerful \ud83d\ude80\n\n[![PyPi Downloads](https://img.shields.io/pypi/dm/pywa)](https://pypi.org/project/pywa/)\n[![PyPI Version](https://badge.fury.io/py/pywa.svg)](https://pypi.org/project/pywa/)\n[![Tests](https://img.shields.io/github/actions/workflow/status/david-lev/pywa/tests.yml?label=Tests)](https://github.com/david-lev/pywa/actions/workflows/tests.yml)\n[![Coverage](https://img.shields.io/codecov/c/github/david-lev/pywa)](https://codecov.io/gh/david-lev/pywa)\n[![Docs](https://readthedocs.org/projects/pywa/badge/?version=latest&)](https://pywa.readthedocs.io)\n[![License](https://img.shields.io/github/license/david-lev/pywa)](https://github.com/david-lev/pywa/blob/master/LICENSE)\n[![CodeFactor](https://www.codefactor.io/repository/github/david-lev/pywa/badge/master)](https://www.codefactor.io/repository/github/david-lev/pywa/overview/master)\n[![Telegram](https://badges.aleen42.com/src/telegram.svg)](https://t.me/py_wa)\n\n________________________\n\n**\ud83d\udcab PyWa is the all-in-one Python framework for the WhatsApp Cloud API**\n\n**Send rich messages with media and interactive buttons, Listen to user events in real time, Build and send flows, Create and send template messages, Enjoy blazing-fast async support and seamless integration with FastAPI, Flask, and more. Fully typed, documented, and production-ready. Build powerful WhatsApp bots in minutes.**\n\n\ud83d\udcc4 **Quick Documentation Index**\n--------------------------------\n\n> [Get Started](https://pywa.readthedocs.io/en/latest/content/getting-started.html)\n\u2022 [WhatsApp Client](https://pywa.readthedocs.io/en/latest/content/client/overview.html)\n\u2022 [Handlers](https://pywa.readthedocs.io/en/latest/content/handlers/overview.html)\n\u2022 [Listeners](https://pywa.readthedocs.io/en/latest/content/listeners/overview.html)\n\u2022 [Filters](https://pywa.readthedocs.io/en/latest/content/filters/overview.html)\n\u2022 [Updates](https://pywa.readthedocs.io/en/latest/content/updates/overview.html)\n\u2022 [Flows](https://pywa.readthedocs.io/en/latest/content/flows/overview.html)\n\u2022 [Examples](https://pywa.readthedocs.io/en/latest/content/examples/overview.html)\n\n------------------------\n\n\u26a1 **Why PyWa?**\n---------------\n- **\ud83d\ude80 Fast and Simple**: Focus on building your bot without worrying about low-level details.\n- **\ud83d\udcac Rich Messaging**: Send text, images, videos, documents, audio, locations, contacts, and interactive keyboards.\n- **\ud83d\udce9 Real-Time Updates**: Receive messages, callbacks, and message status updates effortlessly.\n- **\ud83d\udd14 Listeners**: Use powerful listeners to wait for specific user events.\n- **\u267b\ufe0f Flows Support**: Create, send, and listen to Flows seamlessly.\n- **\ud83d\udd04 Webhook Integration**: Built-in support for popular frameworks like Flask and FastAPI.\n- **\ud83d\udd2c Advanced Filters**: Handle incoming updates with powerful filtering options.\n- **\ud83d\udcc4 Template Messaging**: Easily create and send template messages.\n- **\u2705 Production-Ready**: Fully typed, documented, and rigorously tested for reliability.\n\n------------------------\n\n\ud83d\udc68\u200d\ud83d\udcbb **How to Use**\n------------------\n\n- **Send a message**\n> See [WhatsApp Client](https://pywa.readthedocs.io/en/latest/content/client/overview.html) for all the options.\n\n```python\nfrom pywa import WhatsApp, types\n\n# Create a WhatsApp client\nwa = WhatsApp(\n    phone_id=\"100458559237541\",\n    token=\"EAAEZC6hUxkTIB\"\n)\n\n# Send a text message with buttons\nwa.send_message(\n    to=\"9876543210\",\n    text=\"Hello from PyWa!\",\n    buttons=[\n        types.Button(title=\"Menu\", callback_data=\"menu\"),\n        types.Button(title=\"Help\", callback_data=\"help\")\n    ]\n)\n\n# Send a image message from URL\nwa.send_image(\n    to=\"9876543210\",\n    image=\"https://example.com/image.jpg\",\n    caption=\"Check out this image!\",\n)\n```\n\n- **Handle incoming updates** (with [FastAPI](https://fastapi.tiangolo.com/) in this example)\n> See [Handlers](https://pywa.readthedocs.io/en/latest/content/handlers/overview.html) for fully detailed guide.\n\n```python\n# wa.py\nfrom pywa import WhatsApp, filters, types\nfrom fastapi import FastAPI\n\nfastapi_app = FastAPI() # FastAPI server\n\n# Create a WhatsApp client\nwa = WhatsApp(\n    phone_id=1234567890,\n    token=\"************\",\n    server=fastapi_app, # the server to listen to incoming updates\n    callback_url=\"https://yourdomain.com/\",  # the public URL of your server\n    verify_token=\"xyz123\", # some random string to verify the webhook\n    app_id=123456, # your app id\n    app_secret=\"*******\" # your app secret\n)\n\n# Register callback to handle incoming messages\n@wa.on_message(filters.matches(\"Hello\", \"Hi\")) # Filter to match text messages that contain \"Hello\" or \"Hi\"\ndef hello(client: WhatsApp, msg: types.Message):\n    msg.react(\"\ud83d\udc4b\") # React to the message with a wave emoji\n    msg.reply_text( # Short reply to the message\n        text=f\"Hello {msg.from_user.name}!\", # Greet the user\n        buttons=[ # Add buttons to the reply\n            types.Button(\n                title=\"About me\",\n                callback_data=\"about_me\" # Callback data to identify the click\n            )\n        ]\n    )\n    # Use the `wait_for_reply` listener to wait for a reply from the user\n    age = msg.reply(text=\"What's your age?\").wait_for_reply(filters=filters.text).text\n    msg.reply_text(f\"Your age is {age}.\")\n\n# Register another callback to handle incoming button clicks\n@wa.on_callback_button(filters.matches(\"about_me\")) # Filter to match the button click\ndef click_me(client: WhatsApp, clb: types.CallbackButton):\n    clb.reply_text(f\"Hello {clb.from_user.name}, I am a WhatsApp bot built with PyWa!\") # Reply to the button click\n```\n\n- To run the server, use [fastapi-cli](https://fastapi.tiangolo.com/#run-it) (`pip install \"fastapi[standard]\"`):\n\n```bash\nfastapi dev wa.py  # see uvicorn docs for more options (port, host, reload, etc.)\n```\n\n- **Async Usage**\n\n- PyWa also supports async usage with the same API. This is useful if you want to use async/await in your code. To use the async version, replace **all** the imports from `pywa` to `pywa_async`:\n\n```python\n# wa.py\nimport fastapi\nfrom pywa_async import WhatsApp, types  # Same API, just different imports\n\nfastapi_app = fastapi.FastAPI()\nwa = WhatsApp(..., server=fastapi_app)\n\nasync def main():\n    await wa.send_message(...) # async call\n\n@wa.on_message\nasync def hello(_: WhatsApp, msg: types.Message): # async callback\n    await msg.react(\"\ud83d\udc4b\")\n    await msg.reply(...)\n```\n\n- **Create and send flows**\n> See [Flows](https://pywa.readthedocs.io/en/latest/content/flows/overview.html) for much more details and examples.\n\n```python\nfrom pywa import WhatsApp, types\nfrom pywa.types.flows import *\n\n# Create a WhatsApp client\nwa = WhatsApp(..., business_account_id=123456)\n\n# Build a flow\nmy_flow_json = FlowJSON(\n    screens=[\n        Screen(\n            id=\"NEWSLETTER\",\n            title=\"PyWa Newsletter\",\n            layout=Layout(\n                children=[\n                    TextHeading(text=\"Subscribe to our newsletter\"),\n                    name := TextInput(\n                        name=\"name\",\n                        label=\"Name\",\n                        input_type=InputType.TEXT,\n                        required=False,\n                    ),\n                    email := TextInput(\n                        name=\"email\",\n                        label=\"Email\",\n                        input_type=InputType.EMAIL,\n                        required=True,\n                    ),\n                    Footer(\n                        label=\"Subscribe\",\n                        on_click_action=CompleteAction(\n                            payload={ # Payload to send to the server\n                                \"name\": name.ref,\n                                \"email\": email.ref,\n                            }\n                        )\n                    )\n                ]\n            )\n        )\n    ]\n)\n\n# Create the flow\nwa.create_flow(\n    name=\"subscribe_to_newsletter\",\n    categories=[FlowCategory.SIGN_UP, FlowCategory.OTHER],\n    flow_json=my_flow_json,\n    publish=True\n)\n\n# Send the flow to a user\nwa.send_text(\n    to=\"9876543210\",\n    text=\"Hello from PyWa!\",\n    buttons=types.FlowButton(\n        title=\"Subscribe to our newsletter!\",\n        flow_name=\"subscribe_to_newsletter\",\n    )\n)\n\n# Handle the flow response\n@wa.on_flow_completion\ndef handle_flow_response(_: WhatsApp, flow: types.FlowCompletion):\n    flow.reply(\n        text=f\"Thank you for subscribing to our newsletter, {flow.response['name']}! \"\n             f\"We will send you updates to {flow.response['email']}.\",\n        buttons=[types.Button(title=\"Unsubscribe\", callback_data=\"unsubscribe\")]\n    )\n```\n\n- **Create and send template messages**\n\n```python\nfrom pywa import WhatsApp, types\n\n# Create a WhatsApp client\nwa = WhatsApp(..., business_account_id=123456)\n\n# Create a template\ncreated = wa.create_template(\n    template=types.NewTemplate(\n        name=\"buy_new_iphone_x\",\n        category=types.NewTemplate.Category.MARKETING,\n        language=types.NewTemplate.Language.ENGLISH_US,\n        header=types.NewTemplate.Text(text=\"The New iPhone {15} is here!\"),\n        body=types.NewTemplate.Body(text=\"Buy now and use the code {WA_IPHONE_15} to get {15%} off!\"),\n        footer=types.NewTemplate.Footer(text=\"Powered by PyWa\"),\n        buttons=[\n            types.NewTemplate.UrlButton(title=\"Buy Now\", url=\"https://example.com/shop/{iphone15}\"),\n            types.NewTemplate.PhoneNumberButton(title=\"Call Us\", phone_number='1234567890'),\n            types.NewTemplate.QuickReplyButton(text=\"Unsubscribe from marketing messages\"),\n            types.NewTemplate.QuickReplyButton(text=\"Unsubscribe from all messages\"),\n        ],\n    ),\n)\n\n# Send the template message\nwa.send_template(\n    to=\"9876543210\",\n    template=types.Template(\n        name=\"buy_new_iphone_x\",\n        language=types.Template.Language.ENGLISH_US,\n        header=types.Template.TextValue(value=\"15\"),\n        body=[\n            types.Template.TextValue(value=\"John Doe\"),\n            types.Template.TextValue(value=\"WA_IPHONE_15\"),\n            types.Template.TextValue(value=\"15%\"),\n        ],\n        buttons=[\n            types.Template.UrlButtonValue(value=\"iphone15\"),\n            types.Template.QuickReplyButtonData(data=\"unsubscribe_from_marketing_messages\"),\n            types.Template.QuickReplyButtonData(data=\"unsubscribe_from_all_messages\"),\n        ],\n    ),\n)\n```\n\n\ud83c\udf9b **Installation**\n--------------------\n\n- **Install using pip3:**\n\n```bash\npip3 install -U pywa\n```\n\n- **Install from source (the bleeding edge):**\n\n```bash\npip3 install -U git+https://github.com/david-lev/pywa.git\n```\n\n- **If you going to use the webhook features, here is shortcut to install the required dependencies:**\n\n```bash\npip3 install -U \"pywa[fastapi]\"\npip3 install -U \"pywa[flask]\"\n```\n\n- **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:**\n\n```bash\npip3 install -U \"pywa[cryptography]\"\n```\n\n\ud83d\udcbe **Requirements**\n--------------------\n\n- Python 3.10 or higher - https://www.python.org\n\n\ud83d\udcd6 **Setup and Usage**\n-----------------------\n\nSee the [Documentation](https://pywa.readthedocs.io/) for detailed instructions\n\n\u2611\ufe0f **TODO**\n------------\n\n- ~~Add support for async~~\n- ~~Add support for more web frameworks (Django, aiohttp, etc.)~~\n- ~~Add support for flows~~\n- Add support for more types of updates (``account_alerts``, ``phone_number_quality_updates``, ``template_category_updates``, etc.)\n- Add more examples and guides\n\nFeel free to open an issue if you have any suggestions. or even better - submit a PR!\n\n\u2696\ufe0f **License**\n---------------\n\nThis project is licensed under the MIT License - see the\n[LICENSE](https://github.com/david-lev/pywa/blob/master/LICENSE) file for details\n\n\n\ud83d\udd31 **Contributing**\n--------------------\n\nContributions are welcome! Please see the [Contributing Guide](https://github.com/david-lev/pywa/blob/master/CONTRIBUTING.md) for more information.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Build WhatsApp Bots in Python \u2022 Fast, Effortless, Powerful \ud83d\ude80",
    "version": "2.11.0",
    "project_urls": {
        "Changelog": "https://github.com/david-lev/pywa/blob/master/CHANGELOG.md",
        "Documentation": "https://pywa.readthedocs.io/",
        "Funding": "https://github.com/sponsors/david-lev",
        "Issue Tracker": "https://github.com/david-lev/pywa/issues",
        "Source Code": "https://github.com/david-lev/pywa"
    },
    "split_keywords": [
        "whatsapp",
        " whatsapp-api",
        " whatsapp-cloud-api",
        " whatsapp-cloud",
        " whatsapp-api-python",
        " whatsapp-cloud-api-python",
        " pywa",
        " wapy",
        " wa",
        " wa-api",
        " wa-cloud-api",
        " wa-cloud",
        " wa-api-python",
        " wa-cloud-api-python",
        " whatsapp-webhook",
        " whatsapp-webhook-python",
        " whatsapp-webhook-api",
        " whatsapp-flows",
        " whatsapp-cloud-api-flows"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e3e0e7215a2a9f6a45a0c0f4a82241a710fcda814f3cf803e6dfe628a4b8bf22",
                "md5": "f1e0ed0c1079bea793540e1c1cd5eed5",
                "sha256": "29bd8a20621f296b530dd59fb9484bdbda8c84a5bec5f7307adcb01314ca39e9"
            },
            "downloads": -1,
            "filename": "pywa-2.11.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "f1e0ed0c1079bea793540e1c1cd5eed5",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 196605,
            "upload_time": "2025-06-17T06:11:25",
            "upload_time_iso_8601": "2025-06-17T06:11:25.834748Z",
            "url": "https://files.pythonhosted.org/packages/e3/e0/e7215a2a9f6a45a0c0f4a82241a710fcda814f3cf803e6dfe628a4b8bf22/pywa-2.11.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3736749c5ff348e5eadc5f59b96f40be299af66f897a0148867871a820397735",
                "md5": "cec5b442ee54850300a24f16f0934653",
                "sha256": "94d0d6b3a1844847937cd96512098c20ab20bf7bacea3ac1ad0e58e1739c1ee5"
            },
            "downloads": -1,
            "filename": "pywa-2.11.0.tar.gz",
            "has_sig": false,
            "md5_digest": "cec5b442ee54850300a24f16f0934653",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 204074,
            "upload_time": "2025-06-17T06:11:27",
            "upload_time_iso_8601": "2025-06-17T06:11:27.305465Z",
            "url": "https://files.pythonhosted.org/packages/37/36/749c5ff348e5eadc5f59b96f40be299af66f897a0148867871a820397735/pywa-2.11.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-06-17 06:11:27",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "david-lev",
    "github_project": "pywa",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "httpx",
            "specs": [
                [
                    ">=",
                    "0.27.0"
                ]
            ]
        }
    ],
    "lcname": "pywa"
}
        
Elapsed time: 1.58351s