From 52db2ef939a7f019db7e3dcf9d302afb6f005e61 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 8 Jul 2026 10:38:16 +0800 Subject: [PATCH] =?UTF-8?q?feat(wecom):=20=E5=9B=9E=E8=B0=83=E5=8A=A0?= =?UTF-8?q?=E5=85=A5=E7=AB=99=E7=95=99=E7=97=95=E6=97=A5=E5=BF=97,?= =?UTF-8?q?=E6=96=AD=E5=AE=9A=E8=AF=AD=E9=9F=B3=E5=9B=9E=E8=B0=83=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E8=A2=AB=E6=8A=95=E9=80=92(bump=200.52.4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 企微发语音无反应且 [wecom-voice] 日志零出现(该分支被调用必打),疑企微 侧未投递语音回调;text 路径原先零日志无法对照。解密成功后每条打 `[wecom] inbound msgtype=... from=...`:text 行出现而 voice 行不出现 即可断定平台侧未投递,与处理代码无关。 Co-Authored-By: Claude Fable 5 --- PROGRESS.md | 1 + core/__init__.py | 2 +- web/app.py | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/PROGRESS.md b/PROGRESS.md index cd8e1ee..0af4dc9 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -23,6 +23,7 @@ ### 2026-07 +- **07-08 / 0.52.4**:企微回调加入站留痕日志——用户报企微发语音无反应且 `[wecom-voice]` 日志一行没有(语音分支被调用必打),疑企微侧未投递语音回调;但 text 路径原先零日志无法对照回调通断。解密成功后每条打 `[wecom] inbound msgtype=... from=...`,用"text 行出现、voice 行不出现"即可断定平台侧未投递。个人微信语音已用户实测跑通(0.52.0 链路)。 - **07-08 / 0.52.3**:sandbox 镜像 npm 步骤加重试——腾讯 npm 源拉 cytoscape 偶发 ECONNRESET 崩整个 build(部署实测),fetch-retries 2→5 + retry-maxtimeout 120s;RUN 故障兜底补该行,并写明"部署不涉及镜像变化时用 `--skip-build` 跳过重建"。 - **07-08 / 0.52.2**:sandbox 镜像 build 剔除 host-only 依赖——pilk 进 requirements 后镜像 build 也去装它,slim 基底无 gcc 整个 build 编崩(部署实测)。容器内 run_python 用不到语音解码,方案:requirements 行尾标 `# [host-only]`,Dockerfile 装包前 `grep -v '\[host-only\]'` 过滤(通用机制,后续 host-only 依赖复用);不往镜像塞 build-essential(+~250MB 没收益)。 - **07-08 / 0.52.1**:RUN 故障兜底补 pilk 源码编译坑——服务器 py3.12 无 pilk 预编译 wheel,pip 退源码编译撞缺 gcc(`x86_64-linux-gnu-gcc ... No such file or directory`),处理:`apt install build-essential python3-dev` 后重跑 update(用户部署实测踩到)。 diff --git a/core/__init__.py b/core/__init__.py index 269932d..1528310 100644 --- a/core/__init__.py +++ b/core/__init__.py @@ -1,3 +1,3 @@ # zcbot 版本号单一事实源:web/app.py 的 FastAPI version、/healthz 返回、前端展示都引这里。 # 改版本只动这一行。 -__version__ = "0.52.3" +__version__ = "0.52.4" diff --git a/web/app.py b/web/app.py index 43983a3..5c3434d 100644 --- a/web/app.py +++ b/web/app.py @@ -1610,6 +1610,10 @@ def create_app() -> FastAPI: raise HTTPException(400, f"decrypt failed: {type(e).__name__}: {e}") msgtype = msg.get("MsgType") or "" wuid = msg.get("FromUserName") or "" + # 每条解密成功的入站都留痕(text 路径原先零日志)。排查"发某类消息没反应"先看 + # 这行:没出现 = 企微侧根本没投递该回调,与后面的处理代码无关。 + print(f"[wecom] inbound msgtype={msgtype!r} from={wuid} " + f"event={msg.get('Event') or '-'}") uid = await asyncio.to_thread(_wx.get_user_by_wecom_userid, wuid) if uid is None: # 未绑定成员发真实消息(菜单/事件不算)→ 回绑定指引,不再静默:聊天优先布局