SKILL.md 30 KB


name: wuling-overseas-dealer-expansion

description: 为五菱汽车海外经销商拓展提供端到端自动化能力:使用 AdsPower/Playwright 搜索海外经销商线索,去重和评分,回写建联表,汇总客户总表,生成英文 Facebook/LinkedIn 社交建联预览,使用固定邮件模板生成邮件预览,并在用户确认后执行小批量邮件或社交建联。Use when Codex needs to find overseas Wuling dealer leads, scrape dealer contact info, assess dealer fit, generate English social outreach copy, prepare/send confirmed outreach emails, or run semi-automated Facebook outreach in AdsPower.

五菱汽车海外经销商拓展

文件边界

这个目录是独立 skill 包,只放可复用文件:

  • SKILL.md:入口说明和任务路由。
  • references/:搜索策略、字段规范、品牌/OEM 规则、AdsPower、飞书同步和建联风控说明。
  • assets/:邮件模板、邮件主题、邮件图片、社交话术库、全新环境兜底用空白建联表模板、飞书同步配置示例。
  • scripts/:采集、去重、Excel、邮件预览/发送、社交预览/执行脚本。
  • references/artifact-policy.md: run artifact, backup, preview, send-log, and cleanup retention policy.
  • references/encoding-and-excel-writeback.md: mandatory text encoding and Excel write-back rules to prevent repeated-question-mark text corruption.
  • references/feishu-sync.md: WorkBuddy/Lark Sheets post-write sync rules for keeping the Feishu online spreadsheet aligned with the local workbook.
  • references/dashboard.md: customer dashboard generation rules, KPI definitions, dashboard artifact locations, and optional Feishu metric-sync boundary.

不要把真实客户表、JSON 预览、采集结果、发送日志、截图、缓存、__pycache__、临时文件或任何账号/SMTP 授权码放进 skill 包。唯一允许放进 assets/ 的 Excel 是空白模板 assets/blank_customer_outreach_workbook.xlsx

任务路由

任务 使用文件 状态
Facebook 经销商搜索 scripts/scraper/search_active_dealers.py 已实现,默认预览
Facebook 轻量搜索 scripts/scraper/search_facebook.py 已实现
Facebook 单页采集 scripts/scraper/scrape_single_page.py 已实现
LinkedIn 公司页搜索 scripts/scraper/search_linkedin.py 已实现,默认预览
Google Maps 搜索和公开邮箱提取 scripts/scraper/search_google_maps.py 已实现,邮箱需 --deep-scrape
当地汽车网站搜索 scripts/scraper/search_auto_websites.py 已实现,覆盖 OtoMoto、Wandaloo、Kerix、Kompass、Maroc Annuaire、Telecontact
客户信息汇总大表 scripts/common/build_customer_summary.py 已实现,完成各平台查找后统一汇总/覆盖 客户信息汇总表
客户中台看板 scripts/dashboard/build_dashboard.py 已实现,读取 客户信息汇总表 生成 HTML 看板和指标 JSON,不写 Excel
飞书云表格同步 references/feishu-sync.md + WorkBuddy lark-sheets plugin 写表后强制检查项目配置并同步
TikTok 搜索 scripts/scraper/search_tiktok.py 占位,暂缓开发
邮件预览 scripts/email_outreach/prepare_outreach_emails.py 已实现
邮件发送 scripts/email_outreach/send_outreach_emails.py 已实现,必须人工确认
社交话术生成 assets/social_outreach_library.md 已实现,Facebook 主语言为英文
Facebook 社交建联预览 scripts/social/prepare_facebook_outreach.py 已实现,输出中文判断 + 英文话术 JSON 预览
Facebook Follow + Messenger 建联总控 scripts/social/run_facebook_follow_dm.py 已实现,输出整批聊天框预览;确认后批量执行;不断开 Playwright 连接,浏览器保持打开
Facebook 社交建联执行 scripts/social/send_facebook_outreach.py 已实现,默认 dry-run;支持 --action follow_dm;真实执行必须 --confirm --batch-confirmed,不逐条确认

必读规则

  • 先生成预览,再写表或发送。
  • 查找客户默认面向用户指定国家全国范围,不局限单一城市;当前摩洛哥只是本项目默认市场。
  • 表里已有同名、同主页、同电话或同邮箱的客户,直接跳过或补充资料,不重复新建。
  • 跳过 OEM 官方品牌国家页或当地分公司,例如 BYD MarocBMW MarocJAC MoroccoChangan MarocFOTON Maroc
  • Customer segmentation uses 客户属性 as the broad class and 客户类型 as the subtype. Classification must follow the five-attribute taxonomy. Main focus is 汽车渠道合作伙伴 and 平台与行业渠道; 批量采购与运营客户, 二手车转型候选, and 生态支持资源 remain supported for full segmentation. 主营业务 is only the business-description field.
  • 邮箱只使用公开页面、mailto: 或官网 Contact/About 页面中能追溯的邮箱,不猜测、不生成。
  • 不保存 SMTP 授权码,不把授权码写入日志、JSON、skill 文件或脚本默认值。
  • 所有涉及浏览器的操作必须使用 Playwright 执行,包括 AdsPower 连接、Facebook/LinkedIn/Google Maps/当地汽车网站采集、官网深搜、页面点击、输入、滚动、截图验证和 Messenger 私信。不得使用截图坐标、系统级鼠标键盘模拟、浏览器扩展脚本或人工猜测 DOM 位置作为默认实现;除非用户明确要求人工操作,否则浏览器自动化入口必须通过 Playwright 的 DOM/locator/CDP 能力完成。所有脚本必须保持 AdsPower 指纹浏览器打开,禁止调用 AdsPower stop 或关闭用户浏览器窗口。

Facebook 英文建联流程

Facebook 建联必须按半自动、低频、可审计的合规流程执行。优化目标是降低账号操作风险和骚扰风险,不允许写成规避官方风控、绕过验证、换指纹规避或模拟异常人类行为的方案。

  1. Facebook Sheet 筛选 未联系、非 OEM 官方页、有主页链接的客户。
  2. 运行 scripts/social/prepare_facebook_outreach.py 生成预览,必须在聊天框展示整批 Markdown 预览,包含中文客户判断、英文私信话术、主页链接和风险提示。
  3. 人工一次性复核整批客户名单和英文话术;不再逐条确认。
  4. 推荐运行 scripts/social/run_facebook_follow_dm.py 做总控流程:先生成并打印整批预览,再调用 AdsPower/Playwright dry-run 或确认执行。
  5. 用户在聊天框明确确认整批预览后,才允许加 --confirm-send 真实执行;总控脚本会传入 --confirm --batch-confirmed。执行前必须展示本轮预计节奏、当天 Follow/DM 已用额度、剩余额度和停止规则。
  6. 默认不写表;只有用户明确传 --write-workbook,才写回 Facebook Sheet 的建联状态和备注。
  7. 一轮结束后,再用 scripts/common/build_customer_summary.py --write-summary 刷新 客户信息汇总表

禁止跳过预览直接真实发送。禁止把法语作为 Facebook 默认发送语言;中文只用于内部判断和复核,不发送给客户。

示例预览命令:

python scripts/social/prepare_facebook_outreach.py --excel "<建联表路径>" --sheet Facebook --sample 5 --output facebook_social_preview.json

示例总控预览命令:

python scripts/social/run_facebook_follow_dm.py --excel "<建联表路径>" --sheet Facebook --profile-id "<AdsPower配置ID>" --max-contacts 3 --review-only

示例总控节奏预览命令:

python scripts/social/run_facebook_follow_dm.py --excel "<建联表路径>" --sheet Facebook --profile-id "<AdsPower配置ID>" --max-contacts 3 --dry-run-schedule

示例总控 dry-run 命令:

python scripts/social/run_facebook_follow_dm.py --excel "<建联表路径>" --sheet Facebook --profile-id "<AdsPower配置ID>" --max-contacts 3 --use-open-page --risk-profile very_conservative

示例 dry-run 命令:

python scripts/social/send_facebook_outreach.py --preview facebook_social_preview.json --profile-id "<AdsPower配置ID>" --action follow_dm --keep-browser-open --no-write-workbook

示例真实执行命令:

python scripts/social/send_facebook_outreach.py --preview facebook_social_preview.json --profile-id "<AdsPower配置ID>" --action follow_dm --risk-profile very_conservative --daily-follow-limit 20 --daily-dm-limit 20 --session-max 3 --keep-browser-open --no-write-workbook --confirm --batch-confirmed

社交话术规则

社交话术用于 Facebook 和 LinkedIn。Facebook 主语言为英文,输出结构为:中文内部判断 + 英文加好友话术 + 英文私信话术。话术目标是判断客户是否具备评估、采购、消化或分销一批五菱车型的能力。

首轮话术优先使用“真实客户信号 + 利润机会 + 首批小批量试单”切入:先引用 showroom、used-car stock、rental、fleet、importation、官网、WhatsApp、近期帖子等真实信号,再提出商业假设和低压力价值物。prepare_facebook_outreach.py 必须输出 recommended_message,并同时给出 direct_profit_hookstock_gap_hooksoft_research_hook 三个备选版本,方便人工挑选。不要写成泛泛合作介绍。

禁止编造具体价格、MOQ、车型清单、利润率、库存数量、政府关系或未经确认的合作条件。

Customer Attribute Taxonomy

All workbook rows and scraper outputs must use exactly one customer attribute and one matching customer type from the table below. Do not write combined attributes, multi-line categories, custom labels, or fallback values such as pending/unknown into the official workbook. Keep business descriptions in 主营业务; do not mix them into classification fields.

Customer attribute Allowed customer types
汽车渠道合作伙伴 汽车进口商 ; 全国代理商 ; 全国分销商 ; 区域分销商 ; 多品牌经销商 ; 商用车渠道商 ; 中国品牌经销商 ; 新能源或小型车渠道商
批量采购与运营客户 汽车租赁公司 ; 长期租赁公司 ; 企业车队 ; 物流配送企业 ; 政府或机构采购方
二手车转型候选 连锁二手车企业 ; 实体二手车企业 ; 进口二手车企业 ; 新车与二手车综合企业
平台与行业渠道 汽车交易平台 ; 汽车协会 ; 商会 ; 车商联盟 ; 经销商资源引荐机构
生态支持资源 售后服务网络 ; 备件供应与仓储企业 ; 进口认证与上牌机构 ; 金融保险机构 ; 车辆物流企业

Rules:

  • 客户属性 is the broad class; 客户类型 is the subtype. The pair must match the same row in the taxonomy table.
  • Main search focus: 汽车渠道合作伙伴 first, then 平台与行业渠道. The other three classes are still kept for complete segmentation and later operations.
  • If evidence is insufficient, continue public-source deep search before writing. Preview files may explain uncertainty, but the official summary sheet must not contain fake or unsupported classes.

人工确认标记边界

以下内容是人工确认/风险标记,不是客户分类。禁止写入 客户属性客户类型,只能写入候选预览 JSON 的 risk_flags备注 或人工复核预览中:

  • 主体归属待确认:汽车渠道线索中,无法判断是独立公司,还是品牌官方主体、进口商直营网点或普通分店。
  • 新车业务待确认:汽车渠道线索中,无法判断主营新整车,还是二手车、维修、配件、轮胎等业务。
  • 平台与行业渠道主体待确认:平台与行业渠道线索中,无法确认是否为真实机构主体,还是普通个人页、内容号或非正式资源页。
  • 平台与行业渠道作用待确认:平台与行业渠道线索中,无法确认是否具备汽车行业资源、渠道引荐、媒体传播或行业活动组织作用。
  • 仅电话/WhatsApp待人工确认:线索已有目标价值信号,但只有电话或 WhatsApp,缺少官网、Facebook、LinkedIn、Google Maps 等可复核资料,需要人工联系确认主体和实际业务。
  • 详细信息待确认:当 AI 因登录限制、页面屏蔽、地区限制或网站无法访问,不能读取 Facebook、LinkedIn、官网等内容时填写。

客户分类仍必须严格保持五大客户属性和表内细分客户类型;不要用上述风险标记作为兜底分类值。

人工复核不是低质线索兜底池。只有已经显示出渠道价值、但缺少一个关键确认点的客户,才标记为需人工复核。

输出人工复核名单时,不要输出通用复核规则;只列出那些已经值得推进、但需要人工确认一个关键点的客户。低价值或无关客户应写为跳过/低优先级,不要包装成“建议人工复核”。

两段式人工复核标准

人工复核必须先看客户是否有目标价值,再看是否缺少需人工确认的关键点。只有两部分同时成立,才能列为需人工复核。

第一部分:客户属性信号至少满足其一。

  • 汽车渠道合作伙伴信号:新车销售、汽车进口、分销、授权经销、汽车展厅、showroom、库存、dealer network 等。
  • 平台与行业渠道信号:汽车协会、商会、汽车行业平台、汽车媒体、行业活动组织、车商联盟、经销商资源平台或引荐机构等。

第二部分:人工复核条件至少满足其一。

  • 汽车渠道类:主体归属待确认,或新车业务待确认。
  • 平台与行业渠道类:真实机构主体待确认,或汽车行业资源/渠道作用待确认。
  • 只有电话或 WhatsApp:线索已有目标价值信号,但缺少官网、Facebook、LinkedIn、Google Maps 等可复核资料,需要人工联系确认其主体和实际业务。

不要把“只有电话/WhatsApp”单独作为人工复核理由。如果客户没有汽车渠道价值或平台行业价值,应跳过或标记低优先级,不列入人工复核名单。

  • 可进入人工复核的前提:至少有一个明确正向价值信号,例如汽车渠道、进口/分销、多品牌、showroom/展厅、库存/stock、中国品牌经验、商用车/车队场景、平台/协会/商会资源或可建联入口。
  • 人工复核的典型原因:看起来有渠道价值,但独立主体待确认、新整车业务待确认、或因页面/登录/地区限制导致详细信息无法读取。
  • 不进入人工复核的情况:纯维修/配件/轮胎/保险/洗车、个人卖家、OEM 官方主页/当地分公司、无汽车渠道价值信号且无可建联入口的记录。这些应该跳过或标记低优先级,而不是写成“需人工复核”。

汽车渠道合作伙伴筛选与评分规则

  • 汽车渠道合作伙伴必须有实际新整车销售或分销业务证据:展厅、新车销售、进口、经销、分销、库存或 dealer network。纯维修、配件、轮胎、个人卖家不纳入汽车渠道合作伙伴。纯租车公司转入 批量采购与运营客户 / 汽车租赁公司
  • 必须能识别独立经营主体:优先独立公司名称、注册主体、集团、经销商或进口商;排除品牌当地分公司、官方主页、进口商直营网点及普通分店,例如 BYD MarocBMW Maroc 等品牌官方主体。
  • 必须存在新增品牌的可能性:进口商、分销商、多品牌经销商优先;独立单品牌新车经销商可以保留,但备注和风险标记必须写 排他协议及新增品牌权限待确认
  • 必须具有可建联入口:至少有一个有效电话、WhatsApp、邮箱、Facebook、LinkedIn 或负责人入口。页面活跃度、粉丝互动、近期帖子只作为辅助参考,不作为必须条件。

评分准则写入候选预览的 score_reasonsrisk_flags

  • +3 实际新整车销售、showroom、库存、concessionnaire 或 véhicules neufs 信号。
  • +3 进口、分销、代理、集团、réseau、dealer network 等渠道能力信号。
  • +2 多品牌经营、multimarque、multi-brand 或多品牌 showroom 信号。
  • +2 有可建联入口,例如电话、WhatsApp、邮箱、Facebook、LinkedIn、官网 Contact。
  • +1 中国品牌、商用车、车队或摩洛哥本地相关信号;仅作为辅助,不单独构成汽车渠道合作伙伴。
  • -10 品牌当地分公司、官方主页、进口商直营网点或普通品牌分店,推荐动作设为 skip_brand_branch
  • -6 纯维修、配件、轮胎、洗车、保险、诊断等非整车销售服务,推荐动作设为 skip_non_channel
  • -5 个人卖家或个人资料页,推荐动作设为 skip_non_channel
  • 纯租赁/车队线索不作为汽车渠道合作伙伴加分,需转入 批量采购与运营客户 / 汽车租赁公司
  • 没有新整车销售、进口、分销或 showroom 证据时扣分,并要求继续深搜或人工复核。

客户信息汇总流程

各平台客户资料必须先写入各自的渠道 Sheet,例如 FacebookLinkedInGoogle Maps本地汽车网站汽车网站精选线索。采集、浏览、深度补充和去重完成前,不要把新客户直接写入 客户信息汇总表

完成一轮平台查找后,再运行 scripts/common/build_customer_summary.py 统一生成或覆盖 客户信息汇总表。总表是可重建结果,不是原始采集表;表头必须对齐重点客户参考表:公司姓名、国家、城市、客户类型、官网链接、联系人、职位、个人邮箱、联系人电话、Facebook主页链接、linkined主页链接、google map链接、公共电话/WhatsApp、公共邮箱、客户属性、建联状态、下次跟进、备注。重复客户在总表中合并为一行,电话、邮箱、联系人、平台链接、官网链接和备注作为补充资料去重追加;合并来源数量、客户来源和来源 Sheet 写入 备注,不再单独增加 重复来源数 列,避免列错位或把序号当次数。

默认只预览汇总统计,不保存工作簿:

python scripts/common/build_customer_summary.py --excel "<建联表路径>"

用户明确要求更新总表时,才写入:

python scripts/common/build_customer_summary.py --excel "<建联表路径>" --write-summary

客户中台看板

当用户提到中台、看台、看板、客户统计、建联率、客户数量、渠道分布或邮件发送统计时,读取 references/dashboard.md,并使用 scripts/dashboard/build_dashboard.py 生成本地 HTML 看板和指标 JSON。

看板只读取 客户信息汇总表,不直接写入 Excel,不触发飞书同步,也不保存真实客户数据到 skill 包。默认产物位置为 runs/YYYYMMDD/<run_id>/customer_dashboard.htmlruns/YYYYMMDD/<run_id>/dashboard_data.json;如果需要固定入口,可同时复制到项目目录 dashboards/latest/customer_dashboard.html

如果本轮刚完成渠道采集、邮件状态写回、社交状态写回或其他 Excel 写入,必须先运行 scripts/common/build_customer_summary.py --write-summary 刷新 客户信息汇总表,再生成看板。预览、dry-run、搜索未写表时,不强制刷新看板。

示例命令:

python scripts/dashboard/build_dashboard.py --excel "<建联表路径>" --run-id "<run_id>" --latest-dir "dashboards/latest"

飞书云表格同步

飞书同步是所有写表流程写表后的强制后置步骤。每次本地 Excel 成功执行 --write-excel--write-summary--write-workbook、邮件状态写回或社交状态写回后,agent 必须读取 references/feishu-sync.md 并检查项目根目录 feishu_sync_config.json

  • 如果配置存在且 enabled=true,必须调用 WorkBuddy 的 lark-sheets 插件同步飞书电子表格,不再询问是否同步。
  • 默认同步 客户信息汇总表;渠道 Sheet 只有在用户明确要求整本工作簿同步,或配置 sync_scope=all_configured_sheets 时同步。
  • 如果配置缺失、插件不可用或未授权,必须在最终结果中说明飞书同步未执行/失败原因,但不能回滚本地 Excel 写入。
  • 飞书表格只作为在线镜像;本地建联表仍是主数据源。禁止把真实飞书链接、token、cookie、账号密码或授权信息写进 skill 包。
  • 示例配置见 assets/feishu_sync_config.example.json;真实配置应放在项目根目录 feishu_sync_config.json

工作簿优先级

写表脚本必须按同一顺序解析建联表:

  1. 用户显式传入 --excel 时,优先使用该路径。
  2. 未传 --excel 时,先在当前运行目录和上级目录查找项目建联表,例如 摩洛哥客户建联表-按渠道分类.xlsx 或带空格版本。
  3. 查找时排除 ~$_backup_backup_before_with_sent_previewcandidatefiltered 等临时、备份、预览或过滤文件。
  4. 只有用户明确使用写表模式且项目内找不到建联表时,才从 assets/blank_customer_outreach_workbook.xlsx 复制一份到运行目录后再写入。该模板由当前正式表 摩洛哥客户建联表-按渠道分类.xlsx 生成,保留 Sheet、表头、列宽和基础格式,不包含真实客户数据。
  5. 预览模式不强制创建建联表。禁止直接写入 skill 内的空白模板文件。

邮件规则

当前默认邮件模板面向 客户属性=汽车渠道合作伙伴,正式发送正文使用 assets/email_template.md,邮件主题使用 assets/email_subject.txt。同一模板也保存在 assets/email_templates/汽车渠道合作伙伴.md客户属性=平台与行业渠道 使用 assets/email_templates/平台与行业渠道.md,邮件主题使用 assets/email_subjects/平台与行业渠道.txt,图片资源使用 assets/wuling-platform-industry-channel.png。后续按客户属性增加新模板时,应继续放入 assets/email_templates/,并在发送前明确选择对应客户属性模板。

发送前必须生成并展示最终预览。除非用户明确要求修改模板,否则不要改模板正文。邮件模板中的图片文件必须放在 assets/ 内。当前汽车渠道合作伙伴模板使用 assets/wuling-channel-margin-comparison.png,发送脚本会把 Markdown 图片转成 HTML 内嵌图片,并同时保留纯文本备用正文。

平台与行业渠道模板可使用 {{platform_resource_phrase}} 变量,根据客户主营业务和备注自动选择 automotive industry trafficdealer members and industry resourcescorporate customers and procurement resourcesdealer and importer resourcesautomotive industry resources,禁止编造具体会员数量、流量规模或已确认项目资源。

邮件发送脚本必须把 Markdown **加粗**、列表和 mailto: / Website 链接转换成真实 HTML;纯文本备用正文必须去掉 Markdown 符号。邮件图片必须同时设置 width="300" 和内联 style="width:300px;max-width:300px;height:auto",避免邮箱客户端把图片放大。

浏览器自动化硬规则

凡是需要打开、连接、控制或读取浏览器页面的任务,必须使用 Playwright:

  • AdsPower 只负责提供指纹浏览器环境和 CDP websocket;实际页面访问、搜索、点击、滚动、输入、读取 DOM、截图校验和下载均由 Playwright 完成。
  • Facebook、LinkedIn、Google Maps、当地汽车网站、企业官网深搜、Facebook Follow + Messenger 私信都属于浏览器操作,必须走 Playwright 脚本。
  • 官网识别必须通过 Playwright 读取 a[href]、链接可见文本、aria、按钮链接和页面正文;不得靠截图圈选、坐标点击或人工猜测链接位置作为默认采集逻辑。
  • 私信发送必须使用 Playwright 定位 Messenger 小窗或 Messenger 页面输入框,并通过 Playwright 键盘事件发送;禁止把帖子评论框、页面底部任意输入框或截图位置当作发送目标。
  • 如果 Playwright 无法定位目标元素,脚本应停止并输出人工处理原因,不允许降级为不可靠的全局输入框或坐标操作。

Facebook 合规降风险规则

  • 默认使用 --risk-profile very_conservative,真实发送每轮最多 3 个客户;可用 --session-max 进一步降低本轮数量。
  • 每个 AdsPower profile_id 每日建联客户默认上限为 20;Follow 和 Messenger DM 均按 20 封顶,可通过 --daily-follow-limit--daily-dm-limit 调低。单轮默认仍为 3 个客户,建议分多轮完成每日 20 个客户。
  • 执行脚本按 logs/facebook_account_ledger_<profile_id>_<YYYYMMDD>.json 记录当天 Follow、DM、失败、风险提示、last_run_atcooldown_until;超过额度或出现风险事件后,当天停止该账号继续建联。
  • 分层级节流:大层级操作间隔从 90-200 秒随机取值,小层级/页面内操作间隔从 30-90 秒随机取值,技术等待 technical 保持 0.5-8 秒短等待;轮次冷却仍作为额外冷却建议。等待只用于节流和降低误操作风险,不用于规避平台检测。
  • 大层级操作包括:切换到下一个客户、打开新的客户主页/公司页/Google Maps 商家页/官网首页、提交搜索关键词后等待结果、Follow 成功后、DM 发送成功后、从 Facebook 主页跳到官网深搜前。
  • 小层级操作包括:打开 About/联系资料/Services/Contact 等二级页面、页面滚动、展开更多、切换 tab、打开 Messenger 小窗后等待、输入话术后发送前等待、官网 Contact/About 页面之间切换。
  • 技术等待 technical 只用于 Playwright locator、DOM 加载、弹窗出现、输入框可用等元素检测,不作为对外行为节奏,不强制拉长。
  • --dry-run-schedule 只输出本轮预计节奏、客户列表和额度,不打开 AdsPower、不点击、不发送、不写表。
  • 同一批预览会尽量避免完全相同的英文私信首句;信息不足客户自动使用低压确认型话术。

运行原则

  • 默认只输出 JSON/Markdown 预览。
  • 只有用户明确说“写入表”时,才使用写表选项。
  • 只有用户明确提供发件邮箱、SMTP 授权码并确认发送时,才发送邮件。
  • 只有用户完成 Facebook 整批聊天框预览并明确确认后,脚本显式使用 --confirm --batch-confirmed,才执行 Facebook 关注/私信;不再逐条确认,私信必须命中 Messenger 小窗或 Messenger 页面,禁止帖子留言。
  • 写表前确认 Excel 没有打开;如果保存失败,先输出结果文件,等用户关闭 Excel 后再写回。
  • 采集和发送结果应保存到项目运行目录或用户指定目录,不要保存到 skill 包目录。
  • 任何本地建联表写入成功后,都必须按 references/feishu-sync.md 检查项目根目录 feishu_sync_config.json。如果 enabled=true 且 WorkBuddy 已安装/授权 lark-sheets 插件,agent 必须自动同步飞书电子表格,不需要用户再次强调;预览、dry-run、review-only 和 schedule-only 不触发飞书同步。

Facebook 采集与官网深搜规则

Facebook 客户采集在 --deep-scrape 阶段必须执行“Facebook 主页联络资料 -> About -> 公司官网 -> 官网公开页面”的补充流程:

  • 主页/链接 继续保存 Facebook 主页,用于去重、私信和状态追踪。
  • 打开 Facebook 主页后,必须先读取主页顶部/侧栏/联络资料区域,提取官网、电话、邮箱、WhatsApp、地址、简介和主页按钮链接;随后再进入 About。主页已确认的官网、电话、邮箱不被 About 或官网深搜覆盖,只能补空字段或追加证据。不要把 Instagram、WhatsApp、YouTube、Google Maps 或其他平台链接当作公司官网。
  • 发现 公司官网 后,进入官网首页、Contact、About、Nous contacter、A propos、Services、Vehicules、Occasion、Location 等公开页面,提取公开邮箱、电话和业务证据。
  • 主营业务 必须综合 Facebook 简介、About、近期帖子和官网正文判断;没有证据时写“汽车渠道线索,需人工确认”,不编造业务、价格、MOQ、库存或合作条件。
  • 备注 使用中文结构化摘要,格式围绕:来源线索、Facebook证据、官网证据、主营业务判断、批量采购能力判断、联系方式证据、风险/待确认项。专业词如 showroom、importation、fleet、location、vehicules neufs 可保留原文。

Run Artifact Management

  • Store previews, scraper outputs, retry manifests, send logs, and reports under runs/YYYYMMDD/<run_id>/ by default; do not scatter runtime files in the project root.
  • Create Excel backups only before a write-enabled operation changes the official workbook. Store backups under backups/YYYYMMDD/ and reuse one backup for the same run/purpose.
  • Keep HTML previews lightweight by referencing image files by path; only embed/base64 assets when the user explicitly asks for standalone offline HTML.
  • Store durable ledgers such as Facebook daily account limits under logs/. Do not write SMTP authorization codes to any artifact.
  • Clear .tmp after tasks. Run cleanup in dry-run mode first and keep the latest 10 workbook backups plus 30 days of JSON/HTML/log artifacts by default.

Sender Identity And Name Replacement

  • Email and social outreach identities are separate.
  • Official email templates and email sending use the fixed sender name Chris Chen. Do not ask the user for a per-account sender name when preparing or sending email.
  • Facebook and LinkedIn social outreach use the runtime variable {{sender_name}} only when the message needs the current social account/persona name. Different AdsPower/Facebook/LinkedIn accounts may use different sender names.
  • If the user changes social account/profile_id, ask for the sender role/account/persona name again unless it was explicitly provided in the same run request.
  • Template updates should be made only inside the project workspace and the official skill directories. Do not modify WeChat cache copies or external received-file directories unless the user explicitly asks for that exact file to be edited.
  • Customer name is {{customer_name}}. It must be filled from the workbook contact/customer/company name. If no contact person exists, use the customer/company name.
  • Final previews and sent messages must never contain [Name], [name], {{customer_name}}, or {{sender_name}}.
  • Email templates must not contain {{sender_name}}; legacy email templates containing it should be updated to Chris Chen before use.