快速结论:当你在 LobeChat 中配置了多个 Telegram 机器人并分别绑定到不同 Agent 时,消息工具执行路径调用 sendMessage 会忽略传入的 botId,转而使用“最近保存的那个已启用 Telegram 机器人”发送消息,导致消息通过错误的机器人发出。优先排查消息工具运行时的凭据解析逻辑是否按 botId/applicationId 过滤。
适用环境:LobeChat 2.2.2;客户端为 Desktop App (Electron);操作系统 Windows;部署方式 Self hosting Docker。Issue 未提供 Python、CUDA、显卡、依赖版本等信息。
最快修复方案:暂无确认的一步修复方案。Issue 讨论中给出的根因指向消息工具运行时的凭据解析逻辑未按 botId 过滤,需要修改该解析逻辑使 sendMessage 按传入的 botId/applicationId 匹配对应机器人。
注意事项:讨论中提到的 PR #15268 解决的是 webhook 的安装解析问题,并非此处 Agent 与机器人绑定在工具运行时的凭据解析问题,不能视为本 Issue 的修复。上述根因与修复方向来自 Issue 讨论分析,未在正文中标注为已合并的修复,落地前需自行验证。
问题场景
在 LobeChat 中为多个 Agent 分别配置了不同的 Telegram 机器人 Provider。用户在某个 Agent 下调用了消息工具的 sendMessage,并显式传入了该 Agent 对应的 Telegram botId、channelId 和消息内容,期望消息通过指定的机器人发出。实际结果是消息通过另一个 Agent 下配置的、最后保存的 Telegram 机器人发送出去,与传入的 botId 不对应。
报错原文
Telegram sendMessage ignores botId and sends message via the wrong bot
Tool result says:
Message sent to telegram:<chat_id>
Actual behavior:
The message was sent through the last saved Telegram bot, which is configured under another agent, instead of the Telegram bot associated with the provided botId.
Expected behavior:
sendMessage should use the Telegram bot credentials associated with the provided botId.
原因分析
根据 Issue 讨论分析,根因在于消息工具运行时的凭据解析逻辑:当 sendMessage 被调用时,凭据解析按平台类型(”telegram”)查询 Provider,并返回“最近更新的一个已启用 Provider”,而没有按传入的 botId/applicationId 进行过滤。因此它总是选中“最后保存”的机器人,而不是调用方指定的那个。
讨论中还指出两点对比证据:
- Webhook 路由(BotMessageRouter)确实按
applicationId匹配机器人,但消息工具执行路径没有应用同样的过滤。 findEnabledByPlatform()查询按updatedAt降序返回第一个匹配项,忽略了指定的 Agent 或botId。
以上为讨论中的分析结论,Issue 正文未给出官方确认的修复提交。
环境排查
- 确认 LobeChat 版本:Issue 报告为 2.2.2。
- 确认客户端类型:Desktop App (Electron)。
- 确认操作系统:Windows。
- 确认部署方式:Self hosting Docker。
- 确认是否配置了多个 Telegram 机器人 Provider,并分别绑定在不同 Agent 下。
- 确认调用
sendMessage时传入的platform、botId、channelId与目标 Agent 绑定的一致。 - Issue 未提供 Python、CUDA、PyTorch、显卡、节点或其它依赖版本信息,无需额外核对。
解决步骤
- 先复现并确认现象:为两个不同 Agent 配置不同的 Telegram 机器人,在其中一个 Agent 调用
sendMessage并传入该 Agent 对应的botId,观察消息实际由哪个机器人发出。 - 定位消息工具运行时的凭据解析逻辑,即讨论中提到的
src/server/services/toolExecution/serverRuntimes/message/index.ts中按平台查询 Provider 的部分(约 168–184 行)。 - 核对
packages/database/src/models/agentBotProvider.ts中findEnabledByPlatform()的查询逻辑(约 50–67 行),确认它按updatedAt降序返回第一个匹配项、未按botId过滤。 - 修改凭据解析逻辑,使其接收并按调用方传入的
botId/applicationId过滤 Provider,而不是仅按平台类型取第一个已启用项。 - 对比 Webhook 路由(
src/server/services/bot/BotMessageRouter.ts,约 288 行)中按applicationId匹配的实现,作为过滤逻辑的参考。
验证方法
在修复后重复复现步骤:为多个 Agent 分别配置不同的 Telegram 机器人,在指定 Agent 下调用 sendMessage 并传入该 Agent 的 botId,确认消息由 botId 对应的机器人发出,而不再由“最后保存”的机器人发出。可切换 botId 分别测试,确认发送方随 botId 变化而变化。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


![[Bug]: rag/res/term.freq is loaded by term_weight but not shipped — every lowercase Latin token gets the same IDF](https://www.chat-gpts.plus/wp-content/uploads/2026/09/18414-d3efad56-768x403.jpg)