{"skill":{"slug":"marketup-uc","displayName":"MarketUP管理","summary":"Marketup CRM - detail/list search, advanced filtering, create, modify, assignment flows, history/behavior lookup, lead-to-account conversion, tags, and pool...","description":"---\nname: MarketUP管理\ndescription: Marketup CRM - detail/list search, advanced filtering, create, modify, assignment flows, history/behavior lookup, lead-to-account conversion, tags, and pool configuration workflows.\nmetadata:\n  {\"openclaw\":{\"requires\":{\"bins\":[\"curl\",\"jq\"]},\"primaryEnv\":\"MARKETUP_API_KEY\"}}\n---\n\n## 全局约束（最高优先级）\n\n- 在执行任何 Marketup API 调用前，先检查 `MARKETUP_API_KEY` 是否已存在于当前环境。\n- 若未设置 `MARKETUP_API_KEY`，先执行 `references/setup-marketup-api-key.md` 中定义的脚本流程，由脚本提示用户输入并写入全局 `~/.openclaw/.env`。\n- `MARKETUP_API_KEY` 缺失时，必须由 agent **直接执行**脚本流程；不要把脚本命令发给用户让用户手动执行。\n- 脚本执行后再次检查 `MARKETUP_API_KEY`：存在则继续任务；仍不存在则**停止所有 Marketup API 调用**，仅告知用户需先完成 API Key 配置并提示可重试。\n- **严禁**在未实际发起请求、未拿到接口响应前，向用户声称任何写操作已成功。\n- 所有写操作（分配、创建、修改、跟进、转客户、领取、退回、打标签等）必须依据接口返回后再总结结果。\n\n## 调用规范\n\n- 主域名：`https://uc.marketup.cn`\n- 凡用 `curl` 请求后端接口，必须带请求头：`Authorization: $MARKETUP_API_KEY`、`Referer: MarketUP-Skills`。\n- `GET` 的查询参数：使用**扁平**参数名；**不要**在参数名前加 `leadsRPO.`、`companyUserRPO.`、`rpo.` 等前缀（与代码里的包装对象名无关）。\n- `POST` 且 body 为 JSON 时：`Content-Type: application/json`，body 用 `-d @file.json` 或 `-d '{...}'`。\n- 失败时仅输出 HTTP 状态码或响应 JSON 的 `message`（无 `message` 时用 `code`），不推测原因。\n\n## 表单实体类型（查询字段定义）\n\n`GET /api/uc-open/formField/queryCurrentFields` 使用查询参数 `marketEntityType`（**数字**）：线索 `0`、客户 `2`、联系人 `3`。其它实体类型见 OpenAPI。\n\n---\n\n## 1. 搜索线索\n\n- 从用户话里取手机号或名称关键词；**优先手机号**。\n- **线索总数**：用户问「有多少条线索」等时，用列表接口：`page=1`、`size=1`，不传搜索条件（或仅依赖后端默认），从响应中取总条数字段（如 `data.totalElements`）回答。\n- **排序**：用户明确要求按某字段排序时，传 `sort`、`sortType`（与后端约定一致）；无需求不传。\n- **展示**：线索名称、联系人、手机、负责人、状态、创建时间。\n\n**接口**：`GET https://uc.marketup.cn/api/uc/v1/crm/leads/list`  \n常用查询参数示例：`page`、`size`、`type`（`-1` 表示全部线索）、`searchValue`、`cellphone`、`leadsName`、`sort`、`sortType`、`multipleGroupAdvancedQueryFilter`（高级筛选 JSON 字符串）。\n\n**快捷按名单/手机搜**：`GET https://uc.marketup.cn/api/uc/v1/crm/leads/searchLeadsByNameOrCellphone`，查询参数 `searchValue`。\n\n---\n\n## 2. 高级筛选搜索线索\n\n当条件超出手机/名称（时间、来源、标签、行为等）时：\n\n1. 根据用户描述构造**一条**符合后端要求的高级筛选 **JSON 字符串**（可与用户对齐字段含义）；意图类型可覆盖：线索属性、标签、来源、行为记录等。\n2. 调用列表接口，将 JSON 字符串放在查询参数 **`multipleGroupAdvancedQueryFilter`**；不要同时用手机/名称参数替代该 JSON（除非用户还要叠加简单条件，按后端能力传）。\n3. 需要排序时传 `sort`、`sortType`。\n4. 结果展示同普通搜索。\n\n---\n\n## 3. 创建线索\n\n流程：**取字段定义 → 收集并映射为 formFieldId → 调创建接口**。\n\n**第一步** `GET /api/uc-open/formField/queryCurrentFields?marketEntityType=0`  \n记录 `formFieldId`、`showName`、`required`、`dataType`、`options`。\n\n**第二步** 构建 `leads`：key 必须是 **数字字符串形式的 formFieldId**（如 `\"17263687\"`），value 为用户填写值；**禁止**用中文名或 `cellphone` 等逻辑名做 key。  \n必填缺失要列出字段名请用户补；枚举类值须在 options 范围内。\n\n**第三步** `POST https://uc.marketup.cn/api/uc/v1/crm/leads/saveLeads`  \nJSON body 使用 `LeadsSaveRPO` 形态，与工具一致的核心字段包括：`type`（单条保存为 `1`）、`leads`（对象）、`coverInfo`、`genCompanyAccount`、`assignType`、`autoAssign`、`notAssign`、`ownerCompanyUserId`、`sourceChannelId`、`remark`（可选，结构同跟进里的备注对象）等。  \n分配语义（互斥，与工具一致）：\n\n- 不分配：`notAssign: true`\n- 按规则自动分配：`assignType: 1` 且 `autoAssign: true`\n- 指定成员：`assignType: 2` 且 `ownerCompanyUserId` 为员工的 `companyUserId`（先搜员工或取当前用户）\n- 用户未说明分配方式：可不传分配相关字段，由后端默认\n\n创建成功后若有 `leadsId` 一并告知用户。\n\n---\n\n## 4. 修改线索字段\n\n- 解析目标线索（ID；若只有手机/名称则先列表搜索，唯一则取 `leadsId`，多条请用户确认）。\n- 再次 `GET .../queryCurrentFields?marketEntityType=0`，用 `showName` 匹配得到 **formFieldId**；禁止用字段名调修改接口。\n- **每个字段单独一次请求**：`POST https://uc.marketup.cn/api/uc/v1/crm/leads/modify/profileData?leadsId=<id>`，body JSON：`{ \"formFieldId\": <number>, \"value\": \"<string>\" }`。\n- 多字段依次请求，最后汇总成功/失败（失败原因仅来自接口响应，不臆测）。\n\n---\n\n## 5. 添加跟进记录\n\n- 已知 `leadsId`：直接调接口；仅手机/名称则先搜索确认 `leadsId`。\n- 无跟进内容请用户补充。\n\n**接口**：`POST https://uc.marketup.cn/api/uc/v1/crm/leads/addOrUpdate/remark`  \nBody（与 `LeadsRemarkSaveRPO` 一致）：`leadsId`、`remark`（必填）、`historyId`（可 null）、`attachments`（可 null）、`type_id`（跟进类型，可选）。\n\n---\n\n## 6. 查询线索详情\n\n- 识别正整数 `leadsId`；有歧义时先问清再请求。\n\n**接口**：`GET https://uc.marketup.cn/api/uc/v1/crm/leads/<leadsId>/detail`\n\n成功时建议按下面结构展示（字段为空则省略该行）：\n\n**线索详情 #\\<leadsId\\>**  \n- **线索名称**、**联系人 / 手机 / 邮箱**、**地区**  \n- **状态**、**阶段**、**负责人**、**SDR**、**创建人**  \n- **来源**、**线索池**、**评分**  \n- **创建时间**、**最近跟进**、**跟进记录数**、**未跟进天数**、**分配时间**、**转化时间**  \n- **标签**（逗号分隔）、**关联企业**、**待办**（名称、状态、截止日期、负责人）\n\n---\n\n## 7. 分配 / 取消分配线索\n\n- **分配**：用户给姓名/手机号但未给 `companyUserId` 时，先 `GET /api/uc-open/v1/company/user/team/list`（扁平查询：`page`、`size`、`searchValue`、`leadsManageType` 等），结果唯一则取 `companyUserId`，再分配；多条则请用户选择。\n- **接口**：`POST https://uc.marketup.cn/api/uc/v1/crm/leads/assign`  \n  - URL 查询参数：`leadsId`；若分配则加 `companyUserId`，取消分配则**不传** `companyUserId`。  \n  - Body JSON（`LeadsAssignRPO`）：`reason`、`type`（无则 `null`）。\n\n---\n\n## 8. 查询跟进历史\n\n- 需先确定 `leadsId`。\n\n**接口**：`GET https://uc.marketup.cn/api/uc/v1/crm/historyRecord/remarkHistoryList`  \n扁平查询参数（与 `HistoryPageRPO` 字段一致，**不要** `rpo.` 前缀）：如 `page`、`size`、`sort`、`sortType`、`startTime`、`endTime`、`historyTypeEnum=LEADS_HISTORY`、`id=<leadsId>` 等。\n\n展示：每条一行 `createTime`、`operatorName`、`remark`（有附件可标「含附件」）；说明总条数，若本页小于总数可提示缩小时间范围或翻页。\n\n---\n\n## 9. 查询修改历史\n\n- 需先确定 `leadsId`。\n\n**接口**：`GET https://uc.marketup.cn/api/uc/v1/crm/historyRecord/entityChangeHistoryList`  \n查询参数同上一节扁平形式，`historyTypeEnum=LEADS_HISTORY`，`id=<leadsId>`。\n\n展示：每条一行 `createTime`、`operatorName`（**为 null 时显示「系统」**，禁止编造人名）、`operatorTypeLabel`、`propertyName`、`preValue` → `afterValue`；`preValue` 空显示「（空）」；有 `description` 可优先展示；`reason` 非空追加原因。\n\n---\n\n## 10. 查询行为轨迹\n\n- 需先确定 `leadsId`。\n\n**接口**：`GET https://uc.marketup.cn/api/uc/v1/crm/historyRecord/behaviorRecordList`  \n查询参数同上扁平形式，`historyTypeEnum=LEADS_HISTORY`，`id=<leadsId>`。\n\n展示：每条一行 `createTime`、`behaviorName`、`detailMessage` 或 `description`；有 `duration` 可标耗时；有 `visitorNickName` / 关联账户名可追加。\n\n---\n\n## 11. 线索转客户\n\n用户表达「转客户」「转化」等时：\n\n1. **确认 `leadsId`**（必要时先搜索）；`GET .../crm/leads/<id>/detail` 取线索上可映射的字段（名称、手机、邮箱等）。\n2. **并行取表单字段**：`GET .../queryCurrentFields?marketEntityType=2`（客户）、`marketEntityType=3`（联系人）。\n3. **`accountInfo`**：key 为客户表单的 **formFieldId 数字字符串**；值优先用户输入，否则用线索字段映射（客户名←线索名、联系人←线索联系人名、手机、邮箱等）。\n4. **`contacts`**：默认用线索 `name`、`cellphone` 填入联系人表单中「姓名/手机」对应字段（先按 `showName` 匹配 formFieldId）；**仅当**线索姓名与手机均为空时才向用户要联系人；用户明确说没有联系人且线索也无联系人信息时可传空数组 `[]`。\n5. **`companyUserId`**：用户未指定负责人则 `GET /api/uc-open/v1/user/currentUser` 取当前用户对应负责人 id；指定了员工则先搜员工列表取 `companyUserId`。\n6. **接口**：`POST https://uc.marketup.cn/api/uc/v1/crm/leads/leadsConvertAccount`  \n   Body JSON：`{ \"leadsId\", \"accountInfo\", \"contacts\", \"companyUserId\" }`（与 `LeadsAccountSaveRPO` 一致）。\n\n成功后说明结果，有 `accountId` 则展示。\n\n---\n\n## 12. 给线索打标签 / 移除标签\n\n- 需要 **`leadsId` + `tagId`**。无 `leadsId` 时先搜索确认。\n- 若用户只给标签名称，说明需要 **`tagId`**，请用户提供或从标签管理渠道查询。\n\n**添加**：`POST https://uc.marketup.cn/api/uc/v1/crm/leads/addTag`，查询参数 `leadsId`、`tagId`。  \n**移除**：`POST https://uc.marketup.cn/api/uc/v1/crm/leads/deleteTag`，查询参数 `leadsId`、`tagId`。\n\n---\n\n## 13. 查询线索公海\n\n用户提到「公海」「未领取」等。\n\n**接口**：`GET https://uc.marketup.cn/api/uc/v1/crm/leads/list`  \n查询参数与工具一致的核心组合：`type=5`、`leadPoolId=-1`、`convertedStatus=0`，以及 `page`、`size`、`searchValue`（可选）、`sort`、`sortType`（可选）。  \n展示字段同普通搜索。\n\n---\n\n## 14. 领取公海线索\n\n**接口**：`POST https://uc.marketup.cn/api/uc/v1/crm/leads/receive`，查询参数 `leadsId`。  \n无 `leadsId` 时可先公海列表搜索，唯一则领取。\n\n---\n\n## 15. 退回线索到公海\n\n**接口**：`POST https://uc.marketup.cn/api/uc/v1/crm/leads/discard`  \nBody JSON（`DiscardLeadsRPO`）：`leadsId`、`returnLead: true`、`reason`（可选）、`giveUpReasonId`、`tagId`、`attachments` 等按工具传 null 即可。\n\n---\n\n## 16. 查询线索公海配置\n\n用户问「公海规则」「领取限制」「回收」等。\n\n**接口**：`GET https://uc.marketup.cn/api/uc/v1/leads/leadPool/-1`（默认池 `-1`，与工具一致）\n\n展示建议（与 agent 一致）：\n\n- **领取规则** `visibleRule`：`ALL_LEADS` / `RECYCLED_AND_REJECT_LEADS` / `RECYCLED_LEADS` / `NONE_LEADS` 对应文案：全部无负责人开放；仅收回与拒收；仅收回；均不开放。\n- **领取限制** `receiveLimit`：true/false → 已开启/已关闭  \n- **自动回收** `autoRecycle`  \n- **生效时间**：`executeTime`、`leadMinCreateTime`  \n- **回收规则**列表：`name`、天数小时、`state`（`NOT_FLOW_UP` / `NO_BUSINESS_CHANCE` / `NOT_UPDATE_FOLLOW_UP_RECORD` 等对应文案）  \n- null 字段省略对应行。\n\n---\n\n## 17. 查询客户详情（crmAccountAgent）\n\n- 从用户输入中识别 `accountId`（正整数），有歧义先确认再请求。\n\n**接口**：`GET https://uc.marketup.cn/api/uc/v1/account/accountDetail/<accountId>`（可带 `abmType`）\n\n展示建议（空值省略）：\n\n- 客户名称、负责人、来源、客户类型\n- 创建时间、最近更新时间\n- 已收款 / 总金额 / 未开票金额\n- 标签（tagName 列表）\n- 联系人（name / cellPhone / email / title）\n- 商机（chanceName / predictPrice / expireTime）\n- 关联线索（leadsName）\n- 待办事项（name / status / estimatedCompletionDate）\n\n---\n\n## 18. 查询客户列表（crmAccountAgent）\n\n- 常规筛选：名称关键词、业务阶段、负责人、客户 ID、排序等。\n- 若用户说「某人负责的客户」，先查员工列表拿 `companyUserId`，再筛客户。\n- 结果建议展示：客户名称、负责人、手机、邮箱、标签、联系人、未跟进天数、创建时间（空值省略）。\n\n**接口**：`GET https://uc.marketup.cn/api/uc-open/v1/account/list`\n\n常用扁平查询参数（不要 `rpo.` 前缀）：\n\n- `page`、`size`\n- `searchValue`\n- `stageId`\n- `accountId`\n- `companyUserId`\n- `sort`、`sortType`\n- `multipleGroupAdvancedQueryFilter`（高级筛选 JSON 字符串）\n\n---\n\n## 19. 高级筛选搜索客户（crmAccountAgent）\n\n当用户条件超出名称范围（时间、标签、来源、动态属性等）时：\n\n1. 根据用户意图构造高级筛选 JSON 字符串（账户场景）。\n2. 调客户列表接口，把 JSON 放进 `multipleGroupAdvancedQueryFilter`。\n3. 需要排序时再传 `sort` / `sortType`。\n4. 结果展示同普通客户列表。\n\n---\n\n## 20. 创建客户（crmAccountAgent）\n\n流程：**取字段定义（并行）→ 构建 accountInfo → 构建 contacts → 创建**。\n\n1. 字段定义：\n   - `GET /api/uc-open/formField/queryCurrentFields?marketEntityType=2`（ACCOUNT）\n   - `GET /api/uc-open/formField/queryCurrentFields?marketEntityType=3`（CONTACT）\n2. `accountInfo`：\n   - key 必须是 ACCOUNT 字段的 `formFieldId` 数字字符串，value 为用户值。\n   - 必填缺失需先补齐；枚举值需在 options 范围内。\n3. `contacts`：\n   - 自动从用户输入提取联系人姓名/手机号并映射 CONTACT 的 formFieldId；\n   - 支持多联系人；\n   - 用户未提供联系人信息时传 `[]`，不强行追问。\n4. 创建接口：\n   - `POST https://uc.marketup.cn/api/uc/v1/account/saveV2`\n   - JSON body 关键字段：`accountInfo`、`contacts`、`accountType`（可选，`DEFAULT_TYPE` / `ABM_TYPE`）。\n\n---\n\n## 21. 修改客户信息（crmAccountAgent）\n\n流程：**取 ACCOUNT 字段定义 → 按字段逐条修改**。\n\n1. 先 `GET .../queryCurrentFields?marketEntityType=2`，匹配目标字段的 `formFieldId`。\n2. 每次只改一个字段，多个字段串行调用。\n3. 修改接口：\n   - `POST https://uc.marketup.cn/api/uc/v1/account/modify/profileData?accountId=<id>`\n   - body：`{ \"formFieldId\": <number>, \"value\": \"<string>\" }`\n4. 特殊处理：\n   - 当目标字段是“客户所有人 / 负责人”（如 `field_name = user_select`），先查员工列表拿 `companyUserId`，再把该 ID 字符串作为 `value` 传入。\n\n---\n\n## 22. 查询客户公海配置（crmAccountAgent）\n\n用户提到客户公海规则/配置/领取限制/回收规则时：\n\n**接口**：`GET https://uc.marketup.cn/api/uc/v1/account/accountPool/-1`\n\n展示建议：\n\n- 领取规则 `visibleRule`：\n  - `ALL_ACCOUNT`：对所有成员开放\n  - `NONE_ACCOUNT`：不对成员开放\n- `receiveLimit`：已开启/已关闭\n- `autoRecycle`：已开启/已关闭\n- 生效时间：`executeTime`、`accountMinCreateTime`\n- 回收规则：逐条展示 `name`、`stage`、`day`、`hour`、`state`\n  - `NOT_FLOW_UP`：从未跟进\n  - `NO_BUSINESS_CHANCE`：无商机\n  - `NOT_UPDATE_FOLLOW_UP_RECORD`：未更新跟进记录\n\n---\n\n## 辅助接口\n\n### 当前用户\n\n`GET https://uc.marketup.cn/api/uc-open/v1/user/currentUser`  \n用于「分配给我」、转客户默认负责人等场景；响应里当前员工标识一般为 `data.uid`（与分配接口里的 `companyUserId` / `ownerCompanyUserId` 对应关系以实际 JSON 为准）。\n\n### 搜索公司员工\n\n`GET https://uc.marketup.cn/api/uc-open/v1/company/user/team/list`  \n扁平查询：`page`、`size`、`sort`、`sortType`、`searchValue`、`leadsManageType`（`SDR` | `SALE` | `NOT_PARTICIPATE_ASSIGN`）等。\n\n---\n\n## 附：references（详细 curl / jq）\n- 索引与说明：[references/README.md](references/README.md)\n- API Key 预检与脚本流程：[references/setup-marketup-api-key.md](references/setup-marketup-api-key.md)\n- 列表 / 详情 / 快捷搜索 / jq：[references/find-leads.md](references/find-leads.md)\n- 创建、改字段、跟进、分配、标签、领取、退回：[references/leads-mutations.md](references/leads-mutations.md)\n- 跟进历史、变更历史、行为轨迹：[references/leads-history.md](references/leads-history.md)\n- 表单字段、转客户：[references/convert-and-forms.md](references/convert-and-forms.md)\n- 公海列表、公海配置、当前用户、搜员工：[references/pool-and-users.md](references/pool-and-users.md)\n- 客户查询（详情/列表/高级筛选）：[references/accounts-query.md](references/accounts-query.md)\n- 客户创建/修改/公海配置：[references/accounts-mutations-and-pool.md](references/accounts-mutations-and-pool.md)\n","tags":{"latest":"1.0.0"},"stats":{"comments":0,"downloads":320,"installsAllTime":12,"installsCurrent":0,"stars":0,"versions":1},"createdAt":1778226076160,"updatedAt":1778492876503},"latestVersion":{"version":"1.0.0","createdAt":1778226076160,"changelog":"MarketUP管理 v1.0.0 – Initial Release\n\n- Provides comprehensive Marketup CRM workflows: detail/list search, advanced filtering, creation, modification, assignment, lead history/behavior lookup, lead-to-account conversion, tags, and pool configuration.\n- Strictly enforces API Key validation and setup before any Marketup API operations.\n- All write operations report results only after actual API responses, ensuring data accuracy.\n- Supports structured entity field definition lookup and correct field mapping for all create/modify actions.","license":"MIT-0"},"metadata":{"setup":[],"os":null,"systems":null},"owner":{"handle":"azu-zhou","userId":"s175n2dxwbkentev7p4km3s8xd86a0rc","displayName":"Azu","image":"https://avatars.githubusercontent.com/u/24557331?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1780090760339}}