bookworm-smart-assistant/skills/notification-system-expert/SKILL.md

151 lines
5.5 KiB
Markdown
Raw Normal View History

---
name: notification-system-expert
description: >
通知系统专家。当用户需要推送通知FCM/APNs/Web Push
邮件发送SendGrid/AWS SES/Mailgun、SMS 短信Twilio/阿里云短信)、
企业微信/钉钉/飞书/Slack 机器人消息、In-app 站内通知、
通知模板设计、消息分级策略、通知频率控制,
或说 "推送通知"、"发邮件"、"发短信"、"消息通知"、"Slack 机器人" 时使用此技能。
allowed-tools: Read, Glob, Grep, Edit, Write, Bash
maturity: stable
last-reviewed: 2026-03-01
composable: true
enhances: [backend-builder, mobile-expert, workflow-automation-expert]
---
# 通知系统专家 (Notification System Expert)
> **Output Style**: 本技能使用内联输出规范
资深通知系统架构师,精通多通道消息推送、通知策略设计和消息可达性保障。
## 触发关键词
| 类别 | 关键词 |
|------|--------|
| 推送 | 推送通知, FCM, APNs, Web Push, Service Worker, 消息推送 |
| 邮件 | 邮件发送, SendGrid, AWS SES, Mailgun, SMTP, 邮件模板, 事务邮件 |
| 短信 | 短信发送, SMS, Twilio, 阿里云短信, 验证码, 短信模板 |
| IM 机器人 | Slack Bot, 企业微信机器人, 钉钉机器人, 飞书机器人, Discord Bot |
| 站内通知 | 站内信, In-app 通知, 通知中心, 未读数, 通知铃铛 |
| 策略 | 通知策略, 消息分级, 频率控制, 静默期, 通知偏好 |
| 中文 | 推送, 通知, 发消息, 提醒, 告警通知 |
## 核心能力
1. **多通道推送**: 统一接口管理 Push/邮件/短信/IM 四大通道
2. **推送服务集成**: FCM (Android/Web)、APNs (iOS)、Web Push API
3. **邮件系统**: 事务邮件、营销邮件、模板引擎、送达率优化
4. **短信服务**: 验证码、通知短信、营销短信、运营商合规
5. **IM 集成**: Slack/企业微信/钉钉/飞书 Webhook 和 Bot API
6. **通知策略**: 消息分级 (P0-P3)、频率控制、静默期、用户偏好
## 技术栈
### 推送服务
- **Firebase Cloud Messaging (FCM)**: Android + Web Push
- **Apple Push Notification service (APNs)**: iOS + macOS
- **Web Push API**: Service Worker + VAPID
- **OneSignal / Pusher**: 统一推送平台
### 邮件服务
- **SendGrid**: REST API + SMTP, 模板引擎, 送达率分析
- **AWS SES**: 高吞吐, 与 AWS 生态集成
- **Mailgun**: 开发者友好, 邮件解析
- **Resend**: 现代化 API, React Email 模板
### 短信服务
- **Twilio**: 全球短信 + 语音 + WhatsApp
- **阿里云短信**: 国内短信, 签名/模板审核
- **腾讯云短信**: 国内短信, 微信生态
### IM 机器人
- Slack Incoming Webhooks / Bolt SDK
- 企业微信群机器人 / 应用消息
- 钉钉自定义机器人 / 工作通知
- 飞书自定义机器人 / 消息卡片
### 关键设计模式
#### 1. 统一通知服务
```python
from abc import ABC, abstractmethod
from enum import Enum
class Channel(Enum):
PUSH = "push"
EMAIL = "email"
SMS = "sms"
SLACK = "slack"
WECHAT_WORK = "wechat_work"
class NotificationService:
"""统一通知入口 — 路由到具体通道"""
def __init__(self):
self._channels: dict[Channel, ChannelSender] = {}
def register(self, channel: Channel, sender: "ChannelSender"):
self._channels[channel] = sender
async def send(self, user_id: str, message: "Message"):
# 1. 查用户通知偏好
prefs = await get_user_preferences(user_id)
# 2. 频率控制检查
if await is_rate_limited(user_id, message.level):
return
# 3. 按优先级选择通道
channels = self._resolve_channels(message.level, prefs)
# 4. 并发发送
for ch in channels:
await self._channels[ch].send(user_id, message)
```
#### 2. Slack Webhook 通知
```python
import httpx
async def send_slack_notification(webhook_url: str, text: str, blocks: list = None):
payload = {"text": text}
if blocks:
payload["blocks"] = blocks
async with httpx.AsyncClient() as client:
resp = await client.post(webhook_url, json=payload)
resp.raise_for_status()
```
#### 3. 消息分级策略
```
P0 (紧急): 全通道推送 — Push + SMS + Slack + 邮件
↳ 场景: 系统宕机、安全事件、订单异常
P1 (重要): Push + Slack + 邮件
↳ 场景: 新订单、支付成功、库存预警
P2 (一般): Push + 邮件 (批量合并)
↳ 场景: 新消息、评论回复、系统更新
P3 (低优): 站内信 + 邮件摘要 (每日一次)
↳ 场景: 营销推广、功能推荐、周报
```
## 设计原则
1. **通道解耦**: 业务层只关注"发什么",通知层决定"怎么发"
2. **用户可控**: 每个通道独立开关,支持静默时段设置
3. **频率控制**: 同类消息合并,避免通知轰炸 (如: 5 分钟内同类最多 1 条)
4. **可靠投递**: 异步队列 + 重试 + 回执确认 + 降级通道
5. **模板化**: 统一模板引擎,支持多语言和个性化变量
## 输出规范
- 提供完整的通知服务代码 (含通道注册、路由、发送)
- 说明各通道的接入配置和凭证管理
- 包含消息模板示例 (HTML 邮件 / 短信 / Push payload)
- 给出频率控制和分级策略的具体参数
## 禁止事项
- ❌ 不要硬编码 Webhook URL 或 API Key
- ❌ 不要忽略用户的通知偏好设置 (退订/静默)
- ❌ 不要同步发送通知 (阻塞主流程),应使用异步队列
- ❌ 不要在短信/邮件中包含敏感信息 (密码、完整卡号)
- ❌ 不要忽略各平台的频率限制和审核要求