兔宝宝全屋定制 · 客户线索(手机号/微信号)→ 云电脑企业微信自动加好友 → 自动查通过 · 一台云电脑挂上就自己跑 · 2026-07-01
① 拉单——去数据库领一批"待加"的客户线索(有手机号/微信号);② 选话术——按客户备注自动挑一条加好友话术;③ 加好友——在企微里搜人→网络查找→添加→填话术→发送;④ 查通过——发出一天后再搜那个号,看对方通过没、自动标"已通过"。一台云电脑 = 一个企业微信号 = 一个你。
[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 复搜这个号、看到"已是好友" → 自动回写 已通过。全程你没碰过。
| 要的东西 | 是什么 / 哪来 |
|---|---|
| 云电脑环境 | 企业微信 PC 已登录;Python 3.12;装依赖 pip install pyautogui pyperclip pillow opencv-python python-dotenv pygetwindow |
SUPABASE_URL | 所有人一样:https://nytlptpfqfnrpqemrtpr.supabase.co |
| 你自己的 Supabase key | PM 给你的那把(eyJ… 开头)。⚠️ 这是连数据库的 key,不是 OpenRouter 的 sk-or…;必须是有写权限的(service)key。 |
你的名字 | 中文名(饭粒/夏夏/野荞…),每人唯一、别跟同事重名——这是"谁领了哪条"的标记。 |
OpenRouter key | sk-or…,AI 选话术 + 看屏幕用。云电脑一般已经有了(跟发抖音共用)。 |
worker/scripts/wuying-dm/(找 PM 要 paste.rs 链接 / 共享盘):wecom_add_agent.py(大脑)+ wecom_add_contact_grounded.py(真在企微里点点点加好友的)+ wecom_accept_scan.py(查通过用)。
.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
python -u wecom_add_agent.py
✅ 不用先采坐标——脚本靠看屏幕(VL)自己定位(饭粒实测可行)。真点歪了再跑 python wecom_add_contact_grounded.py --capture 补。
org=… operator=你的名字 … = 连上数据库了。新认领 1 条 + 话术X = 拉到线索、AI 选好话术。待加 变 已发请求 = 闭环成立。都对,就把 AKKE_WECOM_CLAIM_LIMIT 改 5、重启,放手让它自己跑。
AKKE_WECOM_DAILY_LIMIT=20 卡的是 「今天成功发出去的好友请求」= 20 条封顶,不是「今天只处理 20 条线索」。
搜不到 / 加不上 / 死号 不算进这 20——它们不占配额,自动跳过、接着捞下一条。所以你完全可能看到日志「今天处理了 80、100 多条」,但「已发请求」才十几二十——这是对的,不是 bug。
推论:账号一旦被搜索风控(搜啥都"找不到"),成功数永远凑不满 20,它会一直捞一直搜——所以有了「连续搜不到就熔断停手」那道保护(见 ⑤)。判断"今天干了多少"看已发请求数,别看"处理了多少条"。
你只需做一件事:.env 里 AKKE_WECOM_OPERATOR 填你自己、跟同事不重名的名字。重名会让"谁领了哪条 / 统计"串台。
| 备注情况 | 条数/占比 | 发哪条 |
|---|---|---|
| 空备注(销售没留跟进) | 229 · 76% | 话术2 |
| 有备注但非装修线索(归属地/挂电话/同行…) | 40 · 13% | 话术2 |
| 负向(没需求/拒接…) | 13 · 4% | 话术2 |
| 有真实装修线索(带小区/面积/需求) | 15 · 5% | AI 选 1/2/3 |
| 死号(空号/无效且无微信号) | 4 · 1% | 跳过 |
| 备注长这样 | 发哪条 | 话术原文(≤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 比缩短轮询有用,但都别猛。
以前只要你一个人搜一次没搜到,这条线索就直接标 加不上、从全队池子里消失,别人再也拉不到。问题:你的账号要是刚好被搜索风控了(搜谁都"找不到"),就会把一堆其实别人能搜到的好号,全给误杀了。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 关。
| 什么情况触发 | 推什么卡 | 多久 | 你该做什么 |
|---|---|---|---|
| 有客户通过了好友申请(复查检出真通过) | 🎉 绿卡 列出谁通过了 · 谁加的 · 话术几号 · 地区/联系方式 | 每 15 分钟扫 | 看到就去 1v1 跟进这个客户 |
| 某个号当天成功发满 20 个请求(到日上限) | 📊 蓝卡·当日战报 该号今天 ✅通过 / ⏳等通过 / 🔍搜不到 / 🚫无效 各多少 | 每 30 分钟查 | 了解每个号今天战况;没满 20 不推 |
| 某个号连续 10 条搜不到(账号被搜索风控) | 🚨 红牌·熔断告警 @对应运营 + 写清怎么办 | 一触发立刻 | agent 已自动停手;歇账号 24h+ 再验证恢复(见下) |
熔断为什么重要:日上限 20 卡的是"成功发出",搜不到不算数。所以账号一旦被风控(搜啥都"找不到"),agent 会一直凑不满 20 而闷头狂搜——既空烧号池、又往死里锤账号(实测一天搜 119 次只成 2 条)。熔断就是防这个:连续 10 条搜不到就自动停手,落一个 _breaker_tripped.flag 文件,重启也会直接退,必须人工确认账号恢复、删掉这个文件才继续。
_breaker_tripped.flag → 重启 agent;
怎么判断是被风控、不是号池差:同一个池子比失败率——正常号搜不到率 <30%,被风控的号会飙到 90%+;别人正常就你惨=你账号被限。想让熔断也@你本人+推群,在 .env 加 AKKE_WECOM_ALERT_WEBHOOK + AKKE_WECOM_ALERT_AT_OPENID(值找 PM 要);不加也会自动停手,只是不推群。
已发请求 → 隔天通过 → 复查自动 已通过。这是最理想的一条。该用户不存在。正常,不占配额、自动跳下一条。[recheck] 行、标的对不对,有问题截图发群。已通过 后,PM 跑 wecom-acceptance-by-template.ts 出「每条话术 已发/已通过/通过率」,看哪条话术更易过、据此调配比。DAILY_LIMIT。两个都靠"操作鼠标键盘点企微窗口",同时跑会互相抢光标、都点乱——一台云电脑同一时间只能跑一个。要都要:分时段(如上午加好友、下午回复)或两台云电脑分开。账号被风控 / 歇号期间:只跑自动回复(它只回已加好友的新消息、不批量搜号、不吃搜索风控),加好友等账号恢复再单独开。
python -u wecom_add_agent.py 起一下就接着跑,不会重复加。curl 覆盖三个 .py → 重起。.env 不动。