IM 渠道与邮件
wesgine IM 渠道与邮件系统:注册、绑定、事件推送与 Webhook 回调。
IM 渠道 API
渠道管理
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /channels | 渠道列表 |
| POST | /channels | 注册/更新渠道 |
| DELETE | /channels/{platform}/{account} | 删除渠道 |
绑定管理
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /channels/bindings | 绑定列表 |
| PUT | /channels/bindings | 替换绑定 |
消息
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /channels/preflight | 预检验证 |
| POST | /channels/send | 发送消息 |
| GET | /channels/events | SSE 事件流 |
邮件 API
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /email | 邮箱账号列表 |
| POST | /email | 添加邮箱账号 |
| DELETE | /email/{address} | 删除邮箱账号 |
| POST | /email/{address}/test | SMTP 测试 |
SDK API
渠道
cell.Channels().Register(ctx, channelConfig)
cell.Channels().Delete(ctx, platform, account)
cell.Channels().List(ctx)
cell.Channels().Bindings(ctx)
cell.Channels().ReplaceBindings(ctx, bindings)
cell.Channels().Send(ctx, message)
邮件
cell.Email().AddAccount(ctx, emailConfig)
cell.Email().DeleteAccount(ctx, address)
cell.Email().ListAccounts(ctx)
cell.Email().TestSMTP(ctx, address)
支持的 IM 平台
| 平台 | Webhook 路径 |
|---|---|
| 企业微信 | POST /webhook/wecom |
| 飞书 | POST /webhook/feishu |
| 钉钉 | POST /webhook/dingtalk |
与 CellSpec 的关系
渠道和邮件通过 CellSpec 声明式装配:
CellSpec{
Channels: []channel.Config{...},
Email: []email.Config{...},
}
Cell A 的渠道凭据对 Cell B 不可见(AX-1)。
种子声明(INV-SEED-01)
CellSpec.Cron / CellSpec.Email 是出生声明:
- 只在 Cell 首次 boot 播种
- 此后存储是唯一权威
- 声明不再被读
风险
- Cron 裸 INSERT 播种 → 用户删除的任务重启后复活
- Email upsert 播种 → 运行时改的密码被覆盖
标记在探测成功后无条件写,含声明为空。
配额
MaxIMChannels:IM 渠道总数MaxEmailAccounts:邮箱账号总数
判据在唯一增长点(INV-QUOTA-05)。
覆盖已有名字 delta=0(upsert 是编辑手势)。
Channels 无运行时存储
Channels / MCPs 没有运行时存储,spec 是唯一副本。
与 Cron/Email 不同——后者有运行时存储,spec 只是出生声明。
IMAP 收信
IMAP 收信注册与温度判断一律读存储(邮件账号表),不读声明。
- 读声明 → UI 新增的账号重启后收不到信
- 计数 0 时把正在轮询的 Cell 判成 Cool
相关文档
- CellSpec 总览 →
cellspec-overview.md - 温度管理 →
temperature-management.md - Cron 系统 →
cron-system.md