3.2 KiB
3.2 KiB
Lead · 意向客户(Phase 3)
自主问卷用户信息采集的统一入口,落到
leads表,供管理后台跟进。
接口表
| Method | Path | 鉴权 | 说明 |
|---|---|---|---|
| POST | /api/v1/leads |
- | 提交(小程序自测问卷、首页落地等) |
| GET | /api/v1/leads/stats |
✅ | 统计:总数 / 24h / 按 source 分组 |
| GET | /api/v1/admin/leads |
✅ | 列表,支持 phone / source / keyword / 时间过滤 |
| GET | /api/v1/admin/leads/:id |
✅ | 详情 |
| PUT | /api/v1/admin/leads/:id/remark |
✅ | 修改备注 |
| DELETE | /api/v1/admin/leads/:id |
✅ | 删除 |
POST /api/v1/leads
请求体
{
"name": "张三",
"phone": "13800138000",
"symptom": "便血近 1 周,伴有肛门坠胀",
"questionnaire": {
"total": 5,
"answers": { "0": "sometimes", "1": "no" },
"createdAt": "2026-06-14T08:30:00.000Z"
},
"source": "self-test",
"score": 5
}
校验规则
name必填,1-20 字符phone必填,匹配^1[3-9]\d{9}$symptom可选,≤ 500 字questionnaire必填,任意 JSON 对象source可选,枚举self-test/home/appointment/other,默认self-testscore可选,0-100
响应
{ "code": 0, "message": "提交成功", "data": { "id": "lead-1781398800000", "createdAt": "2026-06-14 16:30:00" } }
错误码
| HTTP | code | message |
|---|---|---|
| 400 | 1 | 姓名必填 / 姓名长度需在 1-20 字符 |
| 400 | 1 | 手机号必填 / 手机号格式不正确 |
| 400 | 1 | 症状描述不超过 500 字 |
| 400 | 1 | 问卷答案 questionnaire 必填且为对象 |
| 400 | 1 | source 仅支持:self-test / home / appointment / other |
| 400 | 1 | 该手机号在同渠道已提交过,请勿重复 |
| 500 | 500 | 服务器内部错误 |
GET /api/v1/admin/leads
Query
phone手机号精确匹配source渠道keyword姓名模糊匹配startDate/endDate时间范围(YYYY-MM-DD)limit默认 50,最大 200offset默认 0
响应
{
"code": 0,
"message": "ok",
"data": {
"list": [
{
"id": "lead-1781398800000",
"name": "张三",
"phone": "13800138000",
"symptom": "便血近 1 周",
"questionnaire": { "total": 5, "answers": {} },
"source": "self-test",
"score": 5,
"remark": "",
"createdAt": "2026-06-14 16:30:00",
"updatedAt": "2026-06-14 16:30:00"
}
],
"total": 1,
"limit": 50,
"offset": 0
}
}
数据表
CREATE TABLE leads (
id VARCHAR(32) PRIMARY KEY,
name VARCHAR(50) NOT NULL,
phone VARCHAR(20) NOT NULL,
symptom TEXT,
questionnaire JSON NOT NULL,
source VARCHAR(20) NOT NULL DEFAULT 'self-test',
score INT DEFAULT 0,
remark VARCHAR(500),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uniq_phone_source (phone, source)
);
唯一约束 (phone, source):同手机号在同一渠道只保留一条。