> For the complete documentation index, see [llms.txt](https://docs.graspil.com/ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.graspil.com/ru/app/event-rules.md).

# Правила событий

Правила событий — это конструктор, который позволяет обработать событие бота ещё до того, как оно попадёт в аналитику или в историю переписки: скрыть чувствительные данные, засчитать конверсию по ключевому слову, записать значение в кастомное поле пользователя или вовсе проигнорировать событие.

{% hint style="info" %}
Раздел доступен в личном кабинете: <https://app.graspil.com/event-rules>
{% endhint %}

## Зачем это нужно

* Бот в тексте сообщения пишет «Оплата на сумму 990 RUB» → автоматически засчитать конверсию с суммой и валютой, извлечёнными из текста, без правки кода бота.
* Перед тем как попросить пользователя прислать одноразовый токен или пароль — скрыть его следующее сообщение в истории переписки, чтобы конфиденциальные данные не осели в чате.
* При регистрации/обновлении пользователя стереть имя, фамилию, username и био — для конфиденциальности.
* Пользователь написал «купить» — сразу зафиксировать это как конверсию, не дожидаясь отдельного события от разработчика.
* Служебные технические сообщения бота (с меткой вроде `[service]`) не засорять аналитику.
* Значение из сообщения записать напрямую в кастомное поле пользователя, чтобы потом использовать его в сегментах, рассылках и автоматизациях.

## Чем это отличается от автоматизаций

[Автоматизации](/ru/app/automations.md) реагируют на уже сохранённые события и общаются с пользователем — отправляют сообщения, ждут, вызывают вебхуки.

Правила событий работают на шаг раньше — в момент, когда данные только поступают в систему, до того, как событие ляжет в аналитику, а сообщение — в историю переписки. Они не отправляют пользователю сообщений, а решают, **как именно** это сырое событие сохранить: сохранить как есть, скрыть часть данных, засчитать как конверсию или не сохранять вовсе.

## Из чего состоит правило

Любое правило — это три части:

| Часть           | Что определяет                                                                                                             |
| --------------- | -------------------------------------------------------------------------------------------------------------------------- |
| **Тип события** | На какое событие бота реагировать (входящее сообщение, нажатие кнопки, отправка ботом сообщения и т. д.) — выбирается один |
| **Условия**     | При каких обстоятельствах правило срабатывает (необязательно — без условий правило сработает на каждое такое событие)      |
| **Действия**    | Что сделать с событием, когда условия выполнены — можно указать несколько, выполняются по порядку                          |

## Как создать правило

1. Откройте раздел **«Правила событий»** и нажмите **«Создать правило»**.
2. Наверху страницы есть строка **«Примеры готовых правил»** — можно кликнуть на любой пример, чтобы сразу подставить готовый шаблон и донастроить его под себя, а не собирать с нуля.
3. Пройдите шаги 1–4 (тип события → название/приоритет → условия → действия), описанные ниже.
4. Нажмите **«Сохранить»**.

{% hint style="info" %}
В отличие от автоматизаций, у правил событий нет отдельного черновика и публикации. Если включён переключатель «Включено», правило начинает применяться сразу после сохранения.
{% endhint %}

## Шаг 1. Тип события

Тип события определяет, какие данные вообще доступны для проверки в условиях, и на каком «сырье» правило будет срабатывать:

| Тип события                         | Когда срабатывает                                                                                                                                                                                                       |
| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Пользователь прислал сообщение**  | На любое входящее сообщение от пользователя — текст, фото, документ и т. д.                                                                                                                                             |
| **Нажатие на inline-кнопку**        | Когда пользователь нажимает кнопку под сообщением бота (callback)                                                                                                                                                       |
| **Бот отправил сообщение**          | Когда бот отправляет пользователю сообщение, фото, видео и т. д.                                                                                                                                                        |
| **Бот отредактировал сообщение**    | Когда бот меняет текст или подпись уже отправленного сообщения                                                                                                                                                          |
| **Сохранение профиля пользователя** | При создании или обновлении записи пользователя. Только для скрытия личных данных и записи кастомных полей — условия и большинство действий для этого типа недоступны, правило срабатывает на каждое сохранение профиля |

## Шаг 2. Название и приоритет

* **Название** видно только вам — для удобства, чтобы различать правила в списке.
* **Приоритет** — число, определяющее порядок срабатывания. Чем меньше число, тем раньше правило проверяется. Это важно, если на одно и то же событие настроено несколько правил: правила с действиями из группы «Игнорирование» (см. ниже) останавливают дальнейшую обработку события — следующие по очереди правила уже не сработают.
* **Включено** — переключатель, которым можно временно отключить правило, не удаляя его.

## Шаг 3. Условия

Условия — это развилка: правило применяется только если условия выполнены. Если условий нет — правило срабатывает на каждое событие выбранного типа.

Условия объединяются в группы:

| Группа                  | Логика                                     |
| ----------------------- | ------------------------------------------ |
| **Все условия (И)**     | Должны выполниться все условия в группе    |
| **Любое условие (ИЛИ)** | Достаточно, чтобы выполнилось хотя бы одно |
| **НЕ**                  | Условие должно быть ложным                 |

Группы можно вкладывать друг в друга («Добавить вложенную группу»), составляя произвольно сложную логику.

Внутри группы — отдельные условия-проверки. Набор доступных проверок зависит от выбранного типа события:

| Проверка                                       | Что делает                                                                                                 |
| ---------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| **Текст содержит**                             | В тексте сообщения (или подписи к медиа) встречается заданная подстрока; можно включить «регистр не важен» |
| **Текст соответствует regex**                  | Полное регулярное выражение по тексту сообщения (расширенная опция)                                        |
| **Тип сообщения (фото/видео/…)**               | Фильтрует исходящие сообщения бота по типу — например, только фото или только документы                    |
| **Данные кнопки содержат**                     | Подстрока в данных нажатой inline-кнопки (`callback_data`)                                                 |
| **В JSON-данных кнопки поле равно / не равно** | Если `callback_data` кнопки — JSON, ищет в нём поле по пути и сравнивает значение (расширенная опция)      |
| **ID типа события входит в список**            | Совпадение по числовым ID типов событий из системного справочника (расширенная опция)                      |

{% hint style="info" %}
Переключатель **«Расширенные опции»** на шаге условий открывает технические проверки (regex, работу с JSON внутри кнопки и т. д.) — для большинства сценариев хватает простых проверок «Текст содержит».
{% endhint %}

## Шаг 4. Действия

Можно добавить одно или несколько действий — выполняются по порядку сверху вниз. Действия из группы «Игнорирование» прерывают дальнейшую обработку события.

### Игнорирование

| Действие                           | Что делает                                                                                        |
| ---------------------------------- | ------------------------------------------------------------------------------------------------- |
| **Не сохранять это событие**       | Событие не попадёт в аналитику, но связанные сообщения по-прежнему сохранятся в истории переписки |
| **Не сохранять связанные данные**  | Сообщение не запишется в историю переписки, но событие в аналитике останется                      |
| **Полностью игнорировать событие** | Прерывает обработку целиком: ни события в аналитике, ни записи в историю. Используйте осторожно   |

### Конверсии

| Действие                  | Что делает                                                                                                                                                                                                                          |
| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Засчитать конверсию**   | Регистрирует [цель/конверсию](/ru/api/send-event.md) — например, оплату или подписку. Нужно указать ID цели; сумму и валюту можно задать фиксированно либо вытащить из текста регулярным выражением (первая capture-группа — число) |
| **Подменить тип события** | Сохраняет событие под другим ID типа события — полезно для переклассификации                                                                                                                                                        |

### Профиль пользователя

Эти действия доступны только для типа события «Сохранение профиля пользователя»:

| Действие                            | Что делает                                                                                                    |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| **Записать в профиль пользователя** | Записывает произвольное значение в указанное [кастомное поле](/ru/app/custom-fields.md) пользователя по ключу |
| **Скрыть личные данные**            | Очищает выбранные поля профиля (имя, фамилия, username, био) — для конфиденциальности                         |

### Приватность

| Действие                             | Что делает                                                                                                                                                                                                                 |
| ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Не сохранять следующее сообщение** | Взводит «окно ожидания»: следующее сообщение выбранного направления в этом чате запишется в историю переписки не как есть, а с плейсхолдером вместо текста. На аналитику это не влияет — скрывается только сырая переписка |

Для действия «Не сохранять следующее сообщение» нужно указать:

* **Что скрыть** — следующее входящее сообщение, следующее исходящее, или оба направления (сработает то, что придёт первым);
* **Окно ожидания (минут)** — сколько минут ждать это сообщение, максимум 30. Если за это время ничего не пришло — окно закрывается само, ничего не скрывая.

Это удобно ставить на действие «Бот отправил сообщение» с условием вроде «текст содержит „пришлите токен“» — тогда именно ответ пользователя с чувствительными данными не осядет в истории переписки.

## Готовые примеры

На странице создания правила есть блок с кликабельными шаблонами — сразу подставляют настроенное правило, которое можно донастроить под себя:

| Пример                                                   | Что делает                                                                                                       |
| -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| **Поймать платёж в исходящем сообщении**                 | Когда бот пишет «Оплата на сумму X RUB» — регистрирует конверсию с суммой и валютой из текста                    |
| **Редактирование исходящего сообщения с словом «тест2»** | Когда бот редактирует своё сообщение и в новом тексте есть «тест2» — игнорирует в аналитике                      |
| **Скрыть имя/фамилию/username из аналитики**             | Стирает личные данные при сохранении профиля                                                                     |
| **Не сохранять служебные сообщения**                     | Игнорирует исходящие сообщения с меткой `[service]` в тексте                                                     |
| **Конверсия когда пользователь пишет «купить»**          | Когда пользователь шлёт сообщение со словом «купить» — фиксируется конверсия                                     |
| **Не сохранять ответ с токеном**                         | Когда бот просит прислать токен — следующее входящее сообщение в этом чате сохранится как скрытое, а не как есть |

## Управление правилами

В общем списке («Правила событий») для каждого правила видно: название, на что оно реагирует, какие действия выполняет, приоритет и статус.

* Переключатель в колонке **«Статус»** включает и выключает правило прямо из списка, без захода в редактирование.
* Кнопка-карандаш открывает правило в редактировании.
* Кнопка-корзина удаляет правило безвозвратно.

{% hint style="warning" %}
Если для одного события применимо несколько правил, они проверяются по очереди в порядке приоритета (от меньшего к большему). Держите это в уме, настраивая несколько правил на один и тот же тип события — правило с меньшим приоритетом и действием из группы «Игнорирование» может остановить проверку следующих правил.
{% endhint %}
