Виджеты vivaCRM сохраняют рекламные метки клиента и отправляют цели в Яндекс Метрику и VK Рекламу. Это работает во всех виджетах: персональной записи, групповых занятиях, каталоге абонементов, личном кабинете и подарочных сертификатах.

## UTM-метки и Roistat

Метки сохраняются в момент регистрации или входа клиента. Дальше они «едут» вместе с ним и проставляются во все его будущие записи и покупки. Настраивать ничего не нужно.

### Какие метки сохраняются

| Параметр                  | Что это                                                 |
| ------------------------- | ------------------------------------------------------- |
| utm_source                | Источник трафика (google, yandex, vk…)                  |
| utm_medium                | Тип трафика (cpc, email, banner…)                       |
| utm_campaign              | Название рекламной кампании                             |
| utm_content               | Объявление или ссылка                                   |
| utm_term                  | Ключевая фраза                                          |
| roistat_visit             | Номер визита Roistat                                    |
| yclid                     | Идентификатор клика Яндекс Директа                      |
| rb_clickid                | Идентификатор клика VK Рекламы                          |
| ClientID Метрики          | Идентификатор посетителя в Яндекс Метрике               |
| Страница входа и referrer | Первая страница визита и сайт, с которого пришёл клиент |

### Откуда виджет берёт метки

Виджет читает метки из адресной строки страницы, например `https://site.ru/?utm_source=google&utm_medium=cpc&utm_campaign=spring`. Если метки или `roistat_visit` уже сохранены сайтом в cookie, виджет возьмёт их оттуда. Виджет хранит метки 90 дней; если клиент пришёл по новой ссылке с метками, сохраняются новые (последний клик).

### Где смотреть метки

В [vision.vivacrm.ru](http://vision.vivacrm.ru), раздел «Отчёты»:

* **Отчёт №3 «База клиентов»**: метки, с которыми клиент зарегистрировался.

* **Отчёт №5 «Посещения»**: метки по каждому визиту и записи.

### Интеграция с Roistat

Если интеграция подключена, в Roistat уходят все записи, сделанные через виджеты, и сделки, которые создают менеджеры. Интеграция необязательна: без неё метки всё равно сохраняются и видны в отчётах.

## Цели в Яндекс Метрике

### Как подключить

Укажите номер счётчика Метрики в настройках виджета. Цели уходят во все счётчики, указанные для виджета. Если счётчик Метрики на странице загружается позже виджета, цели не теряются: виджет дождётся счётчика и отправит их.

Цели в Метрике нужно создать вручную: тип условия «JavaScript-событие», идентификатор — название цели из таблиц ниже. Названия чувствительны к регистру.

Для авторизованного клиента виджет передаёт в Метрику его UserID, поэтому визиты одного клиента с разных устройств склеиваются.

### Параметры, которые есть у каждой цели

| Параметр      | Что это                                                                                                |
| ------------- | ------------------------------------------------------------------------------------------------------ |
| widget        | Имя виджета из кода вставки                                                                            |
| widget_id     | ID виджета в vivaCRM                                                                                   |
| widget_type   | Тип виджета: `personal-booking`, `group-classes`, `catalog-abonements`, `cabinet`, `gift-certificates` |
| studio_id     | ID студии (локации), когда она уже выбрана                                                             |
| studio_name   | Название студии                                                                                        |
| city          | Город студии                                                                                           |
| is_authorized | Клиент вошёл в аккаунт                                                                                 |
| is_new_client | Новый клиент (только для авторизованных)                                                               |

### Параметры позиции

Передаются в целях, которые относятся к конкретной услуге, занятию, абонементу или сертификату.

| Параметр      | Что это                                                                                                                                                                     |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| item_type     | Тип позиции: `service` (услуга), `class` (групповое занятие), `subscription` (абонемент), `one_time` (разовое посещение), `certificate` (сертификат), `addon` (доп. услуга) |
| item_id       | ID услуги, занятия в расписании, абонемента или сертификата                                                                                                                 |
| item_name     | Название                                                                                                                                                                    |
| category      | Категория услуги или вид абонемента                                                                                                                                         |
| direction     | Направление                                                                                                                                                                 |
| direction_id  | ID направления                                                                                                                                                              |
| trainer_id    | ID исполнителя (тренера, мастера), если выбран                                                                                                                              |
| trainer_name  | Имя исполнителя                                                                                                                                                             |
| trainer_grade | Грейд исполнителя                                                                                                                                                           |
| price         | Цена, ₽                                                                                                                                                                     |
| currency      | Валюта                                                                                                                                                                      |
| slot_date     | Дата записи, ГГГГ-ММ-ДД                                                                                                                                                     |
| slot_time     | Время начала, ЧЧ:ММ                                                                                                                                                         |
| duration_min  | Длительность, минут                                                                                                                                                         |
| group_size    | Количество человек в записи                                                                                                                                                 |
| seats_left    | Свободных мест на занятии                                                                                                                                                   |

### Параметры корзины и оплаты

Передаются в целях нажатия «Оплатить», перехода в банк и результата оплаты.

| Параметр       | Что это                                                     |
| -------------- | ----------------------------------------------------------- |
| items          | Позиции корзины: ID, название, тип, цена, количество        |
| total          | Сумма без скидок, ₽                                         |
| to_pay         | К оплате, ₽                                                 |
| discount       | Скидка, ₽                                                   |
| bonus          | Оплачено бонусами, ₽                                        |
| deposit        | Оплачено с депозита, ₽                                      |
| certificate    | Оплачено сертификатом, ₽                                    |
| promo_code     | Применённый промокод                                        |
| transaction_id | ID платежа                                                  |
| revenue        | Оплачено деньгами, ₽ (в целях успешной и неуспешной оплаты) |
| reason         | Причина ошибки (в цели неуспешной оплаты)                   |

Цель результата оплаты отправляется один раз на платёж, даже если клиент перезагрузил страницу или банк открылся в новой вкладке.

### Персональная запись

| Цель                                 | Когда срабатывает                              | Дополнительные параметры                                                     |
| ------------------------------------ | ---------------------------------------------- | ---------------------------------------------------------------------------- |
| personal_widget_start                | Виджет открыт                                  | —                                                                            |
| personal_widget_closed               | Виджет закрыт                                  | last_step — шаг, на котором клиент закрыл виджет                             |
| step_choose_the_services             | Показан шаг выбора услуги                      | —                                                                            |
| choose_user_done                     | Выбрана услуга                                 | позиция                                                                      |
| step_studio_choice                   | Показан шаг выбора студии                      | —                                                                            |
| studio_selected                      | Выбрана студия                                 | studio_id, studio_name, city                                                 |
| step_employee                        | Показан шаг выбора исполнителя                 | позиция                                                                      |
| employee_selected                    | Выбран исполнитель                             | trainer_id, trainer_name, trainer_grade                                      |
| employee_date_selected               | Выбрана дата (сценарий с выбором исполнителя)  | slot_date                                                                    |
| employee_time_selected_with_employee | Выбрано время (сценарий с выбором исполнителя) | позиция                                                                      |
| step_without_employee                | Показан шаг выбора времени без исполнителя     | позиция                                                                      |
| without_employee_dateselected        | Выбрана дата (сценарий без исполнителя)        | slot_date                                                                    |
| without_employee_time_selected       | Выбрано время (сценарий без исполнителя)       | позиция                                                                      |
| step_final                           | Показан шаг подтверждения                      | позиция, корзина                                                             |
| addon_added                          | Добавлена доп. услуга                          | ID, название, цена и количество доп. услуги                                  |
| promo_code_applied                   | Применён промокод                              | promo_code, discount                                                         |
| final_check_phone                    | Клиент ввёл телефон                            | auth_method                                                                  |
| final_check_phone_done               | Клиент подтвердил телефон кодом                | auth_method                                                                  |
| final_book_one_time                  | Запись по разовому посещению                   | позиция                                                                      |
| final_book_subscription              | Запись по абонементу                           | позиция                                                                      |
| final_press_button_pay               | Нажата кнопка «Оплатить»                       | позиция, корзина                                                             |
| payment_redirect                     | Клиент переходит на страницу банка             | позиция, корзина                                                             |
| final_payment_success                | Оплата прошла                                  | позиция, корзина, revenue                                                    |
| final_payment_fail                   | Оплата не прошла                               | позиция, корзина, revenue, reason                                            |
| payment_pending                      | Банк ещё не подтвердил оплату                  | позиция, корзина                                                             |
| booking_created                      | Запись создана без оплаты онлайн               | booking_ids, paid_by — способ: `subscription`, `one_time`, `reserve`, `free` |

После выбора услуги цели персональной записи также передают: master_service (направление), service (услуга), employee (исполнитель), studio (студия), date, time_from, time_to, slots_count.

### Групповые занятия

| Цель                              | Когда срабатывает                              | Дополнительные параметры             |
| --------------------------------- | ---------------------------------------------- | ------------------------------------ |
| WIDGET_OPENED                     | Виджет открыт                                  | —                                    |
| WIDGET_CLOSED                     | Виджет закрыт                                  | last_step — где клиент закрыл виджет |
| STUDIO_SELECTED                   | Выбрана студия в фильтре расписания            | —                                    |
| EXERCISE_SELECTED                 | Открыто занятие                                | позиция, exercise_id, exercise_name  |
| USER_ADDED_TO_WAITLIST            | Клиент встал в лист ожидания                   | позиция                              |
| USER_REMOVED_FROM_WAITLIST        | Клиент вышел из листа ожидания                 | позиция                              |
| USER_CANCELLED_BOOKING            | Клиент отменил запись                          | позиция                              |
| NO_SPOTS                          | Мест на занятии нет                            | позиция                              |
| ALREADY_BOOKED                    | Клиент уже записан на занятие                  | позиция                              |
| CANCEL_UNAVAILABLE                | Отменить запись уже нельзя                     | позиция                              |
| AUTH_PHONE_ENTERED                | Клиент ввёл телефон                            | auth_method                          |
| AUTH_CODE_ENTERED                 | Клиент ввёл код из SMS                         | auth_method                          |
| AUTH_SUCCESS                      | Клиент вошёл в аккаунт                         | auth_method                          |
| CLICK_PAYMENT_BUTTON_SERVICE      | Нажата «Оплатить» на вкладке разовых посещений | позиция, корзина                     |
| CLICK_PAYMENT_BUTTON_SUBSCRIPTION | Нажата «Оплатить» на вкладке абонементов       | позиция, корзина                     |
| PAYMENT_REDIRECT                  | Клиент переходит на страницу банка             | позиция, корзина                     |
| PAYMENT_COMPLETED_SUCCESSFULLY    | Оплата прошла                                  | позиция, корзина, revenue            |
| PAYMENT_FAILED                    | Оплата не прошла                               | позиция, корзина, revenue, reason    |
| PAYMENT_PENDING                   | Банк ещё не подтвердил оплату                  | корзина                              |
| BOOKING_CREATED                   | Запись создана без оплаты онлайн               | позиция, booking_ids, paid_by        |

В групповых занятиях `item_id` — это ID конкретного занятия в расписании, `trainer_id` — ID первого тренера занятия.

### Каталог абонементов

| Цель                           | Когда срабатывает                  | Дополнительные параметры                    |
| ------------------------------ | ---------------------------------- | ------------------------------------------- |
| WIDGET_OPENED                  | Виджет открыт                      | —                                           |
| WIDGET_CLOSED                  | Виджет закрыт                      | —                                           |
| SUBSCRIPTION_SELECTED          | Открыт абонемент                   | позиция, subscription_id, subscription_name |
| AUTH_PHONE_ENTERED             | Клиент ввёл телефон                | auth_method                                 |
| AUTH_CODE_ENTERED              | Клиент ввёл код из SMS             | auth_method                                 |
| AUTH_SUCCESS                   | Клиент вошёл в аккаунт             | auth_method                                 |
| CLICK_PAYMENT_BUTTON           | Нажата «Оплатить»                  | позиция, корзина                            |
| PAYMENT_REDIRECT               | Клиент переходит на страницу банка | позиция, корзина                            |
| PAYMENT_COMPLETED_SUCCESSFULLY | Оплата прошла                      | корзина, revenue                            |
| PAYMENT_FAILED                 | Оплата не прошла                   | корзина, revenue, reason                    |
| PAYMENT_PENDING                | Банк ещё не подтвердил оплату      | корзина                                     |

### Личный кабинет

| Цель                                  | Когда срабатывает                            | Дополнительные параметры                    |
| ------------------------------------- | -------------------------------------------- | ------------------------------------------- |
| WIDGET_OPENED                         | Кабинет открыт                               | —                                           |
| WIDGET_CLOSED                         | Кабинет закрыт                               | —                                           |
| AUTH_PHONE_ENTERED                    | Клиент ввёл телефон                          | auth_method                                 |
| AUTH_CODE_ENTERED                     | Клиент ввёл код из SMS                       | auth_method                                 |
| AUTH_SUCCESS                          | Клиент вошёл в аккаунт                       | auth_method                                 |
| SUBSCRIPTION_CONSTRUCTOR_MODAL_OPENED | Открыт конструктор абонементов               | —                                           |
| CLICK_PAYMENT_BUTTON_SUBSCRIPTION     | Нажата «Оплатить» в конструкторе абонементов | корзина, subscription_id, subscription_name |
| GIFT_CERTIFICATES_MODAL_OPENED        | Открыта покупка подарочного сертификата      | —                                           |
| CLICK_PAYMENT_BUTTON_CERTIFICATE      | Нажата «Оплатить» за сертификат              | корзина                                     |
| PAYMENT_REDIRECT                      | Клиент переходит на страницу банка           | корзина                                     |
| PAYMENT_COMPLETED_SUCCESSFULLY        | Оплата прошла                                | корзина, revenue                            |
| PAYMENT_FAILED                        | Оплата не прошла                             | корзина, revenue, reason                    |
| PAYMENT_PENDING                       | Банк ещё не подтвердил оплату                | корзина                                     |
| BOOKING_CANCELLED                     | Клиент отменил запись                        | позиция, booking_id                         |
| BOOKING_REVIEWED                      | Клиент оценил посещение                      | позиция, booking_id, rating                 |
| USER_DATA_HAS_BEEN_CHANGED            | Клиент изменил личные данные                 | —                                           |
| USER_LOGGED_OUT                       | Клиент вышел из аккаунта                     | —                                           |

### Подарочные сертификаты

| Цель                           | Когда срабатывает                  | Дополнительные параметры           |
| ------------------------------ | ---------------------------------- | ---------------------------------- |
| WIDGET_OPENED                  | Виджет открыт                      | —                                  |
| WIDGET_CLOSED                  | Виджет закрыт                      | —                                  |
| CERTIFICATE_SELECTED           | Выбран сертификат и номинал        | позиция, design — выбранный дизайн |
| CLICK_PAYMENT_BUTTON           | Нажата «Оплатить»                  | корзина                            |
| PAYMENT_REDIRECT               | Клиент переходит на страницу банка | корзина                            |
| PAYMENT_COMPLETED_SUCCESSFULLY | Оплата прошла                      | корзина, revenue                   |
| PAYMENT_FAILED                 | Оплата не прошла                   | корзина, revenue, reason           |
| PAYMENT_PENDING                | Банк ещё не подтвердил оплату      | корзина                            |

## Электронная коммерция в Метрике

Виджеты передают события электронной коммерции через `window.dataLayer`. Чтобы видеть их в отчётах, включите «Электронную коммерцию» в настройках счётчика Метрики (контейнер `dataLayer`).

| Событие                      | Когда                                                                    |
| ---------------------------- | ------------------------------------------------------------------------ |
| Просмотр товара (detail)     | Выбрана услуга, открыто занятие, абонемент или сертификат                |
| Добавление в корзину (add)   | Выбраны услуга, абонемент, разовое посещение, доп. услуга или сертификат |
| Удаление из корзины (remove) | Позиция убрана или окно покупки закрыто без оплаты                       |
| Покупка (purchase)           | Оплата прошла или запись создана без оплаты                              |

Категории товаров: «Персональные / направление / категория», «Групповые / направление», «Абонементы / тип / вид», «Сертификаты», «Допы».

## VK Реклама

Укажите ID пикселя VK Рекламы в настройках виджета. Виджет отправляет в пиксель события:

| Событие              | Когда                                                     |
| -------------------- | --------------------------------------------------------- |
| viva_view_item       | Выбрана услуга, открыто занятие, абонемент или сертификат |
| viva_add_to_cart     | Позиция добавлена в корзину                               |
| viva_checkout        | Нажата «Оплатить»                                         |
| viva_purchase_client | Оплата прошла                                             |

С событиями передаются сумма и ID позиции, а для авторизованного клиента — его ID.