← 返回博客
Webhook自动化事件驱动开发者
Webhook 驱动的邮件自动化:事件触发、解耦与可靠投递
用事件驱动架构解耦邮件发送逻辑,包括签名验证、幂等性和 Rovela Automations。
更新于 2026年10月12日

Webhook 驱动的邮件自动化:事件触发、解耦、可靠投递
把发邮件的逻辑绑死在业务代码里,是最常见的技术债之一。Webhook + 消息队列的组合可以让你把"发什么邮件"从"业务做了什么"里解耦出来。
架构思路
业务系统触发事件 → 发到消息队列(或直接 POST 到邮件服务)→ 邮件服务根据事件类型决定发什么 → 送达用户。
用户完成支付
└─ POST /webhooks/payment { event: "payment.completed", orderId: "123" }
└─ 邮件服务查模板,发订单确认
用 Rovela 接收 Webhook
Rovela 本身也会发 Webhook:当邮件被送达、打开、点击、退信时,你的服务器会收到通知。这让你可以做自动化跟进:
// 用户点击了邮件里的链接
app.post('/webhooks/rovela', (req, res) => {
const { event, data } = req.body;
if (event === 'email.clicked') {
// 触发销售跟进流程
salesQueue.add('follow-up', { userId: data.metadata.userId });
}
res.sendStatus(200);
});
验证签名
Rovela Webhook 带 HMAC 签名头,验证它,防止伪造请求:
const crypto = require('crypto');
function verifySignature(payload, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}
幂等性
Webhook 可能重复投递。用事件 ID 去重:
const exists = await redis.set(
`webhook:${event.id}`, '1', 'NX', 'EX', 86400
);
if (!exists) return res.sendStatus(200); // 已处理过
Rovela Automations
不想写这些代码?Rovela 的 Automations 功能支持在控制台里配置触发条件和邮件序列,适合营销类场景。事务邮件(订单确认、密码重置)通常还是走 API 更可控。