--- 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 - ❌ 不要忽略用户的通知偏好设置 (退订/静默) - ❌ 不要同步发送通知 (阻塞主流程),应使用异步队列 - ❌ 不要在短信/邮件中包含敏感信息 (密码、完整卡号) - ❌ 不要忽略各平台的频率限制和审核要求