Передаем данные из Тильды в Битрикс24 не влезая в код

11.04.2024

То что я написал ниже, надеюсь, будет интересно владельцам и маркетологам небольших компаний, а также тем, кто хочет быстро и дешево протестировать какую-либо идею.

Перед нами стоит задача настроить передачу данных из формы на сайте в CRM-систему “по-взрослому”, но без привлечения сторонних специалистов.

Перед началом работы давайте зафиксируем, что мы имеем:

  • сайт на Тильде (система с достаточно закрытым кодом),
  • на сайте установлена нативная форма (я выбрал BF204N, но это не имеет значения),
  • установленный Google Tag Manager,
  • демо-аккаунт в CRM Битрикс24 (14 дней бесплатно).

Начнем. Заходим в CRM, вкладка “Маркет”, в поисковую строку вводим “Tilda” и устанавливаем приложение “Tilda Publishing Forms”:

Теперь нам нужно связать наш сайт с Битрикс24. Обращаемся к документации Тильды и проделываем необходимые действия описанные в этой статье. По завершению настроек, мы должны получать данные из формы в CRM. 

Перед тем, как заполнить поля формы, давайте-ка сымитируем переход на сайт по ссылке из Яндекс-рекламы, для этого к ссылке добавим, что-то подобное:

?utm_source=yandex&utm_medium=cpc&utm_campaign=new-compaign&utm_content=1234567&utm_term=key-word

и нажмем Enter. Далее заполняем поля формы, кликаем по кнопке “Отправить” и переходим в Битрикс24, если мы все сделали верно, там уже должна быть заявка:

Казалось бы на этом можно и остановиться, задача выполнена, но cookies передаются одной строкой – все вперемешку, а мы хотели бы  получать их в отдельные поля карточки. Для этого есть простое решение – добавить в форму на сайте скрытое поле, которое не будет отображаться на странице, но будет содержать всю необходимую информацию для передачи в Битрикс24, про скрытые поля можно почитать здесь

В нормальных условиях, в подобной ситуации мы должны были бы написать техническое задание и отправить его разработчикам, ну и какое-то время подождать, но мы имеем достаточно закрытую систему управления контентом (Tilda) и абсолютно не хотим ждать, поэтому все сделаем сами и быстро.

Заходим на страницу нашего контейнера в Google Tag Manager, к этому моменту он уже должен быть установлен на сайте и добавлены теги со счетчиками систем аналитики. Первое, что мы сделаем – это создадим две пользовательские переменные с Client ID Яндекс Метрики и Google Analytics, сразу оговорюсь, существует большое количество способов сделать это и все они правильные (ну почти), мы же воспользуемся самым правильным и пусть хоть кто-нибудь попробует с нами поспорить.

С Client ID Яндекс Метрики все довольно просто, создаем 1st Party Cookie переменную и сохраняем результат:

  • ymCID – это название мы придумали сами,
  • 1st Party Cookie  – тип создаваемой переменной,
  • _ym_id – название cookie, так ее присылает Яндекс Метрика к нам на сайт

Пока не публикуем контейнер, запускаем его в режиме отладки и смотрим в каком виде приходит переменная:

Похоже все в порядке двигаемся дальше, проделываем туже операцию для Google Client ID:

  • gaRawCID – наше название,
  • 1st Party Cookie  – тип создаваемой переменной,
  • _ga – название cookie Google Analytics

Запускаем отладчик и смотрим полученный результат:

В этот раз не все так гладко, Google Analytics отдает cookie с префиксом и номером версии, мы же хотим получить “чистый” Client ID – 268319381.1710322901. Я предвидел результат и поэтому добавил в название переменной полученной на предыдущем шаге слово Raw (сырой, необработанный). 

Возвращаемся в GTM и создаем еще одну пользовательскую переменную, которая вернет теперь уже обработанные данные:

  • gaCID – наше название,
  • Custom JavaScript  – тип создаваемой переменной

Сейчас я объясню, что мы написали:

  • создаем анонимную функцию (у нее нет названия),
  • создаем переменную raw, которой присваиваем значение переменной  полученной выше,
  • возвращаем (return) трансформированную переменную (если в ней есть значение) или null, если его нет.

Чуть подробней остановлюсь на этой строчке:

return raw ? raw.split(‘.’).slice(2).join(‘.’) : null;

Читаем слева направо:

  • return – вернуть
  • далее следует тернарный оператор, его следует читать так:
    • если в переменной raw, что-нибудь есть – вернем ее в обработанном виде,
    • если нет – вернем null, вместо null можно написать что угодно, допустим “пусто”, но в этом случае необходимо добавить кавычки,
  • raw.split(‘.’).slice(2).join(‘.’) – здесь мы применяем встроенные методы JavaScript, которые удаляют ненужную часть cookie.

Если интересно познакомиться с методами JavaScript, советую обратиться к документации на сайте Mozilla Foundation – это одно из лучших мест в Интернете, где описаны веб-технологии.

Заморочки с тернарным оператором были нужны для того, чтобы интерпретатор JavaScript не выдавал сообщений об ошибках, в случае если будут производиться какие-либо действия с неопределенной (не имеющей значения) переменной.

Еще раз обращаемся к отладчику:

Теперь все в порядке.

Ну что, подготовительные работы закончены, пора создавать тег, он будет добавлять скрытые поля в форму на нашем сайте и записывать в них необходимые данные:

  • addHiddenInputWithCID – название тега (оно получилось длинным, но зато описывает то, что в нем происходит),
  • Custom HTML – тип тега,
  • скрипт в котором мы создаем два HTML-элемента и добавляем их в форму во время посещения на страницы.

На первый взгляд с кодом все нормально, но в среде разработчиков существует такое правило – если код повторяется его нужно выносить в отдельную функцию, не будем отходить от этой традиции и мы. 

Хочу обратить особое внимание на еще одну очень важную деталь. На скриншоте выше мы создали две переменные в глобальной области видимости с очень простыми названиями, которые могут переопределять уже существующие переменные и таким образом поломать код. Старайтесь без лишней необходимости не засорять переменными кодовую базу или по крайней мере придумывать им какие-нибудь уникальные названия, например добавляя префикс. В нашем случае это могло бы выглядеть так: mysite-ym. Название стало длинным, но мы обезопасили себя и объявленные переменные теперь будет проще искать. 

Я же поступлю следующим образом, так как значения переменных мы не собираемся переиспользовать где-то еще, я просто передам вызов функции в метод prepend тем самым немного сократив код.

 

Так гораздо лучше, теперь у нас есть функция принимающая в качестве параметров – имя поля и Client ID и возвращающая готовый input. Код стал чище и его стало удобней читать. Даже ничего на понимая в программировании мы видим функцию с говорящим названием и не вникая в детали знаем, что ей передать и что мы получим в ответ.

Публикуем контейнер и переходим на сайт.

Вот наши только что добавленные инпуты в коде, мы можем увидеть их, открыв инструменты веб-разработчика, но на сайте ничего не изменилось, все та же форма с четырьмя полями и кнопкой:

На скриншоте видно два инпута с атрибутами:

  • type – hidden (скрытый),
  • value – динамически передаваемое значение,
  • name – имя элемента.

Заполняем форму и проверяем полученную заявку в Битрикс24:

По-моему у нас все получилось – поставленная задача выполнена, мы справились без сторонней помощи и получили вполне себе рабочий метод передачи данных. Аналогичным способом, при необходимости, можно передать и номера счетчиков аналитики.

Заключение

Конечно в идеальных условиях нам нужно было бы создать поля формы в коде, но мы поступили иначе и все сделали сами и теперь понимаем, как это работает.

Я написал эту статью для того, чтобы продемонстрировать насколько мощным инструментом наделил нас, маркетологов, Google, а так же чтобы показать тем кто только вступает на путь веб-анализа, что базовые знания в программировании делают нашу работу не только более эффективной, но и по настоящему интересной. В завершении хочу поделиться мыслью, которая посетила меня несколько лет назад: современный маркетинг начинается на стороне сервера.

Не переставайте учиться и не сдавайтесь. Удачи!

Павел Корякин
Павел Корякин

Веб-аналитик, маркетолог, веб-разработчик — t.me/pavel_koryakin

Все комментарии

  • А можно ли настроить проброску utm-метки в Сделку? И как?

    Анна 03.04.2024 17:04 Ответить
    • Анна, добрый день.
      В Битрикс24 UTM-метки по умолчанию добавляются к Лиду, а после его обработки и в Сделку. Если вы их не видите, в Сделке – карточка Клиент – Выбрать поле и поставить галочку чек-боксе UTM-метки.

      Павел Корякин Павел Корякин 05.04.2024 10:37 Ответить

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *