企业微信「无人值守自动加好友」· 同事上手教程

兔宝宝全屋定制 · 客户线索(手机号/微信号)→ 云电脑企业微信自动加好友 → 自动查通过 · 一台云电脑挂上就自己跑 · 2026-07-01

它到底在自动做什么?四件事,循环干:

拉单——去数据库领一批"待加"的客户线索(有手机号/微信号);② 选话术——按客户备注自动挑一条加好友话术;③ 加好友——在企微里搜人→网络查找→添加→填话术→发送;④ 查通过——发出一天后再搜那个号,看对方通过没、自动标"已通过"。一台云电脑 = 一个企业微信号 = 一个你。

① 第一个案例:真实跑通长这样(饭粒云电脑,2026-06-30)

喂它一条线索,它端到端自己跑完——这是首测那一条的真实日志(截取):
[18:05:21] 今日已发请求 0 / 上限 20 → 剩余 20
  新认领 1 条
  本批 1 条可加: 13474110298            # 领到「齐家」这条,无装修备注 → 默认话术2
  → subprocess: python wecom_add_contact_grounded.py ...
========== [1/1] 齐家 ==========
  locate[企业微信顶部的搜索输入框] -> (176,35)     # 看屏幕自己找到搜索框(没采坐标)
  locate[网络查找手机号/邮箱] -> (266,94)
  [result] state=not_found conf=0.90 seen='该用户不存在'
  → not_found
  ✓ 2300019828223440 → 加不上(搜不到(可能没开手机号搜索))   # 自动回写数据库

这条恰好搜不到(对方没开"手机号搜到我",最常见的一种结果)——但重点是:从拉单→选话术→搜人→判定→回写,全自动、零人工点击。闭环成立。

一条"顺利加上并通过"的线索,会长这样(预期流程,复查那截还没在云电脑实机验证):

领到线索 → 搜得到人 → 点添加、填话术、发送 → 回写 已发请求 →(隔一两天对方点通过)→ agent 复搜这个号、看到"已是好友" → 自动回写 已通过。全程你没碰过。

② 0→1:一台云电脑怎么跑起来

先备齐这 5 样:
要的东西是什么 / 哪来
云电脑环境企业微信 PC 已登录;Python 3.12;装依赖 pip install pyautogui pyperclip pillow opencv-python python-dotenv pygetwindow
SUPABASE_URL所有人一样:https://nytlptpfqfnrpqemrtpr.supabase.co
你自己的 Supabase keyPM 给你的那把(eyJ… 开头)。⚠️ 这是连数据库的 key,不是 OpenRouter 的 sk-or…;必须是有写权限的(service)key。
你的名字中文名(饭粒/夏夏/野荞…),每人唯一、别跟同事重名——这是"谁领了哪条"的标记。
OpenRouter keysk-or…,AI 选话术 + 看屏幕用。云电脑一般已经有了(跟发抖音共用)。
1
拿两个脚本放到云电脑 worker/scripts/wuying-dm/(找 PM 要 paste.rs 链接 / 共享盘):wecom_add_agent.py(大脑)+ wecom_add_contact_grounded.py(真在企微里点点点加好友的)+ wecom_accept_scan.py(查通过用)。
2
.env(跟脚本同目录,OpenRouter 那行用云电脑原来真的、别动占位符):
SUPABASE_URL=https://nytlptpfqfnrpqemrtpr.supabase.co
SUPABASE_SERVICE_ROLE_KEY=<你自己的 eyJ… key>
AKKE_WECOM_OPERATOR=<你的名字,如 夏夏>
OPENROUTER_API_KEY=<sk-or…,一般已有>
AKKE_WECOM_DAILY_LIMIT=20
AKKE_WECOM_CLAIM_LIMIT=1   # 第一天先 1,盯一条;稳了改 5
3
起 agent(企微前台最大化、输入法切英文、分辨率锁死):python -u wecom_add_agent.py

✅ 不用先采坐标——脚本靠看屏幕(VL)自己定位(饭粒实测可行)。真点歪了再跑 python wecom_add_contact_grounded.py --capture 补。

盯第一轮,看这 4 样对不对:
  1. 开头打印 org=… operator=你的名字 … = 连上数据库了。
  2. 出现 新认领 1 条 + 话术X = 拉到线索、AI 选好话术。
  3. 企微里真的在动:搜号 → 点「网络查找」→ 弹人物卡 → 点「添加」→ 验证框里是选好的话术 → 发送。
  4. 数据库里那条从 待加已发请求 = 闭环成立。

都对,就把 AKKE_WECOM_CLAIM_LIMIT 改 5、重启,放手让它自己跑。

❗ 先说清「日限 20」是什么意思,别理解岔了

AKKE_WECOM_DAILY_LIMIT=20 卡的是 「今天成功发出去的好友请求」= 20 条封顶不是「今天只处理 20 条线索」。

搜不到 / 加不上 / 死号 不算进这 20——它们不占配额,自动跳过、接着捞下一条。所以你完全可能看到日志「今天处理了 80、100 多条」,但「已发请求」才十几二十——这是对的,不是 bug

推论:账号一旦被搜索风控(搜啥都"找不到"),成功数永远凑不满 20,它会一直捞一直搜——所以有了「连续搜不到就熔断停手」那道保护(见 ⑤)。判断"今天干了多少"看已发请求数,别看"处理了多少条"。

③ 批量化:从 1 台到全员一起跑

不会重复加:所有人共用一个线索池,每台云电脑只领"还没人领"的,领到就锁在自己名下——数据库原子锁,物理上不可能两个人领到同一条。
举例(池子 300 条,三台同跑):
  1. 夏夏的 agent 捞 5 条盖「夏夏」章 → 这 5 条别人看不到了。
  2. 饭粒同时捞,只会捞到另外 5 条 → 你俩永远不加同一个客户。
  3. 没加完的(崩了/搜不到先跳过的)下轮你自己的 agent 优先重捞,不丢不重。

你只需做一件事:.envAKKE_WECOM_OPERATOR你自己、跟同事不重名的名字。重名会让"谁领了哪条 / 统计"串台。

📊 话术怎么分:实测 301 条里约 94% 发默认话术2 —— 别奇怪"几乎都是话术2",正常。
备注情况条数/占比发哪条
空备注(销售没留跟进)229 · 76%话术2
有备注但非装修线索(归属地/挂电话/同行…)40 · 13%话术2
负向(没需求/拒接…)13 · 4%话术2
有真实装修线索(带小区/面积/需求)15 · 5%AI 选 1/2/3
死号(空号/无效且无微信号)4 · 1%跳过
那 1/2/3 怎么挑?agent 读每条备注,按规则自动选(不用你管):
备注长这样发哪条话术原文(≤50字)
新房/毛坯/刚交房/图优惠/价格敏感话术1装修喜讯:加微申领每平方补贴300块,装修全屋定制兔宝宝ENF级多层实木 征集样板房
想了解价格/要全包/旧房翻新 + 没备注/看不出 → 也走这条话术2·默认您好 活动568每平米(原价868) 兔宝宝ENF多层板全屋定制 包设计安装 假一赔三
问材料/比品牌/关注环保/要配置报价话术3兔宝宝/千年舟/莫干山全屋定制样板房 ENF多层板598每平(原价898)假一赔三 加微发报价配置

改文案找 PM 改源头 3 条,别在云电脑本地改(会被更新覆盖)。完整说明见 话术页

节奏怎么调(三个旋钮都在 .env,改完 Ctrl+C 重启才生效):
想调什么改这行说明
一天最多发几条AKKE_WECOM_DAILY_LIMIT=20发满当天待机;加好友敏感、别贪多,先 20 看封不封。加不上/搜不到不占这个数。
一轮领几条AKKE_WECOM_CLAIM_LIMIT=5每轮捞几条来发。第一天先 1,稳了改 5。
多久跑一轮AKKE_WECOM_POLL_INTERVAL=300秒,默认 300=5 分钟。一般不用改。

真实速度 ≈ 一轮领 N 条、一条一条发(每条间隔 40–120 秒防风控)、发完歇 5 分钟再来 ≈ 每 ~10 分钟发一批。想快点调大 CLAIM_LIMIT 比缩短轮询有用,但都别猛。

❗ 「搜不到」不等于这个号废了 —— 2 个不同账号都搜不到才退池(2026-07-03 起)

以前只要你一个人搜一次没搜到,这条线索就直接标 加不上、从全队池子里消失,别人再也拉不到。问题:你的账号要是刚好被搜索风控了(搜谁都"找不到"),就会把一堆其实别人能搜到的好号,全给误杀了。7-02 就真发生过——一个被风控的账号一天误标了 200 多条好号。

现在改成「计票」:2 个不同账号各自都搜不到,才算数、才退池。

情况结果
你搜不到(第 1 票)这条退回「待加」,但你自己不会再领到它 → 留给别的账号复验一次
另一个账号也搜不到(第 2 票)两人都搜不到 → 才真判 加不上 退池(可信)
另一个账号搜到了说明是你账号/网络的锅,不是号废 → 正常加,好号保住

好处:一个被风控的账号,单独退不了任何号(它最多投 1 票),污染不了池子。门槛在 AKKE_WECOM_NOTFOUND_RETIRE_N(默认 2),不随人数涨——2 个独立确认就够,要更多只是让死号被反复搜、徒增风控。判"真加不到"数的是几个不同账号,不是搜了几次。

7-03 已把历史上被旧逻辑单账号误标的 260 条(饭粒 208 + 夏夏 16 + 野乔 36)全部重置回「待加」,让健康账号按新规则复验一遍。

④ 它怎么自动查"好友通过没"(免手动标)

核心一招:拿当初发请求那个号,在企微里再搜一次,看它变成"好友"了没——不发消息、不打扰对方、只搜一下看状态。

为什么用"再搜一次":搜的号跟当初发请求的一模一样 → 天然知道是哪条线索,不用扫"我的客户"名单、不用靠昵称猜(昵称常≠真名、还重名)。

再搜后卡片显示判断动作
「发消息」/已是好友/已添加对方通过了标 已通过
「等待验证」/重新发送还没通过不动,下次再看
又能「添加」/搜不到没通过(拒了/删了/没开搜)保守不动

多久查一次:请求发出满 24 小时才开始查(对方总得有时间点通过);之后每个号约每 12 小时被复搜一次,轮着来覆盖所有待验证的号,不反复搜同一个(防风控)。每轮顺带查 3 条,排在发新请求后面、共用同一窗口。

保守优先:只在明确"已是好友"才标已通过,拿不准一律不动(宁少算不乱算)。所以通过率会自己慢慢涨;个别真通过没标到的,PM 可手动补 writeback-enterprise-lead.ts --status=已通过。不想要复查设 AKKE_WECOM_RECHECK=0 关。

⑤ 群里会自动通知你什么(「企微数据值班监控 Agents」群)

你不用一直盯着云电脑——该看的时候机器人会主动把卡片推到「企微数据值班监控 Agents」群。一共三种:
什么情况触发推什么卡多久你该做什么
有客户通过了好友申请(复查检出真通过) 🎉 绿卡 列出谁通过了 · 谁加的 · 话术几号 · 地区/联系方式 每 15 分钟扫 看到就去 1v1 跟进这个客户
某个号当天成功发满 20 个请求(到日上限) 📊 蓝卡·当日战报 该号今天 ✅通过 / ⏳等通过 / 🔍搜不到 / 🚫无效 各多少 每 30 分钟查 了解每个号今天战况;没满 20 不推
某个号连续 10 条搜不到(账号被搜索风控) 🚨 红牌·熔断告警 @对应运营 + 写清怎么办 一触发立刻 agent 已自动停手;歇账号 24h+ 再验证恢复(见下)

熔断为什么重要:日上限 20 卡的是"成功发出",搜不到不算数。所以账号一旦被风控(搜啥都"找不到"),agent 会一直凑不满 20 而闷头狂搜——既空烧号池、又往死里锤账号(实测一天搜 119 次只成 2 条)。熔断就是防这个:连续 10 条搜不到就自动停手,落一个 _breaker_tripped.flag 文件,重启也会直接退,必须人工确认账号恢复、删掉这个文件才继续

🩺 账号被风控了,怎么"人工确认恢复"
  1. 先让账号歇满 24 小时,期间别开——硬搜会加剧风控甚至封号。
  2. 之后在企微里手动搜一个你确定能搜到的手机号(同事的、或你知道肯定在微信上的号):
    · 能弹出人物卡片、有"添加" = 恢复了 → 删掉 _breaker_tripped.flag → 重启 agent;
    · 还是"无法找到该用户" = 还在被限 → 继续等,别开。
  3. 拿不准就问 PM,别赌。

怎么判断是被风控、不是号池差:同一个池子比失败率——正常号搜不到率 <30%,被风控的号会飙到 90%+;别人正常就你惨=你账号被限。想让熔断也@你本人+推群,在 .envAKKE_WECOM_ALERT_WEBHOOK + AKKE_WECOM_ALERT_AT_OPENID(值找 PM 要);不加也会自动停手,只是不推群。

⑥ Good case / Bad case(心里有数)

👍 Good case
  1. 备注有真实装修线索(毛坯新房/想了解价格)→ AI 选对话术 → 搜得到 → 已发请求 → 隔天通过 → 复查自动 已通过。这是最理想的一条。
  2. 备注写「手机号是微信号」→ 脚本自动用微信号搜(微信号优先),照样加得上。
  3. 多台同跑各领各的,池子越捞越少,谁也不撞谁。
👎 Bad case(多半不是 bug)
  1. 搜不到 → 加不上:很多号没开"手机号搜到我",该用户不存在正常,不占配额、自动跳下一条。
  2. 死号(备注空号/无效且无微信号)→ 直接跳过标"无效",不浪费。
  3. 同行 / 已装修 / 明确拒绝 → 加了也没用,属预期损耗。
  4. 真 bug 型:搜错人/搜不到全部→多半是输入法没切英文(IME 抢首字);点歪→分辨率没锁;连不上库→key 填错/填成 sk-or;卡在同几条反复→key 没写权限

⑦ 下一步

  1. 复查在真机验证:查通过这块刚上线、还没在云电脑实跑过一轮。头几天留意日志有没有 [recheck] 行、标的对不对,有问题截图发群。
  2. 攒数据看通过率:跑几天有 已通过 后,PM 跑 wecom-acceptance-by-template.ts 出「每条话术 已发/已通过/通过率」,看哪条话术更易过、据此调配比。
  3. 放量决策:先每天 20 看几天封不封,稳了再往上调 DAILY_LIMIT
  4. 可能的增强(还没做):超 14 天还没通过的自动标"未通过",让通过率分母更干净。

⑧ 其他要知道的

🚫 加好友 和 自动回复,别在同一台云电脑同时开

两个都靠"操作鼠标键盘点企微窗口",同时跑会互相抢光标、都点乱——一台云电脑同一时间只能跑一个。要都要:分时段(如上午加好友、下午回复)或两台云电脑分开。账号被风控 / 歇号期间:只跑自动回复(它只回已加好友的新消息、不批量搜号、不吃搜索风控),加好友等账号恢复再单独开。

  1. 关机 = 暂停:云电脑关了 agent 就停,再开机重新 python -u wecom_add_agent.py 起一下就接着跑,不会重复加。
  2. 脚本更新:PM 发新 paste.rs 链接时,Ctrl+C 停 → curl 覆盖三个 .py → 重起。.env 不动。
  3. 话术别在本地改:改文案找 PM 改源头,本地改会被下次更新覆盖。
  4. PII 安全:手机号/微信号/备注只在数据库 + 云电脑本地,名单 CSV / 日志全 gitignore 不进代码库;别把 key、别把名单外发或截图给外人