@dadb/weixin-standalone-api
v0.1.1
Published
Standalone Weixin bot API server with QR login, inbound polling, and send message/image endpoints
Readme
weixin-standalone-api
中文文档
独立的微信机器人 API 服务(不依赖 OpenClaw 运行时)。
功能
- 手机微信扫码登录
- 入站消息轮询 + 本地事件队列
- 文本/图片发送接口
- 账号与 worker 管理接口
运行要求
- Node.js
>=22 - 可访问的微信 iLink bot 后端
安装
npm i -g @dadb/weixin-standalone-api或:
npm i @dadb/weixin-standalone-api启动
WEIXIN_STANDALONE_TOKEN='replace_me' \
WEIXIN_STANDALONE_HOST='127.0.0.1' \
WEIXIN_STANDALONE_PORT='8788' \
weixin-standalone-api环境变量
WEIXIN_STANDALONE_TOKEN:API 访问令牌,空则不鉴权WEIXIN_STANDALONE_HOST:默认127.0.0.1WEIXIN_STANDALONE_PORT:默认8788WEIXIN_STANDALONE_STATE_DIR:默认./.weixin-standaloneWEIXIN_BASE_URL:默认https://ilinkai.weixin.qq.comWEIXIN_CDN_BASE_URL:默认https://novac2c.cdn.weixin.qq.com/c2cWEIXIN_BOT_TYPE:默认"3"
鉴权
设置了 WEIXIN_STANDALONE_TOKEN 后,除 /healthz 外都要带:
Authorization: Bearer <WEIXIN_STANDALONE_TOKEN>返回格式
成功:
{ "requestId": "uuid", "data": {} }失败:
{ "requestId": "uuid", "error": "错误信息" }API 说明
GET /healthz
POST /v1/login/qr/start
请求体:
{ "accountId": "可选", "botType": "可选", "baseUrl": "可选" }返回:
{ "requestId": "...", "data": { "sessionKey": "...", "qrcodeUrl": "..." } }POST /v1/login/qr/wait
请求体:
{ "sessionKey": "...", "timeoutMs": 480000 }返回:
{ "requestId": "...", "data": { "connected": true, "accountId": "xxx-im-bot", "userId": "[email protected]" } }GET /v1/accounts
POST /v1/workers/start
请求体:
{ "accountId": "xxx-im-bot" }POST /v1/workers/stop
请求体:
{ "accountId": "xxx-im-bot" }POST /v1/messages/text
请求体:
{
"accountId": "xxx-im-bot",
"to": "[email protected]",
"text": "hello",
"contextToken": "可选"
}说明:contextToken 是上游会话关键字段;不传则尝试命中缓存 (accountId,to)。
POST /v1/messages/image
请求体(本地文件):
{
"accountId": "xxx-im-bot",
"to": "[email protected]",
"filePath": "/tmp/a.jpg",
"text": "可选",
"contextToken": "可选"
}请求体(远程 URL):
{
"accountId": "xxx-im-bot",
"to": "[email protected]",
"imageUrl": "https://example.com/a.jpg",
"text": "可选",
"contextToken": "可选"
}约束:filePath/imageUrl 二选一;imageUrl 必须 https;最大 20MB。
GET /v1/events?accountId=xxx-im-bot&limit=100&cursor=<eventId>
参数:accountId 必填,limit 可选(1..500,默认 100),cursor 可选。
POST /v1/events/ack
请求体:
{ "accountId": "xxx-im-bot", "ids": ["event-id-1", "event-id-2"] }返回:
{ "requestId": "...", "data": { "acked": 2 } }最小联调流程
- 启动服务
- 调
/v1/login/qr/start - 手机微信扫码
- 调
/v1/login/qr/wait直到connected=true - 调
/v1/accounts看账号和 worker - 调
/v1/events拉入站消息 - 用事件里的
contextToken调/v1/messages/text或/v1/messages/image - 调
/v1/events/ack确认消费
开发与发布
npm install
npm run dev
npm run typecheck
npm run build
npm run version:bump
npm publishEnglish
Standalone Weixin bot API server without OpenClaw runtime dependency.
Features
- QR login via mobile Weixin app
- inbound polling + local event queue
- send text/image APIs
- account and worker management
Install
npm i -g @dadb/weixin-standalone-apiRun
WEIXIN_STANDALONE_TOKEN='replace_me' \
WEIXIN_STANDALONE_HOST='127.0.0.1' \
WEIXIN_STANDALONE_PORT='8788' \
weixin-standalone-apiEnvironment Variables
WEIXIN_STANDALONE_TOKEN: bearer auth token, optionalWEIXIN_STANDALONE_HOST: default127.0.0.1WEIXIN_STANDALONE_PORT: default8788WEIXIN_STANDALONE_STATE_DIR: default./.weixin-standaloneWEIXIN_BASE_URL: defaulthttps://ilinkai.weixin.qq.comWEIXIN_CDN_BASE_URL: defaulthttps://novac2c.cdn.weixin.qq.com/c2cWEIXIN_BOT_TYPE: default"3"
Auth
When token is set, all endpoints except /healthz require:
Authorization: Bearer <WEIXIN_STANDALONE_TOKEN>Response
Success:
{ "requestId": "uuid", "data": {} }Error:
{ "requestId": "uuid", "error": "message" }Endpoints
GET /healthzPOST /v1/login/qr/startPOST /v1/login/qr/waitGET /v1/accountsPOST /v1/workers/startPOST /v1/workers/stopPOST /v1/messages/textPOST /v1/messages/imageGET /v1/eventsPOST /v1/events/ack
Minimal Flow
- Start server
- Call
/v1/login/qr/start - Scan QR with mobile Weixin app
- Poll
/v1/login/qr/waituntilconnected=true - Pull inbound events from
/v1/events - Reply with
/v1/messages/textor/v1/messages/image - Ack via
/v1/events/ack
