WhatsApp Messenger

wa_me Logo

A modern, easy to use, feature-rich ready API wrapper for WhatsApp Business Cloud written in Python.

Features

  • Full Send Messages Support:

    • text

    • media (audio, documents, images, sticker, and videos)

    • contacts

    • interactive (buttons, list, and products)

    • location

    • templates

  • Full Webhook Notification Parsing Support

Installing

Stable release

To install wa_me, run this command in your terminal:

$ pip install wa_me

This is the preferred method to install wa_me, as it will always install the most recent stable release.

If you don’t have pip installed, this Python installation guide can guide you through the process.

From sources

The sources for wa_me can be downloaded from the Github repo.

You can either clone the public repository:

$ git clone git://github.com/leandcesar/wa_me

Or download the tarball:

$ curl -OJL https://github.com/leandcesar/wa_me/tarball/main

Once you have a copy of the source, you can install it with:

$ python setup.py install

Quick Example

Mirror Bot

from wa_me import Bot, Ctx

class MirrorBot(Bot):
    def before_event_message(self, ctx: Ctx):
        ctx.read()

    def on_event_message_audio(self, ctx: Ctx):
        ctx.send_audio(ctx.message.audio.id)

    def on_event_message_document(self, ctx: Ctx):
        ctx.send_document(
            ctx.message.document.id,
            caption=ctx.message.document.caption,
        )

    def on_event_message_image(self, ctx: Ctx):
        ctx.send_image(
            ctx.message.image.id,
            caption=ctx.message.image.caption,
        )

    def on_event_message_location(self, ctx: Ctx):
        ctx.send_location(
            latitude=ctx.message.location.latitude,
            longitude=ctx.message.location.longitude,
            address=ctx.message.location.address,
            name=ctx.message.location.name,
        )

    def on_event_message_sticker(self, ctx: Ctx):
        ctx.send_sticker(ctx.message.sticker.id)

    def on_event_message_text(self, ctx: Ctx):
        ctx.send_text(ctx.message.text.body)

    def on_event_message_video(self, ctx: Ctx):
        ctx.send_video(
            ctx.message.video.id,
            caption=ctx.message.video.caption,
        )

Run using Flask

from flask import Flask, request
from wa_me import Bot

app = Flask(__name__)
bot = Bot()
bot.start(phone_id="PHONE_ID", token="ACCESS_TOKEN")

@app.get("/")
async def ping():
    if request.args.get("hub.verify_token") == "VERIFY_TOKEN":
        return request.args.get("hub.challenge")
    return "Invalid verify token"

@app.post("/")
def root():
    data = request.get_json()
    bot.handle(data)
    return "Success"

Run using Fast API

from fastapi import FastAPI, Request
from wa_me import Bot

app = FastAPI()
bot = Bot()
bot.start(phone_id="PHONE_ID", token="ACCESS_TOKEN")

@app.get("/")
async def ping(
    token: str = Query(alias="hub.verify_token"),
    challenge: str = Query(alias="hub.challenge"),
):
    if token == VERIFY_TOKEN:
        return challenge
    return "Invalid verify token"

@app.post("/")
async def root(request: Request):
    data = await request.json()
    bot.handle(data)
    return "Success"

Credits

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.