Webhook Handling

Webhooks allow you to receive real-time notifications about messages and status updates.

Webhook Setup

Verification

from fastapi import FastAPI, Query

app = FastAPI()

@app.get("/webhook")
def verify_webhook(
    hub_mode: str = Query(None, alias="hub.mode"),
    hub_verify_token: str = Query(None, alias="hub.verify_token"),
    hub_challenge: str = Query(None, alias="hub.challenge")
):
    result = client.webhooks.handle_verification(
        hub_mode, hub_verify_token, hub_challenge
    )
    if result:
        return result
    return {"error": "Invalid token"}, 403

Event Handling

Receiving Messages

@app.post("/webhook")
async def handle_webhook(
    request: Request,
    x_hub_signature_256: str = Header(None)
):
    body = await request.body()

    # Validate and parse
    event = client.webhooks.handle_event(x_hub_signature_256, body)

    # Extract messages
    messages = client.webhooks.extract_messages(event)
    for message in messages:
        if message.type == "text":
            print(f"Text: {message.text.body}")
        elif message.type == "image":
            print(f"Image ID: {message.image.id}")

    return {"status": "ok"}

Status Updates

# Extract status updates
statuses = client.webhooks.extract_statuses(event)
for status in statuses:
    print(f"Message {status.id}: {status.status}")
    if status.status == "delivered":
        print("Message was delivered")
    elif status.status == "read":
        print("Message was read")