Setup and Configuration
1
Prerequisites
Ensure you have the following:
- A Meta Developer Account
- A Meta Business Account
- A valid Facebook account
- ngrok (for development)
- Python 3.7+
2
Create a Meta App
- Go to Meta for Developers and verify your account.
- Create a new app at Meta Apps Dashboard.
- Under "Use Case", select "Other".
- Choose "Business" as the app type.
- Provide:
- App name
- Contact email
- Click "Create App".
3
Set Up a Meta Business Account
- Navigate to Meta Business Manager.
- Create a new business account or use an existing one.
- Verify your business by clicking on the email link.
- Go to your App page, navigate to "App settings / Basic", and click "Start Verification" under "Business Verification". Complete the verification process for production.
- Associate the app with your business account and click "Create App".
4
Setup WhatsApp Business API
- Go to your app's WhatsApp Setup page.
- Click on "Start using the API" (API Setup).
- Generate an Access Token.
- Copy your Phone Number ID.
- Copy your WhatsApp Business Account ID.
- Add a "To" number that you will use for testing (this will likely be your personal number).
5
Setup Environment Variables
Create a Ensure this file is sourced by your shell (e.g., by using
.envrc file in your project root with the following content, replacing placeholder values with your actual credentials:direnv allow).6
Setup Webhook with ngrok
- For local development, use ngrok to expose your local server to the internet. If you don't have a static ngrok URL, you'll need to update the
WHATSAPP_WEBHOOK_URLenvironment variable and your Meta App webhook configuration each time ngrok assigns a new URL. - Run ngrok, ensuring the port matches the port your Agno WhatsApp app will run on (e.g., 8000):
- Copy the
https://URL provided by ngrok. This is your base ngrok URL. - Construct your full webhook URL by appending
/webhook(or your chosen prefix) to the ngrok URL (e.g.,https://<random-string>.ngrok-free.app/webhook). UpdateWHATSAPP_WEBHOOK_URLin your.envrcif necessary. - In your Meta App's WhatsApp Setup page, navigate to the "Webhook" section and click "Edit".
- Configure the webhook:
- Callback URL: Enter your full ngrok webhook URL.
- Verify Token: Enter the same value you used for
WHATSAPP_VERIFY_TOKENin your.envrcfile.
- Click "Verify and save". Your Agno application must be running locally for verification to succeed.
- After successful verification, click "Manage" next to Webhook fields. Subscribe to the
messagesfield underwhatsapp_business_account.
7
Configure Application Environment
Set the
APP_ENV environment variable:- For Development Mode:
(Webhook signature validation might be less strict or bypassed).
- For Production Mode:
You will also need to set the
WHATSAPP_APP_SECRETfor webhook signature validation:This should be the "App Secret" found in your Meta App's "App settings > Basic" page.
Example Usage
Create an agent, wrap it withWhatsappAPI, and serve it:
- Ensure
OPENAI_API_KEYenvironment variable is set if using OpenAI models. - The API will be running (e.g.,
http://localhost:8000), but interaction is primarily via WhatsApp through the configured webhook. - API docs (if enabled in settings) might be at
http://localhost:8000/docs.
Core Components
WhatsappAPI: Wraps Agno agents/teams for WhatsApp integration via FastAPI.WhatsappAPI.serve: Serves the FastAPI app using Uvicorn, configured for WhatsApp.
WhatsappAPI Class
Main entry point for Agno WhatsApp applications.
Initialization Parameters
Provide
agent or team, not both.
Key Method
Endpoints
Endpoints are accessible at theprefix (default is root level: "").
1. GET /webhook
- Description: Verifies WhatsApp webhook (challenge).
- Responses:
200 OK: Returnshub.challengeif tokens match.403 Forbidden: Token mismatch or invalid mode.500 Internal Server Error:WHATSAPP_VERIFY_TOKENnot set.
2. POST /webhook
- Description: Receives incoming WhatsApp messages and events.
- Processing:
- Validates signature (if
APP_ENV="production"andWHATSAPP_APP_SECRETis set). - Processes messages (text, image, video, audio, document) via
agent.arun()orteam.arun(). - Sends replies via WhatsApp.
- Validates signature (if
- Responses:
200 OK:{"status": "processing"}or{"status": "ignored"}.403 Forbidden: Invalid signature.500 Internal Server Error: Other processing errors.