Install
openclaw skills install marketup-ucMarketup CRM - detail/list search, advanced filtering, create, modify, assignment flows, history/behavior lookup, lead-to-account conversion, tags, and pool configuration workflows.
openclaw skills install marketup-ucMARKETUP_API_KEY 是否已存在于当前环境。MARKETUP_API_KEY,先执行 references/setup-marketup-api-key.md 中定义的脚本流程,由脚本提示用户输入并写入全局 ~/.openclaw/.env。MARKETUP_API_KEY 缺失时,必须由 agent 直接执行脚本流程;不要把脚本命令发给用户让用户手动执行。MARKETUP_API_KEY:存在则继续任务;仍不存在则停止所有 Marketup API 调用,仅告知用户需先完成 API Key 配置并提示可重试。https://uc.marketup.cncurl 请求后端接口,必须带请求头:Authorization: $MARKETUP_API_KEY、Referer: MarketUP-Skills。GET 的查询参数:使用扁平参数名;不要在参数名前加 leadsRPO.、companyUserRPO.、rpo. 等前缀(与代码里的包装对象名无关)。POST 且 body 为 JSON 时:Content-Type: application/json,body 用 -d @file.json 或 -d '{...}'。message(无 message 时用 code),不推测原因。GET /api/uc-open/formField/queryCurrentFields 使用查询参数 marketEntityType(数字):线索 0、客户 2、联系人 3。其它实体类型见 OpenAPI。
page=1、size=1,不传搜索条件(或仅依赖后端默认),从响应中取总条数字段(如 data.totalElements)回答。sort、sortType(与后端约定一致);无需求不传。接口:GET https://uc.marketup.cn/api/uc/v1/crm/leads/list
常用查询参数示例:page、size、type(-1 表示全部线索)、searchValue、cellphone、leadsName、sort、sortType、multipleGroupAdvancedQueryFilter(高级筛选 JSON 字符串)。
快捷按名单/手机搜:GET https://uc.marketup.cn/api/uc/v1/crm/leads/searchLeadsByNameOrCellphone,查询参数 searchValue。
当条件超出手机/名称(时间、来源、标签、行为等)时:
multipleGroupAdvancedQueryFilter;不要同时用手机/名称参数替代该 JSON(除非用户还要叠加简单条件,按后端能力传)。sort、sortType。流程:取字段定义 → 收集并映射为 formFieldId → 调创建接口。
第一步 GET /api/uc-open/formField/queryCurrentFields?marketEntityType=0
记录 formFieldId、showName、required、dataType、options。
第二步 构建 leads:key 必须是 数字字符串形式的 formFieldId(如 "17263687"),value 为用户填写值;禁止用中文名或 cellphone 等逻辑名做 key。
必填缺失要列出字段名请用户补;枚举类值须在 options 范围内。
第三步 POST https://uc.marketup.cn/api/uc/v1/crm/leads/saveLeads
JSON body 使用 LeadsSaveRPO 形态,与工具一致的核心字段包括:type(单条保存为 1)、leads(对象)、coverInfo、genCompanyAccount、assignType、autoAssign、notAssign、ownerCompanyUserId、sourceChannelId、remark(可选,结构同跟进里的备注对象)等。
分配语义(互斥,与工具一致):
notAssign: trueassignType: 1 且 autoAssign: trueassignType: 2 且 ownerCompanyUserId 为员工的 companyUserId(先搜员工或取当前用户)创建成功后若有 leadsId 一并告知用户。
leadsId,多条请用户确认)。GET .../queryCurrentFields?marketEntityType=0,用 showName 匹配得到 formFieldId;禁止用字段名调修改接口。POST https://uc.marketup.cn/api/uc/v1/crm/leads/modify/profileData?leadsId=<id>,body JSON:{ "formFieldId": <number>, "value": "<string>" }。leadsId:直接调接口;仅手机/名称则先搜索确认 leadsId。接口:POST https://uc.marketup.cn/api/uc/v1/crm/leads/addOrUpdate/remark
Body(与 LeadsRemarkSaveRPO 一致):leadsId、remark(必填)、historyId(可 null)、attachments(可 null)、type_id(跟进类型,可选)。
leadsId;有歧义时先问清再请求。接口:GET https://uc.marketup.cn/api/uc/v1/crm/leads/<leadsId>/detail
成功时建议按下面结构展示(字段为空则省略该行):
线索详情 #<leadsId>
companyUserId 时,先 GET /api/uc-open/v1/company/user/team/list(扁平查询:page、size、searchValue、leadsManageType 等),结果唯一则取 companyUserId,再分配;多条则请用户选择。POST https://uc.marketup.cn/api/uc/v1/crm/leads/assign
leadsId;若分配则加 companyUserId,取消分配则不传 companyUserId。LeadsAssignRPO):reason、type(无则 null)。leadsId。接口:GET https://uc.marketup.cn/api/uc/v1/crm/historyRecord/remarkHistoryList
扁平查询参数(与 HistoryPageRPO 字段一致,不要 rpo. 前缀):如 page、size、sort、sortType、startTime、endTime、historyTypeEnum=LEADS_HISTORY、id=<leadsId> 等。
展示:每条一行 createTime、operatorName、remark(有附件可标「含附件」);说明总条数,若本页小于总数可提示缩小时间范围或翻页。
leadsId。接口:GET https://uc.marketup.cn/api/uc/v1/crm/historyRecord/entityChangeHistoryList
查询参数同上一节扁平形式,historyTypeEnum=LEADS_HISTORY,id=<leadsId>。
展示:每条一行 createTime、operatorName(为 null 时显示「系统」,禁止编造人名)、operatorTypeLabel、propertyName、preValue → afterValue;preValue 空显示「(空)」;有 description 可优先展示;reason 非空追加原因。
leadsId。接口:GET https://uc.marketup.cn/api/uc/v1/crm/historyRecord/behaviorRecordList
查询参数同上扁平形式,historyTypeEnum=LEADS_HISTORY,id=<leadsId>。
展示:每条一行 createTime、behaviorName、detailMessage 或 description;有 duration 可标耗时;有 visitorNickName / 关联账户名可追加。
用户表达「转客户」「转化」等时:
leadsId(必要时先搜索);GET .../crm/leads/<id>/detail 取线索上可映射的字段(名称、手机、邮箱等)。GET .../queryCurrentFields?marketEntityType=2(客户)、marketEntityType=3(联系人)。accountInfo:key 为客户表单的 formFieldId 数字字符串;值优先用户输入,否则用线索字段映射(客户名←线索名、联系人←线索联系人名、手机、邮箱等)。contacts:默认用线索 name、cellphone 填入联系人表单中「姓名/手机」对应字段(先按 showName 匹配 formFieldId);仅当线索姓名与手机均为空时才向用户要联系人;用户明确说没有联系人且线索也无联系人信息时可传空数组 []。companyUserId:用户未指定负责人则 GET /api/uc-open/v1/user/currentUser 取当前用户对应负责人 id;指定了员工则先搜员工列表取 companyUserId。POST https://uc.marketup.cn/api/uc/v1/crm/leads/leadsConvertAccount{ "leadsId", "accountInfo", "contacts", "companyUserId" }(与 LeadsAccountSaveRPO 一致)。成功后说明结果,有 accountId 则展示。
leadsId + tagId。无 leadsId 时先搜索确认。tagId,请用户提供或从标签管理渠道查询。添加:POST https://uc.marketup.cn/api/uc/v1/crm/leads/addTag,查询参数 leadsId、tagId。
移除:POST https://uc.marketup.cn/api/uc/v1/crm/leads/deleteTag,查询参数 leadsId、tagId。
用户提到「公海」「未领取」等。
接口:GET https://uc.marketup.cn/api/uc/v1/crm/leads/list
查询参数与工具一致的核心组合:type=5、leadPoolId=-1、convertedStatus=0,以及 page、size、searchValue(可选)、sort、sortType(可选)。
展示字段同普通搜索。
接口:POST https://uc.marketup.cn/api/uc/v1/crm/leads/receive,查询参数 leadsId。
无 leadsId 时可先公海列表搜索,唯一则领取。
接口:POST https://uc.marketup.cn/api/uc/v1/crm/leads/discard
Body JSON(DiscardLeadsRPO):leadsId、returnLead: true、reason(可选)、giveUpReasonId、tagId、attachments 等按工具传 null 即可。
用户问「公海规则」「领取限制」「回收」等。
接口:GET https://uc.marketup.cn/api/uc/v1/leads/leadPool/-1(默认池 -1,与工具一致)
展示建议(与 agent 一致):
visibleRule:ALL_LEADS / RECYCLED_AND_REJECT_LEADS / RECYCLED_LEADS / NONE_LEADS 对应文案:全部无负责人开放;仅收回与拒收;仅收回;均不开放。receiveLimit:true/false → 已开启/已关闭autoRecycleexecuteTime、leadMinCreateTimename、天数小时、state(NOT_FLOW_UP / NO_BUSINESS_CHANCE / NOT_UPDATE_FOLLOW_UP_RECORD 等对应文案)accountId(正整数),有歧义先确认再请求。接口:GET https://uc.marketup.cn/api/uc/v1/account/accountDetail/<accountId>(可带 abmType)
展示建议(空值省略):
companyUserId,再筛客户。接口:GET https://uc.marketup.cn/api/uc-open/v1/account/list
常用扁平查询参数(不要 rpo. 前缀):
page、sizesearchValuestageIdaccountIdcompanyUserIdsort、sortTypemultipleGroupAdvancedQueryFilter(高级筛选 JSON 字符串)当用户条件超出名称范围(时间、标签、来源、动态属性等)时:
multipleGroupAdvancedQueryFilter。sort / sortType。流程:取字段定义(并行)→ 构建 accountInfo → 构建 contacts → 创建。
GET /api/uc-open/formField/queryCurrentFields?marketEntityType=2(ACCOUNT)GET /api/uc-open/formField/queryCurrentFields?marketEntityType=3(CONTACT)accountInfo:
formFieldId 数字字符串,value 为用户值。contacts:
[],不强行追问。POST https://uc.marketup.cn/api/uc/v1/account/saveV2accountInfo、contacts、accountType(可选,DEFAULT_TYPE / ABM_TYPE)。流程:取 ACCOUNT 字段定义 → 按字段逐条修改。
GET .../queryCurrentFields?marketEntityType=2,匹配目标字段的 formFieldId。POST https://uc.marketup.cn/api/uc/v1/account/modify/profileData?accountId=<id>{ "formFieldId": <number>, "value": "<string>" }field_name = user_select),先查员工列表拿 companyUserId,再把该 ID 字符串作为 value 传入。用户提到客户公海规则/配置/领取限制/回收规则时:
接口:GET https://uc.marketup.cn/api/uc/v1/account/accountPool/-1
展示建议:
visibleRule:
ALL_ACCOUNT:对所有成员开放NONE_ACCOUNT:不对成员开放receiveLimit:已开启/已关闭autoRecycle:已开启/已关闭executeTime、accountMinCreateTimename、stage、day、hour、state
NOT_FLOW_UP:从未跟进NO_BUSINESS_CHANCE:无商机NOT_UPDATE_FOLLOW_UP_RECORD:未更新跟进记录GET https://uc.marketup.cn/api/uc-open/v1/user/currentUser
用于「分配给我」、转客户默认负责人等场景;响应里当前员工标识一般为 data.uid(与分配接口里的 companyUserId / ownerCompanyUserId 对应关系以实际 JSON 为准)。
GET https://uc.marketup.cn/api/uc-open/v1/company/user/team/list
扁平查询:page、size、sort、sortType、searchValue、leadsManageType(SDR | SALE | NOT_PARTICIPATE_ASSIGN)等。