自研 WorkBuddy Skill · 国泰道合商机提取 · 24 个文件 / 887 KB
个人微信里聊了三年的客户,企业微信里加过的每一张名片,都在硬盘里躺着。这个技能把它们解密、拆开、读完,判别谁是真客户、谁在推销、谁已经报了名,最后落成一份 22 列的 Excel:诉求、意向等级、卡点、下一步动作,一行一个人。
一句话:把聊天记录变成可以排优先级、可以直接派活的客户表。
做培训、做咨询、做服务的人都有同一个毛病:客户信息全在微信里,翻得到,但理不出来。谁在问价格、谁卡在预算、谁上个月就该回访——这些答案散在几千条消息和几十条语音里,靠脑子记不住,靠人手翻不动。
这个技能接的活就是这一层。它不猜,它读:把微信本地数据库解密,把单聊一条一条捞出来,把语音转成文字,然后对每个会话判一次身份——客户、线索、推销、合作、同事、系统,判完再提炼诉求、意向、疑问、卡点、下一步。最后按 22 列写进 Excel,按身份分成 8 个工作表。
关键的一条设计是只做增量。第一次全量跑完会记下两台设备各自的最后消息时间,之后每次只处理这个时间点之后的新消息:新会话重新判别,老会话追加消息并更新结论,语音只转新的。因此它适合每周跑一次,而不是跑一次就完。
不是把消息堆进去就算完。每行必须落下「核心诉求」「主要异议」「建议下一步动作」——填不出来,说明这段聊天其实没聊出东西。
价格、折扣、决策人、时间点,这些话人更愿意说在语音里。个人微信语音全部提取转写,转写结果单独成表。
推销、同行、系统通知混在通讯录里是常态。判别错了,整张表的优先级就全错,因此身份判别是第一步,不是附赠。
触发词:提取商机 / 整理客户信息 / 更新商机表 / 提取微信客户 / 提取企微客户 / 增量提取商机 / 出国泰道合商机表。
| 场景 | 它交付什么 |
|---|---|
| 每周一盘客户 | 把上周新聊的客户推进表里,给出本周该先打给谁。 |
| 销售交接 / 换人 | 一个人三年的客户关系,压成一份能读完的表,新人接手不再靠口口相传。 |
| 复盘没成交的单 | 「主要异议」「卡点」两列并排看,能看出到底卡在价格、卡在决策人,还是压根没需求。 |
| 盘点渠道与合作方 | 「渠道与合作」单独一张表,与合作方、渠道商的往来一眼看清。 |
| 找回漏掉的语音线索 | 语音转写单独成表,当年听漏的那几句报价,现在能搜到。 |
不适合拿它做的事也说清楚:它不负责群聊,只提单聊;不替人做决定,「建议下一步动作」是从对话里读出来的判断,最终怎么做还得人来定;不碰图片和文件内容,只记录消息本身。
两条链路的库格式完全不同,因此解密方式也必须分开写。合并只发生在最后一步。
个人微信是 SQLCipher,企业微信是 wxSQLite3 的 AES-128-CBC。企微每一页的密钥都要单独算:
# 页密钥与 IV 都是算出来的,不是读出来的 page_key = MD5(raw_key + LE32(page_no) + b"sAlT") iv = MD5(LCG(page_no + 1))
这一条写进脚本之后,剩下的活就是解析。企微的消息正文藏在 protobuf 的嵌套字段里([1][2][1]),类型码要一层层对:0/2 是文本、13 是链接、14/15 是图片与文件、1011 是加好友通知。
这是个绕不过去的现实问题:企微语音消息不落盘到本地数据库,只能在客户端的智能助理里在线查。技能不伪造数据,它会把查询语句和两张操作截图递过来,等人把结果贴回来,再决定下一步。
查到了就走 wecom-cli media download 下载;查不到就在表里如实标注「企微语音未检出」。宁可空着,不编。
24 个文件,887 KB。主流程一份,参考文档五份,脚本十四个。
国泰道合商机提取/ ├── SKILL.md 主流程 SOP:两条链路全流程 + 22 列定义(12 KB) ├── _meta.json 元信息与依赖清单 ├── references/ │ ├── incremental-extract.md 增量提取:时间戳记什么、怎么合并 │ ├── semantic-judgment.md 语义判别:六类身份、五档意向的判据 │ ├── voice-pipeline.md 语音链路:SILK → WAV → 文字 │ ├── wechat-cli-commands.md wechat-cli 命令速查 │ └── wecom-agent-voice.md 企微智能助理语音查询 ├── scripts/ │ ├── build_excel.py 主入口:22 列 × 8 表,原子写入(18 KB) │ ├── voice_index.py 语音索引:从 media 库捞每条语音 │ ├── transcribe_voices.py 转写:faster-whisper large-v3,int8 │ ├── wxwork_export.py 企微消息导出 │ ├── silkjs/decode.js SILK → WAV(silk-wasm) │ ├── wxlib/ │ │ ├── find_wxwork_keys.py 企微密钥提取(26 KB) │ │ ├── wxwork_crypto.py wxSQLite3 分页解密库 │ │ ├── config.py 路径与常量 │ │ └── key_scan_common.py 内存扫描公共逻辑 │ └── wechat-cli/ 个人微信密钥与 blob 解析 └── assets/ ├── step1-wecom-client.jpg 企微智能助理入口(截图) └── step2-wecom-agent-voice-search.png 语音查询那句话(截图)
| 脚本 | 职责 |
|---|---|
build_excel.py | 唯一出口。读两条链路的数据,写 22 列,分 8 个工作表,增量合并进已有文件。 |
voice_index.py | 从 media 数据库里捞出每一条语音,记下发送人、时长、路径,生成索引。 |
transcribe_voices.py | 拿索引逐条转写。模型用 large-v3,int8 量化,约 10 秒一条。 |
find_wxwork_keys.py | 扫企微进程内存拿密钥。必须企业微信正在运行才有戏。 |
wxwork_crypto.py | 按页解密的实现。这个库把企微的加密细节全部收在自己身上。 |
wxwork_export.py | 解析消息表,把正文从 protobuf 里拆出来。 |
decode.js | SILK 格式只有浏览器那套能解,所以单开一个 Node 环节。 |
| 依赖 | 用在哪 |
|---|---|
wechat-cli | 个人微信 4.x 的密钥提取与消息导出 |
| Python 3.10+ | 全部脚本 |
silk-wasm | SILK 语音解码(npm 包) |
faster-whisper | 语音转文字 |
| 微信 4.x 运行中 | 密钥要从进程内存里扫出来 |
| 企业微信运行中 | 同上,进程名 WXWork.exe |
另外要备 openpyxl、numpy、zstandard、pycryptodome,以及 ffmpeg。
文件名带日期:国泰道合商机表-YYYY-MM-DD.xlsx。八个工作表,各司其职。
| 工作表 | 装什么 |
|---|---|
| 商机总表 | 核心交付。22 列,每个人都在这张表里,按来源分底色。 |
| 渠道与合作 | 合作方、渠道商单独拎出来。 |
| 线索与学员 | 有需求但还没深入的潜在客户。 |
| 非目标联系人 | 推销、无关往来。 |
| 已排除人员 | 同事、老板、合伙人、系统通知。 |
| 全部聊天记录 | 每条消息的明细,用来回查。 |
| 语音记录 | 转写结果,按人按时间排。 |
| 数据说明 | 这次提取的时间范围、条数、方法。 |
整张表可以读成四段:是谁(微信名、备注名、真实姓名、微信号、手机号、公司、职务)→ 是什么关系(身份类型、核心诉求)→ 能不能成(是否报名、成交意愿、意向等级、关键疑问、主要异议、当前状态)→ 接下来干什么(建议下一步动作、首次加好友时间、最后沟通、消息数、会话 ID)。
其中「首次加好友时间」在两边的精度不一样,这个差异写进了注释:个人微信只能取首条消息时间作近似,企业微信则能读到精确的添加好友时间。口径不同就标出来,不混着用。
| 问题 | 处理方式 |
|---|---|
| Excel 写入被占用 | 先写临时文件再原子替换;实在占用就退到 -v3.xlsx 备用名。 |
| 正文里有非法控制字符 | 写表前过滤 \x00-\x08 这一段,否则 openpyxl 直接抛异常。 |
| 语音解码失败几条 | 那几条是 0 字节占位记录,不是解码错误,跳过即可。 |
| 企微语音查不到 | 正常现象,语音不落盘。如实标注,不补假数据。 |
解压后把整个 国泰道合商机提取/ 目录放进 WorkBuddy 的技能目录即可。Windows 上遇到中文文件名乱码时,用 7-Zip 或 Bandizip 解压。
# 1. 解压到一个临时目录 unzip guotai-shangji-extract.zip -d /tmp/skill # 2. 放进技能目录(macOS / Linux) mv /tmp/skill/国泰道合商机提取 ~/.workbuddy/skills/ # 3. 补齐依赖 pip install wechat-cli faster-whisper openpyxl numpy zstandard pycryptodome cd ~/.workbuddy/skills/国泰道合商机提取/scripts/silkjs && npm install
注意:这个技能会读取本机的微信与企业微信数据,只适合在自己的机器上跑。密钥提取需要两个客户端都处于登录运行状态,扫描的是进程内存,换机器必须重新提取。