Когда виджет бронирования стоит на вашем сайте, он сообщает странице, что гость в нём делает: открытие и закрытие панели, каждый экран бронирования, каждый ответ и само бронирование. Всё это — события браузера на window, поэтому ваш разработчик — или тот, кто ведёт ваш Google Tag Manager, — может построить воронку бронирования, изменить страницу, когда кто-то бронирует, или передавать шаги в любой инструмент аналитики.
События
| Событие | Когда срабатывает | Что добавляет event.detail |
|---|---|---|
| taptime:open | Открывается плавающая панель бронирования. Встроенная форма открыта всегда, поэтому она это событие не отправляет. | — |
| taptime:close | Плавающая панель закрывается — неважно, каким способом гость её закрыл. | — |
| taptime:step | Показывается экран бронирования. | step, step_index, step_count |
| taptime:choice | Гость отвечает на вопрос на экране. | step, field, value, label |
| taptime:booking | Бронирование сделано. | confirmed, booking_id, event_id, party_size, service_name, value, currency |
| taptime:event | Каждое из событий выше — ещё раз. | event — имя повторяемого события: open, close, step, choice или booking |
Каждое событие передаёт свои данные в event.detail. Два поля есть всегда: company — значение data-company из вашего кода для вставки — и booking_type: reservation для столов, appointment для записей на услуги.
Подпишитесь на событие
Добавьте скрипт на ту же страницу, что и виджет, — с window.addEventListener и именем события. Он может стоять до или после кода для вставки. Этот скрипт скрывает баннер «Забронировать сейчас», как только бронирование подтверждено:
<script>
window.addEventListener('taptime:booking', function (event) {
if (event.detail.confirmed) {
document.getElementById('book-banner').hidden = true;
}
});
</script>
confirmed равно true, если бронирование подтверждено сразу, и false, если это заявка, которую ваша команда ещё должна принять. value (с валютой в currency) — для записи это цена услуги, для стола — ценность бронирования, которую вы задали для отслеживания конверсий; если нет ни того, ни другого, value равно null.
Экраны и ответы
taptime:step передаёт название экрана в detail.step. Какие экраны увидит гость, зависит от того, что он бронирует, и от ваших настроек:
- location — гость выбирает одно из ваших заведений. Только если их несколько и виджет не привязан к одному.
- party — сколько гостей. Только для столов.
- service и specialist — что бронировать и у кого. Только для записей.
- when — день и время.
- seating, zone и table — в зале или на улице, зона зала, конкретный стол. Только для столов и только те варианты, которые вы включили.
- details — имя гостя и контактные данные.
- done — экран подтверждения, после того как бронирование сделано.
step_index и step_count — это номера, которые гость видит вверху формы, например «2 из 5». Список заведений и экран подтверждения не нумеруются, поэтому там оба поля равны null. Число экранов зависит от ваших настроек, так что проверяйте название шага, а не номер.
taptime:choice указывает, на какой вопрос дан ответ, в detail.field: branchId, partySize, date, time, seating, zoneId, tableId, serviceId или specialistId. detail.value — выбранное значение (число, идентификатор, дата в виде 2026-09-18 или время в виде 2026-09-18 19:30), а detail.label — то, что гость прочитал на кнопке, например название услуги или заведения. При выборе варианта «любой» value равно null.
Передавайте все события в Google Tag Manager
Один обработчик taptime:event ловит их все. Скрипт ниже отправляет каждое событие в dataLayer как taptime_open, taptime_step, taptime_choice и так далее, вместе с полями detail. Вставьте его в тег «Пользовательский HTML», который срабатывает на всех страницах, или прямо на сайт. После этого настраивайте триггеры, переменные и воронку в Tag Manager, больше не трогая сайт.
<script>
window.dataLayer = window.dataLayer || [];
window.addEventListener('taptime:event', function (event) {
window.dataLayer.push(Object.assign({ event: 'taptime_' + event.detail.event }, event.detail));
});
</script>
Другие примеры
Отправляйте каждый экран в Google Analytics 4 отдельным событием, чтобы в исследовании-воронке видеть, на каком шаге гости уходят. Для этого на странице должен быть установлен GA4 через gtag.js:
<script>
window.addEventListener('taptime:step', function (event) {
if (typeof gtag !== 'function') return;
gtag('event', 'booking_step', {
step: event.detail.step,
step_index: event.detail.step_index,
booking_type: event.detail.booking_type
});
});
</script>
Предложите другой способ забронировать, если гость закрыл панель, так и не забронировав, — здесь для этого показывается скрытый блок «Позвоните нам»:
<script>
var booked = false;
window.addEventListener('taptime:booking', function () {
booked = true;
});
window.addEventListener('taptime:close', function () {
if (!booked) {
document.getElementById('call-us').hidden = false;
}
});
</script>
Проверьте, что всё работает
-
1
Откройте опубликованный сайт
Многие конструкторы сайтов не выполняют свой код в редакторе, поэтому проверяйте на опубликованном сайте.
-
2
Откройте консоль браузера
Щёлкните по странице правой кнопкой мыши, выберите «Просмотреть код» и откройте вкладку «Консоль» (Console).
-
3
Вставьте строку ниже и нажмите Enter
Она выводит каждое событие виджета в момент, когда оно происходит, и действует до перезагрузки страницы.
-
4
Пройдите тестовое бронирование
Каждый экран и ответ появятся в консоли, а затем и само бронирование. После этого отмените тестовое бронирование с доски.
window.addEventListener('taptime:event', function (event) { console.log(event.detail.event, event.detail); });
Частые вопросы
Нужно ли включать события?
Нет. Они срабатывают всегда, когда виджет есть на странице. Переключатель «Передавать бронирования в теги моего сайта» управляет только автоматической отправкой в dataLayer и собственными GA4 и Meta Pixel вашей страницы.
Можно ли получить из события имя, телефон или почту гостя?
Нет. События передают идентификаторы, время, число гостей, услугу и ценность бронирования — но никогда не то, кто бронирует. Для данных гостей используйте панель, вебхук или REST API.
Мой обработчик не срабатывает.
Проверьте, что скрипт стоит на той же странице, что и виджет, и что имя события написано точно, вместе с двоеточием: taptime:step. В Tag Manager убедитесь, что тег «Пользовательский HTML» опубликован и срабатывает на всех страницах. Откройте консоль и выполните тестовую строку выше, чтобы увидеть, приходят ли события вообще.
Может ли мой скрипт открыть или закрыть виджет?
Да. TapTime.open() открывает плавающую панель или прокручивает страницу к встроенной форме, а TapTime.close() закрывает панель. Если на странице виджеты двух компаний, TapTime.open('your-company') открывает виджет нужной компании.
Спасибо — так мы делаем эти руководства лучше.
Напишите нам и укажите страницу, на которой вы были. Каждое сообщение читает человек, а ответ приходит на том языке, на котором вы написали.
Напишите нам