Shoora
5/14/2019 - 7:40 PM

Достижение целей в Яндекс.Метрике при отправке контактных данных в чате Битрикс24

Достижение целей в Яндекс.Метрике при отправке контактных данных в чате Битрикс24

Достижение целей в Яндекс.Метрике при отправке контактных данных в чате Битрикс24

Что нужно сделать?

  1. Разместите на всех страницах сайта где подключается онлайн чат Битрикс24 код из фвйла ./bx-live-chat-send-form.html

  2. Создайте в интерфейсе Яндекс.Метрики новую цель с типом "JavaScript-событие" и идентификатором события "BX_LIVE_CHAT_SEND_FORM".

  3. Наслаждайтесь.

Что если я хочу использовать событие с другим идентификатором?

В коде из файла ./bx-live-chat-send-form.html найдите строчку counters[index].reachGoal('BX_LIVE_CHAT_SEND_FORM'); и замените в ней "BX_LIVE_CHAT_SEND_FORM" на нужный вам идентификатор.

Что если я хочу отслеживать другое событие онлайн чата Битрикс24?

В коде из файла ./bx-live-chat-send-form.html найдите строчку type: BX.LiveChatWidget.SubscriptionType.userForm, и замените "userForm" на нужное вам событие, список событий можно посмотреть тут.

Дополнительные материалы

  1. Расширенные настройки виджета Онлайн-чата
  2. Отслеживание чатов в Яндекс.Метрике
  3. Как создать цель «JavaScript-событие»
<script type="text/javascript">
window.addEventListener(
    'onBitrixLiveChat', 
    function (event) {
        // Проверяем корректность параметров события
        if (!event || !event.detail || !event.detail.widget) {
            return;
        }

        // Функция для отправки цели в Яндекс.Метрику.
        var _catchYaMetrikaCount = 0;
        var yandexReachGoal = function () {
            // Если за 20 попыток найти код Яндекс.Метрики ничего не вышло, больше не пытаемся
            if (++_catchYaMetrikaCount > 20) {
                return;
            }

            // Проверяем наличие объекта Ya
            if (typeof Ya !== 'object') {
                setTimeout(yandexReachGoal, 1000);
                return;
            }

            // Проверяем что Яндекс.Метрика уже проинициализаровалась
            if (typeof Ya._metrika !== 'object') {
                setTimeout(yandexReachGoal, 1000);
                return;
            }

            // Проверяем что счетчики проинициализировались
            var counters = Ya._metrika.counters;
            if (!counters) {
                setTimeout(yandexReachGoal, 1000);
                return;
            }

            // Перебираем счетчики и говорим что цель достигнута каждому
            for (var index in counters) {
                counters[index].reachGoal('BX_LIVE_CHAT_SEND_FORM');
            }
        };

        // Подписываемся на событие виджета живого чата
        var widget = event.detail.widget;
        widget.subscribe({
            type: BX.LiveChatWidget.SubscriptionType.userForm,
            callback: function(data) {
                // Запрашиваем достижение цели
                yandexReachGoal();
            }
        });
    }
);
</script>