360 Secure SkillHub
360 安全技能中心

明日dmp批量圈包

该技能通过明日DMP开放平台API,支持LBS批量点位圈选和组合人群多规则拆分,自动将超限坐标或标签拆分为多个任务,分批串行创建、监控状态并汇总结果;使用前需配置AK/SK和操作密码,并依赖鉴权技能。

mingri26
mingri26
热度 13.43
最近更新 2026-10-12 15:04:04
分类:营销依赖:代码执行 / 第三方 API / 读写文件应用场景:市场分析 / 工作流 / 数据处理 / 任务管理

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add dmp-batch-segmentation
Metadata
name
明日dmp批量圈包
description
基于明日DMP开放平台API,提供项目级批量圈包管理功能。支持LBS批量点位圈选(自动拆分超限坐标)和组合人群多规则拆分组合(支持标签+已有人群包作为规则条件,多对一、一对多、多对多三种模式),可查询已有人群包列表供选择。通过自动任务拆分、批次调度和进度跟踪,实现从"单次圈包"到"项目级批量圈包"的能力升级。适用于大批量门店圈选、多标签/人群包组合拆分等场景。

明日DMP批量圈包

概述

本技能是一个项目级批量圈包管理工具,专门解决大批量圈包场景下的系统限制问题。通过自动任务拆分、批次调度和进度跟踪,实现从"单次圈包"到"项目级批量圈包"的能力升级。

核心价值

  • 突破系统限制:自动拆分超限任务(LBS单次最多200个坐标、组合人群每组最多50个标签)
  • 分批创建策略:每批最多5个任务,同批内逐个串行创建(一个创建API返回成功后再创建下一个,不需要等计算完成);必须等上一批全部计算完成后才能创建下一批
  • 项目级管理:一个项目生成多个人群包,统一管理和追踪
  • 自动化执行:自动生成执行计划、批次调度、进度监控
  • 降低操作成本:从手动拆分N次任务 → AI自动完成

适用场景

场景 描述 系统限制 解决方案
场景1:LBS批量点位圈选 需要圈选大量门店/网点周边用户(数量不定) 单次最多200个坐标 自动拆分为N个任务(每任务200个坐标)
场景2:组合人群-多规则拆分组合 将标签、已有人群包拆分成多个规则组合,组内OR、组间AND/NOT/OR(支持标签ID+人群包ID作为规则条件) 每个规则最多50个标签 按多对一/一对多/多对多模式拆分,自动批量创建多个组合人群任务;每批最多5个任务,同批逐个串行创建,等上一批全部计算完成后再创建下一批

支持查询已有人群包:在选择规则条件前,可通过人群列表查询接口搜索已有DMP人群包,将人群包ID作为规则条件传入,实现"已有基础人群包 + 标签过滤"或"人群包与人群包之间交并差"的批量组合。

⚠️ 重要声明:

  1. 凭证安全责任:您的 Access Key(AK)和 Secret Key(SK)是访问明日 DMP API 的唯一凭证,属于您的敏感私密信息。您对凭证的妥善保管(包括但不限于防止泄露、撤销权限)负全部责任。因凭证泄露、遗失或不当使用导致的一切损失及法律责任,均由您自行承担。
  2. 数据合法性责任:使用本技能进行人群圈选、洞察、同步、投放等操作时,您须保证所使用的数据来源合法合规,并已取得必要的用户授权。因数据来源违法、侵权或违反相关法律法规所引发的一切法律责任与纠纷,均由您自行承担,本技能开发者不承担任何连带责任。
  3. 操作结果责任:本技能的所有 API 调用结果(包括人群创建、任务状态、数据结果等)均由明日DMP平台提供,本技能开发者对 API 返回内容的准确性、完整性不作任何保证,对因此产生的业务损失不承担责任。
  4. 使用即视为同意:继续使用本技能,即表示您已阅读并同意上述免责声明。

💡 提示:欢迎使用后分享您的体验,帮助我们持续改进 → 填写使用评价

🔑 前置准备

使用本技能前,您需要先获取明日DMP API凭证:

📧 申请方式(二选一):

方式一:邮件申请

  • 发送至:product@mingdata.com
  • 邮件主题:【明日DMP API开通申请】
  • 邮件内容:请注明公司名称、联系人、联系方式及使用场景

方式二:在线表单申请

🔒 凭证格式:

  • Access Key:xxxxxxxxxxxxxxxx
  • Secret Key:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

💡 温馨提示:首次使用时,我会自动引导您完成凭证配置,无需担心!


工作流程

请求类型自动识别

当您发起请求时,系统会自动识别请求类型并进入相应流程:

1. 技能咨询请求("有哪些功能"、"能做什么")

  • 展示2种批量圈选场景的详细说明
  • 直接结束,等待您的下一步需求

2. 查询任务请求("查询项目状态"、"查看任务进度")

  • 读取状态文件展示项目进度
  • 展示各批次任务状态
  • 直接结束

3. 创建项目请求(包含批量、门店、标签拆分等)

  • 进入完整的创建流程(见下方)

创建项目完整流程

流程执行规则:

  • ✅ 必须执行:第一步~第九步(包含第六步B、第六步C、第六步D,所有步骤都必须执行)
  • ⚠️ 严格禁止跳过任何步骤,特别是第八步(任务记录检查)
  • 📌 第八步虽然用户可以选择不安装,但必须执行检查和询问流程

⚠️ 创建前强制检查清单(脚本驱动)

在执行第七步(创建任务)前,必须运行前置校验脚本:

# 创建第一个任务前
python scripts/preflight_check.py --action create_first --project <project_id>

# 创建下一个任务前(自动检查上一步是否成功)
python scripts/preflight_check.py --action create_next --project <project_id> --task-index <index>

脚本会自动检查:

  • ✅ 鉴权技能是否安装
  • ✅ 凭证是否有效
  • ✅ 上一步任务是否成功(分批创建时)
  • ✅ 是否重复创建
  • ✅ 是否超出总任务数

如果返回 error → 停止,展示错误给用户
如果返回 ok → 继续执行

❌ 脚本返回 error 时禁止执行创建操作
❌ 跳过前置校验视为严重流程错误


🔴 监控任务创建强制规范(代码级硬拦截)

前置校验脚本(必须执行)

在创建监控任务前,必须先运行前置校验脚本:

# 创建第一个任务前
python scripts/preflight_check.py --action create_first --project <project_id>

# 创建下一个任务前(检查上一步是否成功)
python scripts/preflight_check.py --action create_next --project <project_id> --task-index <index>

脚本返回格式:

// 通过
{"status": "ok", "message": "前置校验通过,可以创建第 N 个任务"}

// 拦截
{"status": "error", "message": "前置校验失败", "blockers": ["第 N-1 个任务状态为 'pending',必须为 'success'"]}

如果返回 error → 停止,展示错误给用户
如果返回 ok → 继续执行

脚本拦截规则(代码级硬拦截,无法跳过)

  1. 上一步任务必须成功:status == "success" 才能创建下一个
  2. 凭证必须有效:AK/SK 必须存在且完整
  3. 鉴权技能必须安装:mingdata-dmp-auth 必须存在
  4. 不可重复创建:已成功的任务不可再次创建
  5. 不可超出总数:任务索引不能大于总任务数

cron 任务创建规范

使用 cron 工具创建监控任务(不是命令行):

cron(action="add", job={
    "name": f"DMP任务状态监控-{project_id}-任务{task_index}",
    "schedule": {"kind": "every", "everyMs": 60000},
    "payload": {
        "kind": "agentTurn",
        "message": f"检查DMP任务状态..."
    },
    "sessionTarget": "current",  # 必须
    "delivery": {"mode": "none"}  # 必须
})

为什么不用命令行?
命令行无法正确设置 sessionTarget: "current",会导致监控任务无法触发。


⚠️ 监控任务创建说明

正确做法

✅ 使用 cron 工具创建监控任务

cron(action="add", job={
    "name": "DMP任务状态监控-{project_id}-任务{task_index}",
    "schedule": {"kind": "every", "everyMs": 60000},
    "payload": {
        "kind": "agentTurn",
        "message": "检查DMP任务状态..."
    },
    "sessionTarget": "current",  # 关键:必须设置为 "current"
    "delivery": {"mode": "none"}  # 关键:必须设置为 "none"
})

错误做法

❌ 使用 openclaw cron add 命令行

命令行无法正确设置 sessionTarget: "current",会导致:

  • 监控任务在隔离会话中运行
  • 无法访问当前会话上下文
  • 监控任务无法自动触发

前置校验脚本会自动拦截

现在创建任务前会运行 scripts/preflight_check.py,脚本会检查:

  • 上一步任务是否成功
  • 凭证是否有效
  • 鉴权技能是否安装

如果检查失败,脚本会返回 error,AI 必须停止并展示错误给用户。


第一步:场景识别与确认 [必须执行]

系统会根据您的需求关键词,识别出最匹配的场景类型,然后向您确认。

场景识别规则表

场景 核心关键词 典型口语变体
场景1:LBS批量点位圈选 批量、门店、网点、坐标、LBS、位置、经纬度、批量上传 "圈选全国门店"、"批量上传坐标"、"LBS批量圈选"、"门店周边用户"
场景2:组合人群多规则拆分 标签拆分、多规则、A规则、B规则、组合拆分、标签组合 "标签太多需要拆分"、"A标签和B标签组合"、"多规则拆分"

场景2子场景识别

当识别为场景2时,需要进一步识别子场景:

子场景 识别条件 描述
场景2.1:多对一 A组多个标签值,B组单个标签值 A的每个标签值分别与B求交集,生成M个任务
场景2.2:一对多 A组单个标签值,B组多个标签值 A分别与B的每个标签值求交集,生成N个任务
场景2.3:多对多 A组多个标签值,B组多个标签值 A和B两两求交集(笛卡尔积),生成M×N个任务

意图识别流程

步骤1.1:关键词匹配

从用户需求中提取关键词,按上表匹配场景类型。

步骤1.2:向用户确认

识别出场景后,必须向用户确认,不可直接执行:

示例1:
您:"帮我圈选全国3000个门店周边的用户"
    ↓
系统:"识别到您提到了【批量、门店】,可以创建【LBS批量点位圈选项目】。
      
      LBS批量圈选说明:
      - 功能:基于大量坐标点,批量圈选门店/网点周边用户
      - 系统限制:单次最多200个坐标,系统将自动拆分
      - 必填参数:人群包名、后缀、坐标信息、辐射范围、人群类型
      
      是否需要创建LBS批量圈选项目?"
    ↓
您:"是的" / "不是"
示例2:
您:"我有100个年龄标签和3个兴趣标签,需要拆分组合"
    ↓
系统:"识别到您提到了【标签拆分】,可以创建【组合人群多规则拆分项目】。
      
      组合人群多规则拆分说明:
      - 功能:将大量标签按规则拆分成多个组合人群任务
      - 系统限制:前端限制每个规则最多50个标签
      - 🔴 分批创建规则:每批最多5个任务,同批逐个串行创建,等上一批全部计算完成后再创建下一批
      - 支持模式:多对一、一对多、多对多
      
      是否需要创建组合人群多规则拆分项目?"
    ↓
您:"是的" / "不是"

步骤1.3:处理用户响应

  • 用户确认"是" → 进入第二步(鉴权检查)
  • 用户拒绝 → 询问用户想使用哪种场景,或展示所有场景供选择
  • 用户不确定 → 展示所有场景的详细说明,让用户选择

第二步:鉴权技能检查与凭证配置 [必须执行]

确认场景后,系统会立即检查鉴权技能是否已安装,并配置API凭证:

完整检查流程:

步骤2.1:检查鉴权技能是否已安装

系统会自动检查鉴权技能(mingdata-dmp-auth)的安装状态:

  • 检查路径:~/.skills/mingdata-dmp-auth/
  • 如果已安装 → 跳转到步骤2.2(凭证检查)
  • 如果未安装 → 向用户展示以下提示并等待回复

鉴权技能未安装时的提示内容:

⚠️ 检测到您尚未安装【明日DMP鉴权技能】

该技能负责管理 API 凭证(AK/SK)、生成签名,是使用本功能的必要前提。

是否自动下载并安装?

是 - 立即安装
否 - 取消本次操作

请回复:是/否

等待用户回复,按以下逻辑执行:

  • 用户回复"是":

    • 使用 terminal 工具执行:openclaw skills install mingdata-dmp-auth
    • 等待命令执行完成
    • 安装成功:提示 ✅ 鉴权技能安装成功 → 继续步骤2.2
    • 安装失败:展示以下内容后终止流程:
      ❌ 鉴权技能自动安装失败
      
      请前往 ClawHub 手动安装:
      👉 https://clawhub.ai/mingri26/mingdata-dmp-auth
      
      手动安装步骤:
      1. 打开上方链接
      2. 点击「Download」按钮
      3. 安装完成后重新发起本次请求
      
  • 用户回复"否":

    • 提示:已取消操作。如需继续,请先安装鉴权技能。
    • 终止流程

步骤2.2:检查凭证是否存在

鉴权技能安装完成后,检查API凭证配置状态:

  • 凭证文件路径:~/.mingdata_dmp_credentials
  • 如果凭证不存在 → 展示凭证获取指引(见下方)
  • 如果凭证存在但无效 → 引导重新配置
  • 如果凭证有效 → 继续执行步骤2.3(操作密码验证)

步骤2.3:操作密码验证 [必须执行]

每次创建任务前,必须验证操作密码,确保操作安全。

检查密码哈希是否已设置:

  • 凭证文件路径:~/.mingdata_dmp_credentials
  • 检查是否存在 op_password_hash 字段

如果未设置密码(首次使用):

🔐 检测到您尚未设置操作密码

为保障账号安全,每次创建任务前需要验证操作密码。

请设置您的操作密码(不少于6位):
  1. 等待用户输入密码
  2. 要求用户再次确认密码
  3. 两次输入一致后,计算 MD5 哈希:hashlib.md5(password.encode()).hexdigest()
  4. 将哈希值写入凭证文件的 op_password_hash 字段
  5. 提示:✅ 操作密码设置成功,请妥善保管
  6. 继续执行第三步(参数收集)

如果已设置密码:

🔐 请输入操作密码以继续:
  1. 等待用户输入密码
  2. 计算 MD5 哈希与凭证文件中的 op_password_hash 比对
  3. 验证通过 → 提示 ✅ 密码验证通过 → 继续第三步(参数收集)
  4. 验证失败 → 提示 ❌ 密码错误,操作已终止 → 终止流程

安全说明:

  • 密码明文仅在当前对话中出现一次,不存储在任何文件中
  • 凭证文件中只保存 MD5 哈希值
  • 忘记密码时,可删除凭证文件中的 op_password_hash 字段重新设置

凭证不存在时的引导内容:

🔑 明日DMP API凭证获取指南

您需要先获取明日DMP的API访问凭证(Access Key 和 Secret Key),才能使用项目管理功能。

📧 申请方式(二选一):

方式一:邮件申请
- 发送开通申请至:product@mingdata.com
- 邮件主题:【明日DMP API开通申请】
- 邮件内容:请注明公司名称、联系人、联系方式及使用场景

方式二:在线表单申请
- 填写在线申请表单:https://doc.weixin.qq.com/forms/ANEAJwfLAAoADMAHwbhAPICNUE0vDRd8f#/fill
- 提交后等待审核通过(通常1-3个工作日)

🔒 安全提示:
- Access Key 格式:xxxxxxxxxxxxxxxxxxxx
- Secret Key 格式:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- 请妥善保管凭证,不要泄露给他人

获取凭证后,请按以下格式提供给我:
Access Key: xxxxxxxxxxxxxxxxxxxx
Secret Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

第三步:参数收集 [必须执行]

🔴 一次性收齐,禁止逐条追问:在第一次交互中,必须把下表列出的字段(含必填/可选、默认值)一次性列出并收齐;如用户输入不完整,需要一次性指出所有缺失项。

凭证检查通过后,系统会根据识别的场景类型,引导用户收集参数。

场景1:LBS批量点位圈选 - 参数收集(表格化清单)

字段 必填 说明 取值/默认值
人群包名 ✅ 用于生成子任务名称前缀 示例:全国门店周边用户
后缀 ✅ 用于生成子任务名称后缀;命名规则:{人群包名}{后缀}{序号} 默认:_批次(仍需用户确认是否使用默认或自定义)
坐标信息(经度lng/纬度lat) ✅ 支持两种提供方式:① 直接粘贴文本,每行一组 lng,lat;② 上传Excel/CSV(需包含lng、lat列)。坐标系:百度坐标系(BD09) 文本示例:116.467304,39.914437
辐射范围(米) ✅ 单点圈选半径 范围:150-6000;默认:1000
人群类型 ✅ 可多选 a) 经过(recentArrive) b) 居住(homeAddress) c) 工作(workAddress)
时间范围 条件必填 仅当人群类型包含“经过(recentArrive)”时必填 格式:YYYY-MM-DD HH 至 YYYY-MM-DD HH;跨度 < 90天;示例:2026-05-01 00 至 2026-05-31 23
ID类型(可多选) ✅ 输出人群包的设备ID类型 MOBILE:MD5_IDFA/MD5_IMEI/MD5_OAID/IDFA/OAID/CAID/MD5_CAID;OTT:MD5_MAC;PC:MZID
所属品牌 ✅ v1.4新增;需先查询品牌列表供用户选择 选具体品牌:brands=["xxx"];选“全部/未选”:brands=[](默认全部)

坐标为地址文本时:需用户先自行用地图工具转换为经纬度后再提供(本流程不接受纯地址文本直接入参)。


场景2:组合人群多规则拆分 - 参数收集(表格化清单)

说明:场景2中,A规则与B规则均可由【标签】与【已有人群包】组成;同一规则内为 OR 关系。A与B之间的关系由“组合逻辑”决定。

字段 必填 说明 取值/默认值
人群包名 ✅ 用于生成子任务名称前缀 示例:美妆目标人群
后缀 ✅ 用于生成子任务名称后缀;命名规则:{人群包名}{后缀}{序号} 默认:_组合(仍需用户确认是否使用默认或自定义)
A规则条件:标签(可选) 条件必填 A规则标签ID列表(逗号分隔)或上传包含标签ID的表格;展示标签时必须标注来源(明略/合作伙伴) 允许为空(若A规则用人群包)
A规则条件:已有人群包(可选) 条件必填 A规则可选择已有人群包ID列表(逗号分隔)或按名称关键词搜索选择 允许为空(若A规则用标签)
B规则条件:标签(可选) 可选 B规则标签ID列表(逗号分隔)或上传包含标签ID的表格 允许为空
B规则条件:已有人群包(可选) 可选 B规则可选择已有人群包ID列表(逗号分隔)或按名称关键词搜索选择 允许为空
规则非空约束 ✅ A与B不能同时为空;且对每个规则(A或B),标签与人群包至少提供一种 如不满足需一次性提示用户补齐
拆分模式 ✅ 多对一 / 一对多 / 多对多;可由系统根据A/B数量自动识别,但必须让用户确认 a) 多对一 b) 一对多 c) 多对多
拆分策略 ✅ 控制每组标签数量或组数;必须保证每组 ≤ 50个标签 a) 固定每组标签数(≤50) b) 固定组数 c) 自定义分组
组合逻辑(A与B关系) ✅ A规则与B规则之间的关系 AND(交集) / OR(并集) / NOT(差集)
ID类型(可多选) ✅ 输出人群包的设备ID类型 MOBILE:MD5_IDFA/MD5_IMEI/MD5_OAID/IDFA/OAID/CAID/MD5_CAID;OTT:MD5_MAC;PC:MZID
所属品牌 ✅ v1.4新增;需先查询品牌列表供用户选择 选具体品牌:brands=["xxx"];选“全部/未选”:brands=[](默认全部)
多组交并差逻辑(v1.4新增) 可选 当用户明确需要“超过A/B两组”的复杂逻辑时启用;使用 groups-json 直接传入(最多10组,末组必须noop) 不需要时不启用;需要时由用户提供或在用户确认后由系统生成并回显确认

标签搜索与歧义澄清:严格遵循 references/标签搜索歧义处理规则.md;必须同时覆盖明略标签与合作伙伴标签,并在展示时标注来源。

第四步:参数校验 [必须执行]

系统会检查参数格式是否正确:

场景1校验规则:

  • 坐标文件格式:必须包含lng、lat列
  • 坐标数量:检查总坐标数
  • 辐射范围:150-6000米
  • 时间格式:YYYY-MM-DD HH
  • ID类型:必须是支持的类型

场景2校验规则:

  • 标签数量:检查A/B规则标签数
  • 拆分策略:每组≤50个标签
  • 组合逻辑:AND/OR/NOT
  • ID类型:必须是支持的类型

校验失败时:

⚠️ 参数校验失败

错误项:{参数名}
错误原因:{原因}
正确格式:{格式示例}

请重新输入该参数。

第五步:生成执行计划 [必须执行]

系统会根据参数自动生成执行计划:

场景1执行计划:

【执行计划预览】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
人群包名: {人群包名}
后缀: {后缀}
总坐标数: {N}个
拆分策略: 每批次200个坐标
预计任务数: {批次数}个
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

任务详情:
- {人群包名}{后缀}1: 坐标1-200
- {人群包名}{后缀}2: 坐标201-400
- ...
- {人群包名}{后缀}{批次数}: 坐标{start}-{end}

场景2执行计划:

【执行计划预览】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
人群包名: {人群包名}
后缀: {后缀}
拆分模式: {多对一/一对多/多对多}
A规则标签: {N}个({拆分组数}组)
B规则标签: {M}个({拆分组数}组)
组合逻辑: {AND/OR/NOT}
预计任务数: {总任务数}个
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

任务详情(每个任务展示完整标签信息):

{人群包名}{后缀}1:
  A规则: 15705(女性) AND [15686(18-19岁) OR 15687(20-24岁)]
  B规则: 34140(居住地_北京市)
  组合: A AND B
  API参数:
  {
    "name": "{人群包名}{后缀}1",
    "data": [
      {"op": "and", "rule": {"tag": [15705, 15686, 15687]}},
      {"op": "noop", "rule": {"tag": [34140]}}
    ]
  }

{人群包名}{后缀}2:
  A规则: 15705(女性) AND [15686(18-19岁) OR 15687(20-24岁)]
  B规则: 34133(居住地_上海市)
  组合: A AND B
  ...

⚠️ API参数结构说明(必须理解):

关键规则:

  1. 同一个rule内的tag是OR关系

    • {"rule": {"tag": [15705, 34140]}} = 女 OR 北京
    • 如果需要AND关系,必须分开成多个rule
  2. 不同rule之间通过op字段定义逻辑关系

    • {"op": "and", "rule": {"tag": [15705]}} + {"op": "noop", "rule": {"tag": [34140]}} = 女 AND 北京
  3. 最后一组必须用noop

    • 最后一个rule的op必须是"noop"

示例对比:

❌ 错误(女 OR 北京):

{
  "data": [
    {"op": "and", "rule": {"tag": [15699]}},
    {"op": "noop", "rule": {"tag": [15705, 34140]}}
  ]
}
// 实际:高收入 AND (女 OR 北京)

✅ 正确(女 AND 北京):

{
  "data": [
    {"op": "and", "rule": {"tag": [15699]}},
    {"op": "and", "rule": {"tag": [15705]}},
    {"op": "noop", "rule": {"tag": [34140]}}
  ]
}
// 实际:高收入 AND 女 AND 北京

组合逻辑处理规则:

  • 用户指定AND:每个标签单独一个rule,用op="and"连接
  • 用户指定OR:可以把标签放在同一个rule里(OR关系)

⚠️ 预览规则(必须遵守):

  • ✅ 每个标签必须展示ID和名称
  • ✅ 必须明确标注OR/AND关系
  • ✅ 必须展示实际API参数
  • ✅ 预览内容必须与实际创建参数完全一致
  • ❌ 禁止使用简化描述(如"18-24岁")
  • ❌ 禁止预览和创建使用不同的数据

第六步:参数确认 [必须执行]

⚠️ 这是强制性步骤,绝对不能跳过!

必须执行的完整确认流程:

  1. 展示执行计划

    • 展示第五步生成的执行计划
    • 包含所有关键信息
  2. 等待用户明确确认

    • 必须等待用户回复"确认"、"是"、"可以"等明确的确认词
    • 不允许在用户未确认前直接调用API
    • 用户可以选择"修改"、"取消"或"确认"
  3. 处理用户响应

    • 用户确认 → 进入第七步(执行创建)
    • 用户要求修改 → 返回第三步(参数收集)
    • 用户取消 → 终止流程,提示"已取消本次操作"

确认提示语示例:

请确认以上执行计划是否正确?
- 回复"确认"或"是":开始创建项目
- 回复"修改":重新设置参数
- 回复"取消":取消本次操作

第六步B:流程完整性验证 [必须执行]

⚠️ 这是强制性步骤,在用户确认执行计划后、执行创建前必须完成!

必须执行的完整验证流程:

  1. 输出检查清单 在用户确认执行计划后,必须输出以下检查清单并逐项确认:

    🔴 创建前流程完整性验证
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    请确认以下步骤是否已完成:
    
    □ 1. 是否已获得用户对执行计划的明确确认?
    
    ⚠️ 如有未完成项,必须先完成后再继续!
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    
  2. 处理未完成项

    • 所有项目完成后 → 进入第六步C(失败处理策略确认)

第六步C:失败处理策略确认 [必须执行]

⚠️ 这是强制性步骤,在执行创建前必须完成!

目的: 提前确认用户在任务失败时的处理偏好,避免执行过程中频繁中断询问。

必须执行的完整询问流程:

  1. 向用户展示失败处理策略选项

    ⚙️ 失败处理策略确认
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    在任务执行过程中,可能会遇到创建失败或执行失败的情况。
    请提前确认您的处理偏好:
    
    【创建失败时】(调用API创建任务失败)
    a) 暂停等待 - 停止后续任务,等待您的重试/跳过/取消指令
    b) 自动跳过 - 记录失败任务,自动继续创建下一个任务
    
    【执行失败时】(任务创建成功但执行失败)
    a) 暂停等待 - 停止后续任务,等待您的重试/跳过/取消指令
    b) 自动跳过 - 记录失败任务,自动继续创建/监控下一个任务
    
    请选择策略组合:
    - 输入"1a+2a":创建失败暂停 + 执行失败暂停
    - 输入"1a+2b":创建失败暂停 + 执行失败跳过
    - 输入"1b+2a":创建失败跳过 + 执行失败暂停
    - 输入"1b+2b":创建失败跳过 + 执行失败跳过
    - 输入"自定义":分别指定两种情况的策略
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    
  2. 等待用户回复并记录选择

    • 用户回复策略组合 → 记录到项目状态文件,进入第七步
    • 用户输入"自定义" → 分别询问创建失败和执行失败的策略
    • 用户不确定 → 推荐默认策略"1a+2a"(全部暂停等待)
  3. 记录用户选择

    将用户的选择记录到 data/plans/{projectId}/status.json:

    {
      "failureStrategy": {
        "onCreateFail": "pause" | "skip",
        "onExecuteFail": "pause" | "skip",
        "confirmedAt": "2026-07-01 18:30:00"
      }
    }
    
  4. 确认并继续

    ✅ 失败处理策略已确认:
    - 创建失败时:{暂停等待/自动跳过}
    - 执行失败时:{暂停等待/自动跳过}
    
    后续任务将按照此策略自动处理。
    

    → 进入第七步(执行创建)


第六步D:定时监控方案(强制使用cron,禁止后台exec轮询)

🔴 三种方式的强制约束:

方式 是否允许 原因
✅ cron(action="add", job={...}) 工具 必须使用(强制) 绑定当前session,每60秒自动触发agent turn,完成后可自动通知用户和推进下一批;默认自动启用,不需要询问
❌ openclaw cron add 命令行 严格禁止 无法设置sessionTarget=current,会绑定到isolated session导致监控无法触发
❌ exec(background=true) + sleep + 手动轮询 严格禁止 后台进程在session休眠/断连后不会唤醒AI,导致任务完成后无法通知用户(已发生过此故障)

监控cron任务创建规范(第一批任务创建成功后必须立即执行,不需要询问用户):

cron(action="add", job={
    "name": f"DMP任务状态监控-{project_id}",
    "schedule": {"kind": "every", "everyMs": 60000},
    "payload": {
        "kind": "agentTurn",
        "message": f"检查DMP项目{project_id}的任务状态,audienceIds={task_ids}。查询POST /audience/manage/taskList,检查每个任务audienceStatus(1=成功,0=失败,2/3=计算中)。本批全部成功后:若还有下一批则自动创建下一批并继续监控;若全部完成则汇总结果通知用户,然后调用cron(action='remove',...)删除本监控任务。若有失败按failureStrategy处理。"
    },
    "sessionTarget": "current",
    "delivery": {"mode": "none"}
})

为什么不再询问用户是否启用监控:

  • 多批次任务必须依赖监控才能自动推进(批间等待计算完成)
  • 不启用监控 = 无法自动创建下一批 = 项目无法完成
  • cron监控是项目执行的必要环节,不是可选项

cron任务触发时的执行流程:

  1. 查询当前所有任务的audienceStatus
  2. 本批全部成功(audienceStatus=1)→ 自动创建下一批任务,继续监控
  3. 全部批次完成 → 输出汇总结果、主动通知用户、调用cron(action="remove",...)删除监控任务
  4. 有失败(audienceStatus=0)→ 按failureStrategy处理(pause通知用户等待指令/skip记录后继续)

🔴 自我检查清单(每次创建第一批任务后必须逐项确认):

  • 我是否使用了 cron 工具(不是exec background,不是命令行)?
  • sessionTarget 是否设置为 "current"?
  • delivery 是否设置为 {"mode": "none"}?
  • payload.message 是否包含了项目ID、推进下一批、完成后删除cron的指令?
  • 创建cron后是否向用户确认了监控已启动?

只有在单批次(任务数≤批大小,不需要分批)且用户明确选择手动查看时,才可以不创建监控任务,但仍需提示用户后续可手动查询进度。


第七步:执行创建 [必须执行]

⚠️ 前置条件:必须在用户明确确认后才能执行

执行流程:

步骤7.1:判断任务总数

任务数量判断:
├─ 场景1(LBS)→ 直接创建所有任务
└─ 场景2(组合人群):
    ├─ 任务数 ≤ 5 → 逐个串行创建全部任务
    └─ 任务数 > 1 → 分批创建(每批最多5个,同批逐个串行创建,批间等全部计算完成)

🔴 分批创建规则(仅适用于场景2):

  • 场景2(组合人群):每批最多5个任务
  • 同批内逐个串行创建:创建任务1→等API返回audienceId→创建任务2→...→创建任务5。同批内不需要等计算完成,只需等创建API返回成功即可提交下一个创建请求
  • 批间必须等待全部计算完成:一批5个任务全部创建提交后,启动监控等待这批所有任务计算完成(audienceStatus=1),全部成功后才能创建下一批
  • 创建失败时按第六步C确认的策略处理(pause/skip)
  • 场景1(LBS):所有坐标点直接创建(受单次200坐标限制,自动拆分)

步骤7.2:分批创建任务(每批最多5个,逐个串行创建,批间等计算完成)

调用对应的创建脚本:

  • 场景1:python scripts/create_lbs_batch.py
  • 场景2:python scripts/create_combine_batch.py --batch-start N --batch-end M

⚠️ 分批创建机制:

场景2(组合人群)任务数 > 1 时,按每批5个分批创建:

# 第1批:逐个串行创建任务1~5
python scripts/create_combine_batch.py --batch-start 1 --batch-end 5 ...
# 脚本内部:创建1→等返回→创建2→等返回→...→创建5→等返回

# 等待第1批全部计算完成(监控audienceStatus,全部=1后继续)

# 第2批:逐个串行创建任务6~10
python scripts/create_combine_batch.py --batch-start 6 --batch-end 10 ...

# 等待第2批全部计算完成...
# ... 以此类推

🔴 代码级硬拦截(场景2,任务数>1时生效):

脚本内置了强制约束:

if total_tasks > 5 and args.batch_start is None and args.task_index is None:
    print("🔴 前置校验失败:场景2任务数>1,必须使用 --batch-start/--batch-end 分批创建(每批最多5个)")
    sys.exit(1)

场景2任务数>1且未指定批次范围或单个task-index,脚本会拒绝执行。

🔴 严格禁止的行为(违反视为严重错误):

❌ 禁止在一个命令行里一次性提交超过5个任务的创建请求

❌ 禁止同批内并发提交多个创建请求(必须逐个串行)

# 错误示例:同批内并发创建
import concurrent.futures
with concurrent.futures.ThreadPoolExecutor(5) as pool:  # ❌ 禁止并发
    pool.map(create_task, [1,2,3,4,5])

❌ 禁止不等上一批计算完成就创建下一批

# 错误示例:
create_batch(1,5)
# 没等计算完成就...
create_batch(6,10)  # ❌ 必须等1~5全部计算成功

❌ 禁止直接调用API而不通过脚本

✅ 正确做法:同批逐个串行创建,批间等待全部计算完成

# 第1批:逐个创建任务1~5(脚本内部串行)
python scripts/create_combine_batch.py --batch-start 1 --batch-end 5 --project-id xxx ...

# 等待第1批全部计算完成(audienceStatus全部=1)
# 然后创建第2批
python scripts/create_combine_batch.py --batch-start 6 --batch-end 10 --project-id xxx ...

# ... 以此类推

为什么这样设计?

  1. 避免API限流:同批逐个创建,不会瞬时并发过多请求触发限流
  2. 批间控制:等一批计算完再创建下一批,避免DMP平台同时排队任务过多
  3. 失败可控:一批内某个任务失败时可以暂停,不会产生大量失败任务
  4. 可追溯:每个任务的创建时间、状态、人群规模都有记录

脚本返回结果包含:

  • batch_start/end: 本批任务索引范围
  • created_tasks: 本批成功创建的任务列表(含audienceId)
  • failed_tasks: 本批创建失败的任务列表(含错误信息)
  • pending_batches: 剩余待创建的批次信息
  • status: 任务状态(partial/completed/failed)

AI助手处理流程(场景2分批创建):

  1. 计算总任务数N,按每批5个切分:批1=[1,2,3,4,5], 批2=[6,7,8,9,10], ...
  2. 调用脚本提交第1批(--batch-start 1 --batch-end min(5,N)),脚本内部逐个串行创建
  3. 检查第1批创建结果:
    • 全部创建提交成功 → 启动监控,等待这批所有任务计算完成(audienceStatus=1)
    • 有创建失败 → 按failureStrategy.onCreateFail处理(pause暂停/skip跳过)
  4. 第1批全部计算成功后,再提交第2批
  5. 重复步骤2-4,直到所有批次创建并计算完成
  6. 向用户汇报最终结果

⚠️ 关键:同批逐个串行创建(不等计算),批间必须等待全部计算完成!

第1批:创建1→等返回→创建2→等返回→...→创建5→等返回
    → 启动监控,等5个任务全部计算完成(audienceStatus=1)
    → 全部成功
第2批:创建6→等返回→创建7→等返回→...→创建10→等返回
    → 启动监控,等5个任务全部计算完成
    → ...
最后一批完成 → 汇总结果通知用户

⚠️ 失败处理机制(根据第六步C用户选择的策略执行):

创建阶段失败(API返回code≠0或超时):

提交批次中的任务 N
    ↓
检查创建API返回结果
    ↓
┌─────────────────────────────────────────┐
│ 创建成功(code=0,返回audienceId)       │
│   → 记录任务ID和audienceId               │
│   → 继续提交本批次剩余任务               │
│   → 本批次全部提交后,提交下一批         │
└─────────────────────────────────────────┘
    ↓
┌─────────────────────────────────────────┐
│ 创建失败                                 │
│   → 检查用户选择的策略(failureStrategy.onCreateFail)│
│   ↓                                      │
│   ├─ 策略为"pause"(暂停等待):         │
│   │   → 立即停止创建后续任务/批次        │
│   │   → 向用户展示失败原因                │
│   │   → 等待用户指令:重试/跳过/取消     │
│   │                                      │
│   └─ 策略为"skip"(自动跳过):          │
│       → 记录失败任务到状态文件            │
│       → 向用户展示失败原因(仅通知)      │
│       → 自动继续提交本批次下一个任务      │
└─────────────────────────────────────────┘

执行阶段失败(创建成功但计算失败,audienceStatus=0):

监控所有已提交任务的执行状态
    ↓
查询所有任务状态
    ↓
┌─────────────────────────────────────────┐
│ 所有任务执行成功(audienceStatus=1)     │
│   → 汇总结果通知用户                     │
└─────────────────────────────────────────┘
    ↓
┌─────────────────────────────────────────┐
│ 部分任务执行失败(audienceStatus=0)     │
│   → 检查用户选择的策略(failureStrategy.onExecuteFail)│
│   ↓                                      │
│   ├─ 策略为"pause"(暂停等待):         │
│   │   → 通知用户失败任务信息              │
│   │   → 等待用户指令:重试/跳过          │
│   │                                      │
│   └─ 策略为"skip"(自动跳过):          │
│       → 记录失败任务到状态文件            │
│       → 向用户展示失败信息(仅通知)      │
│       → 等待剩余任务完成后汇总结果        │
└─────────────────────────────────────────┘

暂停等待策略时的交互示例:

❌ 任务创建失败

任务名称: {任务名称}
失败原因: {具体错误信息}

当前策略:暂停等待

请选择操作:
- 回复"重试":重新创建该任务
- 回复"跳过":跳过该任务,继续创建下一个
- 回复"取消":终止整个项目

自动跳过策略时的通知示例:

⚠️ 任务创建失败(已自动跳过)

任务名称: {任务名称}
失败原因: {具体错误信息}

当前策略:自动跳过
已记录失败任务,继续创建下一个任务...

进度:{已完成}/{总数}(失败: {失败数})

用户选择重试时:

  1. 重新调用创建接口,使用相同的参数
  2. 如果重试成功,继续创建下一个任务
  3. 如果重试仍然失败,再次询问用户(最多重试2次)
  4. 超过重试次数后,根据策略自动跳过或继续暂停

用户选择跳过时:

  1. 记录该任务为已跳过
  2. 继续创建下一个任务

步骤7.3:记录任务ID

将创建的任务ID记录到状态文件:

data/plans/{projectId}/status.json

步骤7.4:启动任务监控 [必须执行]

当前任务创建完成后,使用 OpenClaw cron 定时任务进行状态监控:

🔴🔴🔴 严重警告:必须使用 cron 工具,禁止使用 openclaw cron add 命令行!

为什么禁止使用命令行:

  • 命令行的 --session 参数只支持 main 或 isolated
  • 不支持 current(当前会话)
  • 使用命令行创建的监控任务,sessionTarget 被错误设置为 isolated
  • 导致监控任务无法正确绑定到当前会话,无法自动触发

脚本输出的 cron_instruction 字段包含:

{
  "cron_instruction": {
    "action": "create_cron_monitor",
    "mandatory": true,
    "tool": "cron",  // 🔴 必须使用这个工具
    "forbidden_tool": "openclaw cron add",  // ❌ 禁止使用这个
    "reason": "命令行无法正确设置 sessionTarget: current,会导致监控任务无法自动触发",
    "params": {
      "action": "add",
      "job": {
        "name": "DMP任务状态监控-xxx",
        "schedule": {"kind": "every", "everyMs": 60000},
        "payload": {...},
        "sessionTarget": "current",
        "delivery": {"mode": "none"}
      }
    },
    "validation_check": {
      "required": true,
      "check_before_execution": true,
      "validation_rules": [
        "必须使用 cron 工具,禁止使用 openclaw cron add 命令行",
        "必须设置 sessionTarget: 'current'",
        "必须设置 delivery: {'mode': 'none'}",
        "如果检测到使用命令行,必须立即更换为 cron 工具"
      ]
    }
  }
}

🔴 强制执行步骤(必须按顺序执行):

步骤0: 🔴 自我验证(必须执行)
  ↓
检查:我是否打算使用 openclaw cron add 命令行?
  ↓
┌─────────────────────────────────────────┐
│ 是                                       │
│   → ❌ 错误!立即更换为 cron 工具        │
│   → 严格按照脚本输出的 params 执行       │
└─────────────────────────────────────────┘
  ↓
┌─────────────────────────────────────────┐
│ 否                                       │
│   → ✅ 正确!确认使用 cron 工具          │
│   → 继续执行                             │
└─────────────────────────────────────────┘
  ↓
步骤1: 读取脚本输出的 cron_instruction.params 字段
步骤2: 使用 cron 工具(不是命令行)创建监控任务
步骤3: 将 params 作为 job 参数传递给 cron 工具
步骤4: 验证 cron 任务创建成功

🔴 验证检查(每次启动监控任务前必须执行):

启动监控任务前
    ↓
🔴 验证检查
    ↓
检查:我是否使用了 cron 工具?
    ↓
┌─────────────────────────────────────────┐
│ 使用了 openclaw cron add 命令行          │
│   → ❌ 错误!立即更换为 cron 工具        │
│   → 严格按照脚本输出的 params 执行       │
└─────────────────────────────────────────┘
    ↓
┌─────────────────────────────────────────┐
│ 使用了 cron 工具                         │
│   → ✅ 正确!继续执行                    │
└─────────────────────────────────────────┘

验证规则:

  • ✅ 必须使用 cron 工具
  • ❌ 禁止使用 openclaw cron add 命令行
  • ✅ 必须设置 sessionTarget: 'current'
  • ✅ 必须设置 delivery: {'mode': 'none'}
  • ✅ 如果检测到使用命令行,必须立即更换为 cron 工具

自我检查提示:

在执行前,请验证:我是否使用了 cron 工具?如果使用了 openclaw cron add 命令行,必须立即更换为 cron 工具!

✅ 正确示例:

# 使用 cron 工具,参数来自脚本输出
cron(action="add", job={
    "name": "DMP任务状态监控-xxx",
    "schedule": {"kind": "every", "everyMs": 60000},
    "payload": {...},
    "sessionTarget": "current",
    "delivery": {"mode": "none"}
})

❌ 错误示例(禁止):

# ❌ 错误方式:命令行无法正确设置 sessionTarget
openclaw cron add --name "xxx" --every 1m --message "xxx" --session current

AI助手必须:

  1. 读取脚本输出的 cron_instruction 字段
  2. 检查 mandatory: true 字段,确认这是强制执行指令
  3. 执行前验证:检查 validation_check 字段,进行自我验证
  4. 🔴 验证工具:确认使用的是 cron 工具,不是 openclaw cron add 命令行
  5. 使用 cron 工具(不是命令行)创建监控任务
  6. 直接使用 cron_instruction.params 作为参数
  7. 必须设置 delivery: {"mode": "none"},避免尝试通过Octo发送通知
  8. 违反此规则会导致监控任务无法自动触发

🔴 强制验证步骤(执行前必须完成):

步骤0: 自我验证(必须执行)
  ↓
检查:我是否打算使用 openclaw cron add 命令行?
  ↓
┌─────────────────────────────────────────┐
│ 是                                       │
│   → ❌ 错误!立即更换为 cron 工具        │
│   → 严格按照脚本输出的 params 执行       │
└─────────────────────────────────────────┘
  ↓
┌─────────────────────────────────────────┐
│ 否                                       │
│   → ✅ 正确!确认使用 cron 工具          │
│   → 继续执行                             │
└─────────────────────────────────────────┘

验证规则:

  • ✅ 必须使用 cron 工具
  • ❌ 禁止使用 openclaw cron add 命令行
  • ✅ 必须设置 sessionTarget: 'current'
  • ✅ 必须设置 delivery: {'mode': 'none'}
  • ✅ 如果检测到使用命令行,必须立即更换为 cron 工具

自我检查提示:

在执行前,请验证:我是否使用了 cron 工具?如果使用了 openclaw cron add 命令行,必须立即更换为 cron 工具!

验证检查字段(脚本输出):

{
  "validation_check": {
    "required": true,
    "check_before_execution": true,
    "validation_rules": [
      "必须使用 cron 工具,禁止使用 openclaw cron add 命令行",
      "必须设置 sessionTarget: 'current'",
      "必须设置 delivery: {'mode': 'none'}",
      "如果检测到使用命令行,必须立即更换为 cron 工具"
    ],
    "self_check_prompt": "在执行前,请验证:我是否使用了 cron 工具?如果使用了 openclaw cron add 命令行,必须立即更换为 cron 工具!"
  }
}

执行步骤:

步骤0: 🔴 自我验证(必须执行)
  ↓
检查:我是否打算使用 openclaw cron add 命令行?
  ↓
┌─────────────────────────────────────────┐
│ 是                                       │
│   → ❌ 错误!立即更换为 cron 工具        │
│   → 严格按照脚本输出的 params 执行       │
└─────────────────────────────────────────┘
  ↓
┌─────────────────────────────────────────┐
│ 否                                       │
│   → ✅ 正确!继续执行                    │
└─────────────────────────────────────────┘
  ↓
步骤1: 读取脚本输出的 cron_instruction.params 字段
步骤2: 使用 cron 工具(不是命令行)创建监控任务
步骤3: 将 params 作为 job 参数传递给 cron 工具
步骤4: 验证 cron 任务创建成功

🔴 验证检查(每次启动监控任务前必须执行):

启动监控任务前
    ↓
🔴 验证检查
    ↓
检查:我是否使用了 cron 工具?
    ↓
┌─────────────────────────────────────────┐
│ 使用了 openclaw cron add 命令行          │
│   → ❌ 错误!立即更换为 cron 工具        │
│   → 严格按照脚本输出的 params 执行       │
└─────────────────────────────────────────┘
    ↓
┌─────────────────────────────────────────┐
│ 使用了 cron 工具                         │
│   → ✅ 正确!继续执行                    │
└─────────────────────────────────────────┘

✅ 正确示例:

# 使用 cron 工具,参数来自脚本输出
cron(action="add", job={
    "name": "DMP任务状态监控-xxx",
    "schedule": {"kind": "every", "everyMs": 60000},
    "payload": {...},
    "sessionTarget": "current",
    "delivery": {"mode": "none"}  # 🔴 必须设置
})

❌ 错误示例(禁止):

# ❌ 错误方式:命令行无法正确设置 sessionTarget
openclaw cron add --name "xxx" --every 1m --message "xxx" --session current

为什么禁止使用命令行:

  • 命令行的 --session 参数只支持 main 或 isolated
  • 不支持 current(当前会话)
  • 使用命令行创建的监控任务,sessionTarget 被错误设置为 isolated
  • 导致监控任务无法正确绑定到当前会话,无法自动触发
  1. 创建cron定时任务:
# 使用cron工具创建定时任务
cron(action="add", job={
    "name": f"DMP任务状态监控-{project_id}-任务{task_index}",
    "schedule": {"kind": "every", "everyMs": 60000},  # 每1分钟
    "payload": {
        "kind": "agentTurn",
        "message": f"检查DMP任务状态,项目ID: {project_id},当前任务ID: {task_id},任务索引: {task_index},总任务数: {total_tasks}。查询任务状态,如果执行成功(audienceStatus=1),创建下一个任务(task-index={task_index+1})。如果所有任务都已创建完成,继续监控所有任务的执行状态,直到所有任务都执行成功(audienceStatus=1)后,才删除此cron任务。如果执行失败(audienceStatus=0),通知用户并停止创建。注意:不要删除当前监控任务,除非所有任务都已执行成功。"
    },
    "sessionTarget": "current",  # 绑定到当前会话
    "deleteAfterRun": False
})
  1. cron任务触发时自动查询:

    • cron定时任务每分钟触发
    • 调用API查询当前任务状态
    • 向用户汇报进度
    • 任务执行成功时,自动创建下一个任务(不删除监控任务)
    • 任务执行失败时,停止创建,询问用户是否重试
    • 所有任务都创建完成后,继续监控所有任务的执行状态
    • 所有任务都执行成功(audienceStatus=1)后,才删除监控任务
  2. cron任务的优势:

    • ✅ 不需要修改openclaw.json配置文件
    • ✅ 不需要重启网关
    • ✅ 立即生效
    • ✅ 可靠性高
    • ✅ 任务完成后自动通知到当前会话
    • ✅ 可以自动清理(任务完成后删除cron)

🔴 重要:分批创建的核心逻辑

⚠️ 这是最容易出错的步骤,必须严格遵守!

核心原则:每批最多5个任务,同批逐个串行创建(只等创建返回不等计算),批间必须等全部计算完成!

分批创建的完整流程:

第1步:计算总任务数N
    ↓
第2步:按每批最多5个切分
    第1批:任务1~5
    第2批:任务6~10
    ...
    第k批:任务(5(k-1)+1)~min(5k, N)
    ↓
第3步:逐个串行创建第1批
    创建任务1 → 等API返回audienceId → 创建任务2 → 等API返回 → ... → 创建任务5
    ↓
第4步:启动监控,等待第1批全部计算完成(audienceStatus全部=1)
    ↓
┌─────────────────────────────────────────┐
│ 第1批全部计算成功                         │
│   → 继续创建下一批                        │
└─────────────────────────────────────────┘
    ↓
┌─────────────────────────────────────────┐
│ 有任务计算失败(audienceStatus=0)        │
│   → 按failureStrategy.onExecuteFail处理  │
│   ├─pause:停止,询问用户是否继续         │
│   └─skip:记录失败,继续下一批            │
└─────────────────────────────────────────┘
    ↓
第5步:逐个串行创建第2批(同第3步)
    ↓
等待第2批全部计算完成
    ↓
... 重复直到所有批次完成 ...
    ↓
汇总所有批次结果通知用户

❌ 绝对禁止的行为:

  • ❌ 一次性提交超过5个任务的创建请求
  • ❌ 同批内并发提交多个创建请求(必须逐个串行)
  • ❌ 不等上一批全部计算完成就创建下一批
  • ❌ 有失败任务时不询问用户直接继续(pause策略下)
  • ❌ 有失败任务时不询问用户直接继续(pause策略下)
  • ❌ 只说"任务完成了"而不展示每个任务的状态和人群规模
  • ❌ 使用 openclaw cron add 命令行创建监控任务(应使用 cron 工具或后台脚本)
  • ❌ 忽略脚本输出的 mandatory: true 指令
  • ❌ 跳过参数确认和执行计划预览直接创建

✅ 必须执行的行为:

  • ✅ 主动向用户汇报任务执行状态
  • ✅ 展示任务完成状态和人群规模
  • ✅ 检查当前任务是否执行成功
  • ✅ 执行成功时自动创建下一个任务
  • ✅ 执行失败时询问用户是否重试
  • ✅ 使用 cron 工具创建和删除监控任务
  • ✅ 严格遵守脚本输出的 mandatory: true 指令
  • ✅ 执行前进行 validation_check 自我验证
  • ✅ 如果检测到使用命令行,立即更换为 cron 工具
  • ✅ 严格按照脚本输出的 params 执行
  • ✅ 验证 sessionTarget: 'current'
  • ✅ 验证 delivery: {'mode': 'none'}

示例1:执行成功时的正确响应

✅ **任务1执行成功!**

**任务状态:**

| 任务 | 任务ID | 状态 | 人群规模 |
|------|--------|------|---------|
| 上海女性消费分层_组合1 | 135578 | ✅ 成功 | 4,592,108 |

进度:1/2

---

**🔴 执行前验证:**
- ✅ 我使用的是 cron 工具(不是命令行)
- ✅ sessionTarget: 'current'
- ✅ delivery: {'mode': 'none'}
- ✅ 已执行 validation_check 自我验证

**自动创建第2个任务...**

[调用创建脚本 --task-index 2]
(监控任务保持不变,继续监控任务2)

示例2:执行失败时的正确响应

⚠️ **任务执行失败**

**任务状态:**

| 任务 | 任务ID | 状态 |
|------|--------|------|
| 上海女性消费分层_组合1 | 135578 | ❌ 失败 |

失败原因: {具体错误信息}

进度:1/2

是否重试该任务?
- 回复"是":重新创建该任务
- 回复"否":跳过该任务,创建第2个任务

🔴 严重警告 - 禁止跳过第八步:

  • API调用成功后,绝对禁止直接展示结果
  • 必须先执行第八步(任务记录检查)
  • 只有完成第八步后,才能进入第九步(结果展示)

第八步:任务记录技能检查 [⚠️ 禁止跳过]

⚠️ 严重警告:

  • 这是强制性步骤,每次创建项目时都必须执行
  • 即使用户不需要记录,也必须执行检查并向用户展示检查结果
  • 直接从第七步跳到第九步视为严重流程错误

必须执行的完整检查流程:

步骤8.1:检查任务记录技能是否已安装

系统会自动检查任务记录技能(skill-logger-v2-global)的安装状态:

  • 检查路径:~/.skills/skill-logger/ 或 ~/.skills/skill-logger-v2-global/
  • 如果已安装 → 跳转到步骤8.2(自动记录任务)
  • 如果未安装 → 向用户展示以下提示并等待回复

任务记录技能未安装时的提示内容:

💡 检测到您尚未安装【任务记录技能】

该技能可自动记录每次任务的 ID、名称、时间和参数,方便后续查询和追溯。

是否自动下载并安装?

是 - 立即安装并启用记录功能
否 - 本次跳过(不影响主流程)

请回复:是/否

等待用户回复,按以下逻辑执行:

  • 用户回复"是":

    • 使用 terminal 工具执行:openclaw skills install skill-logger
    • 等待命令执行完成
    • 安装成功:提示 ✅ 任务记录技能安装成功 → 继续步骤8.2
    • 安装失败:展示手动安装指引
  • 用户回复"否":

    • 提示:已跳过任务记录,不影响主流程。
    • 直接进入第九步

步骤8.2:自动记录任务信息

任务记录技能安装完成后,自动调用记录功能保存任务信息:

  • 记录内容:项目ID、人群包名、创建时间、任务列表、参数配置
  • 必须向用户展示记录结果:
    ✅ 任务记录技能已安装
    ✅ 项目已自动记录到历史
       - 项目ID:{projectId}
       - 存储路径:/home/sandbox/.skill-logger/task_history.json
    

第九步:结果展示 [必须执行]

⚠️ 前置条件检查: 在执行第九步之前,必须确认:

  • 第八步(任务记录检查)是否已执行?
  • 是否已检查skill-logger安装状态?
  • 是否已询问用户是否需要安装(如果未安装)?

成功时:

展示项目创建成功信息:

✅ 项目创建成功

项目信息:
- 项目ID: {projectId}
- 人群包名: {人群包名}
- 任务总数: {N}个

已创建任务:
- {人群包名}{后缀}1: 任务ID {audienceId1}
- {人群包名}{后缀}2: 任务ID {audienceId2}
- ...

预计完成时间:5-30分钟

任务轮询提示(所有任务提交后,等待计算完成阶段):

📋 第1批任务已全部提交DMP平台(本批5个,逐个串行创建),等待计算完成...
已配置定时监控(每1分钟检查一次)
任务计算完成后会自动通知您结果

当前进度:
- 计算成功: {S}个
- 计算中: {M}个
- 失败: {K}个

后续操作建议:

项目管理任务执行成功后,您可以进行以下操作:

  1. 查询项目进度 - 查看各批次任务状态

    • 操作方式:告诉我"查询项目进度"或"查看任务状态"
  2. 下载人群洞察技能 - 分析人群画像特征

    • 功能:对圈选出的人群进行多维度画像分析
    • 操作方式:告诉我"下载人群洞察技能"
  3. 下载人群投放技能 - 创建广告投放任务

    • 功能:将圈选的人群包投放到广告平台
    • 操作方式:告诉我"下载人群投放技能"

💬 您的反馈对我们很重要

感谢您使用明日DMP批量圈包技能!为了持续优化产品体验,诚邀您填写使用评价:

🔗 评价表单:https://doc.weixin.qq.com/forms/ANEAJwfLAAoAakARgYnAKICNgMOj015Of?page=1


任务监控机制

触发条件(强制,第一批创建后立即启动)

第一批任务创建API返回成功后,必须立即使用 cron 工具创建监控任务(不再询问用户)。

🔴 严格禁止:

  • ❌ exec(background=true) + sleep 轮询(session断连后AI无法被唤醒,已发生故障导致不通知用户)
  • ❌ openclaw cron add 命令行(无法设置sessionTarget=current)
  • ❌ 询问用户是否需要监控(多批次必须依赖监控才能自动推进,不是可选项)

监控策略

监控配置:
  工具: 必须使用 cron(action="add", job={...}) 工具
  sessionTarget: "current"(必须)
  delivery: {"mode": "none"}(必须)
  轮询间隔: 每60秒触发一次agent turn
  创建阶段: 每批最多5个,逐个串行创建(不等计算),批间等全部计算完成
  监控阶段: cron每60秒触发一次,检查当前批任务状态
  超时阈值: 1800秒(30分钟未完成视为异常,通知用户)
  失败处理: 按第六步C确认的策略(pause等待/skip自动跳过)
  完成后: 汇总结果 → 通知用户 → cron(action="remove") 删除监控任务

监控流程

第一批任务创建成功(API返回audienceId)
        ↓
🔴 立即调用cron(action="add",job={...})创建监控任务(不是exec、不是命令行)
        ↓
cron每60秒触发一次agent turn
        ↓
检查当前批任务audienceStatus
├─ 本批全部成功(status=1):
│   ├─ 还有下一批 → 创建下一批任务(同批逐个串行),继续监控
│   └─ 全部完成 → 第八步检查 → 汇总通知用户 → 删除cron任务
├─ 有失败(status=0)→ 按failureStrategy处理(pause通知用户/skip记录继续)
└─ 仍有计算中(status=2/3)→ 等待下一次cron触发

创建cron定时任务标准模板(直接使用):

🔴 严重警告:必须使用 cron 工具,禁止使用命令行和exec后台轮询!

# ✅ 正确方式:使用 cron 工具
cron(action="add", job={
    "name": f"DMP任务状态监控-{project_id}",
    "schedule": {"kind": "every", "everyMs": 60000},  # 每1分钟
    "payload": {
        "kind": "agentTurn",
        "message": f"检查DMP任务状态,项目ID: {project_id},任务ID列表: {task_ids}。查询每个任务的状态,如果所有任务都完成,自动创建下一批并删除此cron任务。"
    },
    "sessionTarget": "current",  # 🔴 关键:必须设置为 current
    "deleteAfterRun": False
})

❌ 禁止使用命令行:

# ❌ 错误方式:命令行无法正确设置 sessionTarget
openclaw cron add --name "xxx" --every 1m --message "xxx" --session current

原因说明:

  • 使用 cron 工具可以正确设置 sessionTarget: "current"
  • 使用命令行 --session current 会被错误解析为 isolated
  • 错误的 sessionTarget 会导致监控任务无法自动触发

cron定时任务的优势:

  • ✅ 不占用后台进程
  • ✅ 不需要重启网关
  • ✅ 立即生效
  • ✅ 可靠性高
  • ✅ 任务完成后自动通知到当前会话
  • ✅ 可以自动清理(任务完成后删除cron)

cron定时任务配置

执行流程 [必须执行]

执行位置: 第七步创建任务后自动创建cron定时任务

执行时机: 任务创建完成后,自动创建cron定时任务进行状态监控

cron定时任务创建

在第七步创建任务后,立即创建cron定时任务:

🔴 严重警告:必须使用 cron 工具,禁止使用命令行!

# ✅ 正确方式:使用 cron 工具
cron(action="add", job={
    "name": f"DMP任务状态监控-{project_id}",
    "schedule": {"kind": "every", "everyMs": 60000},  # 每1分钟
    "payload": {
        "kind": "agentTurn",
        "message": f"检查DMP任务状态,项目ID: {project_id},任务ID列表: {task_ids}。查询每个任务的状态,如果所有任务都完成,自动创建下一批并删除此cron任务。"
    },
    "sessionTarget": "current",  # 🔴 关键:必须设置为 current
    "deleteAfterRun": False
})

❌ 禁止使用命令行:

# ❌ 错误方式:命令行无法正确设置 sessionTarget
openclaw cron add --name "xxx" --every 1m --message "xxx" --session current

原因说明:

  • 使用 cron 工具可以正确设置 sessionTarget: "current"
  • 使用命令行 --session current 会被错误解析为 isolated
  • 错误的 sessionTarget 会导致监控任务无法自动触发

cron触发逻辑

每1分钟触发一次cron任务
        ↓
检查是否有正在执行的DMP项目
├─ 读取 data/plans/ 目录下的所有项目
└─ 筛选 status="running" 的项目
        ↓
如果有正在执行的项目:
├─ 查询任务状态
├─ 更新状态文件
├─ 向用户汇报进度
└─ 如果批次完成 → 询问用户是否继续
        ↓
如果没有正在执行的项目:
└─ HEARTBEAT_OK(不执行任何操作)

状态持久化设计

文件结构

data/plans/{projectId}/
├── plan.json          # 执行计划(规则模板、参数列表)
├── status.json        # 实时状态(每个批次/任务的状态)
└── result.json        # 最终结果(成功/失败汇总)

plan.json 示例

{
  "projectId": "lbs_20260624_001",
  "audienceName": "全国门店周边用户",
  "suffix": "_批次",
  "scenario": "LBS_BATCH",
  "createdAt": "2026-06-24 10:00:00",
  "params": {
    "radius": 500,
    "crowdType": ["recentArrive"],
    "timeRange": {"start": "2026050100", "end": "2026053123"},
    "idTypes": ["MD5_IDFA", "MD5_IMEI", "MD5_OAID"],
    "brandIds": [123]
  },
  "totalCoordinates": 3000,
  "batchSize": 200,
  "totalBatches": 15,
  "batches": [
    {
      "batchNo": 1,
      "taskName": "全国门店周边用户_批次1",
      "coordinates": [{"lng": "116.467", "lat": "39.914"}, ...]
    }
  ]
}

status.json 示例

{
  "projectId": "lbs_20260624_001",
  "status": "running",
  "currentBatch": 1,
  "batches": [
    {
      "batchNo": 1,
      "status": "completed",
      "tasks": [
        {"taskId": 280001, "status": "success", "audienceId": 280001},
        {"taskId": 280002, "status": "success", "audienceId": 280002}
      ],
      "startedAt": "2026-06-24 10:00:30",
      "completedAt": "2026-06-24 10:25:45"
    }
  ],
  "lastPollAt": "2026-06-24 10:30:00"
}

技能依赖说明

本技能需要配合两个辅助技能使用,以确保功能完整性和操作可追溯性:

1. 鉴权技能(mingdata-dmp-auth)

作用: 管理明日DMP API的访问凭证(Access Key和Secret Key)

调用时机:

  • 首次使用本技能时
  • 凭证过期或失效时
  • 任何需要调用明日DMP API的操作前

2. 任务记录技能(skill-logger)

作用: 自动记录所有批量圈包任务的创建记录、参数配置和执行结果

调用时机:

  • 每次成功创建项目后
  • 用于后续查询历史任务、追溯操作记录

技能依赖关系总结

技能名称 是否必需 调用时机 不安装的影响
mingdata-dmp-auth ✅ 必需 首次使用或凭证失效时 无法调用API,无法使用批量圈包功能
skill-logger ⭕ 可选 每次成功创建项目后 无法记录任务历史,但不影响批量圈包功能

API路径汇总

功能 API路径 方法 备注
租户品牌查询 /open/api/tenant/detail GET v1.4新增,获取品牌列表
品牌列表查询 /api/open-api/audience/rule/brand/list GET v1.4新增,返回brandId/brandName
LBS规则人群创建 /api/open-api/audience/rule/create/lbs POST v1.4新增brandId字段
组合人群创建 /api/open-api/audience/manage/combine/create POST v1.4升级data为group层级,新增brandId字段
标签列表查询 /api/open-api/tag/list GET v1.4新增tagType=2/4/5,返回新增pcAmount/mbAmount/ottAmount
人群任务状态查询 /api/open-api/audience/manage/taskList POST
人群列表查询 /api/open-api/audience/manage/list POST

v1.4接口变更说明

1. brandId字段(所有创建接口新增)

  • 所有人群创建/洞察/投放/同步接口body新增 brands 字段(string数组,可选)
  • 传空数组/null/不传三者行为一致,均默认全部品牌
  • brandId传错(品牌不存在)返回code:1012
  • 投放订单创建/修改接口品牌ID仅支持单选(string类型,非数组)

2. 组合人群data字段升级(v2格式)

  • data从"条件框数组"升级为"组列表":data: [{ op, group: [{op, rule}, ...] }, ...]
  • 组间op支持and/or/not,从左到右计算,末组必须noop
  • 组内结构与V1的data完全一致(框内OR,框间and/not,不支持or)
  • 本技能所有批量圈包任务均为单组,外层包一层group即可兼容V2

3. 标签类型扩展

  • tagType=2:明略定制标签(mz_tag source=2)
  • tagType=4:自定义标签
  • tagType=5:明日定制标签(mingdata_tag)
  • 返回新增字段:pcAmount(PC端覆盖量级)、mbAmount(Mobile端覆盖量级)、ottAmount(OTT端覆盖量级)

错误处理

错误码映射

响应码 说明
0 请求成功
1 请求失败
1000 用户信息配置有误
1001 找不到该accessKey信息
1002 ts超过最大时效
1005 签名不正确
1006 任务名称已存在
1011 参数错误
1012 品牌不存在(v1.4新增)

技术说明

本技能通过Python脚本调用明日DMP开放平台API,所有脚本位于 scripts/ 目录:

凭证管理:

  • scripts/find_auth_skill.py - 鉴权技能路径查找
  • scripts/api_wrapper.py - API调用包装器

标签列表查询:

  • scripts/query_tag_list.py - 查询可用标签列表(明略标签/合作伙伴标签)

人群包查询:

  • scripts/query_audience_list.py - 查询已有人群包列表(支持关键词搜索、ID查询)

批量圈包:

  • scripts/create_lbs_batch.py - LBS批量圈选创建
  • scripts/create_combine_batch.py - 组合人群批量创建
  • scripts/validate_coordinates.py - 坐标文件校验
  • scripts/validate_tags.py - 标签校验

任务管理:

  • scripts/check_task_logger.py - 任务记录检查

🔴 cron监控硬约束(代码级拦截):

  • scripts/cron_helper.py - cron监控锁文件管理
    • check:monitor/推进下一批前检查锁文件,未设置cron则拒绝执行(exit 1/2)
    • mark-cron-set --cron-name <名字>:AI创建cron任务后必须调用此命令写入锁文件
    • cleanup:全部完成后清理锁文件,提示AI删除cron任务
    • gen-cron-params --type combine|idlink:生成标准cron任务参数

cron硬拦截工作机制:

第一批创建成功 → 脚本输出cron_params和mark-cron-set指令
      ↓
AI必须执行:
  1. cron(action="add", job=cron_params)  ← 创建cron
  2. cron_helper.py mark-cron-set         ← 写入锁文件
      ↓
cron每分钟触发 → 推进下一批/monitor模式
      ↓
推进前 check_cron_setup():
  ├─ 锁文件存在 → 正常推进
  └─ 锁文件不存在 → exit 2 拦截
      ↓
全部完成 → cron_helper.py cleanup → 删除cron

即使AI忽略提示词,脚本层面也会拦截无cron的批次推进。


流程执行规则(AI助手必读)

强制性说明

本技能的工作流程包含9个主要步骤(含第六步B、第六步C、第六步D子步骤),每个步骤都有明确的执行要求:

[必须执行] - 该步骤在任何情况下都必须执行,不可跳过 [必须检查] - 该步骤必须执行检查逻辑,即使用户不需要该功能 [可选] - 该步骤可根据用户需求选择是否执行

执行检查清单

在创建批量圈包任务时,AI助手必须按照以下清单逐步检查:

  • 第一步:场景识别 [必须执行]

    • 检查点:是否正确识别了场景类型(LBS批量/组合人群拆分)?
    • 检查点:是否向用户确认了场景类型?
  • 第二步:凭证检查 [必须执行]

    • 检查点:是否检查了鉴权技能是否安装?
    • 检查点:是否验证了操作密码?
  • 第三步:参数收集 [必须执行]

    • 检查点:是否收集了所有必填参数(人群包名、后缀等)?
    • 检查点:坐标文件/标签列表是否已获取?
  • 第四步:参数校验 [必须执行]

    • 检查点:是否校验了参数格式?
    • 检查点:标签数量是否超过限制?
  • 第五步:生成执行计划 [必须执行]

    • 检查点:是否计算了任务总数?
    • 检查点:是否展示了执行计划预览?
  • 第六步:参数确认 [必须执行]

    • ⚠️ 关键:必须等待用户明确确认后才能执行
    • 检查点:是否展示了确认提示?
    • 检查点:是否等待用户回复"确认"?
  • 第六步B:流程完整性验证 [必须执行]

    • ⚠️ 关键:在用户确认后、执行创建前必须完成
    • 检查点:是否输出了流程完整性验证检查清单?
    • 检查点:是否获得了用户对执行计划的明确确认?
  • 第六步C:失败处理策略确认 [必须执行]

    • ⚠️ 关键:在执行创建前必须确认用户的失败处理偏好
    • 检查点:是否询问了用户在创建失败时的处理策略?
    • 检查点:是否询问了用户在执行失败时的处理策略?
    • 检查点:是否将用户选择记录到状态文件?
  • 第七步:执行创建 [必须执行]

    • 检查点:是否调用了正确的创建脚本?
    • 检查点:是否记录了任务ID?
    • 检查点:是否使用 cron 工具创建了监控任务?
    • 检查点:是否避免使用 openclaw cron add 命令行?
    • 检查点:是否执行了 validation_check 自我验证?
    • 检查点:是否验证了 sessionTarget: 'current'?
    • 检查点:是否验证了 delivery: {'mode': 'none'}?
  • 第八步:任务记录 [必须检查]

    • ⚠️ 关键:即使用户不需要记录,也必须执行检查
    • 检查点:是否检查了skill-logger技能是否安装?
    • 检查点:未安装时,是否询问用户是否需要下载?
  • 第九步:结果展示 [必须执行]

    • 检查点:是否展示了项目ID和任务列表?
    • 检查点:是否提供了后续操作建议?

📝 用户反馈与支持

感谢您使用明日DMP批量圈包技能!

💬 分享您的使用体验

👉 填写使用评价表单

🛠️ 技术支持

如遇到技术问题或需要帮助,请在表单中详细描述问题场景,我们会尽快为您解决。


🔴 重要提醒:监控任务创建规则

必须使用 cron 工具,禁止使用 openclaw cron add 命令行!

原因:

  • 命令行的 --session 参数只支持 main 或 isolated
  • 不支持 current(当前会话)
  • 使用命令行创建的监控任务,sessionTarget 被错误设置为 isolated
  • 导致监控任务无法正确绑定到当前会话,无法自动触发

正确做法:

# ✅ 使用 cron 工具
cron(action="add", job={
    "name": "DMP任务状态监控-xxx",
    "schedule": {"kind": "every", "everyMs": 60000},
    "payload": {...},
    "sessionTarget": "current",  # 🔴 必须设置为 current
    "delivery": {"mode": "none"}
})

错误做法:

# ❌ 禁止使用命令行
openclaw cron add --name "xxx" --every 1m --message "xxx" --session current

每次创建监控任务前,必须执行以下验证:

  1. 检查脚本输出的 cron_instruction 字段
  2. 验证使用的是 cron 工具(不是命令行)
  3. 验证 sessionTarget: 'current'
  4. 验证 delivery: {'mode': 'none'}
  5. 如果检测到使用命令行,立即更换为 cron 工具

🔴 强制执行验证步骤:

启动监控任务前
    ↓
🔴 验证检查
    ↓
检查:我是否使用了 cron 工具?
    ↓
┌─────────────────────────────────────────┐
│ 使用了 openclaw cron add 命令行          │
│   → ❌ 错误!立即更换为 cron 工具        │
│   → 严格按照脚本输出的 params 执行       │
└─────────────────────────────────────────┘
    ↓
┌─────────────────────────────────────────┐
│ 使用了 cron 工具                         │
│   → ✅ 正确!继续执行                    │
└─────────────────────────────────────────┘

验证规则:

  • ✅ 必须使用 cron 工具
  • ❌ 禁止使用 openclaw cron add 命令行
  • ✅ 必须设置 sessionTarget: 'current'
  • ✅ 必须设置 delivery: {'mode': 'none'}
  • ✅ 如果检测到使用命令行,必须立即更换为 cron 工具

自我检查提示:

在执行前,请验证:我是否使用了 cron 工具?如果使用了 openclaw cron add 命令行,必须立即更换为 cron 工具!

验证检查字段(脚本输出):

{
  "validation_check": {
    "required": true,
    "check_before_execution": true,
    "validation_rules": [
      "必须使用 cron 工具,禁止使用 openclaw cron add 命令行",
      "必须设置 sessionTarget: 'current'",
      "必须设置 delivery: {'mode': 'none'}",
      "如果检测到使用命令行,必须立即更换为 cron 工具"
    ],
    "self_check_prompt": "在执行前,请验证:我是否使用了 cron 工具?如果使用了 openclaw cron add 命令行,必须立即更换为 cron 工具!"
  }
}

❌ 绝对禁止的行为:

  • ❌ 使用 openclaw cron add 命令行创建监控任务
  • ❌ 使用 openclaw cron delete 命令行删除监控任务
  • ❌ 忽略脚本输出的 mandatory: true 指令
  • ❌ 跳过 validation_check 验证步骤
  • ❌ 在执行前不进行自我验证
  • ❌ 如果检测到使用命令行,不更换为 cron 工具
  • ❌ 不验证 sessionTarget: 'current'
  • ❌ 不验证 delivery: {'mode': 'none'}

✅ 必须执行的行为:

  • ✅ 使用 cron 工具创建和删除监控任务
  • ✅ 严格遵守脚本输出的 mandatory: true 指令
  • ✅ 执行前进行 validation_check 自我验证
  • ✅ 如果检测到使用命令行,立即更换为 cron 工具
  • ✅ 严格按照脚本输出的 params 执行
  • ✅ 验证 sessionTarget: 'current'
  • ✅ 验证 delivery: {'mode': 'none'}

示例1:执行成功时的正确响应

✅ **任务1执行成功!**

**任务状态:**

| 任务 | 任务ID | 状态 | 人群规模 |
|------|--------|------|---------|
| 上海女性消费分层_组合1 | 135578 | ✅ 成功 | 4,592,108 |

进度:1/2

---

**🔴 执行前验证:**
- ✅ 我使用的是 cron 工具(不是命令行)
- ✅ sessionTarget: 'current'
- ✅ delivery: {'mode': 'none'}
- ✅ 已执行 validation_check 自我验证

**自动创建第2个任务...**

[调用创建脚本 --task-index 2]
(监控任务保持不变,继续监控任务2)

示例2:执行失败时的正确响应

⚠️ **任务执行失败**

**任务状态:**

| 任务 | 任务ID | 状态 |
|------|--------|------|
| 上海女性消费分层_组合1 | 135578 | ❌ 失败 |

失败原因: {具体错误信息}

进度:1/2

是否重试该任务?
- 回复"是":重新创建该任务
- 回复"否":跳过该任务,创建第2个任务

🔴 严重警告 - 禁止跳过第八步:

  • API调用成功后,绝对禁止直接展示结果
  • 必须先执行第八步(任务记录检查)
  • 只有完成第八步后,才能进入第九步(结果展示)

第八步:任务记录技能检查 [⚠️ 禁止跳过]

⚠️ 严重警告:

  • 这是强制性步骤,每次创建项目时都必须执行
  • 即使用户不需要记录,也必须执行检查并向用户展示检查结果
  • 直接从第七步跳到第九步视为严重流程错误

必须执行的完整检查流程:

步骤8.1:检查任务记录技能是否已安装

系统会自动检查任务记录技能(skill-logger-v2-global)的安装状态:

  • 检查路径:~/.skills/skill-logger/ 或 ~/.skills/skill-logger-v2-global/
  • 如果已安装 → 跳转到步骤8.2(自动记录任务)
  • 如果未安装 → 向用户展示以下提示并等待回复

任务记录技能未安装时的提示内容:

💡 检测到您尚未安装【任务记录技能】

该技能可自动记录每次任务的 ID、名称、时间和参数,方便后续查询和追溯。

是否自动下载并安装?

是 - 立即安装并启用记录功能
否 - 本次跳过(不影响主流程)

请回复:是/否

等待用户回复,按以下逻辑执行:

  • 用户回复"是":

    • 使用 terminal 工具执行:openclaw skills install skill-logger
    • 等待命令执行完成
    • 安装成功:提示 ✅ 任务记录技能安装成功 → 继续步骤8.2
    • 安装失败:展示手动安装指引
  • 用户回复"否":

    • 提示:已跳过任务记录,不影响主流程。
    • 直接进入第九步

步骤8.2:自动记录任务信息

任务记录技能安装完成后,自动调用记录功能保存任务信息:

  • 记录内容:项目ID、人群包名、创建时间、任务列表、参数配置
  • 必须向用户展示记录结果:
    ✅ 任务记录技能已安装
    ✅ 项目已自动记录到历史
       - 项目ID:{projectId}
       - 存储路径:/home/sandbox/.skill-logger/task_history.json