SaaS и продуктовые команды
Ваш продукт знает то, что не может увидеть ни один маркетинговый инструмент
Кто завершил онбординг, а кто застрял на третьем шаге. Кто пригласил коллегу. Кто дважды за эту неделю упёрся в лимит. Кто две недели не открывал продукт. Любой из этих триггеров лучше всего, что можно вывести из открытия письма, а каждый из них — в двух строках кода от того, чтобы им стать.
События — это вся интеграция
POST /v1/events с вашим собственным токеном: выбранное вами название, контакт, данные, ключ идемпотентности. Это и есть всё подключение. Нет SDK, который нужно поддерживать в актуальном состоянии, нет экрана сопоставления и нет нашего словаря, на который вам пришлось бы переводить свой продукт.
Каждое событие попадает в журнал контакта, куда записи только добавляются, и с этого момента оно сразу три вещи. Триггер — воронка запускается, когда оно приходит. Условие — сегмент может сказать «делал это за последние четырнадцать дней» или, что полезнее, «не делал». И цель — последовательность завершается в тот момент, когда человек делает то, к чему его подталкивали.
Именно третье делает сообщения о жизненном цикле приемлемыми для получения. Напоминание завершить настройку аккаунта должно перестать существовать в ту же секунду, как аккаунт настроен, — но в большинстве инструментов этого не происходит, потому что последовательность и продукт не общаются друг с другом.
- ⚡Триггер
api_event—signup.completed, тарифfree. - 2Отправить e-mailЕдинственное, что нужно сделать сначала. Не обзор одиннадцати функций.
- 3Пауза 2 дня
wake_atв запуске. Ничего не ставится в очередь, и нечего распутывать, если завтра вы это перепишете. - ?УсловиеПришло ли
project.created? Нет → ветка помощи. Да → цель ниже. - 4Ветка помощиОдно сообщение с конкретным предложением того, что человек не сделал. Затем вторая пауза.
- 5ЦельПриходит
project.created. Запуск завершается. Больше никаких писем онбординга этому человеку — никогда.
Ваши названия событийВаше определение активации
Пять воронок
Жизненный цикл в том порядке, в каком он происходит на самом деле
1 · Активация
Триггер: регистрация. Два-три письма, каждое об одном действии, каждое с целью, которая завершает цепочку, когда это действие происходит. Самая ценная воронка из тех, что вы построите, и та, которую стоит переписать трижды.
2 · Затишье
Триггер: segment_enter — зарегистрировался, но за семь дней не было ни одного значимого события. Одно письмо, которое спрашивает, а не рассказывает, и одно, которое предлагает что-то конкретное. Потом стоп. Четвёртое письмо тому, кто проигнорировал три, — это письмо в никуда.
3 · Момент расширения
Триггер: событие, означающее, что человек получает пользу — достиг лимита, пригласил третьего коллегу, экспортировал данные во второй раз. Это единственный момент, когда письмо об апгрейде уместно, и момент, который ваш продукт может назвать точно.
4 · Продление и дюннинг
Триггер: date_field до продления или платёжное событие. Уведомление, напоминание и — если платёж не прошёл — короткая цепочка, которая останавливается в тот же миг, когда платёж проходит. Целевые узлы в дюннинге не опциональны: они отличают напоминание от преследования.
5 · Возврат клиентов
Триггер: segment_enter — отменил подписку или неактивен шестьдесят дней. Два письма, честных, затем тег и тишина. Рассказ о том, что изменилось с момента ухода, работает лучше скидки.
И внутренняя
notify_team сообщает живому человеку, когда аккаунт, заслуживающий внимания человека, пересекает черту. Воронка не обязана заканчиваться письмом клиенту; иногда правильное действие — сказать кому-то с вашей стороны, чтобы он взял трубку.

Никто не уходит нарочно. Люди просто перестают открывать письма.
Почему разработчику это действительно может понравиться
Части, которые важны, когда интегрируете именно вы
Никаких приватных эндпоинтов
Каждый экран собирается через публичный API, потому что других у нас просто нет. Если вы хотите встроить отчёт по кампании в свою админку, ничто вам не помешает и ничего не придётся реверс-инжинирить.
Ключи идемпотентности везде
На каждом изменяющем маршруте. Ваша логика повторов, ваша очередь с гарантией at-least-once и ваша капризная сеть становятся чужой проблемой — а именно проблемой уникального индекса.
Симуляция перед выпуском
POST /v1/simulate прогоняет контакт через воронку в тестовом режиме и возвращает путь и каждое письмо, которое было бы отправлено. Можете добавить это в CI: воронка — это граф, а граф можно тестировать.
MCP-сервер
Направьте агента на /mcp и позвольте ему создавать и проверять воронки. Инструменты с правом отправки требуют явного подтверждения и ограничены квотой, поэтому неверно понятый промпт не превратится в пятьдесят тысяч писем.
Исходящие вебхуки
Подписанные, с повторами и backoff, минимум один раз. Тот же словарь событий, что используют отчёты, поэтому ваш склад данных и ваша панель не будут спорить о том, что значит «доставлено».
Удаление, которое действительно доходит
Запрос на удаление убирает контакт и историю его писем здесь и расходится по всем соседним сервисам, хранившим копию. Один запрос, один результат — и то, на что вы можете указать, когда спросят.
Где проходит граница
ClickSomo хранит список рассылки и то, что этот список делал. Это не ваша база пользователей, и она не стремится ею стать: контакт никогда не несёт учётных данных, никогда не входит в систему и никогда не становится аккаунтом. Ваши пользователи живут в вашем продукте; контакты живут здесь, и связывает их адрес электронной почты и события, которые вы решите отправлять.
Это разделение сделано намеренно, и именно поэтому модель согласия работает. Вы — контролёр данных ваших пользователей; мы обрабатываем данные от вашего имени. Дизайн, в котором маркетинговый инструмент незаметно становится хранилищем идентичности, невозможно распутать потом, — и это ровно тот провал, которого данная архитектура создана избежать.
Практическая версия: отправляйте события и атрибуты, по которым хотите строить сегменты, а всё остальное держите там, где оно есть. Если вы ловите себя на том, что заталкиваете сюда всю свою схему, — сегмент, который вы пытаетесь построить, скорее всего, является запросом в вашей собственной базе, который должен приходить как один булев атрибут.