将 Agent 作为 Whatsapp 应用托管。
Whatsapp 应用用于服务通过 WhatsApp 交互的 Agent 或团队,使用 FastAPI 服务器处理 webhook 事件和发送消息。
先决条件
请确保您拥有以下条件:
创建 Meta 应用
设置 Meta 商务账户
设置 WhatsApp Business API
设置环境变量
在您的项目根目录创建一个 .envrc
文件,并包含以下内容,将占位符值替换为您自己的凭证:
确保您的 shell 加载了此文件(例如,通过使用 direnv allow
)。
使用 ngrok 设置 Webhook
WHATSAPP_WEBHOOK_URL
环境变量和您的 Meta 应用 webhook 配置。https://
URL。这是您的基础 ngrok URL。/webhook
(或者您选择的前缀)来构建完整的 webhook URL(例如 https://<random-string>.ngrok-free.app/webhook
)。如有必要,请更新 .envrc
中的 WHATSAPP_WEBHOOK_URL
。.envrc
文件中 WHATSAPP_VERIFY_TOKEN
相同的值。whatsapp_business_account
下订阅 messages
字段。配置应用程序环境
设置 APP_ENV
环境变量:
WHATSAPP_APP_SECRET
以进行 webhook 签名验证:
创建一个 Agent,用 WhatsappAPI
包裹它,然后运行它:
运行方式:
OPENAI_API_KEY
环境变量。http://localhost:8000
),但主要通过配置的 webhook 与 WhatsApp 进行交互。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
(默认为根级别:""
)访问。
GET /webhook
200 OK
: 如果令牌匹配,则返回 hub.challenge
。403 Forbidden
: 令牌不匹配或模式无效。500 Internal Server Error
: 未设置 WHATSAPP_VERIFY_TOKEN
。POST /webhook
APP_ENV="production"
且 WHATSAPP_APP_SECRET
已设置)。agent.arun()
或 team.arun()
处理消息(文本、图像、视频、音频、文档)。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 | 为开发启用自动重载。 |