deerflow-code/offline-backend-20260512/backend/skill-packages/add-audience/SKILL.md
2026-09-07 18:24:55 +08:00

4.6 KiB
Raw Permalink Blame History

name description allowed-tools
add-audience 添加受众目标入库:校验受众JSON载荷,登录任务系统后按完整链路(查重→删除同名受众及其关系表→创建受众目标→创建账号关联)调用接口,并如实回报每个接口的入参与调用结果。
read_file
bash

添加受众目标(完整链路入库)

当且仅当需要把分析产出的受众目标(含关联账号)写入任务系统时使用本 Skill。脚本会自动完成:登录鉴权 → 查重 → 删除同名受众(连带删除 task-action-pathway-account 关系表与脆弱点关联)→ 创建受众目标 → 创建账号关联。

前置条件

先用 write_file 把载荷写到 /mnt/user-data/outputs/add-audience-payload.json,结构如下(targetAudience 也可写作 groupName):

{
  "taskId": 101,
  "actionId": 201,
  "audienceList": [
    {
      "targetAudience": "18-30岁智能穿戴尝鲜用户",
      "recReason": "对新形态设备接受度高……",
      "userList": [
        {
          "id": "mock_fa_0001",
          "name": "极客评测室GeekBench",
          "platformType": 1,
          "platform": "facebook",
          "dataSource": "target",
          "score": 0.93,
          "metadata": { "...": "完整user对象会整体存入 frofileInfo" }
        }
      ]
    }
  ]
}
  • taskId / actionId 必须是整数,等于当前任务与行动 ID。
  • userList 每项是完整 user 对象:id、name 必填;platformType 写入 accountPlat——缺失时可只给 platform 平台名(如 facebook、instagram),脚本登录后自动查平台字典表(sys-dict-data,dictType=platform)按前端 platformTypeChange 同款规则映射为编码(未识别回退 1,两者都缺则置空);accountSource 优先取 dataSource,缺失时回退 score;整个对象 JSON 序列化后存入 frofileInfo。
  • recReason 中的 <n> 引用标记会被自动清洗,无需预处理。

完整字段定义、账号对象字段表与生成规则,见:

/mnt/skills/public/add-audience/docs/受众JSON生成规范.md

(custom 安装时把路径中的 public 换成 custom;需要生成载荷时,先读该规范再写 JSON。)

接口地址与鉴权配置

部署时编辑以下文件(安装到 custom 时把路径中的 public 换成 custom):

/mnt/skills/public/add-audience/config/audience_api.json
配置项 说明
base_url 任务系统地址(到端口,不带 /api),如 http://192.168.1.11:3912
username / password 登录账号(环境变量 AUDIENCE_API_USERNAME / AUDIENCE_API_PASSWORD 可覆盖)
request.verify_ssl 默认 false,已关闭 HTTPS 证书校验,适配自签名证书内网环境;公网环境建议改回 true
request.timeout_seconds 每个请求的超时秒数,默认 30

鉴权流程(脚本自动完成):POST {base_url}/api/auth/login(body {username, password})取 access_token,后续所有请求附加请求头 Authorization: Bearer {access_token}。

执行方式

python /mnt/skills/public/add-audience/scripts/add_audiences.py \
  --json /mnt/user-data/outputs/add-audience-payload.json

可加 --dry-run 只校验载荷并打印调用计划,不实际发送。环境变量覆盖地址:AUDIENCE_API_BASE_URL。

结果处理(必须如实转述)

脚本 stdout 是一段 JSON,其中:

  • 入参摘要:本次传入的 taskId/actionId 与每个受众组(名称、清洗后理由、账号数)——必须告知用户。
  • calls:每个接口的 method、url、请求体(密码与 token 已脱敏)、HTTP 状态与响应——必须汇总告知用户,特别是删除了哪些同名旧受众及其关系表记录、新建的 designId。
  • groups / summary / 人读摘要:分组结果与统计。

规则:

  • success: true:按 人读摘要 + groups 如实汇报新增/删除数量。
  • success: false:如实说明失败步骤与错误(如登录 401 → 提示检查 config 账号密码),不要假装调用成功,也不要静默吞掉失败。
  • 不要自己用 curl / requests 逐条调接口替代本 Skill;不要在未执行脚本的情况下宣称"已添加"。

同名受众处理策略

与前端行为一致:同名(targetAudience 相同)受众已存在时先删后建,删除链为:关系表 task-action-pathway-account(按 pathwayId 逐条)→ task-action-design/deleteDesignVulns?designId= → task-action-design/{id}。如用户只想要"跳过已存在"而非覆盖,需在执行前明确说明并由用户决策。