Courier: Using Agent Skills to Integrate Multi-Channel Notifications into Cursor

前言

SaaS 产品几乎都要发通知:注册确认、订单回执、安全告警、营销触达,渠道往往不止邮件,还有 SMS、Push、应用内收件箱、Slack、Teams 等。自己接各厂商 SDK、对照文档改 payload,再处理偏好、路由和投递失败排查,耗在集成和踩坑上的时间很长。Courier 把发送、模板、路由和用户偏好收在统一 API 里;官方仓库 trycourier/courier-skills 里的 courier Skill,则是把这套能力写成 Agent 可遵循的知识包,让编码助手按正确 primitive 和 SDK 形态生成代码,而不是凭记忆拼接口。

这是什么

courier 是 Courier 官方维护的 Agent Skill(MIT 许可),面向「用 Courier 做通知」的全流程:发送、模板、翻译、路由、偏好、Journeys、CLI 与 MCP 等。Skill 的 description 写明适用场景:在邮件、SMS、Push、应用内收件箱、Slack、Teams、WhatsApp 等渠道上构建通知,并覆盖投递调试。

底层产品 Courier 是通知 BaaS:一次 send 面向用户(或列表、受众、租户),内容来自模板或内联字段,由路由选渠道、由偏好过滤,再由 Courier 渲染并投递;带延迟、分支或聚合的多步流程用 Journeys(JSON 定义,API 触发)。

核心功能

下面介绍 Skill 文档里强调、且与官方仓库说明一致的能力边界。

统一发送模型

  • 收件人:message.to 支持 user_id、内联 email / phone_number、list_id、list_pattern、audience_id,或上述形式的数组;单次 to 数组硬上限 500,超出需用列表、受众或 Bulk API。
  • 多租户:通过 to.tenant_id 或 message.context.tenant_id 携带租户,加载该租户的品牌与偏好默认值。
  • SDK 形态:Node 使用 @trycourier/courier,Python 使用 trycourier;默认从环境变量 COURIER_API_KEY 读取密钥。发送入口为 client.send.message,支持 Idempotency-Key 头。

渠道与场景

Skill 覆盖邮件(可达性、SPF/DKIM/DMARC)、SMS(10DLC 等)、Push(APNs/FCM)、应用内 Inbox(JWT、各端 SDK)、Slack、Microsoft Teams、WhatsApp 等,均经同一 send 形状,具体渠道由路由与用户资料决定。

文档区分 Transactional(密码重置、OTP、订单等,不应批量或延迟)与 Lifecycle marketing(需记录 opt-in 的主动触达),并映射到对应 Courier primitive。

平台能力

参考资料目录包含:Journeys、模板与 Elemental、多语言翻译、路由策略、用户/工作区偏好、摘要(digest)、受众与列表、品牌与租户、可靠性(幂等、重试、状态)、双向 Webhook、Bulk 发送、提供商配置等。

SDK 面与工具

Skill 列出 23 个命名空间作为完整 SDK 表面(如 send、journeys、lists、users、routingStrategies 等),并约定以已安装 SDK 的类型为 ground truth,而非凭记忆写形状。

配套 Courier CLI 用于投递排查(例如按 requestId 查消息列表、按 message-id 看 history 与 content);仓库还提到 Courier MCP(API 与文档服务),Claude Code 插件可自带 docs MCP。

Agent 使用约定

Skill 要求助手:先路由到 1~2 个任务相关文件,不要通读整棵树;请求含糊时追问渠道、事务/生命周期、语言等;形状以 live source / 已装 SDK 核对;遵守 Universal Rules(幂等、E.164 手机号、不默认全渠道轰炸、模板 ID 使用 nt_... 等形式)。

安装与启用

通用方式(资料写明适用于 Claude Code、Cursor、Codex 等支持 Agent Skills 的工具):

npx skills add trycourier/courier-skills

Claude Code 可选用插件(自更新并附带 Courier docs MCP):

/plugin marketplace add trycourier/courier-skills
/plugin install courier@courier-skills

更新插件:

/plugin update courier@courier-skills

手动安装(任意能读取 skills 目录的工具):克隆仓库后,将 skills/courier 复制到 ~/.cursor/skills/ 或 ~/.claude/skills/。发现机制依赖 SKILL.md frontmatter 中的 name 与 description,无需额外配置。

应用侧若已安装 @trycourier/courier 或 trycourier,Skill 会跳过 quickstart 中的安装步骤并假定已有 client。

典型用法

30 秒发送示例(Node)

先配置 COURIER_API_KEY,再按 canonical 形状调用:

import Courier from "@trycourier/courier";

const client = new Courier(); // reads COURIER_API_KEY from the environment

await client.send.message({
  message: {
    to: { user_id: "user-123" },
    template: "welcome-email",       // or inline content: { title, body }
    data: { name: "Alice" },
  },
});

同一结构可发往邮件、SMS、Push、Slack、Teams、WhatsApp 或应用内渠道,不由不同 API 区分。

Python 等价调用

from courier import Courier

client = Courier()

client.send.message(
    message={
        "to": {"user_id": "user-123"},
        "template": "nt_01kmrbq6ypf25tsge12qek41r0",
        "data": {},
    },
    extra_headers={"Idempotency-Key": "order-confirmation-12345"},
)

投递失败排查(CLI 阶梯)

单条消息失败时,资料建议按顺序执行:

  1. send 返回 2xx 且带有 requestId,才表示 Courier 已接受请求。
  2. courier messages list --trace-id "<requestId>" 查看 Courier 侧结果(列表/受众发送会扇出为多条 message)。
  3. courier messages history --message-id "<id>" 看事件时间线。
  4. courier messages content --message-id "<id>" 核对实际渲染内容。
  5. 再按渠道查邮件/SMS 等专项指南与可靠性文档。

用自然语言向助手提问时,仓库 README 举例包括:欢迎邮件、send + 模板、Inbox 集成、按主题做 digest、Push 失败回退邮件、偏好中心、受众分段、多租户品牌、OTP 与订单回执(幂等)、多日 onboarding Journey 等;Skill 会把请求路由到对应参考文件并生成 TypeScript、Python、CLI 或 curl。

适用场景与注意

适合谁:做 SaaS、电商、市场或移动应用的开发者;希望把邮件、SMS、Push、聊天等提供商收敛到单一通知 API 的团队;需要偏好中心、退订、多渠道路由或配合 AI 助手写 Courier 集成的人。

使用注意:

  • 对支付、安全告警、OTP 等重复发送有害的场景,应使用 Idempotency-Key。
  • 营销类通知需遵守 opt-in 等规则;事务类通知不应被批量或延迟处理。
  • 超过 500 个临时收件人不要用 to 大数组,应改用列表、受众或 Bulk。
  • 单条投递问题走 CLI 阶梯;模板整体送达率下降应查 metrics 类指南,而不是只对样本跑阶梯。
  • 安静时段与定时投递、429 与限流、测试/生产工作区与 API Key 分离等细节在 Skill 引用的专项 guide 中,本文不重复展开。

结尾

courier Skill 把 Courier 的通知模型、SDK 形状、渠道规则与排障流程打包成 Agent 可读的知识库,降低「接通知」在文档往返和接口形状上的集成成本。官方 Skill 目录与说明见:

https://github.com/trycourier/courier-skills/tree/main/skills/courier

安装入口与更多示例见仓库根目录 README:npx skills add trycourier/courier-skills。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye