给自托管 MoviePilot 配企业微信:从『收不到通知』到『发个片名就下片』
从群晖转飞牛,MoviePilot 的容器搬过来了,通知却彻底哑了。以前用群晖 Chat 收推送,现在那条路没了。想着"随便换个渠道就行",结果一路修下来踩了五六个坑,索性记下来。 目标有两层:单向通知(下载完/入库/辅种成功自动推给我)和双向交互(微信里发个片名,MP 搜出来让我选着下)。 坑一:通知渠道其实压根没配 先别急着怀疑网络。我查了下 MP 的数据库,Notifications 这个 systemconfig 键——空的。 没有 Notifications 配置 —— 即从未配置任何通知渠道 MP 的通知是两段式:事件开关(什么时候发)和通知渠道(往哪发)。事件开关我一直开着,但从来没配过渠道,消息自然无处可送。群晖时代用的 SynologyChat 渠道,搬到飞牛后那个渠道类型还在配置里挂着,但对应的服务没了。 方向定了:配一个新渠道。国内自托管,企业微信最顺手——不用代理、直接在微信里收。 坑二:企业微信的『可信IP』撞上家宽动态IP 企业微信自建应用的三件套很好拿:企业ID、AgentID、Secret(后台点几下)。拿 gettoken 接口一验,errcode: 0,凭证没问题。 但真发消息,报错来了: errcode: 60020 | not allow to access from your ip, from ip: 171.114.36.76 60020 = 调用方IP不在应用的『企业可信IP』白名单里。而 171.114.36.76 是我家宽带的公网IP。 问题是:家宽IP是动态的。今天加进白名单,过几天 PPPoE 重播IP变了,通知又哑。这不是长久之计。 解法:让通知走固定IP出去 我 NAS 上跑着 mihomo,出口是某个 VPS 的固定IP。思路:把企业微信 API 的流量单独路由到这个固定出口,白名单里填这个永不变的IP。 两步: mihomo 加一条规则(放在 GEOIP,CN,DIRECT 前面,否则企业微信是国内域名会被直连规则截胡): rules: - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve - IP-CIDR,100.64.0.0/10,DIRECT,no-resolve - DOMAIN-SUFFIX,qyapi.weixin.qq.com,PROXY # 新增:企业微信API走代理固定IP - GEOIP,CN,DIRECT - MATCH,PROXY 让 MP 容器走这个代理。MoviePilot 用 httpx 发请求,httpx 默认 trust_env=True,认 HTTP_PROXY/HTTPS_PROXY 环境变量。给容器加上,再用 NO_PROXY 把本地和局域网排除掉,别把内部通信也代理了: ...