Install
openclaw skills install @hijasongithub/wininsales-crmUse when users need 赢在销客CRM, wininsales, WininSales CRM, 企业微信CRM, 企微CRM, or CRM sales operations, including customer search, duplicate check, ownership lookup, customer creation, follow-up records, assignment, sharing, public-pool recovery, lead and opportunity management, contracts, payments, expiry reminders, inactive-customer lists, product lookup, employee lookup, performance analysis, or daily reports. 适用于“客户是否存在/在谁名下/录入客户/记录跟进/分配共享/查合同回款/查到期或未跟进客户/写日报”等场景。
openclaw skills install @hijasongithub/wininsales-crm此 skill 面向赢在销客 CRM 的日常销售运营场景,帮助销售、主管和运营人员直接完成客户查询、录入、跟进、线索、商机、合同回款、业绩分析和日报等工作。
客户常见问题包括:
底层集成赢在销客CRM的 MCP API(24个接口),覆盖客户管理全流程。
数据来源: 通过 tools/list 接口获取实际API定义,确保与系统一致。
| 你要做什么 | 优先阅读 |
|---|---|
| 查客户是否存在、在谁名下 | 流程1、API 1、客户分析 API 5 |
| 录入新客户 | 流程2、API 2、工商字段映射、注意事项 |
| 记录电话/微信/面访跟进 | 流程3、API 7、往来方式映射 |
| 分配/共享客户或线索 | 流程4、流程6、员工ID查询 |
| 查合同回款、到期、未跟进、业绩 | 流程9-12、API 12-15 |
| 新增线索、商机、产品 | 流程6-7、API 17、API 21-23 |
| 写日报 | 流程13、API 24 |
| 处理字段选项、字典值 | 流程14、API 16、API 23 |
| 场景 | 客户可以这样问 | 技能会怎么做 |
|---|---|---|
| 客户查重与归属 | “帮我查一下南京某某科技在 CRM 里有没有,在谁名下?” | 先用公司名查重;查到后展示客户状态、跟进人、最近跟进;需要归属详情时再用公司全称分析。 |
| 新客户录入 | “帮我录入南京某某科技,先查重,再查工商信息。” | 先查重;未存在时查工商;复述企业和联系人关键字段,用户确认后再创建客户。 |
| 跟进记录 | “给南京某某科技加一条微信跟进:今天沟通了企业微信 CRM 试用,下周约演示。” | 定位客户ID;映射微信为 VisitType.5;确认跟进内容、时间和联系人后写入。 |
| 客户共享 | “把南京某某科技共享给张涛,让他也能看到。” | 查客户;查张涛 user_id;确认共享对象后调用 ShareCustomer;失败时提示权限或姓名降级方案。 |
| 客户分配 | “把南京某某科技转给李四跟进。” | 查客户和目标员工;提醒分配后原跟进关系可能变化;确认后调用 AssignCustomer。 |
| 新增线索 | “帮我新增一个线索,联系人王总,手机号 138****8888,来源主动开发。” | 优先查 source 选项;默认使用 MessageSource.3;检查至少有一种联系方式;确认后添加线索。 |
| 线索分配 | “把这个线索分给张涛,备注:客户对 CRM 有兴趣。” | 查询线索ID;查询员工ID;确认分配原因后调用 AssignLead;员工ID无权限时尝试姓名降级。 |
| 创建商机 | “给南京某某科技建一个商机,产品是赢在销客,预算 3 万,预计 6 月签约。” | 查客户;查产品;收集预算、预计签约时间、需求和竞品;确认后创建商机。 |
| 合同回款 | “查一下南京某某科技的合同和回款情况。” | 先查客户并确认 check_look=1;有权限时查询合同、到账、回款、利润;无权限时说明原因。 |
| 到期提醒 | “查一下本月即将到期的客户。” | 确认时间范围和个人/团队/全部范围;调用到期客户查询;按到期时间和风险输出。 |
| 未跟进客户 | “查一下 30 天没跟进的客户。” | 计算最后跟进截止日期;必要时查询客户等级字典;输出长期未跟进客户和建议动作。 |
| 日报 | “根据今天 CRM 记录帮我写日报。” | 拉取当日日报上下文;整理今日工作、客户推进、问题风险和明日计划。 |
****;内部写入参数可用用户提供的完整值。查询类输出:
结论:查到/未查到/无权限/需要补充条件
关键信息:客户名称、状态、跟进人、最近跟进、合同/回款/到期等必要字段
风险提示:重复客户、公海、他人跟进、长期未跟进、即将到期、权限不足
下一步:录入、共享、分配、跟进、建商机、继续筛选
写入类确认:
请确认以下信息:
- 操作:录入客户/添加跟进/分配客户/共享客户/添加线索/添加商机
- 对象:客户或线索名称
- 关键字段:联系人、电话、来源、跟进方式、员工、产品、时间
确认后再提交 CRM。
失败类输出:
结果:本次操作未完成
原因:无权限/字段缺失/字典值不匹配/客户已存在/API返回错误
建议:补充字段、先查字典、换用员工姓名降级、请管理员授权、稍后重试
| # | API名称 | 功能 | 使用频率 |
|---|---|---|---|
| 1 | SearchExistingCustomers | 客户查重/搜索 | ⭐⭐⭐⭐⭐ |
| 2 | CreateNewBusinessCustomer | 新客户录入(40+字段) | ⭐⭐⭐⭐⭐ |
| 3 | CompanyBusinessRegistrationInquiry | 工商信息查询(天眼查) | ⭐⭐⭐⭐ |
| 4 | CompanyInformationSearch | 工商信息补全 | ⭐⭐⭐ |
| 5 | AnalyzeCustomers | 客户数据分析 | ⭐⭐⭐⭐ |
| 6 | CRMOperationManual | 查询操作手册 | ⭐⭐ |
| 7 | QueryDictByCode | 查询数据字典(辅助工具) | ⭐⭐ |
| # | API名称 | 功能 | 使用频率 |
|---|---|---|---|
| 8 | AddCustomerVisit | 添加跟进/拜访记录 | ⭐⭐⭐⭐⭐ |
| # | API名称 | 功能 | 使用频率 |
|---|---|---|---|
| 9 | ShareCustomer | 客户共享给同事 | ⭐⭐⭐ |
| 10 | AssignCustomer | 客户分配给同事 | ⭐⭐⭐ |
| 11 | QueryEmployeeUserId | 查询员工ID | ⭐⭐⭐ |
| 12 | ReclaimPublicPoolCustomer | 公海客户捡回提示 | ⭐⭐⭐ |
| # | API名称 | 功能 | 使用频率 |
|---|---|---|---|
| 13 | EmployeeAnalysis | 员工/团队业绩分析 | ⭐⭐⭐⭐ |
| 14 | QueryCustomerContractPayment | 客户合同与回款查询 | ⭐⭐⭐ |
| 15 | QueryCustomersRecentExpiry | 🆕 查询即将到期客户 | ⭐⭐⭐ |
| 16 | QueryNoFollowUpCustomers | 🆕 查询长期未跟进客户 | ⭐⭐⭐ |
| # | API名称 | 功能 | 使用频率 |
|---|---|---|---|
| 17 | AddOpportunity | 添加销售线索 | ⭐⭐⭐ |
| 18 | QueryLead | 查询线索 | ⭐⭐⭐ |
| 19 | AssignLead | 分配线索给同事 | ⭐⭐⭐ |
| 20 | SignLeadCall | 线索通话标记 | ⭐⭐ |
| # | API名称 | 功能 | 使用频率 |
|---|---|---|---|
| 21 | AddClue | 为客户添加商机 | ⭐⭐⭐ |
| 22 | SearchProducts | 按名称/编号查产品 | ⭐⭐⭐ |
| # | API名称 | 功能 | 使用频率 |
|---|---|---|---|
| 23 | SearchFieldOptions | 查询下拉/单选字段选项 | ⭐⭐ |
| 24 | QueryDailyWriteContext | 🆕 拉取日报上下文 | ⭐⭐ |
如果没有 token,引导用户登录 CRM 并在系统内授权获取;不要让用户把 token 写进技能文件或聊天记录。 登录地址: https://www.wininsales.com/login
授权注意:
SKILL.md 和必要的上架元数据,不能包含密码文件、运维脚本、数据库备份配置。# ⚠️ 中文参数必须用 heredoc 方式传入,避免编码异常!
cat > /tmp/crm_query.json << 'JSONEOF'
{"jsonrpc":"2.0","method":"tools/call","params":{"name":"工具名称","arguments":{参数}},"id":1}
JSONEOF
curl -s "https://www.wininsales.com/mcp_api/mcp?token=" \
-X POST -H "Content-Type: application/json" \
-d @/tmp/crm_query.json
调试建议:
tempfile 写 UTF-8 JSON 文件,再调用 curl -d @file。?token= 占位。tools/list schema 和实际 API 返回为准,不以操作手册的文字说明为准。触发:用户说"XX公司存在吗"、"在谁名下"、"这个客户是谁的"
Step 1: SearchExistingCustomers(query=公司名)
↓
├─ 未查到 → "系统中不存在该客户,需要录入吗?"
└─ 查到了 → 展示:客户名称、状态(私海/公海/他人跟进)、录入时间
↓
Step 2: 用户追问"谁的客户" → AnalyzeCustomers(customer=公司全称, analysis_type=客户)
↓
⚠️ customer必须用公司全称,不能缩写!
↓
Step 3: 输出:主跟进人、地址、意向等级
↓
Step 4: 根据状态给建议
- "他人跟进" → "需要我帮你共享或分配过来吗?"
- "客户公海" → "需要我帮你捡回吗?"
触发:用户说"帮我录入XX公司"、"XX公司录入CRM"
Step 1: 询问客户名称
↓
Step 2: SearchExistingCustomers 查重
├─ 已存在 → 展示信息,问是否需要其他操作(查归属/共享/分配)
└─ 不存在 → 继续
↓
Step 3: CompanyBusinessRegistrationInquiry 工商查询
├─ 查到 → 展示工商信息,让用户确认
└─ 未查到 → 问是否手动录入
↓
Step 4: 补充联系人信息(用户提供时直接用,否则用法人默认)
↓
Step 5: CreateNewBusinessCustomer 提交
├─ 成功 → "客户录入成功"
└─ 失败 → 根据错误提示处理(见踩坑经验)
录入字段经验:
触发:用户说"记录一下跟进"、"加个拜访记录"
Step 1: SearchExistingCustomers 获取客户ID
Step 2: 询问:往来方式(面访/电话/微信/QQ/邮件)、时间、内容
Step 3: 面访需补充:结束时间(默认+4小时)、拜访地址
Step 4: AddCustomerVisit 提交
往来方式映射: 面访=VisitType.1, 电话=VisitType.2, 邮件=VisitType.3, QQ=VisitType.4, 微信=VisitType.5, 其他=VisitType.6, 企业微信=VisitType.105
触发:用户说"把XX客户分给XX"、"让XX也能看到这个客户"、"把XX客户转给XX"
Step 1: SearchExistingCustomers 获取 customer_id
↓
Step 2: QueryEmployeeUserId 查询目标员工ID
- employee_name: 员工姓名(支持"我"/"自己")
- multiple: 0(单人分配)
- status: 0(仅在职)
↓
├─ ✅ 查询成功 → 获取 user_id,继续
└─ ❌ 查询失败(无权限)→ 尝试直接用员工姓名
↓
Step 3: 执行分配/共享
├─ 分配客户: AssignCustomer(customer_id, assignee=user_id)
└─ 共享客户: ShareCustomer(customer_id, share_with=user_id)
【容错策略】
- 如果 QueryEmployeeUserId 返回错误,尝试直接把 receiver/assignee 参数设为员工姓名
- 部分API支持直接用姓名代替user_id
分配 vs 共享区别:
| 操作 | 效果 | 适用场景 |
|---|---|---|
| AssignCustomer | 客户转给对方,自己不再跟进 | 正式交接、全权移交 |
| ShareCustomer | 双方都能看到,各自独立跟进 | 协作查看、数据同步 |
完整示例(客户分配):
# Step 1: 查客户
curl ... -d '{"method":"tools/call","params":{"name":"SearchExistingCustomers","arguments":{"query":"XX公司"}}}'
# Step 2: 查员工ID(如果有权限)
curl ... -d '{"method":"tools/call","params":{"name":"QueryEmployeeUserId","arguments":{"employee_name":"张涛","multiple":0,"status":0}}}'
# Step 3: 分配客户
curl ... -d '{"method":"tools/call","params":{"name":"AssignCustomer","arguments":{"customer_id":"xxx","assignee":"查到的user_id"}}}'
完整示例(客户共享):
# Step 1: 查客户
curl ... -d '{"method":"tools/call","params":{"name":"SearchExistingCustomers","arguments":{"query":"XX公司"}}}'
# Step 2: 查员工ID(如果有权限)
curl ... -d '{"method":"tools/call","params":{"name":"QueryEmployeeUserId","arguments":{"employee_name":"李四","multiple":0,"status":0}}}'
# Step 3: 共享客户
curl ... -d '{"method":"tools/call","params":{"name":"ShareCustomer","arguments":{"customer_id":"xxx","share_with":"查到的user_id"}}}'
触发:用户说"XX客户在公海,帮我捡回来"
Step 1: SearchExistingCustomers 确认客户在公海(status_name=客户公海)
Step 2: ReclaimPublicPoolCustomer 获取操作指引
Step 3: AddCustomerVisit 添加一条跟进记录 → 自动捡回私海
触发:用户说"帮我加个线索"、"查一下线索"、"把线索分给XX"
【添加线索】
Step 1: SearchFieldOptions(tool_name="AddOpportunity", field_key="source") 查来源选项
├─ ✅ 成功 → 获取 source 选项值
└─ ❌ 失败(无权限)→ 使用常见默认值: MessageSource.1=线索转化, MessageSource.3=主动开发
Step 2: 收集信息(联系人、公司、电话等,phone/email/qq/tel/wechat至少一个)
Step 3: AddOpportunity 提交
【查询线索】
Step 1: QueryLead(keyword) → 展示线索列表(含id、can_make_call_flag、is_opp_assign)
Step 2: 如需展示更多字段,手动查询
【分配线索】⚠️ 重要优化
Step 1: QueryLead 找到线索ID
↓
Step 2: QueryEmployeeUserId 查询目标员工ID
- employee_name: 员工姓名
- multiple: 0
- status: 0
↓
├─ ✅ 查询成功 → 获取 user_id,继续
└─ ❌ 查询失败(无权限)→ 直接用员工姓名作为 receiver
↓
Step 3: AssignLead(id=线索ID, receiver=员工ID或姓名, suggest=分配原因)
└─ ⚠️ receiver 参数支持直接用员工姓名字符串(系统会自动匹配)
【通话标记】
Step 1: QueryLead 找到线索,确认 can_make_call_flag 权限
Step 2: SearchFieldOptions(tool_name="SignLeadCall", field_key="labeling_status") 查选项
Step 3: SignLeadCall 提交
添加线索示例(无权限时降级):
# 如果 SearchFieldOptions 失败,用默认值
curl ... -d '{"method":"tools/call","params":{"name":"AddOpportunity","arguments":{
"contact_name":"联系人名", "phone":"手机号", "source":"MessageSource.1", "memo":"备注"
}}}'
分配线索示例(查询ID + 分配):
# Step 1: 查询线索
curl ... -d '{"method":"tools/call","params":{"name":"QueryLead","arguments":{"keyword":"手机号或公司名"}}}'
# 返回: [{"id":"xxx","contact_name":"...","phone":"...","create_time":"...","is_opp_assign":0}]
# Step 2: 查询员工ID(如果有权限)
curl ... -d '{"method":"tools/call","params":{"name":"QueryEmployeeUserId","arguments":{"employee_name":"张涛","multiple":0,"status":0}}}'
# Step 3: 分配线索
curl ... -d '{"method":"tools/call","params":{"name":"AssignLead","arguments":{
"id":"查到的线索ID", "receiver":"张涛或user_id", "suggest":"了解CRM系统,分配给张涛跟进"
}}}'
触发:用户说"帮这个客户建个商机"、"给XX公司加个商机"
Step 1: SearchExistingCustomers 获取 company_id
Step 2: SearchProducts 查询产品ID(如需指定产品)
Step 3: 收集商机信息:预算、预计签约时间、需求描述、竞品
Step 4: AddClue 提交
品牌ID: 腾讯标准产品(1)/赢在销客(122)/企业微信私有化(123)/惠岚品牌(1566)/定制开发(1639)
触发:用户说"分析一下XX公司"、"看一下XX客户的数据"
Step 1: AnalyzeCustomers(customer=公司全称, analysis_type=all)
Step 2: 可选类型:客户、联系人、往来记录、商机记录、合同记录、all
Step 3: 格式化输出(隐藏手机号、用表格呈现)
触发:用户说"查一下本周的业绩"、"团队成交情况"
Step 1: 确认范围(个人/团队)和时间(本周/上周/本月/自定义)
Step 2: EmployeeAnalysis(employee_name, start_time, end_time, scope, analysis_type)
Step 3: 汇总输出(按业绩排序、计算总计)
触发:用户说"看一下XX公司的合同"、"XX客户回款情况"
Step 1: SearchExistingCustomers 获取 customer_id(需 check_look=1)
Step 2: QueryCustomerContractPayment(customer_id)
Step 3: 输出合同、到账、回款、利润信息
触发:用户说"最近哪些客户要到期"、"本月到期名单"、"续费提醒"
Step 1: 确认时间范围和查询范围
Step 2: QueryCustomersRecentExpiry(start_time, end_time, scope, userids?)
- scope: "全部" / "团队" / "个人"
- 时间格式: YYYY-MM-DD
- scope="个人"时 userids 可省略(默认当前登录人),或传 me/自己/我
Step 3: 输出到期客户列表
触发:用户说"多久没跟进的客户"、"哪些客户没联系"、"跟进超期"
Step 1: 确认时间阈值(如30天、60天)
Step 2: QueryNoFollowUpCustomers(end_time, company_level?)
- end_time: 最后跟进截止日期(YYYY-MM-DD),如距今30天前的日期
- company_level: 可选,客户等级筛选(需先 QueryDictByCode(dict_code="CompanyLevel") 获取)
Step 3: 输出未跟进客户列表
触发:用户说"帮我写日报"、"今日工作汇总"
Step 1: QueryDailyWriteContext(date=YYYY-MM-DD)
- 获取当日工作要点与明日计划等上下文
Step 2: 基于上下文生成日报内容
触发:需要查询某个字段的全部可选值(当 SearchFieldOptions 不适用时)
Step 1: QueryDictByCode(dict_code="编码名")
- 必须使用系统字典全称,如 CompanyLevel、CompanyType、EmployeesNum、Industry
- 禁止用简称、中文名或猜测值,例如 level、type、规模、行业
Step 2: 输出字典值列表
Step 3: 录入客户、线索、商机前,必须从返回结果中选择准确 value
参数: query(必填)— 公司名/电话/联系人,优先:客户名称 > 电话 > 联系人姓名
返回: 客户列表(含customer_id、contact_id、status_name、check_look)
约束: 禁止在未指明查询行为时自动调用;不泄露客户ID/联系方式
必填: company_name, contact_contact_name, contact_sex(1男/0女/2未知)
--- 企业信息 ---
company_name [必填] 客户名称
short_name [可选] 客户简称
customer_no [可选] 客户编号
type [可选] 客户类型: 直接客户(CompanyType.1)/经销商(CompanyType.2)/合作伙伴(CompanyType.3)
level [可选] 意向等级: 信息无效(CompanyLevel.110)/无意向(CompanyLevel.0)/信息不完整(CompanyLevel.113)/未沟通(CompanyLevel.103)/潜在(CompanyLevel.1)/意向(CompanyLevel.2)
source [可选] 客户来源(需SearchFieldOptions查)常用: 主动开发(MessageSource.3)/线索转化(MessageSource.1)
industry [可选] 所属行业(需SearchFieldOptions查)
scope [可选] 企业规模: 1-10人(EmployeesNum.1)/11-50(EmployeesNum.2)/51-100(EmployeesNum.3)/101-200(EmployeesNum.4)/201-500(EmployeesNum.5)/501-1000(EmployeesNum.6)/1001-2000(EmployeesNum.7)/2001-5000(EmployeesNum.8)/5000人以上(EmployeesNum.9)
main_product [可选] 主营产品(文本)
label [可选] 客户标签(多选,需SearchFieldOptions查)
region [可选] 区域
address [可选] 企业地址
url [可选] 企业网址
tel [可选] 企业电话(手机号格式,严格11位)
fax [可选] 企业传真(座机格式)
memo [可选] 备注
dealer_id [可选] 经销商(需SearchFieldOptions查)
customer16 [可选] 现用品牌(需SearchFieldOptions查)
customer200634 [可选] 管理员账号/企业ID
customer52643 [可选] 销售归属
customer32000 [可选] 购买账户数(整数)
customer52633 [可选] 服务到期时间(YYYY-MM-DD)
customer152787 [可选] 到期年月(YYYY-MM)
customer212687 [可选] 客户咨询: 400咨询(ext1)/IM咨询(ext2)/从未咨询(ext3)
customer156559 [可选] 产品培训: 已培训(ext1)/未培训(ext2)
cooperater [可选] 协作人(需SearchFieldOptions查)
relevance_customer [可选] 被关联客户(需SearchFieldOptions查)
--- 联系人信息 ---
contact_contact_name [必填] 联系人姓名
contact_sex [必填] 性别: 男(1)/女(0)/未知(2)
contact_phone [可选] 联系人手机(手机号格式,严格11位)
contact_tel [可选] 联系人座机(座机格式)
contact_email [可选] 联系人邮箱
contact_qq [可选] 联系人QQ
contact_wechat [可选] 联系人微信
contact_department [可选] 联系人部门
contact_role [可选] 联系人角色: 公司负责人(ContactRole.1)/财务决策人(ContactRole.2)/项目影响人(ContactRole.3)/项目负责人(ContactRole.4)/项目执行人(ContactRole.5)
contact_duty [可选] 联系人职务
contact_kp [可选] 关键人: 否(0)/是(1)
contact_birthday [可选] 联系人生日(YYYY-MM-DD)
contact_memo [可选] 联系人备注
参数: tyc_keyword(必填)— 企业全称
返回: companyName, juridicalPerson, registedCapital, registedDate,
companyStatUs, address, actualAddress, industry, products,
creditCode, webSites, staffNumber, socialSecurityNum,
annualTurnover, reportTaxTotal
参数: tyc_keyword(必填)— 企业全称
用途: 创建客户流程中补充企业工商信息
参数: customer(必填, 公司全称), analysis_type(必填), start_time, end_time
类型: 客户/联系人/往来记录/商机记录/合同记录/all
参数: question(必填)— 操作问题
用途: 查询CRM系统操作指南
⚠️ 注意: 返回的信息可能不准确(如字段名),以 tools/list 实际schema为准
必填: company_id, type, expect_start_time(YYYY-MM-DD HH:MM), memo
可选: contact_id, expect_end_time(面访必填), visit_address
type: VisitType.1(面访)/VisitType.2(电话)/VisitType.3(邮件)/VisitType.4(QQ)/VisitType.5(微信)/VisitType.6(其他)/VisitType.105(企业微信)
必填: customer_id, share_with(接收人userid,多人用逗号分隔)
效果: 双方都能看到客户
必填: customer_id, assignee(新跟进人userid)
可选: previous_follower(原跟进人userid), sync_wecom_customer("1"开启/"0"关闭)
效果: 客户转给对方,可同步企业微信客户交接
必填: employee_name(支持"我"/"自己"), multiple(0单/1多), status(0在职/all)
用途: 分配/共享客户、分配线索时需要
参数: customer_name
用途: 提示操作方式(不直接发请求),实际通过 AddCustomerVisit 添加跟进记录捡回
必填: employee_name, start_time, end_time, scope(个人/团队)
可选: analysis_type
必填: customer_id(需来自SearchExistingCustomers且check_look=1)
返回: 合同、到账、回款、利润
必填: start_time(YYYY-MM-DD), end_time(YYYY-MM-DD), scope("全部"/"团队"/"个人")
可选: userids(多人逗号分隔;scope=个人时可省略或传 me/自己/我)
用途: 查询即将到期/最近到期的客户,用于续费提醒
必填: end_time(YYYY-MM-DD) — 最后跟进截止日期/阈值
可选: company_level — 客户等级筛选(须与字典CompanyLevel一致,用QueryDictByCode查询)
用途: 查询长期未跟进的客户
必填: dict_code — 字典编码
常用编码: CompanyLevel, CompanyType, EmployeesNum, Industry 等
用途: 辅助工具,获取下拉选项值列表
约束: dict_code 必须传系统字典全称,不能传简称、中文名或字段名猜测值;简称会导致查不到或选项不准,影响精准录入
必填: contact_name, source(需先SearchFieldOptions查选项)
可选: company_name, phone, duty, region, address, email, qq, wechat, memo, receiver
注意: phone/email/qq/tel/wechat 至少填一个
参数: keyword(必填)— 公司名称/联系人/手机号
返回: 线索列表(含id和can_make_call_flag)
必填: id(线索ID), receiver(接收人userid), suggest(备注说明)
全部可选: id, labeling_status(需SearchFieldOptions查), labeling_memo
⚠️ 必须先 QueryLead 确认 can_make_call_flag 有权限
必填: clue_name, company_id, clue_brand, budget(数字), expect_date(YYYY-MM),
belong_user(自己的user_id), used_brand(需求描述), competitive_brands(竞品分析)
可选: product_ids, cooperater(需SearchFieldOptions查)
品牌: 腾讯标准产品(1)/赢在销客(122)/企业微信私有化(123)/惠岚(1566)/定制开发(1639)
参数: keyword(必填)— 产品名或编号
必填: tool_name, field_key
可选: keyword(筛选子串), limit(最大条数)
tool_name: AddClue/AddCustomerVisit/AddOpportunity/CreateNewBusinessCustomer
用途: 查询单选/多选/下拉字段的 label 和 value
约束: 查询不到字段选项时再用 QueryDictByCode,且 QueryDictByCode 的 dict_code 必须用系统字典全称
必填: date(YYYY-MM-DD)— 查询日期
用途: 拉取工作汇总上下文,用于填写日报
| # | 接口 | user_id参数 | 说明 |
|---|---|---|---|
| 1 | AssignCustomer | assignee | 必填 - 新跟进人userid |
| 2 | ShareCustomer | share_with | 必填 - 接收人userid(多人用逗号分隔) |
| 3 | AssignLead | receiver | 必填 - 接收人userid |
| 4 | AddClue | belong_user | 必填 - 自己的userid |
| 5 | QueryCustomersRecentExpiry | userids | 可选 - 多人用逗号分隔 |
Step 1: 调用 QueryEmployeeUserId 查询员工ID
- employee_name: 员工姓名(支持"我"/"自己")
- multiple: 0(单人)或 1(多人)
- status: 0(仅在职员工)
↓
├─ ✅ 查询成功 → 获取 user_id,继续调用目标接口
└─ ❌ 查询失败(无权限/查不到)→ 尝试降级策略(见下方)
方案A:直接用员工姓名 部分接口的userid参数支持直接传入员工姓名字符串,系统会自动匹配:
| 接口 | 参数 | 支持姓名? |
|---|---|---|
| AssignLead | receiver | ✅ 支持 |
| AssignCustomer | assignee | ⚠️ 可能支持 |
| ShareCustomer | share_with | ⚠️ 可能支持 |
方案B:用"我/自己/我"代替 如果操作对象是当前登录人,可以:
# 标准查询员工ID
cat > /tmp/crm_query.json << 'JSONEOF'
{"jsonrpc":"2.0","method":"tools/call","params":{"name":"QueryEmployeeUserId","arguments":{"employee_name":"","multiple":0,"status":0}},"id":1}
JSONEOF
curl -s "https://www.wininsales.com/mcp_api/mcp?token=" \
-X POST -H "Content-Type: application/json" \
-d @/tmp/crm_query.json
# 降级:直接用姓名分配线索
cat > /tmp/crm_query.json << 'JSONEOF'
{"jsonrpc":"2.0","method":"tools/call","params":{"name":"AssignLead","arguments":{"id":"线索ID","receiver":"","suggest":"备注"}},"id":1}
JSONEOF
curl -s "https://www.wininsales.com/mcp_api/mcp?token=" \
-X POST -H "Content-Type: application/json" \
-d @/tmp/crm_query.json
| 工商字段 | CRM字段 | 说明 |
|---|---|---|
| companyName | company_name | 直接使用 |
| juridicalPerson | contact_contact_name | 建议作默认联系人 |
| registedCapital | memo | 填入备注 |
| registedDate | memo | 填入备注 |
| address | address | 直接使用 |
| actualAddress | memo | 如与address不同则备注 |
| industry | industry | 可能需要SearchFieldOptions匹配 |
| products | main_product | 主营产品字段 |
| creditCode | memo | 填入备注 |
| webSites | url | 取第一个 |
| staffNumber | scope | 需转换为EmployeesNum编号 |
| province + city | region | 组合填入 |
按老板实际说法整理,零技术术语
| 老板怎么说 | 做什么 | 用什么工具 |
|---|---|---|
| "XX公司存在吗" | 客户查重 | SearchExistingCustomers |
| "在谁名下" | 查客户归属和跟进人 | SearchExistingCustomers → AnalyzeCustomers |
| "帮我录入XX公司" | 创建新客户(自动查工商) | 查重 → 工商查询 → CreateNewBusinessCustomer |
| "记录一下跟进" | 添加拜访/电话/微信记录 | SearchExistingCustomers → AddCustomerVisit |
| "看一下XX公司的合同" | 查合同、回款、利润 | SearchExistingCustomers → QueryCustomerContractPayment |
| "查一下本周的业绩" | 团队或个人业绩分析 | EmployeeAnalysis |
| "把XX客户分给XX" | 客户转给同事 | SearchExistingCustomers → QueryEmployeeUserId → AssignCustomer |
| "让XX也能看到这个客户" | 共享客户给同事 | SearchExistingCustomers → QueryEmployeeUserId → ShareCustomer |
| "XX客户在公海,帮我捡回来" | 公海客户捡回 | SearchExistingCustomers → AddCustomerVisit |
| "帮我加个线索" | 添加新销售线索 | SearchFieldOptions → AddOpportunity |
| "查一下线索" | 按名称/电话查线索 | QueryLead |
| "把线索分给XX" | 线索分配给同事 | QueryLead → QueryEmployeeUserId → AssignLead |
| "打了个电话标记一下" | 线索通话标记 | QueryLead → SearchFieldOptions → SignLeadCall |
| "帮这个客户建个商机" | 为客户创建商机 | SearchExistingCustomers → SearchProducts → AddClue |
| "查一下产品" | 按名称或编号查产品 | SearchProducts |
| "有哪些选项可以选" | 查询下拉选项值 | SearchFieldOptions |
| "最近哪些客户要到期" | 查询即将到期客户 | QueryCustomersRecentExpiry |
| "哪些客户很久没联系了" | 查询长期未跟进客户 | QueryNoFollowUpCustomers |
| "帮我写日报" | 拉取工作汇总生成日报 | QueryDailyWriteContext |
执行前:
执行中:
执行后:
Q:为什么录入客户前一定要查重?
A:CRM 中客户可能在自己名下、他人名下或公海。先查重可以避免重复客户、误录入和后续归属争议。
Q:为什么字典要用全称,不能写 level、type?
A:QueryDictByCode 依赖系统字典全称,例如 CompanyLevel、CompanyType、EmployeesNum。简称或中文名可能查不到,导致录入字段不准。
Q:为什么枚举值要写 VisitType.2,而不是 2?
A:带前缀能明确这是哪个字段的选项,避免不同字段的数字值混淆,例如 VisitType.2 和 CompanyLevel.2 代表完全不同的含义。
Q:查不到员工ID怎么办?
A:先说明可能是权限不足或姓名不匹配;分配线索时可尝试直接用员工姓名,客户分配/共享也可按接口兼容性尝试姓名,但必须说明这是降级方案。
Q:合同、回款、团队业绩查不到怎么办?
A:先检查当前账号是否有权限,再确认客户ID、时间范围、团队范围。不能绕过 CRM 权限,也不能编造数据。
Q:这个技能能不能保存我的 token?
A:不能。token 应由 CRM 授权流程提供,技能文件和上架包不能保存真实 token、密码、API key 或客户隐私。
Q:CRMOperationManual 返回内容和实际接口不一致怎么办?
A:以 tools/list schema 和真实 API 返回为准,CRMOperationManual 只作为操作说明参考。
(以下由AI在实际调用中自动积累,请勿手动删除)
curl -d @file,或用 printf 管道传入