如何把 agno Agent 部署为 Telegram 机器人并处理群聊 @ 过滤与多 bot 前缀路由? 如何把 agno Agent 部署为 Telegram 机器人并处理群聊 过滤与多 bot 前缀路由【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno把 agno 的 Agent 接到 Telegram 上需要解决三件事让本地 AgentOS 服务能被 Telegram Bot API 回调webhook让机器人在群里只响应 提及和回复而不是抢答每条消息以及在同一台服务器上挂载多个 bot 并用 URL 前缀区分路由。agno 的 Telegram 接口通过 webhook 连接 Telegram Bot API默认开启流式输出streamingTrue并内置群聊提及过滤和多前缀路由能力。本文基于 cookbook/05_agent_os/18_telegram/README.md 及其示例代码给出从建 bot 到验证 webhook 的完整操作路径。准备环境安装 demo 环境并配置密钥Telegram 接口依赖agno[telegram]extra其中的telebot导入由pyTelegramBotAPI包提供。先在仓库根目录安装 demo 环境./scripts/demo_setup.sh然后用BotFather创建一个 bot复制它的 token。示例脚本需要以下环境变量变量名按 README 中每个文件的要求示例文件环境变量basic.pyTELEGRAM_TOKEN、OPENAI_API_KEYmultiple_instances.pyASSISTANT_TELEGRAM_TOKEN、RESEARCH_TELEGRAM_TOKEN、OPENAI_API_KEY本地做 webhook 测试时设置APP_ENVdevelopment可绕过 Telegram 的 secret-token 校验生产环境应设置TELEGRAM_WEBHOOK_SECRET_TOKEN并在注册 webhook 时把同一个值登记为secret_token。export TELEGRAM_TOKENyour-bot-token export OPENAI_API_KEYyour-openai-key export APP_ENVdevelopment上面命令中的your-bot-token和your-openai-key是占位符需替换为你从 BotFather 和 OpenAI 拿到的真实值。单 bot 部署运行 basic.py 并注册 webhookcookbook/05_agent_os/18_telegram/basic.py 演示了单 bot 的最小完整形态一个带 SQLite 存储的持久化 Agent挂载在/telegram前缀上并显式开启群聊过滤。关键配置agent_os AgentOS( idtelegram-basic-os, descriptionAgentOS serving one persistent Telegram assistant., agents[telegram_assistant], interfaces[ Telegram( agenttelegram_assistant, prefix/telegram, reply_to_mentions_onlyTrue, reply_to_bot_messagesTrue, ) ], )Agent 部分使用SqliteDbdb_filetmp/telegram_basic.db和OpenAIResponses(idgpt-5.5)模型并设置add_history_to_contextTrue、num_history_runs3让机器人记住同一会话内早期消息。启动方式在项目根目录执行.venvs/demo/bin/python cookbook/05_agent_os/18_telegram/basic.py服务默认使用 7777 端口。Telegram 需要公网 HTTPS 回调因此要用隧道暴露 7777 端口然后注册默认 webhookYOUR-PUBLIC-HOST替换为你隧道的公网主机名curl -X POST https://api.telegram.org/bot${TELEGRAM_TOKEN}/setWebhook \ -H Content-Type: application/json \ -d {url:https://YOUR-PUBLIC-HOST/telegram/webhook}默认接口挂载的路由如下操作路由状态GET /telegram/status接收 updatesPOST /telegram/webhookAgentOS 在同一服务器上还会暴露GET /health和GET /config。群聊 过滤如何工作basic.py中两个开关决定了群聊行为含义来自 README 的说明reply_to_mentions_onlyTrue群里只有当 bot 被 提及时才响应私聊中正常处理普通消息reply_to_bot_messagesTrue用户直接回复 bot 自己发出的消息时即使没有 也会响应。注意一个外部边界Telegram BotFather 里的 privacy 设置仍然决定哪些群消息会被投递给 bot这是 Telegram 侧的行为接口无法覆盖。接口还会在群里直接引用触发消息来回复私聊则需要quoted_responsesTrue才直接引用。会话以tg:{entity_id}:{chat_id}为作用域超群的回复线程和论坛话题会额外追加message_thread_id。命令菜单与 /new 换会话接口内置/start、/help、/new三个命令。/new开一个全新会话但保留旧会话因此要求 Agent 配了数据库basic.py中的SqliteDb就是为此。commands参数可以传自定义菜单例如commands[ {command: start, description: Start the bot}, {command: help, description: Show help}, {command: new, description: Start a new conversation}, ]register_commands默认为True命令菜单会在处理第一条消息时惰性注册——这一步会访问 Telegram API所以只在真正有消息进来时发生。多 bot 前缀路由一个进程挂两个 botTelegram 每个 bot 只能存一个 webhook URL所以多 bot 方案是创建两个 bot各自用独立 token并在同一 AgentOS 进程里用不同prefix区分路由。cookbook/05_agent_os/18_telegram/multiple_instances.py 的挂载方式agent_os AgentOS( idtelegram-multiple-os, descriptionAgentOS serving two Telegram bots on separate prefixes., agents[assistant, researcher], interfaces[ Telegram( agentassistant, prefix/assistant, tokenassistant_token, ), Telegram( agentresearcher, prefix/research, tokenresearch_token, ), ], )其中assistant_token、research_token分别来自环境变量ASSISTANT_TELEGRAM_TOKEN、RESEARCH_TELEGRAM_TOKEN脚本启动时会校验缺失任一 token 直接抛ValueError。两个 Agent 都是OpenAIResponses(idgpt-5.5)researcher 额外挂了WebSearchTools()用于带来源链接的回答。挂载后的路由Bot状态路由WebhookAssistantGET /assistant/statusPOST /assistant/webhookResearchGET /research/statusPOST /research/webhook然后为每个 bot 分别注册各自的 webhook同样需要先把 7777 端口暴露到公网 HTTPScurl -X POST \ https://api.telegram.org/bot${ASSISTANT_TELEGRAM_TOKEN}/setWebhook \ -H Content-Type: application/json \ -d {url:https://YOUR-PUBLIC-HOST/assistant/webhook} curl -X POST \ https://api.telegram.org/bot${RESEARCH_TELEGRAM_TOKEN}/setWebhook \ -H Content-Type: application/json \ -d {url:https://YOUR-PUBLIC-HOST/research/webhook}启动命令.venvs/demo/bin/python cookbook/05_agent_os/18_telegram/multiple_instances.py一个安全细节生产环境的 webhook secretTELEGRAM_WEBHOOK_SECRET_TOKEN对整个 AgentOS 进程是全局的由运维方选定所以两个 bot 的注册可以共用同一个secret_token值。验证部署是否生效README 与 TEST_LOG.md 给出了可核对的检查点。对basic.py文档记录的 smoke 检查结果为引自 TEST_LOG作为示例结果GET /health返回okGET /config返回 OStelegram-basic-os、Agenttelegram-assistant和 Telegram 接口路由/telegramGET /telegram/status返回availableOpenAPI 中暴露POST /telegram/webhook。对multiple_instances.pyGET /config返回/assistant和/research两条接口路由GET /assistant/status与GET /research/status都返回availableOpenAPI 暴露POST /assistant/webhook和POST /research/webhook。注意 TEST_LOG 明确说明这些 smoke 测试只验证了构建、lifespan、health、config 和状态路由真实的 webhook 投递、Telegram 命令注册、模型推理和媒体传输不在其覆盖范围内——这些需要真实密钥加公网 HTTPS 回调后在 Telegram 客户端里实际发消息验证。文档给出的客户端验证路径是给basic.py的 bot 发/start再依次问 Remember that my project is Cedar 和 What is my project?确认记忆跨消息生效给多 bot 示例分别向两个 bot 提问确认各自响应。限制与边界Telegram 侧每个 bot 只注册一个 webhook URL这是多 bot 必须走多前缀路由的根本原因接口对 bot 下载内容的上限是 20 MB图片、贴纸、语音、音频、视频、动画、文档均适用streamingTrue是接口默认值回复在 Agent 运行期间会被逐步编辑不需要单独配置流式示例BotFather 的 privacy 设置决定群消息投递范围接口层面的提及过滤是在此基础上生效的。【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考