--- name: wechat-send-api-correct-path description: 正确导入微信发送 API 路径——wechat_hook_send.py 提供 text/image/voice 发送,非 wechat_image_sender 模块。供 cron-scheduler 等脚本化场景使用。 version: 1.0 category: wechat --- # WeChat Send API 正确导入路径 在微信发送类脚本或 cron 中,容易错 import `wechat_image_sender` 模块,实际项目目录 `/data/data/com.termux/files/home/pixelphone/event_bus/` 下只有 `wechat_hook_send.py`。 ## 可用函数 全部来自 `wechat_hook_send.py`: - `check_wechat_ready()` — 闸口检测,返回 `{"ready": bool, "reason": str, ...}` - `send_text_via_hook(wxid, text)` — 发文字 - `send_image_via_hook(wxid, image_path)` — 发图片(CDN 原图) - `send_image_via_intent(to_wxid, image_path)` — 发图片(分享 intent + UI 模拟,备选) 注意:cron/Termux 无人值守环境中,不要用 `python3 -c "..."` 或 `bash -c "..."` 直接调用,会被 Hermes 挂起审批。应把代码写成脚本文件再执行。 ## 调度器内发图脚本模板 ⚠️ **两个脚本,别用错**(2026-08-07 教训): - `scripts/send_1tgo_daily.py` — 硬编码**旧单群日报** `daily_digest_1tgo.png`,只适用于 1-TGO 日报,不要用于聚合日报。 - `scripts/send_agg_daily.py` — **8群聚合日报**专用,文件名 `daily_digest_tgo_all_.png`,日期参数可省略(默认昨天),自动过闸口+发送+写标记。cron-scheduler 03:00 窗口用这个。 聚合日报发送(cron-scheduler 03:00 窗口): ```bash python3 ~/.hermes/skills/wechat/wechat-send-api-correct-path/scripts/send_agg_daily.py [YYYY-MM-DD] ``` 脚本会: 1. 检查 `~/daily_digest_tgo_all_.png` 是否存在 2. 调用 `check_wechat_ready()` 过闸口 3. 调用 `send_image_via_hook('yibooo', png_path)` 发送图片 4. 成功后自动写入 `scheduler_daily_send_YYYYMMDD` 标记(⚠️ 标记用**今天**日期,不是 png 日期——调度器检查的是 `scheduler_daily_send_$(date +%Y%m%d)`,即运行当天) 也可以临时生成脚本(手动现场版,仅单群日报): ```bash cat > "$SCHEDULER_TMP/send_1tgo_daily.py" <<'PY' import sys sys.path.insert(0, '/data/data/com.termux/files/home/pixelphone/event_bus') from wechat_hook_send import check_wechat_ready, send_image_via_hook import os, json png_path = '/data/data/com.termux/files/home/daily_digest_1tgo.png' if not os.path.exists(png_path): print(json.dumps({"ok": False, "error": f"png not found: {png_path}"}, ensure_ascii=False)) raise SystemExit(1) gate = check_wechat_ready() if not gate.get("ready"): print(json.dumps({"ok": False, "error": f"gate not ready: {gate}"}, ensure_ascii=False)) raise SystemExit(1) result = send_image_via_hook('yibooo', png_path) print(json.dumps({"ok": True, "result": result}, ensure_ascii=False, default=str)) PY python3 "$SCHEDULER_TMP/send_1tgo_daily.py" ``` ## 发送成功后必须写标记 ```bash SCHEDULER_TMP=${TMPDIR:-/tmp} # 确保路径可写;cron 中 $TMPDIR 可能指向 /data/local/tmp 导致 Permission denied test -w "$SCHEDULER_TMP" || SCHEDULER_TMP="/data/data/com.termux/files/usr/tmp" date +%s > "$SCHEDULER_TMP/scheduler_daily_send_$(date +%Y%m%d)" ``` 否则调度器会在下一个 03:00-03:05 窗口重复发送。 ## 常见错误 - `ModuleNotFoundError: No module named 'wechat_image_sender'` — 应该用 `wechat_hook_send`。 - 闸口通过但广播失败 — 检查 `result=0` 字样,无则看 stderr。 - 发送成功但未写标记 → 重复发送风险。 - ⚠️ **`verified=false` 不是失败**(2026-08-09 验证):`send_image_via_hook` 返回 `{"status": "sent", "verified": false, "detail": "Broadcast completed: result=0"}` 即为成功。广播式 hook 发送无法回读微信端确认,`verified=false` 是常态,不要因此判失败或重发。判据:`status=="sent"` 且 broadcast `result=0` → 成功。 ## 直接调用脚本 对于 cron-scheduler 等场景,推荐直接调用本 skill 提供的脚本,而不是每次现场生成: ```bash # 8群聚合日报(cron-scheduler 03:00 窗口)—— 默认发昨天 python3 ~/.hermes/skills/wechat/wechat-send-api-correct-path/scripts/send_agg_daily.py # 单群 1-TGO 日报(旧流程) python3 ~/.hermes/skills/wechat/wechat-send-api-correct-path/scripts/send_1tgo_daily.py ``` 这两个脚本路径稳定,会自动处理闸口检测、图片存在性检查、发送和标记写入。