1. 开机自启的 OpenClaw 为什么一重启就“假活”?先看清 gateway.cmd 这条链路
Windows 开机自启的 OpenClaw 重启失败、Telegram 报错,本质是两件事被混在一起了:一是任务计划程序拉起的gateway.cmd到底有没有把 Gateway 真正跑起来;二是 Telegram 通道的 Token 有没有被正确注入到那个进程里。很多人看到托盘图标亮了、或者任务管理器里有个 node 进程,就以为“在跑”,结果 Telegram 一直刷deleteWebhook failed、setMyCommands failed、Network request failed,想重启又发现 PID 每次都变,用旧 PIDtaskkill直接提示“找不到进程”。这篇就把这条链路拆开,给你三步定位加五步复现,命令全部可复制。
先说清楚 OpenClaw 是什么、能做什么、适合谁。OpenClaw 是一个本地优先的 AI Agent 网关,Gateway 模式会在本机监听一个端口(默认 18789),把 Telegram、浏览器控制(默认 18791)等通道统一收进来,再由它去调用背后的模型服务。适合谁?适合想把 AI 助手接到自己 Telegram 私聊、又希望数据和控制权留在本机的人。它的开机自启不是靠“启动文件夹”里放个快捷方式,而是靠 Windows 任务计划程序执行一个gateway.cmd启动脚本,这个脚本里设置了临时目录、PATH、端口、访问 token,最后用 node 拉起dist/index.js gateway --port 18789。所以你重启的从来不是某个 exe,而是这个任务计划。
我踩过的坑就在这:一开始我以为where openclaw能找到命令,结果什么都没有,因为我这套是 node 入口,不是openclaw.exe形式的 CLI。你如果也在 PowerShell 里敲openclaw提示不是内部或外部命令,别慌,这不代表没装,只代表入口在gateway.cmd里。定位的第一步永远是:先搞清楚开机自启到底执行了谁。用下面这条命令把任务计划里跟 openclaw 相关的项全捞出来:
schtasks /query /fo LIST /v | findstr /i openclaw你会看到类似这样的关键信息:任务名\OpenClaw Gateway,执行脚本C:\Users\Assert\.openclaw\gateway.cmd。看到这两行,链路就清楚了一半——真正要重启的是这个任务,真正要检查的是这个 cmd 脚本。接下来第二步是读懂gateway.cmd,因为你要改的 Token、端口、PATH 全在里面。把 cmd 重命名成 txt 用记事本打开(改完再改回 cmd),核心结构一般是:设置TMPDIR、重写PATH确保 node/python 可被找到、设置OPENCLAW_GATEWAY_PORT=18789、设置 Gateway 访问 token,最后一行用 node 启动。第三步才是 Telegram 报错的第一原因排查——Token 没对齐或没注入。日志里telegram deleteWebhook failed、setMyCommands failed十有八九是 Token 问题,先用 10 秒验证:
$token = "xxxx:yyyy" irm "https://api.telegram.org/bot$token/getMe"返回ok=true说明 Token 正常,返回 401/404 或直接失败就是 Token 有问题,去 BotFather 重置。这里必须提醒一句:Token 一旦在截图或博客里泄露,等于机器人控制权公开,发现泄露立刻去 BotFather 重置。把这三步走完,你才知道该重启谁、该改哪里、报错从哪来,而不是盲目杀进程。
2. 把 endpoint 收敛到 TaoToken 统一 Key/API 通道的前置准备
定位清楚链路之后,第二个要解决的是“模型调用通道”这件事。OpenClaw 的 Gateway 本身只是个调度层,它最终要调用一个模型服务 endpoint。如果你本机同时接了多个模型、多个 Key,重启后配置没加载、Key 写错、endpoint 指向混乱,都会表现成 Telegram 侧的网络报错。把 endpoint 统一到 TaoToken 的 Key/API 通道,好处是:一个 Key 管多个模型,Base URL 固定,重启后配置不容易漂。
TaoToken 在这里扮演的是统一 API 通道的角色,官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 基址是 https://taotoken.net/api 。你需要提前准备三件套:Base URL、API Key、Model ID。这三件套在后面的配置片段里会反复出现,缺一个都跑不通。获取 Key 的路径是进控制台创建 API Key,文档在接入文档里能查到各模型对应的 Model ID 写法。
前置准备具体做这几件事。第一,确认你的 OpenClaw 版本支持自定义 endpoint,也就是baseURL或base_url这类字段,不同版本字段名可能不同,以你本地openclaw.json的实际结构为准。第二,把 TaoToken 的 API Key 拿到手,注意 Key 只显示一次,复制后先存到安全的地方,别直接贴在会截图的地方。第三,确认你要用的 Model ID,比如对话类、编码类模型 ID 不一样,写错会报model not found。第四,想清楚配置写在哪:短期最省事是写进gateway.cmd的环境变量,长期更规范是写进~/.openclaw/openclaw.json的配置里,配置优先级高于环境变量。
这里有个容易忽略的点:OpenClaw 的 Gateway 访问 token 和模型服务的 API Key 是两码事。前者是别人访问你本机 Gateway 的凭证,后者是你访问 TaoToken 的凭证。重启失败排查时经常把这两个搞混,看到 401 就以为是模型 Key 错了,其实是 Gateway token 没注入。所以前置准备阶段就要把这两个值分开记录,标注清楚哪个是OPENCLAW_GATEWAY_TOKEN、哪个是TAOTOKEN_API_KEY。把通道收敛好,后面五步复现时你才能确定“端口起来了、Token 对了、模型也能调通”,而不是每次重启都在猜是哪一层断了。
3. 可复制配置:gateway.cmd 与 openclaw.json 的完整片段
这一节给你可以直接抄的配置。先说gateway.cmd的改法。把C:\Users\Assert\.openclaw\gateway.cmd重命名为gateway.txt,用记事本打开,在最后一行启动 node 之前插入环境变量。注意 Windows 批处理里set的写法,等号两边不要有空格:
@echo off set "TMPDIR=%TEMP%" set "PATH=E:\AIS\App\NOde;E:\AIS\App\NOde\node_global;%PATH%" set "OPENCLAW_GATEWAY_PORT=18789" set "OPENCLAW_GATEWAY_TOKEN=你的Gateway访问token" set "TELEGRAM_BOT_TOKEN=你的新token" set "TAOTOKEN_API_KEY=你的TaoTokenKey" set "TAOTOKEN_BASE_URL=https://taotoken.net/api" E:\AIS\App\NOde\node.exe E:\AIS\App\NOde\node_global\node_modules\openclaw\dist\index.js gateway --port 18789改完把文件改回gateway.cmd。这里TAOTOKEN_BASE_URL用 API 基址,不要带多余路径。如果你更倾向配置文件方式,长期维护更清晰,编辑~/.openclaw/openclaw.json,在channels.telegram同级加上模型通道配置。下面是一个 JSON 片段示例,字段名以你本地版本为准,重点是 Base URL、Key、Model ID 三件套齐全:
{ "gateway": { "port": 18789, "token": "你的Gateway访问token" }, "channels": { "telegram": { "botToken": "你的新token" } }, "models": { "default": { "baseURL": "https://taotoken.net/api", "apiKey": "你的TaoTokenKey", "model": "你的ModelID" } } }如果你用的是 TOML 风格配置(部分版本支持),写法类似:
[gateway] port = 18789 token = "你的Gateway访问token" [channels.telegram] botToken = "你的新token" [models.default] baseURL = "https://taotoken.net/api" apiKey = "你的TaoTokenKey" model = "你的ModelID"配置优先级要记住:openclaw.json里的channels.telegram.botToken会覆盖gateway.cmd里的TELEGRAM_BOT_TOKEN。所以如果你两边都写了且不一致,以配置文件为准,这也是“改了 cmd 却没生效”的常见原因。安全上,gateway.cmd里明文写 Key 不是最优,但作为开机自启入口它最直接;更规范的做法是配置文件加文件权限控制。无论哪种,改完都要做一次语法自检:cmd 里别用 PowerShell 的$env:语法,json 里别留尾逗号,toml 里字符串要带引号。这三件套写对,重启后模型通道才不会再漂。
4. 五步复现:按端口查 PID、杀进程、重启任务、验收端口与 Telegram
配置改完,进入五步复现流程。核心原则一句话:永远按端口找 PID,不要写死 PID。因为每次开机 PID 都会变,写死旧值必然“找不到进程”。
第一步,按端口查 PID:
netstat -ano | findstr :18789输出最后一列就是 PID,比如 19468。如果没有任何输出,说明 Gateway 根本没起来,问题在启动链路而不是重启动作。
第二步,按 PID 杀旧进程:
taskkill /PID 19468 /F把 19468 换成你刚查到的真实数字。注意 PowerShell 里<PID>这种尖括号是重定向符号,会报错,必须换成纯数字。
第三步,确认端口已释放:
netstat -ano | findstr :18789没有LISTENING输出,说明杀对了。如果还在,说明有多个进程占用,重复第一步查全部 PID 再逐个杀。
第四步,重新运行任务计划,等于重启 OpenClaw:
schtasks /run /tn "\OpenClaw Gateway"第五步,验收。先看端口:
netstat -ano | findstr :18789看到LISTENING说明网关起来了。再看 Telegram 侧,私聊 bot 发任意消息,能回复就说明整条链路有效。如果开了配对模式,执行:
openclaw pairing approve telegram <CODE>执行后access not configured消失,或至少不再阻止使用。日志层面,setMyCommands、deleteWebhook的Network failed不再持续刷,就说明 Token 注入和网络通道都正常了。这五步做完,你手里就有一条可复现的 SOP:查 PID → 杀进程 → 验释放 → 跑任务 → 验端口和 Telegram。下次再遇到重启失败,照着走一遍,五分钟内能定位到是端口没起、Token 没注入,还是模型通道断了。
5. 本篇常见报错排查:401、local proxy failed、reading choices、OAuth
复现过程中最容易撞的几个报错,逐个对照。
401 Unauthorized:先分清是哪一层的 401。如果是 Telegram 侧,多半是TELEGRAM_BOT_TOKEN写错或过期,用getMe验证。如果是模型侧,是TAOTOKEN_API_KEY错了或没注入,检查gateway.cmd里set那行有没有多余空格,以及openclaw.json是否覆盖了它。Gateway 自身的 401 则是OPENCLAW_GATEWAY_TOKEN不匹配。
local proxy failed:这个通常出现在本机网络层,说明 OpenClaw 尝试走本地代理但没连上。检查gateway.cmd里有没有残留的代理环境变量,或者系统代理设置是否指向了一个没启动的端口。把代理相关变量清掉,让请求直连https://taotoken.net/api即可。
reading choices相关报错:这类多半是模型返回结构不符合预期,常见原因是 Model ID 写错,或者 Base URL 多写了/v1之类的路径导致返回了非预期内容。确认baseURL就是https://taotoken.net/api,Model ID 用文档里给的标准写法。
OAuth报错:如果你在配置里启用了 OAuth 流程但回调地址没配对,会卡在授权环节。检查回调 URL 是否和你在控制台登记的一致,端口是否被占用。如果只是本机自用,优先用 API Key 方式,绕开 OAuth 复杂度。
另外两个高频坑:一是在 PowerShell 里用 cmd 的for /f语法,会报MissingOpenParenthesisAfterKeyword,两套语法别混用;二是taskkill /PID <PID> /F里尖括号没替换成数字,直接报错。把这两个记住,能省不少时间。排查顺序建议固定为:端口有没有起 → Gateway token 对不对 → Telegram token 对不对 → 模型 Key 和 Base URL 对不对,一层层往下,别跳步。
6. 通道打通后怎么用:模型对话、Coding Plan 与接入文档
端口起来、Telegram 能回消息之后,你可以进一步把 TaoToken 的通道用起来。想先验证模型是否通,直接进模型对话页面发一条测试消息,确认返回正常,再回到 OpenClaw 里用。如果你打算长期跑编码类 Agent,比如让 OpenClaw 接 Claude Code 这类编码工作流,可以看 Coding Plan 的额度与用法,把长期编码任务和临时对话分开管理。所有 Key 的创建和管理都在 API Keys 页面,接入细节和字段说明在接入文档里,遇到配置字段不确定时以文档为准。
具体路径给你列清楚:模型对话在 https://taotoken.net/api 对应的控制台里找对话入口;Coding Plan 在控制台里对应长期编码套餐;API Keys 在控制台创建和管理;接入文档查 Base URL、Model ID 和字段写法。Claude Code 相关的接入说明也在文档里,按 Anthropic 兼容格式配置即可。把 endpoint 收敛到统一通道后,你重启 OpenClaw 时只需要关心端口和 Token 两层,模型层不再每次漂移,这才是开机自启稳定运行的关键。最后留一个实用习惯:每次改完gateway.cmd或openclaw.json,先手动跑一次schtasks /run /tn "\OpenClaw Gateway",再用netstat验端口,确认无误再重启电脑,避免把问题带到下次开机。