Персонализация и A/B‑тесты по API

API-режим Sales Ninja для мест, где нельзя поставить скрипт: мобильные приложения, бэкенд, CRM, личные кабинеты. Один POST — одно решение, без куки, без хранения состояния и без вынесения данных за контур.

Что такое персонализация по API

На сайте Sales Ninja подключается JS‑скриптом и дальше сам решает, кому какой вариант показать. Но есть мир, где скрипт поставить нельзя — мобильное приложение, бэкенд, CRM, личный кабинет, телефония, рассылка. Там нужен другой формат интеграции.

Персонализация и A/B‑тесты по API — это режим Sales Ninja без установки скрипта. Вы собираете состояние пользователя у себя, отправляете POST‑запрос с нужными полями — в ответ получаете решение: какую персонализацию или вариант A/B применить. Без скриптов на клиенте, без куки, без вынесения данных за контур.

JS‑скрипт на сайтеКлассический режим

JS‑скрипт на сайте — следит за поведением, сам выбирает вариант, сам применяет изменения через DOM.

Отлично работает на сайте. Не работает в нативном приложении, бэкенде или CRM.

  • Следит за поведением
  • Выбирает вариант
  • Применяет изменения в DOM
  • Использует куки и хранит состояние
API‑режимEnterprise / Backend

Бэкенд / мобильное приложение собирает идентификатор пользователя и контекст, шлёт POST — получает решение и применяет его на своей стороне.

Stateless‑запрос: что передали — то и участвует в решении. Ничего лишнего, никакой «магии со стороны».

  • Ваш backend или приложение отправляет POST
  • Получает решение
  • Применяет у себя UI, логику, контент
  • Без куки, без хранения состояния
Backend
iOS / Android
CRM
Личные кабинеты
E‑mail / push / SMS

Как это работает

Sales Ninja по API — это удалённый движок решений. Один запрос — одно решение. Тот же вход даст тот же вариант. Никаких куки, никаких сессий на стороне Sales Ninja, которые надо синхронизировать с вашим бэкендом.

Что вы отправляетеPOST /outer/v1.0/personalizations
// что вы отправляете
{
  "customerId": "934f17b6-ffba-…",
  "projectId": "4e0b71c2-…",
  "context": {
    "page": "/checkout",
    "sessionNumber": 3,
    "pagesOpened": 7,
    "utmSource": "yandex",
    "device": "mobile",
    "params": {
      "plan": "pro",
      "cartTotal": 12490
    }
  }
}
customerIdcontextparamsapplied
Что возвращается200 OK
// что возвращается
[
  {
    "personalizationId": "934f17b6-…",
    "optionId": "variant_b",
    "isControl": false,
    "version": 17,
    "validUntil": "2026-05-12T00:00:00Z",
    "params": {
      "discount": "10%",
      "copy": "Заберите со скидкой"
    }
  }
]
optionIdisControlvalidUntilparams

Stateless

Никакого «состояния пользователя» на нашей стороне, которое надо синхронизировать. Что вы кладёте в запрос — то и учитывается.

Идемпотентность

Один и тот же customerId на одну версию персонализации получит один и тот же вариант. Sticky‑поведение из коробки.

Скорость

Ответ обычно за единицы — десятки миллисекунд. Не добавляет заметной задержки на ваш сценарий.

ValidUntil

В ответе приходит срок жизни решения. Можно безопасно кэшировать на своей стороне и экономить вызовы.

Не выносите из избы — только то, что хотите

Стандартный блокер интеграции с внешним сервисом — «нам нельзя отдавать персональные данные». В API‑режиме Sales Ninja вы сами решаете, что отдать. Мы не запрашиваем PII, не ставим куки, не трекаем поведение скрытым скриптом.

Идентификатор — в захешированном виде

customerId — это любой устойчивый ID, который вы считаете нужным. SHA‑256 от почты, ID строки в БД, GUID мобильной сессии, anonId. Sales Ninja не знает, что это, и не пытается обратно расшифровать.

customerId: 76f21ce7-365a-45f6-b416-49b5cd238a8b

Контекст — на ваше усмотрение

Хотите дать только UTM и тип устройства — дайте только их. Готовы поделиться суммой корзины и тарифом — добавьте в params. Чем больше сигнала — тем точнее персонализация, но это всегда ваш выбор, не наш.

  • UTM, реферер, страница, устройство
  • Произвольные user‑params и page‑params
  • Сегменты, теги, признаки CRM

IP — опционально

Если хотите гео‑логику — передайте IP. Не хотите — не передавайте, всё работает и без него: persistent customerId, контекст и params уже дают системе достаточно сигнала.

Авторизация — токеном проекта

Проектный токен в заголовке X‑SN‑TOKEN. Никаких пользовательских ключей, ничего, что нужно генерить per‑user. Ротация — в один клик в кабинете.

Безопасный контур. Стандартный путь — вызов с вашего бэкенда: токен не уезжает на клиент, состав запроса контролируется на вашей стороне, ответ применяется как вам удобно. Решение — не DOM‑манипуляция, а структурированный JSON, который вы маппите в свою бизнес‑логику.

Что доступно по API

Через API доступны три ключевых сценария Sales Ninja: персонализация по ML‑модели, A/B‑тестирование с контрольной группой и учёт целей — чтобы решения улучшались сами.

AI персонализация

Один и тот же эндпоинт отдаёт персонализированные предложения, тексты, цены и бизнес‑логику. Модель сама учит, какой вариант лучше для кого. Через API возвращается готовое решение — вы применяете его в своём интерфейсе.

ML‑модель на стороне Sales NinjaКонтрольная группа автоматическиТарифицируется только когда работает

A/B‑тесты

Отдельный endpoint для классических экспериментов. Многорукий бандит, четыре статистических метода остановки, sticky‑разделение — всё то же, что и на сайте, только без скрипта.

/public/v1.0/ab‑tests/apply

Цели и конверсии

Когда у вас на стороне сработала покупка, заявка, оплата — стукните POST /goal/reach. Модель учится на этих сигналах. Цели бывают офлайн — дозвон, выкуп, окончание подписки.

/outer/v1.0/goal/reach

Контекст — любой

UTM, устройство, страница, пройденные шаги, признаки CRM, любые ваши params. Условия таргетинга и сегменты настраиваются в кабинете — код менять не надо.

Sticky‑вариант

Если пользователь уже попал в вариант, он продолжит видеть его же при следующих запросах. Можно дополнительно прислать appliedPersonalizations — чтобы решение было консистентно даже между разными каналами.

Куда чаще всего подключают

Базово API нужен в четырёх случаях: на нативных мобильных приложениях, на вашем бэкенде, в CRM / автоматизациях и в личных кабинетах, где нельзя положить произвольный JS‑скрипт.

Мобильные приложения

iOS и Android. Запрос идёт либо напрямую с клиента, либо через ваш бэкенд. Ответ применяете в нативных экранах: подменяете предложение, показываете другой онбординг, включаете другую механику чек‑аута.

CodableRetrofitKotlin / Swift

Backend

Ваш сервер собирает контекст и принимает решение перед рендерингом ответа. Подходит для SSR‑сайтов, лендингов с heavy‑BI, систем где UI собирается на сервере.

Node / Go / PythonJava / .NETPHP

CRM и автоматизации

Перед отправкой письма, пуша, SMS — запрос за вариантом. У разных сегментов получаются разные предложения, темы, скидки. Цели по офлайн‑конверсиям возвращаются обратно через /goal/reach.

Mindbox1С / Bitrixn8n / Webhook‑flow

Личные кабинеты и Enterprise

Когда сторонние скрипты на сайт ставить нельзя по корпоративной политике — всё работает по серверному API. Ничего лишнего на клиенте, токен живёт только на вашем бэкенде.

SSOWhite‑labelБез CSP‑конфликтов

Три шага интеграции

Базовая интеграция собирается за день. Логика остаётся в кабинете Sales Ninja, на вашей стороне — только два HTTP‑вызова.

1

Настройте персонализацию или A/B‑тест в кабинете

Опишите варианты, условия таргетинга, цель оптимизации. Это всё делается в UI — маркетолог справится без разработчика. Опубликуйте — получаете ID и токен.

ПерсонализацияA/B‑тест
2

Шлите запрос за решением

В нужной точке кода — перед рендером экрана, перед отправкой письма, при открытии чек‑аута — делаете POST. В ответе — идентификатор варианта и его параметры. Применяете их.

POST /personalizations200 OK
3

Передавайте достижения целей

Когда пользователь сделал то, ради чего всё затевалось — покупка, заявка, продление — стукните /goal/reach. Дальше модель сама подкручивает раздачу вариантов в сторону того, что работает.

POST /goal/reach200 OK
Минимальный пример — cURL
# 1. Получить вариант
curl -X POST 'https://api.sales-ninja.me/outer/v1.0/personalizations' \
  -H 'X-SN-TOKEN: ********' \
  -d '{"customerId":"u_8421","projectId":"…","context":{"page":"/checkout"}}'

# 2. Зафиксировать достижение цели
curl -X POST 'https://api.sales-ninja.me/outer/v1.0/goal/reach' \
  -H 'X-SN-TOKEN: ********' \
  -d '{"goalId":"checkout_paid","customerId":"u_8421"}'

Расскажите о задаче —
соберём решение
под ваш бизнес.

Знакомство, аудит вводных и план первых шагов. Без продающих скриптов, без давления и без обязательств с вашей стороны.

  • Пишет живой менеджер, не бот
  • NDA по умолчанию,
    ничего не уйдёт наружу
  • Никаких почтовых цепочек и спама
Ответим в течение 1 рабочего дняОбычно быстрее

Подойдёт Telegram-ник или номер телефона.

+ 6 модулей стека — в одной лицензии, без доплат

Берёте Персонализацию по API — остальной сайтовый стек получаете бесплатно

Одна лицензия — всё ниже уже внутри. Без доплат и кросс‑сейла.

6 модулей в одной лицензии

Сотрудничаем с ведущими агентствами

Ответы на часто задаваемые вопросы