基于MCP协议与Telegram Bot实现AI助手异步通知与审批工作流
1. 项目概述:为你的AI助手装上“千里眼”和“顺风耳”
如果你和我一样,日常工作中重度依赖Claude、Cursor这类AI助手来写代码、处理文档,那你肯定遇到过这样的场景:你给AI布置了一个需要运行几分钟甚至更长时间的任务,比如让它分析一个大型代码库、生成一份复杂的报告,或者执行一个多步骤的自动化脚本。然后呢?你就只能干等着,时不时切回对话窗口看一眼,心里嘀咕着:“它到底跑完了没?卡在哪一步了?有没有遇到什么错误?” 这种感觉,就像把任务交给了一个在黑箱里工作的伙伴,过程完全不可见,结果也只能被动等待。
更让人头疼的是,当AI助手需要执行一些有风险的操作时,比如删除文件、调用付费API、或者修改关键配置。你肯定不敢让它“先斩后奏”,但每次都要守在屏幕前,等它弹出“是否确认?”的提示,又极大地打断了你的工作流。你需要的,是一种异步的、不打扰的、但又绝对可控的交互方式。
今天要聊的这个项目——Telegram Assistant MCP,就是为解决这些痛点而生的。它本质上是一个遵循MCP(Model Context Protocol)协议的服务器。MCP你可以理解为一个标准化的“插件接口”,它让AI助手(如Claude Desktop、Cursor、VS Code with MCP扩展)能够安全、规范地调用外部工具和服务。而这个特定的MCP服务器,就是专门用来把你的AI助手和Telegram这个几乎人人都在用的即时通讯软件连接起来。
通过它,你的AI助手获得了“说话”和“聆听”的能力。它可以把任务进度、成功通知、错误警报直接推送到你的Telegram手机上;更重要的是,当它需要你拍板做决策时,会通过Telegram给你发送一个带有“批准”、“拒绝”、“建议其他方案”三个按钮的消息。你无需打开电脑,在手机上点一下,AI就能收到指令继续工作。这彻底改变了人机协作的模式,从“同步等待”变成了“异步协同”,让你对AI的工作拥有实时的可见性和最终的控制权。无论你是开发者、运维人员、内容创作者,还是任何希望将AI深度融入工作流并保持掌控感的人,这个工具都值得你花十分钟了解一下。
2. 核心原理与架构设计拆解
在深入配置细节之前,我们有必要先搞清楚这个项目是如何工作的。理解其背后的设计逻辑,不仅能帮你更好地使用它,还能在出现问题时快速定位。整个系统的核心可以拆解为三个部分:MCP协议层、Telegram通信层和业务逻辑与状态管理层。
2.1 MCP协议层:AI助手的“标准电源插座”
MCP,即模型上下文协议,是由Anthropic(Claude的创造者)牵头推动的一个开放标准。你可以把它想象成电子设备的“USB-C接口”或者“标准电源插座”。在没有MCP之前,每个AI助手(Claude、Cursor等)想要连接外部工具(如读取文件、查询数据库、调用API),都需要各自定义一套私有、不兼容的集成方式,开发者和用户都苦不堪言。
MCP的出现,定义了一套统一的“插头”和“插座”规范。MCP服务器(如本项目)就是那个提供了标准“插座”(工具能力)的设备;而AI助手客户端(Claude Desktop、支持MCP的编辑器)则是那个带有标准“插头”的设备。只要双方都遵循MCP协议,就能即插即用。
在这个项目中,mcp_telegram_tool.py这个文件就是MCP服务器的入口。它向AI助手声明:“我这里提供了四个工具(Tools):notify_progress(通知进度)、request_approval(请求批准)、send_notification(发送通知)、check_approval_status(检查批准状态)”。当AI助手在对话中认为需要调用这些工具时(比如根据你的提示词),它会通过MCP协议向这个服务器发送一个结构化的请求。服务器执行相应的操作(如发送Telegram消息),再将结果通过协议返回给AI助手。这一切对用户是透明的,你只需要在配置文件中写好“插座”的位置(即服务器启动命令),AI助手就能自动发现并使用这些工具。
2.2 Telegram通信层:稳定可靠的消息通道
为什么选择Telegram作为通信媒介?而不是微信、Slack或者邮件?这背后有非常实际的考量:
- 跨平台与即时性:Telegram拥有几乎全平台的客户端(iOS、Android、Windows、macOS、Web),消息推送及时可靠,确保你能在任何设备上第一时间收到通知。
- 强大的Bot API:Telegram为机器人提供了极其丰富、易用且免费的API。特别是Inline Keyboard(内联键盘)功能,它允许我们在消息中直接嵌入按钮,用户点击后,回调数据会直接发送给我们的服务器,无需用户输入任何文字。这正是实现“一键批准/拒绝”交互的基础。
- 无频限与高可靠性:相比一些国内平台严格的API调用频率限制,Telegram Bot API对个人使用非常宽松,消息送达率也极高。
- 隐私与可控性:对话完全发生在你和你的私有Bot之间,没有第三方干扰,数据自主可控。
在本项目中,telegram_service.py文件封装了所有与Telegram API交互的细节。它利用python-telegram-bot这个成熟的库,处理了Bot的初始化、消息发送、按钮回调监听等一系列复杂操作。当你点击Telegram消息中的按钮时,Telegram的服务器会将这次点击事件推送到我们运行的服务端,服务端解析出你的选择(批准、拒绝或请求自定义指令),并更新相应的状态。
2.3 业务逻辑与状态管理:记忆与决策的核心
这是项目中最精妙的部分。试想一个场景:AI助手请求批准“删除日志文件”,你点击了“建议其他方案”并输入“先压缩备份再删除”。这个“自定义指令”需要被记住,并在后续的对话中传递给AI。如果服务重启了,这个状态不能丢失。
项目通过SQLite数据库(approval_responses.db) 来优雅地解决了状态持久化的问题。当AI调用request_approval工具时,服务端会:
- 生成一个唯一的
request_id。 - 将这次请求的详细信息(包括可选的初始自定义指令)存入数据库,状态标记为
pending。 - 向Telegram发送带按钮的消息。
- 启动一个后台线程,等待你的响应(默认超时30分钟)。
当你点击按钮后:
- 批准/拒绝:数据库记录更新为
approved或denied,AI助手查询后得到结果。 - 建议其他方案:服务端会通过Telegram向你追问具体的指令。你回复后,该指令会与
request_id关联并存入数据库,状态更新为denied_with_custom_instruction。AI助手查询时,不仅能知道被拒绝,还能拿到你提供的具体替代方案。
这种设计保证了即使MCP服务器进程重启,未处理的批准请求和已提供的自定义指令都不会丢失,实现了有状态的、可靠的异步交互。
3. 从零开始:五分钟极速部署指南
理论部分清楚了,我们动手把它跑起来。整个过程其实非常简单,跟着步骤走,五分钟内你就能收到第一条来自AI的Telegram消息。
3.1 第一步:创建你的专属Telegram机器人
机器人(Bot)是Telegram官方支持的特殊账号,由代码控制,可以通过API发送和接收消息。创建它完全免费。
- 打开Telegram,在搜索框中找到
@BotFather。这是Telegram官方管理所有机器人的“机器人之父”。 - 向
@BotFather发送命令/newbot。 - 它会问你机器人的名字(
name),这个名字会显示在聊天界面。比如我输入My AI Assistant。 - 接着它会让你设置机器人的用户名(
username),必须以bot结尾,且全局唯一。例如my_awesome_ai_bot。 - 创建成功后,
@BotFather会返回给你一串重要的HTTP API Token,格式类似1234567890:ABCDefGhIJKlmNoPQRsTUVwxyZ。注意:这串Token就是你的机器人的“密码”,务必妥善保存,不要泄露给他人。任何人拿到这个Token都可以控制你的机器人发消息。
3.2 第二步:获取你的个人Chat ID
Chat ID是Telegram用来唯一标识一个对话(私聊、群组、频道)的数字。我们需要知道你的个人聊天ID,机器人才能把消息发给你。
- 在Telegram中,搜索你刚才创建的机器人的用户名(如
@my_awesome_ai_bot),然后点击Start或发送任意一条消息,开启对话。 - 打开浏览器,访问以下URL(请将
<YOUR_BOT_TOKEN>替换成你刚才获得的Token):
例如:https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdateshttps://api.telegram.org/bot1234567890:ABCDefGhIJKlmNoPQRsTUVwxyZ/getUpdates - 你会看到一个JSON格式的响应。在里面寻找
"chat":{"id":这个字段。紧跟其后的那个数字(可能是正数也可能是负数)就是你的Chat ID。通常与机器人的私聊,ID是一个很大的正整数,如987654321。实操心得:如果页面显示
{"ok":false,"error_code":404,"description":"Not Found"},说明你的Bot Token格式错误或无效。如果返回{"ok":true,"result":[]}一个空数组,那是因为你的机器人还没收到任何消息。确保你已经给机器人发送过一条消息(比如“hi”),然后刷新浏览器页面即可。
3.3 第三步:克隆项目与配置环境
现在,让我们把代码拿到本地,并配置好连接信息。
# 1. 克隆项目仓库到本地 git clone https://github.com/juanhuttemann/telegram-assistant-mcp.git cd telegram-assistant-mcp # 2. 安装Python依赖包 # 建议先创建一个虚拟环境(可选但推荐) # python -m venv venv # source venv/bin/activate # Linux/Mac # venv\Scripts\activate # Windows pip install -r requirements.txt # 3. 配置环境变量 # 复制示例配置文件 cp .env.example .env # 编辑 .env 文件,填入你的Token和Chat ID用文本编辑器打开.env文件,内容如下:
TELEGRAM_BOT_TOKEN=你的Bot_Token,不要带引号 TELEGRAM_CHAT_ID=你的Chat_ID,纯数字,不要带引号请严格按照格式填写,Token和Chat ID都不要加任何引号,这是最常见的配置错误。
3.4 第四步:运行测试,验证连接
项目提供了便捷的测试脚本,确保一切就绪。
python run_tests.py运行后,你会看到一个简单的菜单:
Select test to run: 1. Basic feature test (quick, automated) 2. Interactive approval test (comprehensive, manual) 3. Run all tests 4. Exit选择1。脚本会自动运行一个快速测试,向你的Telegram发送几条不同状态的通知和一个批准请求。
立刻查看你的Telegram!你应该会陆续收到如下消息:
- “🔄WORKING- Starting comprehensive feature test...”
- “🔔INFO- Testing low priority notification”
- 以及一个带有✅ Approve、❌ Deny、🔄 Suggest Different Approach三个按钮的批准请求消息。
点击任意一个按钮(比如“Approve”),观察命令行窗口的输出,会显示[RESULT] User approved。这证明从消息发送、按钮点击到结果回传的整个链路已经完全打通!你的AI通知中心已经准备就绪。
4. 与你的AI助手深度集成
测试成功只是第一步,我们的目标是将这个能力赋予你日常使用的AI工作伙伴。下面我将详细讲解如何在不同平台上进行配置。
4.1 通用配置原理
无论集成到哪个客户端,核心配置逻辑都是一样的:在客户端的MCP服务器配置列表中,添加一个指向我们mcp_telegram_tool.py脚本的条目。你需要提供三个关键信息:
command: 解释器,这里是python。args: 要执行的脚本路径。env: 传递给脚本的环境变量,即TELEGRAM_BOT_TOKEN和TELEGRAM_CHAT_ID。cwd(可选但推荐): 脚本的工作目录,确保相对路径依赖正常。
4.2 集成Claude Desktop
Claude Desktop是Anthropic官方的桌面客户端,对MCP的支持最原生。
找到配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/claude/claude_desktop_config.json
- macOS:
编辑配置文件:如果文件不存在,就创建一个。然后添加
mcpServers部分。重要:需要先关闭Claude Desktop,修改完保存后再重启才能生效。
{ "mcpServers": { "telegram-assistant": { "command": "python", "args": ["/绝对路径/telegram-assistant-mcp/mcp_telegram_tool.py"], "cwd": "/绝对路径/telegram-assistant-mcp", "env": { "TELEGRAM_BOT_TOKEN": "1234567890:ABCdef...", "TELEGRAM_CHAT_ID": "987654321" } } } }路径填写注意事项:
- macOS/Linux:使用绝对路径,如
/Users/yourname/Projects/telegram-assistant-mcp/...。- Windows:路径可以使用正斜杠
/,或转义的反斜杠\\。例如:"C:\\Users\\yourname\\Projects\\telegram-assistant-mcp\\mcp_telegram_tool.py"。- 强烈建议使用
cwd字段指定工作目录,避免脚本内部因相对路径问题找不到模块。
- 验证集成:重启Claude Desktop。你可以问Claude:“你现在有哪些可用的工具?” 或者 “你能通过Telegram给我发个消息吗?”。如果配置正确,Claude会列出可用的工具并尝试调用。你也可以在Claude的对话中直接使用我们后面会提到的提示词来触发功能。
4.3 集成Cursor IDE
Cursor是深度集成AI的代码编辑器,其MCP配置方式与Claude Desktop类似。
- 打开Cursor,进入Settings(设置)。
- 搜索MCP。
- 在MCP Servers的配置区域,添加如下JSON配置。Cursor的配置通常是图形化界面,但也支持直接编辑JSON。
{ "mcpServers": { "telegram-assistant": { "command": "python", "args": ["/path/to/telegram-assistant-mcp/mcp_telegram_tool.py"], "cwd": "/path/to/telegram-assistant-mcp", "env": { "TELEGRAM_BOT_TOKEN": "your_token", "TELEGRAM_CHAT_ID": "your_chat_id" } } } }保存后,Cursor可能需要重启或重新加载工作区。之后,当AI在Cursor中分析代码或执行任务时,就可以使用Telegram工具了。
4.4 集成VS Code(通过MCP扩展)
如果你主要在VS Code中工作,可以通过安装MCP扩展来获得类似能力。
- 在VS Code扩展商店搜索并安装“MCP”或“Model Context Protocol”相关的扩展(具体扩展名可能随时间变化,请搜索确认)。
- 在VS Code的设置 (
settings.json) 中,找到该扩展的配置项,添加MCP服务器配置。配置格式与上述两者基本一致。 - 一个更通用的方法是,许多这类扩展会读取系统环境变量或指定目录下的配置文件。请查阅你所安装扩展的具体文档。
4.5 环境变量配置的替代方案
如果你觉得把敏感信息写在JSON配置文件里不安全,或者想在多台机器上共享配置,可以使用系统环境变量。在配置文件中,env字段可以留空或省略,脚本会尝试从运行它的系统环境中读取TELEGRAM_BOT_TOKEN和TELEGRAM_CHAT_ID。
- macOS/Linux:在
~/.bashrc,~/.zshrc或终端会话中设置。export TELEGRAM_BOT_TOKEN='your_token' export TELEGRAM_CHAT_ID='your_chat_id' - Windows:在系统属性 -> 高级 -> 环境变量中设置用户变量。
然后,在MCP配置中就可以简化为:
{ "mcpServers": { "telegram-assistant": { "command": "python", "args": ["/path/to/mcp_telegram_tool.py"], "cwd": "/path/to/telegram-assistant-mcp" // 移除了 env 字段 } } }5. 实战演练:编写高效的AI提示词与工作流
工具配置好了,如何让AI聪明地使用它?关键在于提示词(Prompt)。你需要明确地告诉AI在什么情况下、以何种方式使用Telegram工具。下面我提供几个经过实战打磨的提示词模板,并拆解其设计逻辑。
5.1 全功能测试提示词(用于验证与演示)
当你初次集成,或者想向他人展示功能时,可以使用这个“话痨”式提示词,让AI尽可能频繁地使用所有功能。
你是一个集成了Telegram通信能力的AI助手,用于实时沟通和审批工作流。 【Telegram通信规范】 1. **进度更新**:对**每一项**任务,都必须使用 `notify_progress` 工具发送状态更新。包括:`started`(开始)、`in_progress`(进行中,可用于多步骤任务的子步骤)、`completed`(成功完成)、`error`(出错)。 2. **审批前置**:在执行**任何**以下操作前,**必须**通过Telegram请求用户批准 (`request_approval`): - 创建、修改、删除任何文件。 - 安装、更新、卸载系统或Python包。 - 发起任何网络API调用(特别是可能产生费用或副作用的)。 - 更改系统或应用配置。 - 访问外部服务或数据库。 - 任何可能对系统产生影响的行动。 3. **通知发送**:对于重要事件、警告、任务完成、状态变更,使用 `send_notification` 工具,并根据事件重要性选择合适的优先级 (`low`, `normal`, `high`, `urgent`)。 4. **审批流程**: - 请求批准时,必须清晰说明**要做什么**以及**为什么需要批准**。 - 等待用户在Telegram上的响应(批准/拒绝/建议其他方案),超时时间为30分钟。 - 如果用户通过“建议其他方案”提供了自定义指令,你必须严格遵循该指令作为替代方案。 【当前任务:全面测试】 请以极高的主动性使用Telegram通信。模拟一个复杂的多步骤任务(例如:“为我分析当前目录下的项目结构,并生成一份依赖报告”),在任务的每个阶段都发送进度通知,在模拟的敏感操作点(如“删除临时文件”、“调用模拟API”)请求批准,并展示完整的审批工作流,包括处理用户自定义指令。目标是自然、流畅地展示Telegram MCP集成的所有功能。设计逻辑:这条提示词通过强制性的规则(“必须”、“任何”)和具体的枚举,消除了AI的模糊判断空间,使其在测试场景下行为高度可预测,能全面触发所有工具调用。
5.2 生产环境平衡型提示词(推荐日常使用)
日常工作中,我们不需要AI事无巨细地汇报,只需要在关键节点介入。这个提示词更注重实用性。
请通过Telegram与我保持关键信息同步。 - 当任务执行时间较长(预计超过30秒)或包含多个步骤时,请使用 `notify_progress` 工具告知我进度。 - 在执行具有潜在风险的操作前,请务必通过 `request_approval` 向我请求批准。这包括但不限于:删除文件、部署代码、进行线上数据库操作、调用会产生费用或重要副作用的API。 - 当任务成功完成、遇到需要我关注的错误或警告时,请使用 `send_notification` 通知我。 保持沟通简洁、及时,让我既能掌控全局,又不会被频繁打扰。设计逻辑:这条提示词使用了“当...时”、“包括但不限于”等引导性语言,赋予了AI一定的判断力。它强调“关键节点”和“潜在风险”,平衡了自动化效率和人工控制的需求,更适合融入真实的工作流。
5.3 高安全要求提示词(用于关键系统)
在处理敏感数据、生产环境或财务相关操作时,安全是第一位。这条提示词采取最保守的策略。
【最高安全指令:Telegram审批强制要求】 在此对话中,你被严格禁止在未获得我通过Telegram的明确批准 (`request_approval`) 前,执行以下任何操作: 1. 对文件系统的任何写操作(创建、修改、移动、删除文件或目录)。 2. 任何系统级别的更改(安装软件、修改环境变量、更改服务配置)。 3. 发起任何网络请求(HTTP/API调用),特别是向外部服务发送数据。 4. 执行任何命令行指令,如果该指令可能改变系统状态。 5. 任何其他可能产生持久化影响或不可逆后果的行动。 在请求批准时,你必须详细描述: - 计划执行的具体命令或操作。 - 该操作的目标和预期结果。 - 如果不执行该操作,是否有替代方案? - 你评估的潜在风险是什么? 对于所有任务,请发送详细的进度更新 (`notify_progress`)。一旦发生错误或异常,立即通过 `send_notification` 以 `urgent` 优先级通知我。安全是唯一优先级。设计逻辑:这条提示词采用了“严格禁止...前”的绝对化命令,并提供了详细的审批请求模板。它旨在构建一个“零信任”的交互环境,将AI的权限降到最低,任何动作都需人工复核,最大程度保障系统安全。
5.4 在对话中动态引导
除了系统级的提示词,你还可以在单次对话中临时给AI下指令。例如:
- “请先通过Telegram请求我的批准,然后再开始修改
config.yaml文件。” - “这个代码重构大概有5个步骤,请每完成一步就给我发一个进度通知。”
- “如果编译失败,用高优先级的通知立刻告诉我。”
这种灵活性让你可以根据任务的实时情况,精细地控制AI的通信行为。
6. 深入功能解析与高级用法
掌握了基础配置和提示词,我们再来深入看看这四个核心工具能玩出什么花样,以及背后的一些高级技巧。
6.1notify_progress:让进度一目了然
这个工具不只是发个“进行中”那么简单。它的核心参数是status,有四个枚举值,对应不同的场景和表情符号:
| 状态 (status) | 表情符号 | 适用场景 |
|---|---|---|
started | 🟡 | 任务开始,告知用户“活已揽下”。 |
in_progress | 🔄 | 任务正在执行中,可用于多阶段任务的中间状态更新。 |
completed | ✅ | 任务成功完成,给出最终结论。 |
error | ❌ | 任务执行过程中发生错误,需要用户介入。 |
高级用法:在长任务中组合使用。例如,一个数据备份任务可以这样通知:
status: started, message: “开始执行数据库备份任务。”status: in_progress, message: “正在导出用户表数据... (1/3)”status: in_progress, message: “正在压缩备份文件... (2/3)”status: in_progress, message: “正在上传至云存储... (3/3)”status: completed, message: “数据库备份任务已完成,文件大小:2.1GB。”
这种颗粒度的更新,能让你完全掌握任务的推进情况,尤其是在后台运行耗时任务时,心里特别有底。
6.2send_notification:分级告警系统
send_notification工具的关键在于priority参数。合理使用优先级,可以帮你过滤噪音,不错过重要信息。
| 优先级 (priority) | 含义与使用建议 |
|---|---|
low | 低优先级。一般性信息,如“每日报告已生成”,可稍后查看。 |
normal | 普通优先级。大多数任务完成通知,如“代码分析完毕”。 |
high | 高优先级。需要关注的问题,如“检测到潜在安全漏洞”、“API调用接近限额”。 |
urgent | 紧急优先级。需要立即处理的严重问题,如“服务崩溃”、“关键错误导致任务中止”。 |
实操心得:在提示词中教会AI判断优先级。例如:“如果错误导致主流程中断,使用urgent;如果是可降级处理的警告,使用high;如果是成功完成信息,使用normal。” 这样,当你手机锁屏时看到一条urgent通知,你就知道必须立刻处理。
6.3request_approval:交互式决策的核心
这是最具革命性的工具。它不再是简单的“是/否”问答,而是提供了一个包含三个选项的决策框架:
- ✅ Approve (批准):AI按原计划执行。
- ❌ Deny (拒绝):AI停止当前计划中的操作。
- 🔄 Suggest Different Approach (建议其他方案):这是精髓所在。你点击后,机器人会私聊你:“Please provide your custom instructions for this request.” 此时你可以输入任何文本,例如:“不要直接删除,先移动到
./backup/目录下。” 这个自定义指令会被关联到本次请求ID,并持久化存储在SQLite数据库中。
工作流详解:
- AI调用
request_approval,生成一个唯一的request_id,状态为pending,并向你发送消息。 - 你点击🔄 Suggest Different Approach。
- AI助手随后调用
check_approval_status工具查询该request_id的状态。 - 服务端返回状态
denied_with_custom_instruction,并附上你提供的文本:“不要直接删除,先移动到./backup/目录下。” - AI收到后,会回复你:“明白了。用户拒绝了直接删除的方案,并建议‘先移动到
./backup/目录下’。我将执行这个替代方案。”
这个设计的巧妙之处在于:它把否决权交给了你,但同时又允许你提供建设性的、具体的指导,让AI能够继续沿着你期望的方向工作,而不是简单地停止。这极大地提升了人机协作的效率和智能程度。
6.4check_approval_status:状态查询与异步协调
这个工具通常由AI在发送审批请求后,周期性或在关键节点调用,以检查用户的决策。它确保了整个交互是异步且可靠的。你不需要守在AI对话前等待,AI也不会无限期阻塞。它可以在后台轮询,或者在你做出决策后,由下一次对话触发状态检查。
7. 故障排除与实战经验分享
即使按照指南操作,也可能会遇到一些问题。这里我汇总了一些常见的坑和解决方法,以及一些从实战中得来的经验。
7.1 常见问题速查表
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
运行测试或脚本时提示TELEGRAM_BOT_TOKEN environment variable is required | 1..env文件不存在或路径错误。2. 环境变量未正确加载。 | 1. 确保在项目根目录运行,且.env文件存在且内容正确(无引号)。2. 尝试在命令行直接设置变量: export TELEGRAM_BOT_TOKEN=xxx(Linux/Mac) 或set TELEGRAM_BOT_TOKEN=xxx(Windows cmd) 再运行脚本。 |
提示TELEGRAM_CHAT_ID must be a valid integer | .env文件中的TELEGRAM_CHAT_ID值可能被加上了引号,或者包含非数字字符。 | 检查.env文件,确保Chat ID是纯数字,例如987654321,而不是"987654321"。 |
| 收不到Telegram消息 | 1. Bot Token或Chat ID错误。 2. 未与Bot发起对话。 3. 网络问题。 | 1. 用浏览器访问https://api.telegram.org/bot<YOUR_TOKEN>/getMe验证Token。访问getUpdates验证Chat ID。2. 在Telegram中找到你的Bot,发送 /start或任意消息。3. 检查服务器是否能正常访问 api.telegram.org。 |
| Claude/Cursor 中不显示Telegram工具 | 1. MCP配置错误(路径、参数)。 2. 客户端未重启。 3. Python依赖未安装或脚本有语法错误。 | 1. 仔细检查JSON配置中的路径、参数格式,特别是Windows的路径转义。 2.修改MCP配置后,必须完全重启AI客户端。 3. 在项目目录下手动运行 python mcp_telegram_tool.py,看是否有导入错误。确保已安装requirements.txt。 |
| 点击按钮后AI没反应 | 1. MCP服务器进程可能已停止。 2. AI未主动查询状态 ( check_approval_status)。 | 1. 确保配置的MCP服务器命令能持续运行。通常客户端会管理进程。 2. 检查AI的提示词,是否包含了在请求批准后去检查状态的逻辑。使用“全功能测试”提示词可以验证。 |
| 自定义指令不生效 | AI在收到denied_with_custom_instruction状态后,没有正确解析或执行你提供的指令。 | 这取决于AI的理解能力。在自定义指令中,尽量表述得清晰、可操作。例如,与其说“别那么做”,不如说“请改用方案B:先执行X,再执行Y”。 |
7.2 实战经验与技巧
为不同的AI角色配置不同的提示词:你可以在Claude Desktop中创建多个配置(Profile),为每个配置设置不同的系统提示词和MCP服务器。例如,一个用于“安全审查”的配置使用“高安全要求提示词”,另一个用于“日常编程”的配置使用“生产环境平衡型提示词”。根据任务切换角色,非常高效。
利用自定义指令进行复杂引导:当AI提出的方案你不完全满意,但又不想从头解释时,“建议其他方案”是神器。例如,AI建议用递归删除目录,你觉得有风险,可以输入:“请改用
shutil.rmtree并添加ignore_errors=True和onerror回调进行更安全的删除。” 这样既否定了原方案,又给出了具体的技术指导。数据库文件管理:
approval_responses.db文件会保存所有历史请求和自定义指令。定期清理或备份这个文件是个好习惯。你也可以用SQLite浏览器打开它,查看历史交互记录。超时时间的考量:默认的审批超时是30分钟。对于需要你离开电脑处理的长时间任务,这个设置很合理。但对于一些快速迭代的编程任务,你可能希望响应更快。目前超时时间在代码中硬编码为30分钟,如果需要调整,可以修改
telegram_service.py中request_approval方法相关的超时参数。但请注意,改短了可能在你没及时看手机时请求就过期了。多用户场景(进阶):当前设计是针对单用户的(一个Chat ID)。如果你想让AI通知到一个小团队,理论上可以扩展代码,维护一个Chat ID列表,或者在请求批准时让团队成员投票。但这需要修改源码,实现更复杂的逻辑。
这个项目打开了一扇新的大门,它让人工智能从封闭的对话窗口走向了开放的、异步的、受控的协作模式。我个人的使用体会是,一旦习惯了这种“AI在后台干活,我在手机端遥控”的模式,就再也回不去了。它尤其适合那些需要长时间运行、多步骤、或涉及敏感操作的任务。最后一个小建议是,初期可以给AI一个“宽松”的提示词,让它多汇报、多请求,观察它的行为模式。等你对它的判断建立起信任后,再逐步收紧规则,找到那个既安全又高效的平衡点。
