← 返回导航
通知渠道模块表结构
ntc_channels — 渠道配置(每平台一行)
| 字段 |
类型 |
说明 |
| id |
varchar(36) PK |
|
| platform |
varchar(20) |
wecom / dingtalk / feishu,唯一 |
| company_name |
varchar(120) |
企业名称(平台侧) |
| app_config |
text |
JSON:凭证与基础信息,secret 字段加密存储(Fernet 对称加密,密钥经 settings 环境变量注入) |
| scenes |
text |
JSON:启用的推送场景清单 |
| enabled |
bool |
渠道总开关 |
| verify_status |
varchar(20) |
unverified / ok / failed |
| last_verified_at |
datetime |
最近一次验证时间 |
| 审计字段 |
— |
created_by/updated_by/created_at/updated_at |
ntc_webhooks — 群机器人
| 字段 |
类型 |
说明 |
| id |
varchar(36) PK |
|
| platform |
varchar(20) |
平台 |
| group_name |
varchar(120) |
群名称 |
| webhook_url |
text |
完整 webhook(含 key/token),加密存储 |
| security_mode |
varchar(20) |
sign(加签)/ keyword(关键词)/ none |
| security_secret |
text |
加签密钥或关键词,加密存储 |
| scenes |
text |
JSON:该群接收的推送内容范围 |
| enabled |
bool |
|
| verify_status |
varchar(20) |
unverified / ok / failed |
| 软删+审计 |
— |
复用全局 Mixin |
ntc_identities — 成员绑定
| 字段 |
类型 |
说明 |
| id |
varchar(36) PK |
|
| user_id |
varchar(36) |
系统用户 iam_users.id |
| platform |
varchar(20) |
平台 |
| platform_user_id |
varchar(80) |
企微 userid / 钉钉 userid / 飞书 open_id |
| match_method |
varchar(20) |
auto_mobile(手机号自动)/ manual |
| bound_at |
datetime |
|
| 唯一约束 |
(user_id, platform) |
每用户每平台一条 |
ntc_send_logs — 发送记录
| 字段 |
类型 |
说明 |
| id |
varchar(36) PK |
|
| idempotency_key |
varchar(255) 唯一 |
通知 id + 通道标识,防重复投递 |
| platform |
varchar(20) |
|
| channel_type |
varchar(20) |
app / webhook |
| webhook_id |
varchar(36) 可空 |
群机器人时记录 |
| target |
varchar(200) |
接收方摘要(姓名/群名,不存明文敏感 ID) |
| title |
varchar(200) |
消息标题/摘要 |
| notification_id |
varchar(36) 可空 |
来源站内通知 |
| status |
varchar(20) |
pending / sent / failed / skipped_no_permission |
| error_code |
varchar(60) 可空 |
平台错误码 |
| retry_count |
int |
|
| sent_at |
datetime 可空 |
|
| 索引 |
(platform, status, created_at) |
记录保留 90 天(定时清理) |
场景路由(配置入系统配置,不建表)
通知场景 → 通道的映射存入系统配置(sys_configs,key=ntc.scene_routes)。场景 key = {biz_module}.{biz_type}(站内通知已有字段,业务侧无需打标;无 biz 三元组的通知回退 {notification_type})。结构示例:
{
"work_order.workflow_approval": {"channels": [{"type": "app", "platform": "feishu"}]},
"notification.system": {"channels": [{"type": "webhook", "webhook_id": "..."}]}
}