Skip to content

ferocknew/wechat_node_ai_bot

Repository files navigation

ccbot - 本地 Claude Code 微信机器人

基于 Claude Code 的本地 AI 机器人,通过微信公众号 API 对接私人测试号。

特点

  • 零门槛部署:无需 ICP 备案,个人开发者可用
  • 支持智谱 AI:可配置 GLM-4 模型(通过智谱 API)
  • 开箱即用:Docker Compose 一键启动
  • 长连接复用:高效的消息处理和会话管理

🚀 快速开始

1️⃣ 申请微信测试号

访问 微信公众平台测试号

  • 扫码登录
  • 获取 appIDappsecret
  • 记录下 appID(后续配置使用)

2️⃣ 配置环境变量

创建 .env 文件:

cp .env.example .env

编辑 .env 填写微信配置:

# 微信公众号配置 WECHAT_TOKEN=your_custom_token_here # 自定义 Token(微信服务器验证用) WECHAT_APPID=your_wechat_appid_here # 从测试号页面获取 WECHAT_APPSECRET=your_wechat_appsecret_here # 从测试号页面获取 # 服务配置 PORT=15878 NODE_ENV=production DEBUG=0

3️⃣ 克隆代码并配置 Claude API

# 克隆仓库 git clone https://github.com/ferocknew/wechat_node_ai_bot.git cd wechat_node_ai_bot # 创建 home 目录(挂载到容器) mkdir -p home/.claude # 配置 Claude API(支持 Anthropic 官方或智谱 AI) cat > home/.claude/settings.json << 'EOF' {  "hasCompletedOnboarding": true,  "env": {  "ANTHROPIC_AUTH_TOKEN": "your_api_key_here",  "ANTHROPIC_BASE_URL": "https://api.anthropic.com",  "API_TIMEOUT_MS": "3000000",  "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": 1,  "ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-3-5-haiku-20241022",  "ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-3-5-sonnet-20241022",  "ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-3-5-opus-20241022"  } } EOF

💡 使用智谱 AI(推荐国内用户)

修改 home/.claude/settings.json

{ "hasCompletedOnboarding": true, "env": { "ANTHROPIC_AUTH_TOKEN": "your_zhipu_api_key", "ANTHROPIC_BASE_URL": "https://open.bigmodel.cn/api/anthropic", "API_TIMEOUT_MS": "3000000", "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": 1, "ANTHROPIC_DEFAULT_HAIKU_MODEL": "glm-4.5-air", "ANTHROPIC_DEFAULT_SONNET_MODEL": "glm-4.7", "ANTHROPIC_DEFAULT_OPUS_MODEL": "glm-4.7" } }

📖 获取智谱 API Key:https://bigmodel.cn/activity/trial-card/NYR9RXFCDK

4️⃣ 启动服务

# 构建并启动容器 docker compose up --build -d # 查看日志 docker compose logs -f ccbot # 检查服务状态 curl http://localhost:15878/

5️⃣ 配置 HTTPS 反向代理

使用 Nginx/Caddy 等反向代理,将 https://your-domain.com 转发到 http://localhost:15878

6️⃣ 配置微信服务器

在微信测试号页面配置服务器 URL:

配置项
URL https://your-domain.com/api/wechat
Token .env 中的 WECHAT_TOKEN 一致
消息加解密 明文模式

点击"提交"验证,成功后即可开始聊天!

7️⃣ 开始使用

  1. 扫描测试号页面的二维码关注公众号
  2. 发送消息即可与 Claude 对话
  3. 支持多轮对话,上下文自动保持

📚 详细文档

系统架构

┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ │ 微信公众号 │────▶│ ccbot HTTP │────▶│ Claude Code CLI │ │ (测试号) │ │ Server │ │ (stream-json) │ └─────────────┘ └──────────────┘ └─────────────────┘ │ ▼ ┌─────────────┐ │ 会话状态管理 │ │ (内存) │ └─────────────┘ 

前置要求

  • Node.js >= 24.0.0
  • pnpm >= 10.0.0
  • Claude CLI 已安装并登录(claude 命令可用)
  • 微信测试号申请地址

安装

# 安装 pnpm(如果未安装) npm install -g pnpm # 使用 nvm 切换到 Node.js 24 nvm install 24 && nvm use 24 # 安装依赖 pnpm install

配置

1. Claude Code

本项目使用 Claude Code 历史版本(@anthropic-ai/claude-code@2.0.37),原因如下:

  • 历史版本优势:可以通过配置 ~/.claude/settings.json 直接使用 API Key,无需登录
  • 升级路径:使用历史版本安装后,可通过 claude update 更新到最新版本
  • Docker 部署:容器内预装历史版本,避免交互式登录流程

本地开发安装:

# 安装 Claude CLI(推荐历史版本) pnpm add -g @anthropic-ai/claude-code@2.0.37 # 配置 API Key(可选,推荐使用 settings.json) cat > ~/.claude/settings.json << EOF {  "apiKey": "sk-ant-api03-...",  "baseUrl": "https://api.anthropic.com" } EOF # 或登录 Anthropic 账户 claude auth login

2. 微信测试号

访问 微信公众平台测试号 获取:

  • appID
  • appsecret
  • 服务器配置中的 Token

微信测试号优势

  • 支持任意域名:无需 ICP 备案,个人开发者可用
  • 支持自定义端口:可使用非标准端口(如 15878)
  • HTTPS 灵活:可使用内网穿透 + 自签名证书
  • 即时生效:配置服务器 URL 后立即生效

对比企业号限制

  • ❌ 企业微信/公众号需要企业认证
  • ❌ 需要域名 ICP 备案
  • ❌ 必须使用 80/443 标准端口
  • ❌ 审核周期长(1-7 个工作日)

微信测试号限制

  • 消息推送限制:每天 50 万条
  • 不支持 Markdown 格式,仅支持纯文本

3. 环境变量

复制 .env.example.env 并填写配置:

cp .env.example .env

编辑 .env

# 微信公众号配置 WECHAT_TOKEN=your_custom_token WECHAT_APPID=your_appid WECHAT_APPSECRET=your_appsecret # 服务配置 PORT=15878 NODE_ENV=development # 调试模式 DEBUG=1

4. 微信服务器配置

在微信测试号后台配置服务器:

字段
URL http://your-domain.com/api/wechat
Token WECHAT_TOKEN 一致
消息加解密 明文模式

注意:本地开发可使用内网穿透工具(如 ngrok、frp)暴露本地端口

使用

启动服务

# 开发模式(自动重启) pnpm dev # 生产模式 pnpm start # 类型检查 pnpm typecheck

启动成功后访问:

微信公众号使用

  1. 扫描测试号二维码关注
  2. 发送消息即可与 Claude 对话
  3. 支持多轮对话,上下文自动保持

API 调用示例

# 发送消息给 Claude curl -X POST http://localhost:15878/api/claude/chat \ -H "Content-Type: application/json" \ -d '{  "message": "你好,请介绍一下自己",  "model": "claude-sonnet-4-20250514"  }' # 获取会话列表 curl http://localhost:15878/api/claude/sessions # 继续上一次对话 curl -X POST http://localhost:15878/api/claude/chat \ -H "Content-Type: application/json" \ -d '{  "message": "继续",  "sessionId": "xxx",  "continue": true  }'

API 文档

健康检查

方法 路径 说明
GET / 服务健康状态
GET /info 服务详细信息
GET /docs OpenAPI 交互文档

微信公众号

方法 路径 说明
GET /api/wechat 服务器验证(微信调用)
POST /api/wechat 接收消息推送(微信调用)
POST /api/wechat/custom 发送客服消息

Claude 集成

方法 路径 说明
POST /api/claude/chat 发送消息给 Claude
GET /api/claude/sessions 获取会话列表
GET /api/claude/sessions/:id 获取会话详情
DELETE /api/claude/sessions/:id 删除会话

项目结构

src/ ├── server.ts # HTTP 服务器入口 ├── routes/ │ ├── health.ts # 健康检查路由 │ ├── wechat.ts # 微信公众号路由 │ └── claude.ts # Claude 集成路由 ├── utils/ │ └── xml.ts # XML 解析工具 ├── sdk/ # Claude Code SDK(复用 Happy CLI) │ ├── query.ts # 核心:spawn + stream-json │ ├── types.ts # SDK 类型定义 │ ├── stream.ts # 异步流实现 │ ├── utils.ts # 工具函数 │ └── prompts.ts # 系统提示词 ├── scanner/ # Claude 会话文件监听 │ └── sessionScanner.ts # 会话扫描器 └── types/ # 类型定义 └── claude_types.ts # Claude 消息类型 lib/ # 通用工具库 ├── utils/ │ ├── logger.ts # 日志系统 │ ├── path.ts # Claude 项目路径 │ ├── time.ts # 延迟、退避 │ └── runtime.ts # 运行时检测 ├── sync/ │ └── sync.ts # 防抖同步 └── watcher/ └── startFileWatcher.ts # 文件监听 

Docker 部署

本项目提供 Docker 部署方案,主要优势:

🔒 沙箱安全

  • 进程隔离:Claude CLI 运行在独立容器内,避免影响宿主系统
  • 文件系统隔离:容器内 /home/ccbot 目录独立,防止敏感文件泄露
  • 网络隔离:可通过 Docker 网络策略限制出站流量
  • 资源限制:可通过 Docker 限制 CPU、内存使用

快速启动

# 1. 构建镜像 docker build -t ccbot:latest . # 2. 启动容器(使用 Docker Compose 推荐) docker-compose up -d # 或手动运行 docker run -d \ --name ccbot \ -p 15878:15878 \ -v $(pwd)/home:/home/ccbot \ -e WECHAT_TOKEN=your_token \ -e WECHAT_APPID=your_appid \ -e WECHAT_APPSECRET=your_secret \ ccbot:latest

环境变量

容器启动时支持以下环境变量:

变量名 说明 默认值
WECHAT_TOKEN 微信服务器验证 Token 必填
WECHAT_APPID 微信测试号 AppID 必填
WECHAT_APPSECRET 微信测试号 AppSecret 必填
PORT HTTP 服务端口 15878
NODE_ENV 运行环境 production
DEBUG 调试模式 0

持久化

  • Claude 配置:映射 ./home:/home/ccbot 保存 Claude CLI 配置和会话
  • 日志文件:容器内 ~/.ccbot/logs/,可通过 docker logs ccbot 查看

健康检查

容器内置健康检查,每 30 秒检查一次服务状态:

# 查看健康状态 docker ps --filter name=ccbot # 查看健康检查日志 docker inspect ccbot --format='{{json .State.Health}}' | jq

MCP 服务器支持

Claude Code 通过 MCP (Model Context Protocol) 扩展能力,容器内默认支持:

npx 类型 MCP(推荐)

  • ✅ 开箱即用,无需额外配置
  • 示例:@modelcontextprotocol/server-filesystem@modelcontextprotocol/server-github

uvx 类型 MCP(Python)

  • ⚠️ 需要额外安装 Python 和 uv
  • 修改 Dockerfile 添加:
    # 安装 Python 和 uv RUN apt-get update && apt-get install -y \ python3 \ python3-pip \ && curl -LsSf https://astral.sh/uv/install.sh | sh

配置 MCP 服务器

在容器内的 ~/.claude/settings.json~/.claude/mcp.json 中配置:

{ "mcpServers": { "filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/allowed/path"] } } }

如需持久化 MCP 配置,挂载配置目录:

docker run -v $(pwd)/home:/home/ccbot ccbot:latest

开发

技术选型

为什么选择 Node.js 技术栈?

  • Claude Code 依赖:Claude CLI 本质上是 Node.js 应用,必须在 Node.js 环境中运行
  • MCP 服务器支持
    • npx 类型:原生支持,可直接调用 Node.js MCP 服务器
    • ⚠️ uvx 类型:需要在 Dockerfile 中额外安装 Python 和 uv 运行时
  • 生态丰富:npm 生态系统庞大,MCP 服务器多使用 Node.js 编写
  • 统一技术栈:避免跨语言通信的复杂性

MCP (Model Context Protocol) 支持情况

MCP 类型 支持情况 说明
npx ✅ 原生支持 直接在容器内运行,无需额外配置
uvx (Python) ⚠️ 需扩展 需在 Dockerfile 安装 Python + uv
docker ✅ 支持 通过 Docker socket 挂载支持
stdio ✅ 支持 通过 stdin/stdout 通信

如需使用 Python MCP 服务器,需修改 Dockerfile:

# 安装 Python 和 uv RUN apt-get update && apt-get install -y \ python3 \ python3-pip \ && curl -LsSf https://astral.sh/uv/install.sh | sh

技术栈

类别 技术
语言 TypeScript 5.x
运行时 Node.js 24
包管理 pnpm
执行器 tsx
HTTP 框架 Fastify
API 文档 @fastify/swagger

代码规范

  • 语言:TypeScript(严格模式关闭,允许渐进式迁移)
  • 模块系统:ES Modules ("type": "module")
  • 导入别名:使用 @/ 前缀(通过 tsconfig.json paths 配置)
  • 文件扩展名:所有源文件使用 .ts 扩展名
  • 类型定义:内联类型注解,优先使用 interfacetype

导入示例

// SDK 模块 import { query } from '@sdk/index.ts' // 工具模块 import { logger } from '@lib/utils/logger.ts' // 路由模块 import { wechatRoutes } from '@routes/wechat.ts'

调试

# 开启调试日志 DEBUG=1 pnpm dev # 日志文件位置 ~/.ccbot/logs/<timestamp>-pid-<pid>.log

参考

本项目复用了 Happy CLI 的 Claude Code 集成部分:

  • demo/cli/src/claude/sdk/src/sdk/
  • demo/cli/src/claude/utils/sessionScanner.tssrc/scanner/

许可证

ISC

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages