Wininsales crm

Productivity
CRM日报微信

Use 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. 适用于“客户是否存在/在谁名下/录入客户/记录跟进/分配共享/查合同回款/查到期或未跟进客户/写日报”等场景。

Install

openclaw skills install @hijasongithub/wininsales-crm

赢在销客CRM (WininSales CRM)

概述

此 skill 面向赢在销客 CRM 的日常销售运营场景,帮助销售、主管和运营人员直接完成客户查询、录入、跟进、线索、商机、合同回款、业绩分析和日报等工作。

客户常见问题包括:

  • “这个客户系统里有没有?在谁名下?”
  • “帮我把这家公司录入 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运营:维护字段选项、确认字典全称、处理公海、检查录入失败原因、沉淀规范。

安全、权限与隐私边界

  • 不在技能文件里保存真实 token、密码、API key、客户手机号、邮箱、合同金额截图等隐私数据。
  • token 由用户在赢在销客 CRM 授权获取;调用时只使用当前用户授权,不绕过 CRM 权限。
  • 查询结果只能展示当前账号有权查看的数据;遇到无权限、查不到、字段不可见时,明确说明原因。
  • 对外展示客户信息时默认脱敏:手机号、邮箱、微信、QQ、电话中间用 ****;内部写入参数可用用户提供的完整值。
  • 写入类动作(录入客户、分配/共享、添加跟进、添加线索、添加商机、通话标记)必须先复述关键字段并获得用户确认。
  • 禁止编造客户、联系人、合同、回款、员工ID、产品ID、字段选项值;缺字段时问用户补充。

标准输出模板

查询类输出:

结论:查到/未查到/无权限/需要补充条件
关键信息:客户名称、状态、跟进人、最近跟进、合同/回款/到期等必要字段
风险提示:重复客户、公海、他人跟进、长期未跟进、即将到期、权限不足
下一步:录入、共享、分配、跟进、建商机、继续筛选

写入类确认:

请确认以下信息:
- 操作:录入客户/添加跟进/分配客户/共享客户/添加线索/添加商机
- 对象:客户或线索名称
- 关键字段:联系人、电话、来源、跟进方式、员工、产品、时间
确认后再提交 CRM。

失败类输出:

结果:本次操作未完成
原因:无权限/字段缺失/字典值不匹配/客户已存在/API返回错误
建议:补充字段、先查字典、换用员工姓名降级、请管理员授权、稍后重试

API总览(24个接口,按功能分组)

🔵 客户管理(7个)

#API名称功能使用频率
1SearchExistingCustomers客户查重/搜索⭐⭐⭐⭐⭐
2CreateNewBusinessCustomer新客户录入(40+字段)⭐⭐⭐⭐⭐
3CompanyBusinessRegistrationInquiry工商信息查询(天眼查)⭐⭐⭐⭐
4CompanyInformationSearch工商信息补全⭐⭐⭐
5AnalyzeCustomers客户数据分析⭐⭐⭐⭐
6CRMOperationManual查询操作手册⭐⭐
7QueryDictByCode查询数据字典(辅助工具)⭐⭐

🟢 跟进与拜访(1个)

#API名称功能使用频率
8AddCustomerVisit添加跟进/拜访记录⭐⭐⭐⭐⭐

🟡 客户协作(4个)

#API名称功能使用频率
9ShareCustomer客户共享给同事⭐⭐⭐
10AssignCustomer客户分配给同事⭐⭐⭐
11QueryEmployeeUserId查询员工ID⭐⭐⭐
12ReclaimPublicPoolCustomer公海客户捡回提示⭐⭐⭐

🟠 业绩与分析(4个)

#API名称功能使用频率
13EmployeeAnalysis员工/团队业绩分析⭐⭐⭐⭐
14QueryCustomerContractPayment客户合同与回款查询⭐⭐⭐
15QueryCustomersRecentExpiry🆕 查询即将到期客户⭐⭐⭐
16QueryNoFollowUpCustomers🆕 查询长期未跟进客户⭐⭐⭐

🔴 线索管理(4个)

#API名称功能使用频率
17AddOpportunity添加销售线索⭐⭐⭐
18QueryLead查询线索⭐⭐⭐
19AssignLead分配线索给同事⭐⭐⭐
20SignLeadCall线索通话标记⭐⭐

🟣 商机与产品(2个)

#API名称功能使用频率
21AddClue为客户添加商机⭐⭐⭐
22SearchProducts按名称/编号查产品⭐⭐⭐

⚪ 辅助工具(2个)

#API名称功能使用频率
23SearchFieldOptions查询下拉/单选字段选项⭐⭐
24QueryDailyWriteContext🆕 拉取日报上下文⭐⭐

基础配置

授权Token

如果没有 token,引导用户登录 CRM 并在系统内授权获取;不要让用户把 token 写进技能文件或聊天记录。 登录地址: https://www.wininsales.com/login

授权注意:

  • token 属于当前 CRM 账号,权限以 CRM 后台为准。
  • token 无效、过期或权限不足时,提示用户重新授权或联系管理员。
  • 上架技能包只能包含 SKILL.md 和必要的上架元数据,不能包含密码文件、运维脚本、数据库备份配置。

curl调用方式

# ⚠️ 中文参数必须用 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

调试建议:

  • 中文参数用 heredoc 写入临时 JSON,避免 shell 编码问题。
  • 如果 shell 仍出现中文乱码,优先用 Python3 tempfile 写 UTF-8 JSON 文件,再调用 curl -d @file
  • 不要把真实 token 写进示例命令;本文件只保留 ?token= 占位。
  • 如果返回非预期字段,优先以 tools/list schema 和实际 API 返回为准,不以操作手册的文字说明为准。

智能工作流(14个核心流程)

流程1:客户查重+归属查询(最高频)

触发:用户说"XX公司存在吗"、"在谁名下"、"这个客户是谁的"

Step 1: SearchExistingCustomers(query=公司名)
    ↓
    ├─ 未查到 → "系统中不存在该客户,需要录入吗?"
    └─ 查到了 → 展示:客户名称、状态(私海/公海/他人跟进)、录入时间
    ↓
Step 2: 用户追问"谁的客户" → AnalyzeCustomers(customer=公司全称, analysis_type=客户)
    ↓
    ⚠️ customer必须用公司全称,不能缩写!
    ↓
Step 3: 输出:主跟进人、地址、意向等级
    ↓
Step 4: 根据状态给建议
    - "他人跟进" → "需要我帮你共享或分配过来吗?"
    - "客户公海" → "需要我帮你捡回吗?"

流程2:客户录入(含工商查询)

触发:用户说"帮我录入XX公司"、"XX公司录入CRM"

Step 1: 询问客户名称
    ↓
Step 2: SearchExistingCustomers 查重
    ├─ 已存在 → 展示信息,问是否需要其他操作(查归属/共享/分配)
    └─ 不存在 → 继续
    ↓
Step 3: CompanyBusinessRegistrationInquiry 工商查询
    ├─ 查到 → 展示工商信息,让用户确认
    └─ 未查到 → 问是否手动录入
    ↓
Step 4: 补充联系人信息(用户提供时直接用,否则用法人默认)
    ↓
Step 5: CreateNewBusinessCustomer 提交
    ├─ 成功 → "客户录入成功"
    └─ 失败 → 根据错误提示处理(见踩坑经验)

录入字段经验:

  • 必填:company_name, contact_contact_name, contact_sex
  • 建议填:industry, source, level, scope, main_product, region, label, memo
  • ⚠️ scope 是"企业规模"(EmployeesNum.1~EmployeesNum.9),不是主营产品!主营产品用 main_product

流程3:跟进录入

触发:用户说"记录一下跟进"、"加个拜访记录"

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

流程4:客户分配/共享(核心优化)

触发:用户说"把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"}}}'

流程5:公海捡回

触发:用户说"XX客户在公海,帮我捡回来"

Step 1: SearchExistingCustomers 确认客户在公海(status_name=客户公海)
Step 2: ReclaimPublicPoolCustomer 获取操作指引
Step 3: AddCustomerVisit 添加一条跟进记录 → 自动捡回私海

流程6:线索管理(核心优化)

触发:用户说"帮我加个线索"、"查一下线索"、"把线索分给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系统,分配给张涛跟进"
}}}'

流程7:商机添加

触发:用户说"帮这个客户建个商机"、"给XX公司加个商机"

Step 1: SearchExistingCustomers 获取 company_id
Step 2: SearchProducts 查询产品ID(如需指定产品)
Step 3: 收集商机信息:预算、预计签约时间、需求描述、竞品
Step 4: AddClue 提交

品牌ID: 腾讯标准产品(1)/赢在销客(122)/企业微信私有化(123)/惠岚品牌(1566)/定制开发(1639)

流程8:客户分析

触发:用户说"分析一下XX公司"、"看一下XX客户的数据"

Step 1: AnalyzeCustomers(customer=公司全称, analysis_type=all)
Step 2: 可选类型:客户、联系人、往来记录、商机记录、合同记录、all
Step 3: 格式化输出(隐藏手机号、用表格呈现)

流程9:业绩分析

触发:用户说"查一下本周的业绩"、"团队成交情况"

Step 1: 确认范围(个人/团队)和时间(本周/上周/本月/自定义)
Step 2: EmployeeAnalysis(employee_name, start_time, end_time, scope, analysis_type)
Step 3: 汇总输出(按业绩排序、计算总计)

流程10:合同查询

触发:用户说"看一下XX公司的合同"、"XX客户回款情况"

Step 1: SearchExistingCustomers 获取 customer_id(需 check_look=1)
Step 2: QueryCustomerContractPayment(customer_id)
Step 3: 输出合同、到账、回款、利润信息

流程11:🆕 到期客户查询

触发:用户说"最近哪些客户要到期"、"本月到期名单"、"续费提醒"

Step 1: 确认时间范围和查询范围
Step 2: QueryCustomersRecentExpiry(start_time, end_time, scope, userids?)
    - scope: "全部" / "团队" / "个人"
    - 时间格式: YYYY-MM-DD
    - scope="个人"时 userids 可省略(默认当前登录人),或传 me/自己/我
Step 3: 输出到期客户列表

流程12:🆕 未跟进客户查询

触发:用户说"多久没跟进的客户"、"哪些客户没联系"、"跟进超期"

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: 输出未跟进客户列表

流程13:🆕 日报上下文

触发:用户说"帮我写日报"、"今日工作汇总"

Step 1: QueryDailyWriteContext(date=YYYY-MM-DD)
    - 获取当日工作要点与明日计划等上下文
Step 2: 基于上下文生成日报内容

流程14:数据字典查询

触发:需要查询某个字段的全部可选值(当 SearchFieldOptions 不适用时)

Step 1: QueryDictByCode(dict_code="编码名")
    - 必须使用系统字典全称,如 CompanyLevel、CompanyType、EmployeesNum、Industry
    - 禁止用简称、中文名或猜测值,例如 level、type、规模、行业
Step 2: 输出字典值列表
Step 3: 录入客户、线索、商机前,必须从返回结果中选择准确 value

API详细参考

1. SearchExistingCustomers — 客户查重/搜索

参数: query(必填)— 公司名/电话/联系人,优先:客户名称 > 电话 > 联系人姓名
返回: 客户列表(含customer_id、contact_id、status_name、check_look)
约束: 禁止在未指明查询行为时自动调用;不泄露客户ID/联系方式

2. CreateNewBusinessCustomer — 客户录入(40+字段)

必填: 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         [可选] 联系人备注

3. CompanyBusinessRegistrationInquiry — 工商信息查询

参数: tyc_keyword(必填)— 企业全称
返回: companyName, juridicalPerson, registedCapital, registedDate,
      companyStatUs, address, actualAddress, industry, products,
      creditCode, webSites, staffNumber, socialSecurityNum,
      annualTurnover, reportTaxTotal

4. CompanyInformationSearch — 工商信息补全

参数: tyc_keyword(必填)— 企业全称
用途: 创建客户流程中补充企业工商信息

5. AnalyzeCustomers — 客户分析

参数: customer(必填, 公司全称), analysis_type(必填), start_time, end_time
类型: 客户/联系人/往来记录/商机记录/合同记录/all

6. CRMOperationManual — 操作手册

参数: question(必填)— 操作问题
用途: 查询CRM系统操作指南
⚠️ 注意: 返回的信息可能不准确(如字段名),以 tools/list 实际schema为准

7. AddCustomerVisit — 跟进录入

必填: 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(企业微信)

8. ShareCustomer — 客户共享

必填: customer_id, share_with(接收人userid,多人用逗号分隔)
效果: 双方都能看到客户

9. AssignCustomer — 客户分配

必填: customer_id, assignee(新跟进人userid)
可选: previous_follower(原跟进人userid), sync_wecom_customer("1"开启/"0"关闭)
效果: 客户转给对方,可同步企业微信客户交接

10. QueryEmployeeUserId — 查询员工ID

必填: employee_name(支持"我"/"自己"), multiple(0单/1多), status(0在职/all)
用途: 分配/共享客户、分配线索时需要

11. ReclaimPublicPoolCustomer — 公海捡回

参数: customer_name
用途: 提示操作方式(不直接发请求),实际通过 AddCustomerVisit 添加跟进记录捡回

12. EmployeeAnalysis — 业绩分析

必填: employee_name, start_time, end_time, scope(个人/团队)
可选: analysis_type

13. QueryCustomerContractPayment — 合同查询

必填: customer_id(需来自SearchExistingCustomers且check_look=1)
返回: 合同、到账、回款、利润

14. 🆕 QueryCustomersRecentExpiry — 到期客户查询

必填: start_time(YYYY-MM-DD), end_time(YYYY-MM-DD), scope("全部"/"团队"/"个人")
可选: userids(多人逗号分隔;scope=个人时可省略或传 me/自己/我)
用途: 查询即将到期/最近到期的客户,用于续费提醒

15. 🆕 QueryNoFollowUpCustomers — 未跟进客户查询

必填: end_time(YYYY-MM-DD) — 最后跟进截止日期/阈值
可选: company_level — 客户等级筛选(须与字典CompanyLevel一致,用QueryDictByCode查询)
用途: 查询长期未跟进的客户

16. 🆕 QueryDictByCode — 数据字典查询

必填: dict_code — 字典编码
常用编码: CompanyLevel, CompanyType, EmployeesNum, Industry 等
用途: 辅助工具,获取下拉选项值列表
约束: dict_code 必须传系统字典全称,不能传简称、中文名或字段名猜测值;简称会导致查不到或选项不准,影响精准录入

17. AddOpportunity — 添加线索

必填: contact_name, source(需先SearchFieldOptions查选项)
可选: company_name, phone, duty, region, address, email, qq, wechat, memo, receiver
注意: phone/email/qq/tel/wechat 至少填一个

18. QueryLead — 查询线索

参数: keyword(必填)— 公司名称/联系人/手机号
返回: 线索列表(含id和can_make_call_flag)

19. AssignLead — 分配线索

必填: id(线索ID), receiver(接收人userid), suggest(备注说明)

20. SignLeadCall — 通话标记

全部可选: id, labeling_status(需SearchFieldOptions查), labeling_memo
⚠️ 必须先 QueryLead 确认 can_make_call_flag 有权限

21. AddClue — 添加商机

必填: 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)

22. SearchProducts — 产品查询

参数: keyword(必填)— 产品名或编号

23. SearchFieldOptions — 字段选项查询

必填: tool_name, field_key
可选: keyword(筛选子串), limit(最大条数)
tool_name: AddClue/AddCustomerVisit/AddOpportunity/CreateNewBusinessCustomer
用途: 查询单选/多选/下拉字段的 label 和 value
约束: 查询不到字段选项时再用 QueryDictByCode,且 QueryDictByCode 的 dict_code 必须用系统字典全称

24. 🆕 QueryDailyWriteContext — 日报上下文

必填: date(YYYY-MM-DD)— 查询日期
用途: 拉取工作汇总上下文,用于填写日报

员工ID查询(统一规范)

需要user_id的接口汇总

#接口user_id参数说明
1AssignCustomerassignee必填 - 新跟进人userid
2ShareCustomershare_with必填 - 接收人userid(多人用逗号分隔)
3AssignLeadreceiver必填 - 接收人userid
4AddCluebelong_user必填 - 自己的userid
5QueryCustomersRecentExpiryuserids可选 - 多人用逗号分隔

查询员工ID的标准流程

Step 1: 调用 QueryEmployeeUserId 查询员工ID
    - employee_name: 员工姓名(支持"我"/"自己")
    - multiple: 0(单人)或 1(多人)
    - status: 0(仅在职员工)
    ↓
    ├─ ✅ 查询成功 → 获取 user_id,继续调用目标接口
    └─ ❌ 查询失败(无权限/查不到)→ 尝试降级策略(见下方)

降级策略(QueryEmployeeUserId失败时)

方案A:直接用员工姓名 部分接口的userid参数支持直接传入员工姓名字符串,系统会自动匹配:

接口参数支持姓名?
AssignLeadreceiver✅ 支持
AssignCustomerassignee⚠️ 可能支持
ShareCustomershare_with⚠️ 可能支持

方案B:用"我/自己/我"代替 如果操作对象是当前登录人,可以:

  • QueryCustomersRecentExpiry: scope="个人"时可不传userids
  • EmployeeAnalysis: 直接用 employee_name="我"

调用示例

# 标准查询员工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

特殊说明

  • EmployeeAnalysis 的 employee_name 参数直接用姓名,不需要先查user_id
  • QueryCustomersRecentExpiry 的 scope="个人" 时,可以不传userids(自动用当前登录人)
  • AddClue 的 belong_user 需要自己的user_id,可用 QueryEmployeeUserId(employee_name="我", multiple=0, status=0) 查询

工商信息 → CRM字段映射

工商字段CRM字段说明
companyNamecompany_name直接使用
juridicalPersoncontact_contact_name建议作默认联系人
registedCapitalmemo填入备注
registedDatememo填入备注
addressaddress直接使用
actualAddressmemo如与address不同则备注
industryindustry可能需要SearchFieldOptions匹配
productsmain_product主营产品字段
creditCodememo填入备注
webSitesurl取第一个
staffNumberscope需转换为EmployeesNum编号
province + cityregion组合填入

场景速查表

按老板实际说法整理,零技术术语

老板怎么说做什么用什么工具
"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

注意事项

  1. 必须先查重 — 录入/操作前先 SearchExistingCustomers
  2. 工商查询优先 — 录入新客户时自动查工商信息填充
  3. 必须二次确认 — 工商信息展示后需用户确认才录入
  4. 隐私保护 — 手机号、邮箱中间用 **** 代替
  5. 错误处理 — API失败告知原因,不隐瞒
  6. 时间格式 — 严格 YYYY-MM-DD HH:MM 或 YYYY-MM
  7. 字段选项先查 — 创建商机/线索时,单选字段须先 SearchFieldOptions
  8. 字典必须用全称 — QueryDictByCode 的 dict_code 必须传系统字典全称,禁止用简称、中文名或猜测值,否则会导致选项不准、录入不精准
  9. 枚举值必须带字典前缀 — 属于字典/选项的值不要写裸数字,统一写成 CompanyLevel.1、EmployeesNum.2、VisitType.5、ContactRole.3、MessageSource.1 这类完整值
  10. 禁止编造ID — customer_id、线索id、产品id必须来自查询结果
  11. 禁止编造信息 — 不得编造任何客户信息,不完整时须向用户请求补充
  12. CRMOperationManual仅供参考 — 其返回信息可能不准确,以 tools/list 实际schema为准
  13. 分配容错策略 — QueryEmployeeUserId 失败时,可直接用员工姓名作为 receiver/assignee/share_with 参数
  14. 员工ID优先查询 — 所有需要user_id的接口(AssignCustomer/ShareCustomer/AssignLead/AddClue)都应先调用 QueryEmployeeUserId

可靠性检查清单

执行前:

  • 查询/写入对象是否明确:客户名、联系人、手机号、线索ID、员工、时间范围。
  • 写入前是否已查重:客户录入、建商机、添加跟进必须先定位客户。
  • 字典/枚举是否准确:字段选项先用 SearchFieldOptions;字典查询用 QueryDictByCode 全称;枚举值带前缀。
  • 权限是否足够:合同、回款、团队业绩、他人客户、员工ID查询可能受 CRM 权限限制。

执行中:

  • 查询结果多条时,让用户选择,不自动猜测。
  • API 失败时保留原始错误要点,给出下一步方案。
  • 降级策略只用于已知可兼容字段,例如员工ID查询失败时尝试员工姓名;不得对客户ID、产品ID、线索ID降级编造。

执行后:

  • 查询类给结论、关键字段、风险提示、下一步。
  • 写入类给成功/失败状态、对象名称、关键字段、后续建议。
  • 对敏感字段继续脱敏展示。

FAQ

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在实际调用中自动积累,请勿手动删除)

  • SearchExistingCustomers / curl中文参数:shell直接传中文字符串到JSON时可能编码异常,建议用 heredoc 写入临时文件再 curl -d @file,或用 printf 管道传入
  • AnalyzeCustomers / customer参数必须用公司全称:SearchExistingCustomers返回的company_name是什么就传什么,不能缩写或截断,否则查不到
  • QueryDictByCode / 字典编码必须用全称:如 CompanyLevel、CompanyType、EmployeesNum、Industry,不能用 level、type、规模、行业 等简称或中文名,否则会导致查不到选项或选项不精准,进而影响客户/线索/商机录入
  • CreateNewBusinessCustomer / 实际无contact_way/follow_up_way字段:CRMOperationManual声称有这两个字段但实际MCP schema中不存在,传入会被静默忽略
  • CreateNewBusinessCustomer / tel字段是手机号格式:虽然描述为"企业电话",但要求11位手机号格式;座机用fax字段
  • CreateNewBusinessCustomer / 占位手机号问题:系统会校验手机号真实性,不能用13800000001等明显假号,如无真实手机号可不填contact_phone,用fax填座机
  • CreateNewBusinessCustomer / label标识值:Label.16462=潜在客户,Label.16401=企微CRM客户,Label.16469=签约客户,Label.16408=合作代理商,Label.16409=项目合作
  • CreateNewBusinessCustomer / scope是企业规模:不是主营产品!scope值用EmployeesNum.1~EmployeesNum.9;主营产品用main_product字段(文本输入)
  • CreateNewBusinessCustomer / 建议填全字段:系统有较多隐式必填校验,建议尽量填 level、scope、main_product、region、source、industry、label,减少报错
  • CreateNewBusinessCustomer / 联系人字段区分:contact_phone=联系人手机(11位),contact_tel=联系人座机,tel=企业电话(11位手机格式),fax=企业传真(座机格式)
  • CreateNewBusinessCustomer / 电话冲突:如果报手机号被占用,去掉contact_phone字段重试
  • CRMOperationManual / 不可信:返回的字段名、参数格式等信息经常与实际不一致,仅作参考,以 tools/list 获取的实际schema为准
  • QueryEmployeeUserId / 可能无权限:部分账号没有查询其他员工ID的权限,此时可降级用员工姓名
  • QueryEmployeeUserId / 支持"我"字:用 employee_name="我" 可查询当前登录人的user_id
  • AssignLead / 支持姓名直接分配:receiver 参数可直接用员工姓名字符串
  • AssignCustomer / 可能支持姓名:assignee 参数降级时可尝试直接用姓名
  • ShareCustomer / 可能支持姓名:share_with 参数降级时可尝试直接用姓名
  • AddClue / belong_user 必填:添加商机需要自己的user_id,须先 QueryEmployeeUserId(employee_name="我") 查询
  • SearchFieldOptions / 可能无权限:如查询来源选项失败,AddOpportunity 的 source 可用默认值 MessageSource.1=线索转化,MessageSource.3=主动开发
  • AddOpportunity / contact_name 必填:如果系统报类似“请补充收票人姓名”,优先检查是否缺少 contact_name 或字段映射异常