---
name: wininsales-crm
description: Use when users need 赢在销客CRM/企业微信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. 适用于“客户是否存在/在谁名下/录入客户/记录跟进/分配共享/查合同回款/查到期或未跟进客户/写日报”等场景。
---

# 赢在销客CRM (WininSales CRM)

## 概述

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

客户常见问题包括：
- “这个客户系统里有没有？在谁名下？”
- “帮我把这家公司录入 CRM，并先查重。”
- “给客户加一条电话/微信/面访跟进记录。”
- “把客户共享给同事，或把线索分配给某个人。”
- “查一下本月到期客户、长期未跟进客户、合同回款和团队业绩。”
- “基于今天的跟进情况帮我写日报。”

底层集成赢在销客CRM的 MCP API（24个接口），覆盖客户管理全流程。
**数据来源：** 通过 `tools/list` 接口获取实际API定义，确保与系统一致。

## API总览（24个接口，按功能分组）

### 🔵 客户管理（7个）

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

### 🟢 跟进与拜访（1个）

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

### 🟡 客户协作（4个）

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

### 🟠 业绩与分析（4个）

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

### 🔴 线索管理（4个）

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

### 🟣 商机与产品（2个）

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

### ⚪ 辅助工具（2个）

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

---

## 基础配置

### 授权Token

如果没有token，就需要引导去注册和登录CRM，登录地址
https://www.wininsales.com/login



### curl调用方式

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

---

## 智能工作流（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~9），不是主营产品！主营产品用 main_product

### 流程3：跟进录入

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

```
Step 1: SearchExistingCustomers 获取客户ID
Step 2: 询问：往来方式（面访/电话/微信/QQ/邮件）、时间、内容
Step 3: 面访需补充：结束时间（默认+4小时）、拜访地址
Step 4: AddCustomerVisit 提交
```

**往来方式映射：** 面访=VisitType.1, 电话=2, 邮件=3, QQ=4, 微信=5, 其他=6, 企业微信=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 | **双方都能看到**，各自独立跟进 | 协作查看、数据同步 |

**完整示例（客户分配）：**
```bash
# 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"}}}'
```

**完整示例（客户共享）：**
```bash
# 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 选项值
    └─ ❌ 失败（无权限）→ 使用常见默认值: 1=线索转化, 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 提交
```

**添加线索示例（无权限时降级）：**
```bash
# 如果 SearchFieldOptions 失败，用默认值
curl ... -d '{"method":"tools/call","params":{"name":"AddOpportunity","arguments":{
  "contact_name":"联系人名", "phone":"手机号", "source":"1", "memo":"备注"
}}}'
```

**分配线索示例（查询ID + 分配）：**
```bash
# 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)/无意向(0)/信息不完整(113)/未沟通(103)/潜在(1)/意向(2)
source            [可选] 客户来源（需SearchFieldOptions查）常用: 主动开发(MessageSource.3)/线索转化(1)
industry          [可选] 所属行业（需SearchFieldOptions查）
scope             [可选] 企业规模: 1-10人(EmployeesNum.1)/11-50(2)/51-100(3)/101-200(4)/201-500(5)/501-1000(6)/1001-2000(7)/2001-5000(8)/5000人以上(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)/财务决策人(2)/项目影响人(3)/项目负责人(4)/项目执行人(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(面访)/2(电话)/3(邮件)/4(QQ)/5(微信)/6(其他)/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参数 | 说明 |
|---|------|-------------|------|
| 1 | AssignCustomer | assignee | **必填** - 新跟进人userid |
| 2 | ShareCustomer | share_with | **必填** - 接收人userid（多人用逗号分隔） |
| 3 | AssignLead | receiver | **必填** - 接收人userid |
| 4 | AddClue | belong_user | **必填** - 自己的userid |
| 5 | QueryCustomersRecentExpiry | userids | 可选 - 多人用逗号分隔 |

### 查询员工ID的标准流程

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

### 降级策略（QueryEmployeeUserId失败时）

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

| 接口 | 参数 | 支持姓名？ |
|------|------|----------|
| AssignLead | receiver | ✅ 支持 |
| AssignCustomer | assignee | ⚠️ 可能支持 |
| ShareCustomer | share_with | ⚠️ 可能支持 |

**方案B：用"我/自己/我"代替**
如果操作对象是当前登录人，可以：
- QueryCustomersRecentExpiry: scope="个人"时可不传userids
- EmployeeAnalysis: 直接用 employee_name="我"

### 调用示例

```bash
# 标准查询员工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字段 | 说明 |
|---------|---------|------|
| 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 |

---

## 注意事项

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

---

## 踩坑经验

（以下由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~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 可用默认值 1=线索转化，3=主动开发
