Личный кабинет покупателей это раздел сайта, где клиент видит заказы, бонусы, записи, тарифы и общается с магазином. Сейл, ИИ-сотрудник проекта, умеет настраивать кабинет и строить автоматизации на его события, не заходя в конструктор.
Что умеет Сейл
- Видеть состав кабинета. Какие модули включены, какие события кабинет отправляет боту, тарифы, услуги, поля регистрации.
- Настраивать кабинет с нуля. Поставить сайту короткий поддомен, включить кабинет, включить нужные модули, создать чат кабинета и кнопку входа в шапке сайта.
- Включать и выключать события для схемы бота.
- Собирать автоматизации одним запросом. Блок в схеме, который реагирует на событие кабинета: пишет клиенту, ставит задачу сотруднику, начисляет бонусы.
- Создать магазин. Интернет-магазин с витриной, товарами и кабинетом.
Создать магазин через Сейла
Если сайта ещё нет, магазин можно создать одним запросом. Пример:
Создай интернет-магазин «Одежда Demo» с двумя товарами: футболка за 1500 рублей и худи за 3500 рублей
Сейл создаст магазин с витриной, каталогом и подвалом, заведёт товары с ценами и подберёт фото, поставит короткий поддомен и подготовит настройки кабинета. В ответе будет адрес магазина. Дальше можно попросить добавить описания, фото или доставку.

Как включить кабинет
Напишите Сейлу, какой кабинет нужен. Пример:
Включи в магазине личный кабинет покупателей с заказами, бонусами, брошенной корзиной и чатом
Сейл поставит поддомен, если у сайта нет домена, включит кабинет и модули, создаст чат кабинета и добавит кнопку входа в шапку. В ответе будет адрес кабинета.
Если сайта ещё нет, попросите создать магазин: он появится с витриной, товарами и кабинетом.

События кабинета
Кабинет отправляет боту события: клиент зарегистрировался, вошёл, оформил заказ, оплатил, списал или получил бонусы, брошенная корзина, статус доставки, отмена заказа, изменение профиля и другие. Каждое событие относится к своему модулю и приходит только когда модуль включён.
События уходят в схему только по переключателю. Переключатели лежат в настройках сайта, вкладка «Кабинет покупателя», раздел «Общее», карточка «События». Сейл включает нужные события сам, когда строит автоматизацию.

Основные события:
| Событие | Когда приходит |
|---|---|
| cabinet_registered | клиент зарегистрировался |
| cabinet_login | клиент вошёл в кабинет |
| cabinet_messenger_linked | клиент привязал мессенджер |
| cabinet_order_created | клиент оформил заказ |
| cabinet_order_paid | заказ оплачен |
| cabinet_bonus_spent | клиент списал бонусы при оплате |
| cabinet_bonus_earned | клиенту начислены бонусы за заказ |
| cabinet_order_stage | сменился статус доставки |
| cabinet_order_cancelled | клиент отменил заказ |
| cabinet_cart_abandoned | корзина брошена |
| cabinet_profile_updated | клиент изменил профиль |
| cabinet_access_expiring | доступ по тарифу заканчивается |
| cabinet_request_stage | заявка на услугу сменила этап |
Автоматизации одним запросом
Опишите, что должно происходить при событии. Примеры:
При регистрации в кабинете начисли 200 бонусов и напиши приветствие с балансом
При брошенной корзине напомни о товарах со ссылкой на корзину
При оплате заказа поблагодари клиента и поставь задачу ответственному проверить оплату
При входе в кабинет поставь клиенту метку «Активный»
Сейл включит событие и создаст в схеме блок с условием по событию. В блоке будет текст клиенту, задача сотруднику или начисление бонусов, смотря что вы попросили. Несколько автоматизаций можно попросить одним сообщением.

Блок появляется в конструкторе, его можно править как любой другой.

Что получает клиент
Текст блока уходит клиенту в привязанный мессенджер: Telegram, WhatsApp* или ВКонтакте. Если мессенджер не привязан, текст приходит в чат кабинета, когда модуль «Чат» включён. Задачи, бонусы и метки работают в любом случае.
*WhatsApp принадлежит Meta inc., деятельность которой признана в России экстремистской и запрещена.

Переменные и функции в текстах
В тексте блока можно подставлять значения:
| Переменная | Что содержит |
|---|---|
| #{callback_order_id} | номер заказа или заявки, о которой событие |
| #{cabinet_bonus} | текущий баланс бонусов клиента |
| #{bonus_applied} | баланс после начисления в этом же блоке |
| #{cabinet_cart_url} | ссылка на восстановление брошенной корзины |
Функции калькулятора для кабинета
Функции работают в любом блоке схемы, в калькуляторе и в условиях блоков. Сейл подбирает их сам, когда строит автоматизацию, но их можно писать и руками.
Общие правила:
- Функции с параметром client_id без него работают с клиентом текущего диалога. client_id нужен, чтобы посмотреть другого клиента проекта, например в рассылке.
- Функции, которые меняют данные (начисление, списание, скидка, журнал), всегда работают с клиентом текущего диалога.
- Если клиент не зарегистрирован в кабинете, числовые функции возвращают 0, текстовые пусто.
- Id тарифов и услуг Сейл видит в составе кабинета. Вручную их можно взять в настройках сайта, вкладка «Кабинет покупателя».
Регистрация
Проверить, есть ли у клиента кабинет
cabinet_registered(client_id) возвращает 1, если клиент зарегистрирован в кабинете сайта, иначе 0.
| Параметр | Описание |
|---|---|
| client_id | id клиента проекта. Если пусто, проверяется клиент текущего диалога |
Пример: условие блока cabinet_registered() == 0 пропустит только тех, у кого кабинета ещё нет, и бот предложит зарегистрироваться.
Бонусы
Узнать баланс бонусов
cabinet_bonus_balance(client_id) возвращает баланс бонусного счёта клиента.
| Параметр | Описание |
|---|---|
| client_id | id клиента проекта. Если пусто, берётся клиент текущего диалога |
Пример: balance = cabinet_bonus_balance(), дальше в тексте У вас #{balance} бонусов.
Начислить или списать бонусы
cabinet_bonus_add(amount, comment) начисляет бонусы клиенту текущего диалога. Отрицательная сумма списывает. Счёт не уходит ниже нуля, поэтому функция возвращает фактически применённую сумму, а при списании больше баланса спишет только то, что есть.
| Параметр | Описание |
|---|---|
| ! amount | сумма. Положительная начисляет, отрицательная списывает |
| comment | подпись операции в истории бонусов клиента. Если пусто, запишется «По сценарию бота» |
Возвращает применённую сумму. 0, если клиент не зарегистрирован или сумма нулевая.
Примеры:
-
cabinet_bonus_add(100, 'Бонус за регистрацию')начислит 100. -
cabinet_bonus_add(-50, 'Списание за заказ')спишет 50.
Визиты абонемента
Узнать остаток визитов
cabinet_visits_balance(client_id) возвращает, сколько визитов осталось по абонементу клиента.
| Параметр | Описание |
|---|---|
| client_id | id клиента проекта. Если пусто, берётся клиент текущего диалога |
Начислить или списать визиты
cabinet_visits_add(amount, comment) добавляет визиты абонемента клиенту текущего диалога. Отрицательное число списывает. Дробные значения округляются до целого.
| Параметр | Описание |
|---|---|
| ! amount | количество визитов. Положительное начисляет, отрицательное списывает |
| comment | подпись операции в истории визитов |
Возвращает применённое количество.
Пример: cabinet_visits_add(-1, 'Посещение занятия') спишет один визит после записи.
Персональная скидка
Узнать скидку
cabinet_discount(client_id) возвращает персональную скидку клиента в процентах. 0, если скидки нет.
| Параметр | Описание |
|---|---|
| client_id | id клиента проекта. Если пусто, берётся клиент текущего диалога |
Установить скидку
cabinet_discount_set(percent) выставляет персональную скидку клиенту текущего диалога. Скидка применяется при оформлении заказа в магазине.
| Параметр | Описание |
|---|---|
| ! percent | итоговый процент скидки. 0 убирает скидку |
Возвращает установленное значение.
Пример: cabinet_discount_set(10) даст постоянную скидку 10 %.
Тарифы
Проверить тариф
cabinet_has_tariff(tariff_id, client_id) возвращает 1, если у клиента активен тариф с указанным id, иначе 0. Тариф с истёкшим доступом считается неактивным.
| Параметр | Описание |
|---|---|
| ! tariff_id | id тарифа кабинета |
| client_id | id клиента проекта. Если пусто, берётся клиент текущего диалога |
Пример: условие cabinet_has_tariff(12) == 1 пропустит только клиентов с тарифом 12.
Узнать активный тариф
cabinet_tariff(client_id) возвращает id активного тарифа клиента. Пусто, если тарифа нет.
cabinet_tariff_name(client_id) возвращает название активного тарифа.
cabinet_tariff_until(client_id) возвращает дату и время окончания доступа по тарифу в формате «ГГГГ-ММ-ДД ЧЧ:ММ:СС». Пусто, если тариф бессрочный или его нет.
| Параметр | Описание |
|---|---|
| client_id | id клиента проекта. Если пусто, берётся клиент текущего диалога |
Пример: Ваш тариф «#{cabinet_tariff_name()}» действует до #{cabinet_tariff_until()}.
Месячная квота операций
Квота это лимит операций в месяц, который задаётся у тарифа кабинета.
Узнать остаток квоты
cabinet_quota_left(client_id) возвращает, сколько операций осталось в этом месяце.
| Параметр | Описание |
|---|---|
| client_id | id клиента проекта. Если пусто, берётся клиент текущего диалога |
Возвращает остаток. −1, если у тарифа безлимит. 0, если тарифа нет или лимит исчерпан.
Списать операции квоты
cabinet_quota_use(amount, client_id) списывает операции из квоты.
| Параметр | Описание |
|---|---|
| amount | сколько операций списать, целое число. Если пусто, списывается 1 |
| client_id | id клиента проекта. Если пусто, берётся клиент текущего диалога |
Возвращает остаток после списания. −1 при безлимите. 0, если тарифа нет или лимит исчерпан, списания в этом случае не было.
Пример: left = cabinet_quota_use(1), и если left == 0, бот предложит продлить тариф.
Заявки на услуги
Заявка это сделка, которую клиент создал в кабинете через модуль «Услуги». Заказы магазина и записи сюда не входят.
Сколько заявок открыто
cabinet_requests_open(client_id) возвращает число открытых заявок клиента.
| Параметр | Описание |
|---|---|
| client_id | id клиента проекта. Если пусто, берётся клиент текущего диалога |
Есть ли неоплаченная заявка
cabinet_request_waiting(client_id) возвращает 1, если у клиента есть открытая заявка с ценой, которую он ещё не оплатил, иначе 0.
| Параметр | Описание |
|---|---|
| client_id | id клиента проекта. Если пусто, берётся клиент текущего диалога |
Статус заявки
cabinet_request_state(request_id, client_id) возвращает статус заявки: название этапа воронки, done для успешно закрытой или cancelled для отменённой.
| Параметр | Описание |
|---|---|
| request_id | номер заявки. Если пусто, берётся последняя заявка клиента |
| client_id | id клиента проекта. Если пусто, берётся клиент текущего диалога |
Возвращает пусто, если заявки нет или этап не задан.
Пример: в блоке на событие cabinet_request_stage state = cabinet_request_state(callback_order_id).
Журнал клиента
Записать сообщение в кабинет
cabinet_notify(title, text, url, var) добавляет запись в журнал клиента, раздел «Результаты» в кабинете. Так бот может оставить клиенту результат, инструкцию или ссылку, которые останутся в кабинете.
| Параметр | Описание |
|---|---|
| ! title | заголовок записи, до 120 символов |
| text | текст записи, до 4000 символов |
| url | ссылка. Принимаются адреса с http, https или относительные, начинающиеся с «/» |
| var | своя переменная журнала. Если пусто, запись идёт в основной журнал кабинета |
Возвращает 1, если запись сделана. 0, если клиент не зарегистрирован или все три поля пустые. HTML из заголовка и текста вырезается.
Пример: cabinet_notify('Заявка принята', 'Менеджер свяжется в течение дня', 'https://example.com/faq').
Где смотреть, что сделал Сейл
Правки настроек кабинета и сайта видны в разделе «Действия ассистента», там же их можно отменить. Созданные блоки видны в конструкторе и в «Истории изменений» схемы.

Что важно знать
- Событие приходит только когда включён его модуль и включён переключатель события.
- Кнопка «Отметить оплаченным» в карточке заказа даёт клиенту те же события и бонусы, что онлайн-оплата.
- Текст блока не дойдёт до клиента без привязанного мессенджера и без модуля «Чат». Сейл предупредит об этом.
Примеры запросов
- Включи кабинет в магазине с бонусами и чатом
- Какие события кабинета включены?
- Выключи событие входа в кабинет
- При регистрации начисли 100 бонусов и поздоровайся
- При оплате заказа поставь задачу менеджеру позвонить клиенту завтра
- При окончании доступа по тарифу напомни клиенту продлить
- Создай магазин «Название» с товарами и включи в нём кабинет