Use the WhatsApp interface to serve Agents or Teams via WhatsApp. It mounts webhook routes on a FastAPI app and sends responses back to WhatsApp users and threads.
Setup
Follow the WhatsApp setup guide in the Whatsapp Cookbook.
You will need environment variables:
WHATSAPP_ACCESS_TOKEN
WHATSAPP_PHONE_NUMBER_ID
WHATSAPP_VERIFY_TOKEN
- Optional (production):
WHATSAPP_APP_SECRET
and APP_ENV=production
The user’s phone number is automatically used as the user_id
for runs. This ensures that sessions and memory are appropriately scoped to the user.The phone number is also used for the session_id
so a single Whatsapp conversation will be a single session. It is important to take this into account when considering session history.
Example Usage
Create an agent, expose it with the Whatsapp
interface, and serve via AgentOS
:
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.os import AgentOS
from agno.os.interfaces.whatsapp import Whatsapp
image_agent = Agent(
model=OpenAIChat(id="gpt-5-mini"), # Ensure OPENAI_API_KEY is set
tools=[OpenAITools(image_model="gpt-image-1")],
markdown=True,
add_history_to_context=True,
)
agent_os = AgentOS(
agents=[image_agent],
interfaces=[Whatsapp(agent=image_agent)],
)
app = agent_os.get_app()
if __name__ == "__main__":
agent_os.serve(app="basic:app", port=8000, reload=True)
See more in our cookbook examples.
Core Components
Whatsapp
(interface): Wraps an Agno Agent
or Team
for WhatsApp via FastAPI.
AgentOS.serve
: Serves the FastAPI app using Uvicorn.
Whatsapp
Interface
Main entry point for Agno WhatsApp applications.
Initialization Parameters
Parameter | Type | Default | Description |
---|
agent | Optional[Agent] | None | Agno Agent instance. |
team | Optional[Team] | None | Agno Team instance. |
Provide agent
or team
.
Key Method
Method | Parameters | Return Type | Description |
---|
get_router | use_async: bool = True | APIRouter | Returns the FastAPI router and attaches endpoints. |
Endpoints
Mounted under the /whatsapp
prefix:
GET /whatsapp/status
- Health/status of the interface.
GET /whatsapp/webhook
- Verifies WhatsApp webhook (
hub.challenge
).
- Returns
hub.challenge
on success; 403
on token mismatch; 500
if WHATSAPP_VERIFY_TOKEN
missing.
POST /whatsapp/webhook
- Receives WhatsApp messages and events.
- Validates signature (
X-Hub-Signature-256
); bypassed in development mode.
- Processes text, image, video, audio, and document messages via the agent/team.
- Sends replies (splits long messages; uploads and sends generated images).
- Responses:
200 {"status": "processing"}
or {"status": "ignored"}
, 403
invalid signature, 500
errors.