name: linkedin-dm description: 通过浏览器自动化向现有一度联系人列表发送个性化的LinkedIn私信。当用户希望通过AI个性化触达来联系LinkedIn联系人时使用——例如培育潜在客户、活动后跟进、重新联系联系人或宣布某事。接收数据文件(CSV/TSV)或包含联系人姓名和公司的纯文本列表,询问触达背景/目标,为每个人生成定制消息,并通过浏览器自动化发送每条消息。处理消息撰写流程、字符限制和增量状态跟踪。
LinkedIn私信
向现有一度联系人发送个性化的LinkedIn消息。每条消息包含:
- 针对每个人的个性化开场白(基于其个人资料+与发送者的关系)
- 由用户确认一次并用于所有消息的一致产品/推介部分
⚠️ 起飞前检查清单 — 开始前确认
1. 联系人列表
向用户索取数据文件或列表。必须包含(或添加):
- 人员姓名 — 全名
- 公司/职位 — 其当前公司或职位
- LinkedIn URL — 可选但有用
- 消息状态 — 用于跟踪的列(如缺失则添加)
如果仅提供纯文本列表,则提供转换为TSV的选项。
2. 阅读发送者的LinkedIn个人资料(强制)
在撰写任何消息之前,导航到/in/me/并阅读发送者的个人资料:
- 姓名和当前职位/公司
- 职业经历 — 公司、职位、年份
- 教育背景 — 大学、学位、入学年份
- 地点
存储这些事实。它们用于识别与每个联系人的关系钩子。
3. 确认推介(一次,预先)
询问用户:
“您的推介/产品信息是什么?这将是每条消息的一致部分。用1-2句话描述。”
然后起草一个精炼的推介部分(最多2-4句话,简洁明了)。向用户展示并获得明确批准。在推介确认之前不要开始发送。
示例提示:“这是我将为每个人使用的推介 — 确认或编辑:
‘我正在构建一个AI通话助手 — 您给它一个电话号码+上下文,它就能端到端处理通话。想象一下客户跟进、调研电话、供应商协调 — 任何占用您时间的基于电话的工作。如果这听起来有用,我很乐意为您展示演示。’”
4. 浏览器设置
- 选项A — Chrome浏览器中继(
profile="chrome"):附加到LinkedIn标签页的扩展(徽章开启) — 推荐用于标记账户 - 选项B — OpenClaw隔离浏览器(
profile="openclaw"):openclaw管理的Chrome,已登录LinkedIn
5. CRM表格
向用户询问Google表格ID/URL以记录触达结果。如果他们没有,则提供设置一个的选项(创建标签页+写入标题)。确认gog已认证(gog auth list)。
如果用户跳过此步骤,则回退到本地linkedin_dm_progress.json,但提醒他们后续跟进技能需要该表格。
6. 就绪检查
仅当以下条件满足时才继续:
- ✅ 列表已就绪
- ✅ 发送者个人资料已读取
- ✅ 推介已获用户确认
- ✅ 浏览器已打开并登录LinkedIn
- ✅ 表格ID已确认(或已确认侧车回退)
关系分析(每人)
在撰写消息之前,将联系人的个人资料与发送者的个人资料进行比较,以找到最强的钩子。使用此层次结构 — 选择适用的最高优先级:
| 优先级 | 钩子 | 示例开场白 |
|---|---|---|
| 1 | 同一公司(当前或过去) | “你和我都曾在CRED度过时光…” |
| 2 | 同一大学+重叠年份 | “同为BITS Goa 2018届…” |
| 3 | 同一大学(不同年份) | “BITS校友在此 — 看到你从…的历程” |
| 4 | 同一行业/职能 | “都在金融科技/产品领域工作了一段时间…” |
| 5 | 共同联系人 | “我们都与[姓名]有联系…” |
| 6 | 他们的工作背景(无个人钩子) | “看到你在[公司]的成就…” |
将钩子与关于他们当前工作的一行结合,以表明您了解他们的工作。
消息结构
每人发送两条独立消息,连续发送:
消息1 — 个性化开场白(每人唯一)
[关系钩子 — 1句话]
[对其工作/职位的认可 — 1句话]
目标:100–180字符。感觉像是来自了解他们的人的真诚触达。
消息2 — 推介(对所有人相同,预先确认)
[产品描述 — 1-2句话]
[与其职位相关的用例 — 1句话]
[软性行动号召 — 1句话]
目标:150–250字符。清晰、简洁、无填充。
为什么是两条消息?
- 开场白首先到达 — 他们在看到推介之前看到它,感觉更个性化
- 推介显然是独立的思考,不会埋没在末尾
- 模仿人类实际联系联系人的方式
回退方案: 如果发送两条消息在技术上困难(例如气泡重新聚焦问题),则在开场白和推介之间使用Shift+Enter两次以在单条消息内创建段落分隔。
请勿:
- 以“我希望你一切安好”或“我看到了你的个人资料”开头
- 对多个人使用相同的开场白
- 为每个人更改推介部分
发送前批量预览
首先为整个列表生成消息。以表格形式呈现:
| 姓名 | 公司 | 使用的关系钩子 | 消息预览 |
|---|---|---|---|
| Shorya Saini | Razorpay | 同一BITS届 | 嘿Shorya,BITS Goa 2018届… |
在打开浏览器之前获得用户对整个批次的批准。允许每行编辑。
发送流程(每人)
- 导航到
/feed/— 强制,无例外,不可跳过 - 等待3-5秒
- 在
linkedin.com/mynetwork/invite-connect/connections/搜索联系人 — 在“按姓名搜索”中输入姓名 - 处理结果:
- 1个匹配项 → 确认姓名+标题 → 点击打开个人资料
- 多个匹配项 → 向用户展示,询问是哪一个
- 0个匹配项 → 标记为
非联系人,跳过
- 阅读他们的个人资料(如果尚未完成,用于个性化)
- 在其个人资料上点击消息按钮
- 发送消息1 — 仅个性化开场白,发送
- 发送消息2 — 仅推介,立即发送
- 确认两者已送达
- 记录到CRM表格 — 通过
gog sheets append附加行,包含所有字段(参见CRM跟踪部分)
有关确切的浏览器自动化步骤,请参见references/browser-workflow.md。
状态值
| 状态 | 含义 |
|---|---|
已发送 |
本次会话已送达消息 |
已发过消息 |
存在最近对话 — 跳过 |
非联系人 |
无消息按钮或不在联系人搜索结果中 |
个人资料未找到 |
无法识别正确人员 |
已跳过 |
用户选择跳过 |
失败 |
浏览器错误 — 下次会话重试 |
反检测规则
- 每次访问个人资料前先到
/feed/— 非协商 - 动态加载后等待3-5秒
- 每次会话最多15-20条消息
- 如果LinkedIn警告消息发送速率,立即停止 — 告知用户
CRM跟踪 — Google表格
每条消息发送后,向Google表格附加一行。此表格是所有触达的真相来源 — 当前会话和未来跟进。
表格设置
在会话开始时向用户询问Google表格ID或URL(或提供创建新表格的选项)。表格应有一个名为Outreach的标签页,包含以下列:
| 列 | 字段 | 备注 |
|---|---|---|
| A | 发送日期 | ISO日期,例如2026-02-13 |
| B | 人员姓名 | 全名 |
| C | 职位/标题 | 来自LinkedIn的当前标题 |
| D | 公司 | 当前公司 |
| E | LinkedIn URL | 个人资料URL |
| F | 关系钩子 | 使用的钩子(例如“同一届BITS Goa 2018”、“同在CRED 2022–23”) |
| G | 发送的开场白 | 消息1的准确文本 |
| H | 发送的推介 | 消息2的准确文本 |
| I | 活动 | 此批次的简短标签(例如“AI通话 — 2026年2月”) |
| J | 状态 | 首次记录时始终为已发送 — 由跟进技能更新 |
| K | 备注 | 任何值得注意的事项(先前对话、背景、使用的共同联系人) |
| L | 最后更新 | 上次状态更改的时间戳 |
列J(状态)生命周期 — 仅此技能写入已发送。跟进技能将更新为:
已回复 · 通话已安排 · 演示已完成 · 跟进已发送 · 无回复 · 已成交 · 已丢失
附加行
每对消息发送后,运行:
gog sheets append <SHEET_ID> "Outreach!A:L" \
--values-json '[["<date>","<name>","<role>","<company>","<url>","<hook>","<opener>","<pitch>","<campaign>","Sent","<notes>","<timestamp>"]]' \
--insert INSERT_ROWS
首次设置
如果尚不存在表格,告知用户:
“我需要一个Google表格来跟踪触达。分享现有表格ID/URL,或者我可以创建一个包含正确列的新表格。”
要创建新表格,使用Drive(或要求用户创建一个并分享ID)。然后写入标题行:
gog sheets update <SHEET_ID> "Outreach!A1:L1" \
--values-json '[["Date Sent","Person Name","Role / Title","Company","LinkedIn URL","Relationship Hook","Opener Sent","Pitch Sent","Campaign","Status","Notes","Last Updated"]]' \
--input USER_ENTERED
本地侧车(回退)
如果未设置Google表格,则回退到本地linkedin_dm_progress.json:
{
"campaign": "AI Calling - Feb 2026",
"pitch": "confirmed pitch text",
"rows": [
{
"date": "2026-02-13",
"name": "Shorya Saini",
"role": "Senior Analytics Specialist",
"company": "Razorpay",
"url": "https://linkedin.com/in/shorya-saini",
"hook": "Same batch BITS Goa 2018",
"opener": "Hey Shorya...",
"pitch": "I'm building...",
"status": "Sent",
"notes": ""
}
]
}