设置和配置
1
先决条件
请确保您拥有以下条件:
- Meta 开发者账户
- Meta 商务账户
- 有效的 Facebook 账户
- ngrok (用于开发)
- Python 3.7+
2
创建 Meta 应用
- 前往 Meta for Developers 并验证您的账户。
- 在 Meta Apps Dashboard 创建一个新应用。
- 在“用例”下,选择“其他”。
- 选择“商务”作为应用类型。
- 提供:
- 应用名称
- 联系邮箱
- 点击“创建应用”。
3
设置 Meta 商务账户
- 导航至 Meta Business Manager。
- 创建新的商务账户或使用现有账户。
- 点击邮件链接验证您的企业。
- 前往您的应用页面,导航至“应用设置/基本设置”,然后在“企业验证”下点击“开始验证”。完成生产环境的验证过程。
- 将应用与您的商务账户关联并点击“创建应用”。
4
设置 WhatsApp Business API
- 前往您应用的 WhatsApp 设置页面。
- 点击“开始使用 API”(API 设置)。
- 生成访问令牌。
- 复制您的手机号码 ID。
- 复制您的 WhatsApp Business 账户 ID。
- 添加一个您将用于测试的“收件人”号码(这可能通常是您的个人号码)。
5
设置环境变量
在您的项目根目录创建一个 确保您的 shell 加载了此文件(例如,通过使用
.envrc
文件,并包含以下内容,将占位符值替换为您自己的凭证:direnv allow
)。6
使用 ngrok 设置 Webhook
- 对于本地开发,请使用 ngrok 将您的本地服务器暴露给互联网。如果您没有静态 ngrok URL,每次 ngrok 分配新 URL 时都需要更新
WHATSAPP_WEBHOOK_URL
环境变量和您的 Meta 应用 webhook 配置。 - 运行 ngrok,确保端口与您的 Agno WhatsApp 应用运行的端口匹配(例如 8000):
- 复制 ngrok 提供的
https://
URL。这是您的基础 ngrok URL。 - 通过在 ngrok URL 后面添加
/webhook
(或者您选择的前缀)来构建完整的 webhook URL(例如https://<random-string>.ngrok-free.app/webhook
)。如有必要,请更新.envrc
中的WHATSAPP_WEBHOOK_URL
。 - 在您的 Meta 应用的 WhatsApp 设置页面,导航至“Webhook”部分并点击“编辑”。
- 配置 webhook:
- 回调 URL(Callback URL): 输入您完整的 ngrok webhook URL。
- 验证令牌(Verify Token): 输入与您在
.envrc
文件中WHATSAPP_VERIFY_TOKEN
相同的值。
- 点击“验证并保存”。您的 Agno 应用程序必须在本地运行才能成功验证。
- 在成功验证后,点击 Webhook 字段旁边的“管理”。在
whatsapp_business_account
下订阅messages
字段。
7
配置应用程序环境
设置
APP_ENV
环境变量:- 开发模式:
(此时 webhook 签名验证可能不严格或被绕过)。
- 生产模式:
您还需要设置
WHATSAPP_APP_SECRET
以进行 webhook 签名验证:这应该是您在 Meta 应用的“应用设置 > 基本设置”页面中找到的“应用密钥”。
示例用法
创建一个 Agent,用WhatsappAPI
包裹它,然后运行它:
- 如果使用 OpenAI 模型,请确保已设置
OPENAI_API_KEY
环境变量。 - API 将会运行(例如,
http://localhost:8000
),但主要通过配置的 webhook 与 WhatsApp 进行交互。 - API 文档(如果设置中已启用)可能位于
http://localhost:8000/docs
。
核心组件
WhatsappAPI
: 通过 FastAPI 将 Agno Agent/Team 封装以实现 WhatsApp 集成。WhatsappAPI.serve
: 使用 Uvicorn 运行 FastAPI 应用,并配置为支持 WhatsApp。
WhatsappAPI
类
Agno WhatsApp 应用的主入口点。
初始化参数
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
agent | Optional[Agent] | None | Agno Agent 实例。 |
team | Optional[Team] | None | Agno Team 实例。 |
settings | Optional[APIAppSettings] | None | API 配置。如果为 None 则使用默认配置。 |
api_app | Optional[FastAPI] | None | 现有的 FastAPI 应用。如果为 None 则创建一个新的。 |
router | Optional[APIRouter] | None | 现有的 APIRouter。如果为 None 则创建一个新的。 |
app_id | Optional[str] | None | 应用标识符(如果未设置则自动生成)。 |
name | Optional[str] | None | 应用名称。 |
description | Optional[str] | None | 应用描述。 |
agent
或 team
中的一个,但不要同时提供。
主要方法
方法 | 参数 | 返回类型 | 描述 |
---|---|---|---|
get_app | use_async: bool = True prefix: str = "" | FastAPI | 返回已配置的 FastAPI 应用。设置前缀、错误处理器,并包含 WhatsApp 路由。默认使用异步路由。 |
端点
端点可在prefix
(默认为根级别:""
)访问。
1. GET /webhook
- 描述: 验证 WhatsApp webhook(challenge)。
- 响应:
200 OK
: 如果令牌匹配,则返回hub.challenge
。403 Forbidden
: 令牌不匹配或模式无效。500 Internal Server Error
: 未设置WHATSAPP_VERIFY_TOKEN
。
2. POST /webhook
- 描述: 接收传入的 WhatsApp 消息和事件。
- 处理:
- 验证签名(如果
APP_ENV="production"
且WHATSAPP_APP_SECRET
已设置)。 - 通过
agent.arun()
或team.arun()
处理消息(文本、图像、视频、音频、文档)。 - 通过 WhatsApp 发送回复。
- 验证签名(如果
- 响应:
200 OK
:{"status": "processing"}
或{"status": "ignored"}
。403 Forbidden
: 签名无效。500 Internal Server Error
: 其他处理错误。
参数
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
app | Union[str, FastAPI] | N/A | FastAPI 应用实例或导入字符串(必需)。 |
host | str | "localhost" | 绑定的主机。 |
port | int | 7777 | 绑定的端口。 |
reload | bool | False | 为开发启用自动重载。 |