feat: add student crm push

This commit is contained in:
Codex
2026-06-30 16:21:17 +08:00
parent d94b20b8ed
commit 7f97b52165
15 changed files with 774 additions and 27 deletions

View File

@@ -1,8 +1,8 @@
# CRM Webhook Worker
更新时间2026-06-29
更新时间2026-06-30
`apps/worker` 是后端异步任务进程,当前首个落地任务是 CRM 客资 webhook 推送。API 只负责在客资首绑时写入 `crm_webhook_queue`worker 负责消费到期任务、签名、发送、失败重试和写入 `crm_webhook_log`
`apps/worker` 是后端异步任务进程,当前 CRM 任务支持客资首绑 webhook 推送和租户后台学生批量跟进推送。API 只负责在客资首绑或学生运营动作时写入 `crm_webhook_queue`worker 负责消费到期任务、签名、发送、失败重试和写入 `crm_webhook_log`
## 运行命令
@@ -45,6 +45,7 @@ WORKER_CRM_ALLOW_INSECURE_LOCALHOST=false
PUT /api/crm/config
GET /api/crm/config
GET /api/crm/queue
POST /api/tenant-admin/students/crm-push
```
密钥必须写入 `app_private.tenant_secrets`,公共表 `crm_config.secret_ref` 只保留引用,例如:
@@ -59,7 +60,7 @@ worker 根据队列 payload 的 `provider` 或 webhook URL 自动判断:
| provider | URL 特征 | 行为 |
| --- | --- | --- |
| `generic` | 默认 | POST `{ event: "lead.created", data: ... }` |
| `generic` | 默认 | POST `{ event: "lead.created", data: ... }``{ event: "student.crm_push", data: ... }` |
| `dingtalk` | `dingtalk.com` | markdown 消息;按钉钉自定义机器人安全设置做 timestamp/sign |
| `feishu` | `feishu.cn` / `larksuite.com` | interactive card按飞书自定义机器人签名做 timestamp/sign |
| `wecom` | `qyapi.weixin.qq.com` / `work.weixin.qq.com` | 企业微信群机器人 markdown 消息 |
@@ -95,13 +96,14 @@ pending -> discarded
- 前端不能直接写 `crm_webhook_queue`
- 前端不能持有 CRM webhook secret。
- 学生批量推送必须走 `POST /api/tenant-admin/students/crm-push`,后端会校验 `crm:write``students:read``students:followups:write`、学生范围、班级范围和租户成员指派人。
- 学生推送 payload 只包含 `avatarPreset` 默认头像口径,不写入、不回显微信/QQ/旧库头像 URL。
- 生产环境 webhook 必须使用 HTTPS。
- `WORKER_CRM_ALLOW_INSECURE_LOCALHOST=true` 只用于本地 fake webhook 测试。
- worker 使用数据库服务端连接读取 `app_private.tenant_secrets`,不要把 secret 复制到公共表。
## 后续增强
- 轮询/定向分配销售。
- 钉钉/飞书/企微富卡片模板。
- 失败告警和死信运营后台。
- 批量 CRM 推送、跟进效果统计。
- 跟进效果统计和销售转化看板