Skill: shisheng820/wxpush (version 0.1.1)

--- name: wxpush description: "微信模板消息推送 skill。支持三种 wxpush API 格式：edgeone（默认）、wxpush（frankiejun 项目）、go-wxpush。使用场景：发送微信推送消息、配置 wxpush 环境。" homepage: https://github.com/shisheng820/WXPush-edgeone metadata: { "openclaw": { "emoji": "💬", "requires": { "bins": ["curl", "python3"] } } } license: MIT-0 --- # WXPush Skill 微信模板消息推送，支持三种 API 格式切换（对应三个不同项目）。 ## 配置 配置文件：`~/.config/wxpush/wxpush.env` ```bash WXPUSH_API_URL=https://your-service.com # 服务地址 WXPUSH_API_TOKEN=your_token # API Token（edgeone 可选，wxpush 必填，go-wxpush 留空） WXPUSH_MODE=edgeone # API 模式: edgeone | wxpush | go-wxpush WXPUSH_APPID=wx_appid # 微信 AppID（go-wxpush 必填） WXPUSH_SECRET=wx_secret # 微信 Secret（go-wxpush 必填） WXPUSH_USERID=openid1|openid2 # 默认接收用户 WXPUSH_TEMPLATE_ID=template_id # 模板 ID WXPUSH_SKIN= # 皮肤（可选，edgeone 原生支持） WXPUSH_BASE_URL= # 跳转 URL（可选） ``` 如配置文件不存在，引导用户创建：询问 mode、token、wx 配置等，写入 `~/.config/wxpush/wxpush.env` 并设权限 600。 配置完成后，**务必发送一条测试消息**以确认配置正确。 ## 发送消息 读取 `~/.config/wxpush/wxpush.env`，根据 mode 选择 curl 或 Python 发送请求。 优先使用 curl（最简洁），不可用时用 Python（标准库，无需额外依赖）。 ### edgeone 模式（默认） ```bash # curl curl -s -X POST "${WXPUSH_API_URL}/wxsend" \ -H "Content-Type: application/json" \ -d "{\"title\":\"标题\",\"content\":\"内容\",\"token\":\"${WXPUSH_API_TOKEN}\"}" # Python（标准库，无需安装） python3 -c " import json, os, sys from urllib.request import Request, urlopen cfg = {k.strip(): v.strip() for k, _, v in (l.partition('=') for l in open(os.path.expanduser('~/.config/wxpush/wxpush.env')) if '=' in l and not l.startswith('#'))} data = json.dumps({'title': sys.argv[1], 'content': sys.argv[2], 'token': cfg.get('WXPUSH_API_TOKEN','')}).encode() req = Request(cfg.get('WXPUSH_API_URL','').rstrip('/') + '/wxsend', data=data, headers={'Content-Type':'application/json'}) print(urlopen(req, timeout=15).read().decode()) " "标题" "内容" ``` ### wxpush 模式 ```bash # curl curl -s -X POST "${WXPUSH_API_URL}/wxsend" \ -H "Authorization: ${WXPUSH_API_TOKEN}" \ -H "Content-Type: application/json" \ -d "{\"title\":\"标题\",\"content\":\"内容\"}" # Python python3 -c " import json, os, sys from urllib.request import Request, urlopen cfg = {k.strip(): v.strip() for k, _, v in (l.partition('=') for l in open(os.path.expanduser('~/.config/wxpush/wxpush.env')) if '=' in l and not l.startswith('#'))} data = json.dumps({'title': sys.argv[1], 'content': sys.argv[2]}).encode() req = Request(cfg.get('WXPUSH_API_URL','').rstrip('/') + '/wxsend', data=data, headers={'Content-Type':'application/json','Authorization':cfg.get('WXPUSH_API_TOKEN','')}) print(urlopen(req, timeout=15).read().decode()) " "标题" "内容" ``` ### go-wxpush 模式 ```bash # curl curl -s -X POST "${WXPUSH_API_URL}/wxsend" \ -H "Content-Type: application/json" \ -d "{\"title\":\"标题\",\"content\":\"内容\",\"appid\":\"${WXPUSH_APPID}\",\"secret\":\"${WXPUSH_SECRET}\",\"userid\":\"${WXPUSH_USERID}\",\"template_id\":\"${WXPUSH_TEMPLATE_ID}\"}" # Python python3 -c " import json, os, sys from urllib.request import Request, urlopen cfg = {k.strip(): v.strip() for k, _, v in (l.partition('=') for l in open(os.path.expanduser('~/.config/wxpush/wxpush.env')) if '=' in l and not l.startswith('#'))} data = json.dumps({'title': sys.argv[1], 'content': sys.argv[2], 'appid': cfg.get('WXPUSH_APPID',''), 'secret': cfg.get('WXPUSH_SECRET',''), 'userid': cfg.get('WXPUSH_USERID',''), 'template_id': cfg.get('WXPUSH_TEMPLATE_ID','')}).encode() req = Request(cfg.get('WXPUSH_API_URL','').rstrip('/') + '/wxsend', data=data, headers={'Content-Type':'application/json'}) print(urlopen(req, timeout=15).read().decode()) " "标题" "内容" ``` ## 三种 API 格式差异 | 特性 | edgeone | wxpush | go-wxpush | |------|---------|--------|-----------| | 对应项目 | [shisheng820/WXPush-edgeone](https://github.com/shisheng820/WXPush-edgeone) | [frankiejun/wxpush](https://github.com/frankiejun/wxpush) | [hezhizheng/go-wxpush](https://github.com/hezhizheng/go-wxpush) | | 默认地址 | `https://wxpush.hunluan.space` | 无（自填） | `https://push.hzz.cool` | | token | 可选 | **必填** | **无** | | token 传递方式 | query / body / header | query / header | — | | wx 配置 | 无 token 时必填 | 服务端有默认值 | **必填**（无默认值） | | skin | 原生支持 | 需配合 wxpushSkin | 需配合 wxpushSkin | | 独有参数 | — | — | `tz`（时区） | | 成功响应 | 标准微信响应 | `{msg: "Successfully sent..."}` | `{errcode: 0}` | ### mode 选择指南 - **edgeone**：默认地址 `https://wxpush.hunluan.space`，支持有/无 token 两种方式 - **wxpush**：需自填服务地址，必须配置 token，wx 配置在服务端 - **go-wxpush**：默认地址 `https://push.hzz.cool`，无 token，每次调用必须传完整 wx 配置 ## 详细 API 文档 根据用户选择的 mode，加载对应 reference 文件： - edgeone → [references/edgeone.md](references/edgeone.md) - wxpush → [references/wxpush.md](references/wxpush.md) - go-wxpush → [references/go-wxpush.md](references/go-wxpush.md) ## 皮肤列表（edgeone 原生支持） MacOS_Hacker_Theme-LGT、aurora-glass、cyberpunk、hacker-dark、minimalist-light、ocean-breeze、quiet-night、sakura、sunset-glow、terminal-neon、warm-magazine ## 安全提示 - 默认端点（`wxpush.hunluan.space`、`push.hzz.cool`）为第三方服务，AppID/Secret/Token 会发送至对应服务 - 如不信任默认端点，请自行部署服务并设置 `WXPUSH_API_URL` - 配置文件权限建议设为 600（仅当前用户可读写）

path: references/edgeone.md
content: # EdgeOne API 文档

对应 GitHub: [shisheng820/WXPush-edgeone](https://github.com/shisheng820/WXPush-edgeone)
支持部署方式: EdgeOne 等

端点：`/wxsend`
支持方法：GET、POST

## 认证方式

edgeone 支持两种认证，二选一：

### 方式一：Token 认证

token 可通过以下任一方式传递：
- URL query: `?token=xxx`
- JSON body: `{"token": "xxx"}`
- Authorization header: `Authorization: xxx`

此时 appid/secret/userid/template_id 均为可选覆盖。

### 方式二：无 Token，提供完整 wx 配置

不传 token，必须提供：
- `appid` — 微信 AppID
- `secret` — 微信 AppSecret
- `userid` — 接收用户 OpenID（`|` 分隔多用户）
- `template_id` — 模板消息 ID

## 请求参数

| 参数 | 必填 | 说明 |
|------|------|------|
| token | 否 | API Token（与 wx 配置二选一） |
| title | 是 | 消息标题 |
| content | 是 | 消息内容 |
| appid | 否 | 微信 AppID（无 token 时必填） |
| secret | 否 | 微信 AppSecret（无 token 时必填） |
| userid | 否 | 接收用户 OpenID（无 token 时必填） |
| template_id | 否 | 模板 ID（无 token 时必填） |
| skin | 否 | 皮肤名称（edgeone 原生支持） |
| base_url | 否 | 跳转 URL |

## GET 示例

```bash
# Token 模式
curl "https://your-edgeone.com/wxsend?[REDACTED_SECRET]"

# 无 Token 模式
curl "https://your-edgeone.com/wxsend?appid=xxx&[REDACTED_SECRET]"
```

## POST 示例

```bash
# Token 模式
curl -X POST "https://your-edgeone.com/wxsend" \
  -H "Content-Type: application/json" \
  -d '{"token":"xxx","title":"通知","content":"消息内容"}'

# 无 Token 模式
curl -X POST "https://your-edgeone.com/wxsend" \
  -H "Content-Type: application/json" \
  -d '{"appid":"xxx","secret":"xxx","userid":"openid1","template_id":"xxx","title":"通知","content":"消息内容"}'
```

## 响应格式

标准微信模板消息响应。


path: references/go-wxpush.md
content: # Go-WXPush API 文档 (hezhizheng/go-wxpush 项目)

对应 GitHub: [hezhizheng/go-wxpush](https://github.com/hezhizheng/go-wxpush)
支持部署方式: 源码编译、Docker

端点：`/wxsend`
支持方法：GET、POST

## 认证方式

**无 Token**，所有 wx 配置通过参数传递。

## 请求参数

| 参数 | 必填 | 说明 |
|------|------|------|
| title | **是** | 消息标题 |
| content | **是** | 消息内容 |
| appid | **是** | 微信 AppID |
| secret | **是** | 微信 AppSecret |
| userid | **是** | 接收用户 OpenID |
| template_id | **是** | 模板消息 ID |
| base_url | 否 | 跳转 URL |
| tz | 否 | 时区（默认 Asia/Shanghai） |

**重要：appid/secret/userid/template_id 没有默认值，每次调用都必须传。**

## GET 示例

```bash
curl "https://your-server.com:5566/wxsend?title=通知&content=消息内容&appid=xxx&[REDACTED_SECRET]"
```

## POST 示例

```bash
curl -X POST "https://your-server.com:5566/wxsend" \
  -H "Content-Type: application/json" \
  -d '{"title":"通知","content":"消息内容","appid":"xxx","secret":"xxx","userid":"openid1","template_id":"xxx"}'
```

## 响应格式

成功：`{"errcode": 0}`
失败：返回相应的错误状态码和信息。


path: references/wxpush.md
content: # Wxpush API 文档 (frankiejun/wxpush 项目)

对应 GitHub: [frankiejun/wxpush](https://github.com/frankiejun/wxpush)
支持部署方式: Cloudflare Workers、Docker

端点：`/wxsend`
支持方法：GET、POST

## 认证方式

**Token 必填**，可通过以下方式传递：
- URL query: `?token=xxx`
- Authorization header: `Authorization: xxx`

## 请求参数

| 参数 | 必填 | 说明 |
|------|------|------|
| token | **是** | API Token |
| title | 是 | 消息标题 |
| content | 是 | 消息内容 |
| appid | 否 | 临时覆盖默认微信 AppID |
| secret | 否 | 临时覆盖默认微信 AppSecret |
| userid | 否 | 临时覆盖默认接收用户 |
| template_id | 否 | 临时覆盖默认模板 ID |
| base_url | 否 | 临时覆盖默认跳转 URL |

注意：appid/secret/userid/template_id 均在服务端配置了默认值，API 调用时只需 token + title + content。

## GET 示例

```bash
curl "https://your-worker.com/wxsend?[REDACTED_SECRET]"
```

## POST 示例

```bash
curl -X POST "https://your-worker.com/wxsend" \
  -H "Authorization: your_token" \
  -H "Content-Type: application/json" \
  -d '{"title":"通知","content":"消息内容"}'
```

## 响应格式

成功：
```json
{"msg": "Successfully sent messages to 1 user(s). First response: ok"}
```

失败：
```json
{"msg": "Invalid token"}
```

## 皮肤

skin 不是原生 API 参数。如需换肤，需部署 [wxpushSkin](https://github.com/frankiejun/wxpushSkin) 配合使用。


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)