1. WSL 里让 OpenClaw 接管 Gmail,卡点到底在哪
OpenClaw 是一个跑在本地、能调用工具链的智能体框架,你可以把它理解成一个「住在终端里的助理」:它能读文件、跑命令、调模型,也能通过插件去操作外部服务。谷歌邮箱(Gmail)就是它最常被接上的外部服务之一——接上之后,你可以让它按关键词搜邮件、读某封邮件的正文、把摘要写进本地笔记,甚至根据邮件内容触发后续动作。适合谁?适合已经在 WSL 里跑 OpenClaw、想让助理真正「碰到」自己邮箱的那批人。
但真动手你会发现,链路比想象中长:Google Cloud 那边要建项目、开 Gmail API、配 OAuth 同意屏幕、下客户端凭据;WSL 这边要把凭据喂给 gog 插件、走完 OAuth 回调、把命令加白;最后还得用 pm2 把进程守住,不然终端一关助理就没了。更麻烦的是模型调用这一层——OpenClaw 里往往不止一个技能要调模型,每个技能各配一份 Key,改起来就是灾难。
这篇就按「凭据 → gog 授权 → pm2 守护 → TaoToken 统一 Key 通道 → 验证收发 → 排错」的顺序走一遍。核心思路是:邮箱授权交给 gog,进程存活交给 pm2,模型调用统一走 TaoToken 的 Key/API 通道,三层各管各的,互不打架。下面所有命令都可以直接复制,路径按你自己的 WSL 用户名替换即可。
先说清楚 gog 是什么。gog 是 OpenClaw 生态里对接 Google 服务的插件(Google on Gateway),它把 Gmail、Calendar、Drive 的 API 封装成智能体能调用的工具。你不需要自己写 OAuth 刷新逻辑,gog 会帮你存 token、自动续期。前提是你得先给它一份 Google Cloud 的 OAuth 客户端凭据,这份凭据决定了「谁在申请访问你的邮箱」。
2. 前置:Google Cloud 凭据 + TaoToken Key 通道准备
这一步分两块,一块是 Google 侧的凭据,一块是模型侧的 TaoToken Key。两块都准备好,后面才不会中途卡住。
2.1 拿到 google_client_secret.json
进 Google Cloud Console 建一个新项目,然后在 API 库里搜「Gmail API」并启用。接着配 OAuth 同意屏幕:User Type 选 External,Scopes 里至少加上https://www.googleapis.com/auth/gmail.readonly,如果你还想让助理改标签、发草稿,就换成gmail.modify。保存后回到「凭据」页,创建凭据 → OAuth 客户端 ID → 应用类型选「桌面应用(Desktop App)」,下载 JSON。
下载下来的文件名通常是一串随机字符,重命名成google_client_secret.json,然后放进 WSL:
mkdir -p ~/.openclaw/credentials mv /mnt/c/Users/你的Windows用户名/Downloads/google_client_secret.json \ ~/.openclaw/credentials/google_client_secret.json chmod 600 ~/.openclaw/credentials/google_client_secret.jsonchmod 600这步别省,凭据文件里含 client_secret,权限放开等于把钥匙挂门上。
2.2 在 TaoToken 拿统一 Key
OpenClaw 的技能在跑的时候会调模型,比如总结邮件、判断意图。与其每个技能配一份 Key,不如统一走 TaoToken 的 API 通道。打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,注册后在控制台创建 API Key。控制台地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,Key 管理页在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。
拿到 Key 之后,OpenClaw 侧的模型配置统一指向 TaoToken 的 Base URL:https://taotoken.net/api。注意这个地址不带任何查询参数,是纯 API 入口。模型 ID 按你在控制台看到的填,比如claude-sonnet-4-5这类。三件套记牢:Base URL + API Key + Model ID,后面 settings.json 里就是这三样。
提示:TaoToken 是模型调用的统一通道,不涉及任何网络代理配置。你只需要在 OpenClaw 的模型设置里把 base_url 指过去即可。
如果你还没装 gog 插件,顺手装上:
npx clawhub@latest install gog装完确认一下~/.openclaw/skills/下有没有 gog 相关的工具定义文件,没有的话插件等于没生效。
3. 可复制配置:gog 授权 + pm2 守护 + settings.json
这一节是全文的核心,三份配置都给全。
3.1 gog 导入凭据并授权
先让 gog 读取刚才那份 JSON:
gog auth credentials ~/.openclaw/credentials/google_client_secret.json然后关联你的 Gmail 账号,按需勾选服务:
gog auth add 你的邮箱@gmail.com --services gmail,calendar,drive执行后终端会吐出一个授权 URL。在浏览器打开,登录你的谷歌账号,同意授权。桌面应用流程会给你一个授权码,把它粘回终端。成功后 gog 会把 token 存到本地,后续自动刷新,不用每次重来。
授权完把 gog 命令加白,否则 OpenClaw 的安全检查会拦它:
openclaw approvals allowlist add "$(command -v gog)"3.2 pm2 启动配置骨架
pm2 的作用是让 OpenClaw 常驻后台,终端关了也不停。先写一份 ecosystem 配置,放在~/.openclaw/ecosystem.config.js:
module.exports = { apps: [ { name: "openclaw", script: "openclaw", args: "serve", cwd: process.env.HOME + "/.openclaw", interpreter: "none", env: { OPENCLAW_HOME: process.env.HOME + "/.openclaw", NODE_ENV: "production" }, autorestart: true, max_restarts: 10, restart_delay: 3000, watch: false, log_date_format: "YYYY-MM-DD HH:mm:ss" } ] };启动并保存进程列表:
pm2 start ~/.openclaw/ecosystem.config.js pm2 save pm2 startuppm2 startup会打印一条命令,复制执行,这样 WSL 重启后 pm2 会自动拉起 OpenClaw。
3.3 settings.json 片段:模型统一走 TaoToken
OpenClaw 的模型配置在~/.openclaw/settings.json。把模型段改成下面这样,Base URL 指向 TaoToken,Key 用你控制台生成的那串:
{ "models": { "default": { "provider": "openai-compatible", "base_url": "https://taotoken.net/api", "api_key": "sk-你的TaoTokenKey", "model_id": "claude-sonnet-4-5", "max_tokens": 4096, "temperature": 0.3 } }, "skills": { "gog": { "enabled": true, "credentials_path": "~/.openclaw/credentials/google_client_secret.json" } } }改完重启:
pm2 restart openclaw到这里,邮箱授权、进程守护、模型通道三件事都配齐了。gog 负责碰邮箱,pm2 负责活着,TaoToken 负责模型调用,职责清晰。
4. 验证:邮件收发 + 进程存活 + 模型请求
配置写完不算完,得验证三件事:gog 能不能真读到邮件、pm2 进程稳不稳、模型请求通不通。
4.1 验证 gog 读邮件
先脱离 OpenClaw,直接用 gog 命令行测:
gog gmail list --max 5如果返回最近 5 封邮件的主题和 ID,说明 OAuth 授权成功、token 有效。再试读一封:
gog gmail read --id 邮件ID能打印正文就说明读权限没问题。想测发信(需要gmail.modify或gmail.sendscope):
gog gmail send --to 你的另一个邮箱@example.com \ --subject "OpenClaw 测试" --body "来自 WSL 的测试邮件"4.2 验证 pm2 进程存活
pm2 status看openclaw那行的 status 是不是online,restart 次数是不是 0 或很低。再看日志有没有报错:
pm2 logs openclaw --lines 50如果日志里出现模型请求相关的记录,说明 OpenClaw 已经在调 TaoToken 了。想更直接地验证模型通道,可以在 OpenClaw 里发一句让它总结邮件的指令,观察日志里有没有向https://taotoken.net/api发请求。
4.3 验证模型请求
单独测一下 TaoToken 通道是否通:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的TaoTokenKey" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-5", "messages": [{"role": "user", "content": "回复 OK 两个字"}] }'返回里有choices字段和内容,就说明 Key、Base URL、Model ID 三件套都对。如果这里不通,OpenClaw 里的模型调用肯定也不通,先解决这一层。
三件事都过了,你就可以在 OpenClaw 里让它「搜一下最近关于发票的邮件并总结」,它会通过 gog 拉邮件、通过 TaoToken 调模型总结,整条链路跑通。
5. 常见报错排查:401、local proxy failed、reading choices、OAuth
配这套链路,报错基本集中在四个地方。我按真实遇到的顺序列一下。
401 Unauthorized:多半是 TaoToken Key 写错或过期。检查 settings.json 里的api_key有没有多余空格,去控制台确认 Key 还在有效期内。也可能是 Base URL 写成了带路径的形式,正确写法是https://taotoken.net/api,不要自己加/v1之外的尾巴。
local proxy failed:这个报错通常出现在 OpenClaw 尝试走本地代理配置时。检查你的环境变量里有没有残留的HTTP_PROXY、HTTPS_PROXY,有就清掉:
unset HTTP_PROXY HTTPS_PROXY http_proxy https_proxy pm2 restart openclaw --update-envTaoToken 通道本身不需要任何代理设置,直连即可。
reading choices 相关报错:一般是模型返回体不符合预期,常见原因是 Model ID 填错,或者请求发到了错误的 endpoint。确认model_id和控制台里列出的模型名完全一致,Base URL 是https://taotoken.net/api。如果返回体里没有choices,先看 HTTP 状态码是不是 200。
OAuth 授权失败:gog 授权时如果报 redirect_uri_mismatch 或 invalid_client,检查 Google Cloud 里 OAuth 客户端类型是不是「桌面应用」。如果之前建成了「Web 应用」,回调地址对不上就会失败,重建一个桌面应用类型的客户端,重新下载 JSON 覆盖。
gog 命令被拦:OpenClaw 报权限不足,说明加白没生效。重新执行:
openclaw approvals allowlist add "$(command -v gog)" pm2 restart openclawpm2 进程反复重启:看pm2 logs openclaw里的具体错误。常见的是OPENCLAW_HOME没设对,或者 settings.json 格式错误(多一个逗号都会挂)。用node -e "require('./settings.json')"验证 JSON 合法性。
排查顺序建议:先 curl 测 TaoToken 通道,再 gog 命令行测邮箱,最后看 pm2 日志。一层层往下,别一上来就怀疑 OpenClaw 本身。
6. 把 Key 通道收拢到一处,后面省心
这套配置跑通之后,最舒服的地方在于:以后换模型、换 Key,只改 settings.json 里那一处,gog 和 pm2 都不用动。邮箱授权是 gog 的事,进程存活是 pm2 的事,模型调用是 TaoToken 的事,三层解耦。
如果你后面要接更多技能——比如日历提醒、Drive 文件检索——它们调模型时同样走这份 settings.json,不用每个技能单独配 Key。想长期跑编码类或 Agent 类任务,可以看看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。想单独验证某个模型的表现,用模型对话页:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,Key 管理还是 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。
最后补一个实际会遇到的坑:OpenClaw 跑久了会「忘事」,比如忘了自己已经授权过 gog,又去重新走一遍授权。这时候不用重配,直接在对话里提醒它「gog 已授权,token 在 ~/.openclaw/credentials/」,它会把这个记进上下文。如果反复忘,检查 pm2 是不是重启过导致内存态丢失——pm2 save之后重启会恢复进程,但智能体的短期记忆不一定能恢复,重要的状态建议落到文件里。