clickSomo

SaaS 和产品团队

你的产品知道任何营销工具都观察不到的事

谁完成了新手引导,谁卡在第三步。谁邀请了同事。谁这周两次撞到上限。谁两周没打开过那个东西。每一个都是比邮件打开率更好的触发器,而它们离成为触发器只差两行代码。

事件就是全部集成

用你自己的令牌调用 POST /v1/events:一个你起的名字、一个联系人、一份数据、一个幂等键。这就是全部的对接。没有需要保持更新的 SDK,没有映射界面,也没有一套你必须把产品翻译过去的我们的词汇表。

每个事件都落在联系人的只追加日志上,从那里它同时是三样东西。一个触发器,事件到达时启动漏斗。一个谓词,让细分可以说“最近十四天内做过这件事”,或者更有用的——“没做过”。还有一个目标,让序列在某人完成它所推动的那件事的那一刻结束。

第三点正是让生命周期消息变得可以接受的原因。催你完成账户设置的提醒,应该在账户设置完成的那一秒就消失,而在大多数工具里它不会,因为序列和产品之间互不相通。

激活运行 #2 118
  • ⚡触发器api_event — signup.completed,套餐 free。
  • 2发送邮件先做这一件事。不是十一个功能的导览。
  • 3等待 2 天运行记录上的 wake_at。没有排队的任务,就算你明天重写这段,也没有什么需要拆解的。
  • ?条件project.created 到达了吗?没有 → 走帮助分支。有 → 走下面的目标。
  • 4帮助分支一条消息,主动提供他们没做的那件具体的事。然后再等一次。
  • 5目标project.created 到达。流程退出。这个人从此再也不会收到任何引导邮件。

你的事件名称你对“已激活”的定义

五条漏斗

按实际发生的顺序排列的生命周期

1 · 激活

触发条件:注册。两三条消息,每条只讲一个动作,每条都带一个目标——该动作一旦发生,序列即结束。这是你会搭建的最有价值的漏斗,也是最值得重写三遍的那一个。

2 · 停滞

触发条件:segment_enter——已注册,但七天内没有任何有意义的事件。一条以询问而非说教为主的消息,再一条提供某件具体事情的消息。然后就停。给一个已经无视了三条消息的人发第四条,等于发给没有人。

3 · 扩展时刻

触发条件:一个表明他们正在获得价值的事件——达到上限、邀请了第三位同事、第二次导出。这是唯一一个升级消息受欢迎的时刻,而且你的产品可以精确地命名这个时刻。

4 · 续订与催缴

触发条件:续订前的 date_field,或某个支付事件。通知、提醒,以及——如果支付失败——一个在成功那一刻立即停止的短序列。在催缴中目标节点不是可选项;它是提醒与骚扰之间的分界线。

5 · 唤回

触发条件:segment_enter——已取消或休眠六十天。两条消息,真诚的那种,然后打上标签,归于沉默。“他们离开之后发生了什么变化”是一条比打折更好的消息。

还有内部那条

notify_team 会在一个值得人工关注的账户越过某条界线时通知一个人。漏斗不必以给客户发邮件收尾;有时正确的动作是让你这边的人拿起电话。

没有人是故意流失的。他们只是不再打开它了。

为什么开发者可能真的会喜欢这个

当你就是那个做集成的人时,真正要紧的部分

没有私有端点

每个界面都可以用公开 API 搭建,因为除此之外不存在别的 API。如果你想把一份活动报告嵌入自己的管理后台,没有任何东西挡你的路,也不需要逆向工程任何东西。

幂等键无处不在

每一条会修改数据的路由上都有。你的重试逻辑、你的至少一次投递队列和你不稳定的网络,全都变成别人的问题——确切地说,是一个唯一索引的问题。

上线之前先模拟

POST /v1/simulate 会把一个联系人干跑一遍漏斗,返回路径以及它会发送的每一条消息。愿意的话可以放进 CI:漏斗是一张图,而图是可以测试的。

一个 MCP 服务器

把一个智能体指向 /mcp,让它编写并检查漏斗。具备发送能力的工具需要显式确认,并受配额限制,所以一次误读的提示词不会变成五万封邮件。

Webhooks 输出

带签名、按退避策略重试、至少送达一次。使用与报表相同的事件词汇,这样你的数仓和你的仪表盘对“已送达”的含义不会各执一词。

真正能触达各处的删除

一个删除请求会在这里移除该联系人及其消息历史,并扩散到每一个持有副本的兄弟服务。一次请求,一个结果,而且当被问起时你有东西可以指。

边界在哪里

ClickSomo 持有一份邮件列表以及这份列表做过什么。它不是你的用户数据库,也不打算成为:一个联系人永远不携带凭据、永远不登录、永远不会变成一个账户。你的用户住在你的产品里;联系人住在这里,两者通过一个电子邮箱地址和你选择发送的事件连接起来。

这种分离是刻意的,也正是同意模型能够成立的原因。你是你的用户的数据控制者;我们代表你进行处理。一个让营销工具悄悄变成身份存储的设计,是日后无法解开的,而这正是本设计要避免的失败。

实操版本:发送事件,发送你想用来分群的属性,其余的一切都留在原处。如果你发现自己正在把整个数据库模式往这里推,那你试图构建的那个分群,很可能本应是你自己数据库里的一个查询,以一个布尔值属性的形式送达即可。