闲社服务运行正常AI智能体自动化平台
e

邮件活动管理

技能标识:email-campaign-management

Complete workflow for email marketing campaigns with conversion tracking and trial activation. Use when (1) Creating email campaigns, (2) Sending campaign emails via Resend API, (3) Tracking conversions and clicks, (4) Activating trials for campaign users, (5) Generating campaign reports, (6) Sending reminder emails. CRITICAL - Follow Resend rate limits (2 emails/second), use UPPERCASE for PostgreSQL enums.

作者:admin | 来源记录:ClawHub
登记来源
ClawHub
版本
V 1.0.0
检测标记
后台标记通过
免费
免费获取
0
收藏
来源与检测标记为平台登记信息,并不代表已展示可复核的检测报告。使用前请核对版本、依赖和所需权限,建议先在隔离环境中运行。
概述
安装方式
版本历史

邮件活动管理

邮件活动管理 - 完整工作流程

目的: 用于创建、跟踪和管理电子邮件营销活动的可复用工作流程,包含转化跟踪、提醒邮件和试用激活功能。

范围: 增长营销、邮件活动、转化跟踪、试用激活、活动分析



活动数据库架构

campaigns 表

sql CREATE TABLE campaigns ( id UUID PRIMARY KEY, campaign_id VARCHAR(255) UNIQUE NOT NULL, -- 例如:ny2026, summer2026 name VARCHAR(255) NOT NULL, description TEXT, trial_days INTEGER, tier VARCHAR(50), -- ENTERPRISE, SCALE 等 plan_name TEXT, offerexpiresat TIMESTAMP, created_at TIMESTAMP DEFAULT NOW(), updated_at TIMESTAMP DEFAULT NOW() );

campaign_clicks 表

sql CREATE TABLE campaign_clicks ( id UUID PRIMARY KEY, campaign_id VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, clicksource VARCHAR(100), -- 例如:ctabutton, events_click utm_source VARCHAR(100), utm_medium VARCHAR(100), utm_campaign VARCHAR(100), converted BOOLEAN DEFAULT FALSE, converted_at TIMESTAMP, user_id UUID, created_at TIMESTAMP DEFAULT NOW() );

活动统计查询模式

获取活动概览

sql SELECT COUNT(*) as total_clicks, COUNT(DISTINCT email) as unique_users, COUNT(CASE WHEN converted = TRUE THEN 1 END) as converted_count, COUNT(CASE WHEN converted = FALSE THEN 1 END) as pending_count, ROUND(100.0 COUNT(CASE WHEN converted = TRUE THEN 1 END) / COUNT(), 2) as conversion_rate FROM campaign_clicks WHERE campaign_id = campaign-id-here;

获取已注册与未注册用户

sql SELECT COUNT(CASE WHEN u.id IS NOT NULL THEN 1 END) as registered_users, COUNT(CASE WHEN u.id IS NULL THEN 1 END) as nonregisteredusers, COUNT(CASE WHEN s.tier != free AND s.status = active THEN 1 END) as alreadypaidusers FROM campaign_clicks cc LEFT JOIN users u ON u.email = cc.email LEFT JOIN subscriptions s ON s.user_id = u.id WHERE cc.campaign_id = campaign-id-here AND cc.converted = FALSE;

Resend API 集成

速率限制(关键)

Resend 免费套餐: 每秒 2 个请求(不是每分钟 100 个!)

正确实现:
python
import time

RATELIMITDELAY = 0.5 # 每秒 2 封邮件

for email in emails:
send_email(email)
if i < len(emails):
time.sleep(RATELIMITDELAY) # 等待 0.5 秒

错误实现(导致 429 错误):
python

不要这样做 - 发送太快


RATE_LIMIT = 100 # 每分钟邮件数
for email in emails:
send_email(email)
# 每 100 封邮件才暂停一次 - 太晚了!
if i % RATE_LIMIT == 0:
time.sleep(60)

邮件发送函数

python import os import requests

RESENDAPIKEY = os.getenv(RESENDAPIKEY)
RESENDAPIURL = https://api.resend.com/emails
FROM_EMAIL = no-reply@ainative.studio

def sendcampaignemail(email: str, campaignid: str, templatehtml: str):
通过 Resend 发送活动邮件。

# 替换模板变量
html = template_html.replace({{email}}, email)
html = html.replace({{campaignid}}, campaignid)

payload = {
from: FROM_EMAIL,
to: [email],
subject: 您的活动主题在此,
html: html,
tags: [
{name: campaign, value: campaign_id},
{name: type, value: reminder}
]
}

response = requests.post(
RESENDAPIURL,
headers={
Authorization: fBearer {RESENDAPIKEY},
Content-Type: application/json
},
json=payload,
timeout=10
)

if response.status_code in [200, 201]:
return True, response.json().get(id)
else:
return False, response.text



试用激活工作流程

激活试用(关键:使用大写枚举)

python def activatetrial(user, campaignid: str, trialdays: int, planname: str): 为用户激活 ENTERPRISE 试用。

trialend = datetime.utcnow() + timedelta(days=trialdays)

# 关键:PostgreSQL 枚举是大写的
# enterprise → ENTERPRISE
# active 而非 trial(trial 状态不存在)

if user[subscription_id]:
# 更新现有订阅
cur.execute(
UPDATE subscriptions
SET tier = ENTERPRISE,
status = active,
trialendsat = %s,
plan_name = %s,
plan_price = 0,
currentperiodend = %s,
updated_at = NOW()
WHERE id = %s
, (trialend, planname, trialend, user[subscriptionid]))
else:
# 创建新订阅
cur.execute(
INSERT INTO subscriptions (
user_id, tier, status,
trialendsat, planname, planprice,
billingemail, startdate,
currentperiodstart, currentperiodend,
maxusers, maxprojects, monthlytokenlimit,
maxairequestsperday, max_models,
createdat, updatedat
) VALUES (
%s, ENTERPRISE, active,
%s, %s, 0,
%s, NOW(),
NOW(), %s,
10, 15, 1000000,
10000, 100,
NOW(), NOW()
)
, (
str(user[user_id]),
trial_end,
plan_name,
user[email],
trial_end
))

# 标记点击为已转化
cur.execute(
UPDATE campaign_clicks
SET converted = TRUE,
converted_at = NOW(),
user_id = %s
WHERE id = %s
, (str(user[userid]), user[clickid]))

conn.commit()



常见陷阱与解决方案

陷阱 1:大小写敏感的枚举

问题: enterprise 失败,报错 invalid input value for enum 解决方案: 始终使用大写:ENTERPRISE、SCALE、FREE

陷阱 2:无效的状态值

问题: 使用 status = trial(不存在) 解决方案: 使用 status = active 配合 trialendsat 字段

陷阱 3:速率限制设置过高

问题: 将速率限制设置为每分钟 100 次导致 429 错误 解决方案: 使用每秒 2 次(发送间隔 0.5 秒)

陷阱 4:缺少组织 ID

问题: 部分用户没有 organization_id,导致 NULL 约束错误 解决方案: 在 INSERT 前检查 organization_id 是否存在,若为 NULL 则使用单独查询

陷阱 5:模板中硬编码邮件地址

问题: 生产模板中包含测试邮件地址 解决方案: 使用 {{email}} 模板变量,发送时替换

陷阱 6:未关闭数据库连接

问题: too many clients already 错误 解决方案: 始终使用 try/finally 关闭连接

邮件模板要求

模板结构

所有活动邮件模板必须存储在:

src/backend/app/services/templates/{campaignid}{type}.html

文件名示例:

  • - ny2026gift.html - 初始活动邮件
  • ny2026reminder.html - 未注册用户提醒邮件
  • summer2026_welcome.html - 欢迎邮件

必需的模板变量

html 领取您的试用

样式标准(深色主题)

css / 基础颜色 / body { font-family: Poppins, -apple-system, BlinkMac

标签

skill ai

通过对话安装

以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 email-campaign-management-1776058883 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 email-campaign-management-1776058883 技能

通过命令行安装

skillhub install email-campaign-management-1776058883

下载

⬇ 下载 email-campaign-management v1.0.0(免费)

文件大小: 4.25 KB | 发布时间: 2026-4-14 12:26

v1.0.0 最新 2026-4-14 12:26
email-campaign-management v1.0.0

- Initial release of a complete email marketing campaign workflow.
- Supports campaign creation, conversion/click tracking, and trial activation.
- Integrates with Resend API for email delivery (strict rate limiting: 2 emails/second).
- Includes campaign analytics SQL queries and templates for reminders, click tracking, and trial offers.
- Documents common pitfalls and correct use of PostgreSQL UPPERCASE enums.
返回顶部