Skip to main content

GetCourse – Как загружать клиентов через Webhook

Чтобы система работала, необходимо, чтобы Telegram ID каждого пользователя сохранялся в дополнительное поле в GetCourse.

В момент создания заказа срабатывает автоматизация, и данные передаются в Vortex через вебхук. После этого вы получаете доступ к сквозной аналитике — от источника трафика до конечной продажи.

Для проектов, где воронки в Telegram построены на стандартном конструкторе GetCourse, передача данных возможна через GET-запросы прямо из системы.

Важно!
GetCourse по умолчанию не сохраняет Telegram ID. Чтобы настроить интеграцию, сначала нужно научить систему автоматически записывать этот идентификатор в дополнительное поле пользователя. Только после этого можно создавать процесс и передавать данные в Vortex через вебхук.

Без этого шага интеграция работать не будет.

Этап 1. Сохранение Telegram ID в дополнительное поле GetCourse

Существует несколько способов сохранения Telegram ID в дополнительном поле — выбор зависит от вашей воронки и используемых инструментов. Ниже приведены основные рабочие варианты:

Вариант 1: плагин Telegram User Data от GetCourse

Если ваша воронка в Telegram собрана в GetCourse, вы можете «вытащить» telegram_id прямо из системы.

Недавно появилась официальное расширение от GetCourse, которое позволяет автоматически сохранять user_id и username в дополнительные поля. Это удобное и проверенное решение стоит всего 500 рублей в месяц. 

IMG_9957.jpeg

Вариант 2: сайт упакован в MiniApp

Если вы используете наше более продвинутое решение с проксированием ссылок через MiniApp, то нужно действовать несколько иначе:

1. При настройках прокси-ссылки (MiniApp) необходимо указать передачу сервисных UTM-меток. Метка telegram_id по умолчанию включается при установке соответствующей галочки — её значение будет подставляться динамически. Кроме telegram_id, в UTM-метках можно передавать и другие служебные параметры: username, ФИО пользователя, наличие Telegram Premium. Если в вашей системе уже используется поле для сбора Telegram ID (например, tg_id, telegram, user_id и другие), просто укажите его название в соответствующее поле.


photo_2025-09-03_17-05-48.jpg

2. Далее необходимо записать telegram_id из UTM-метки в дополнительное поле GetCourse. Для большинства технических специалистов эта задача является стандартной и несложной. Во многих образовательных проектах уже используется скрипт, автоматически сохраняющий UTM-метки в дополнительные поля клиента.

Как настроить передачу Telegram ID в доп. поле GetCourse

Как настроить передачу Telegram ID в доп. поле GetCourse:

Для начала нужно создать дополнительное поле у пользователя. 

Переходим в Ученики ➡️ Пользователи ➡️ Дополнительные поля

photo_1_2025-09-01_12-51-36.jpg

photo_1_2025-09-02_16-00-24.jpg

Далее добавляем доп. поле:
•    Тип – число
•    Заголовок – telegram_id

Сохраняем.

dsgfd.jpg

Далее добавляем поле в форму на лендинге.

Переходим в раздел Сайт ➡️ Страницы. В настройках формы добавляем «Поле пользователя». Обязательно указываем CSS класс элемента:
•    telegram_id
•    hidden – скрываем поле

photo_4_2025-09-01_12-51-36.jpgphoto_3_2025-09-02_16-00-24.jpg

Добавляем блок «HTML». В него вставляем код:

<script>
function getParam(name) {
  const params = new URLSearchParams(window.location.search);
  return params.get(name) || '';
}
document.addEventListener('DOMContentLoaded', function () {
  const telegramId = getParam('telegram_id');
  const wrappers = document.querySelectorAll('.telegram_id');
  wrappers.forEach(function (wrapper) {
    const input = wrapper.querySelector('input');
    if (input) input.value = telegramId;
  });
});
</script>

Сохраняем и опубликовываем страницу.

Далее нам необходимо обернуть наш сайт в мини-приложение. 

Как работать с прокси-ссылками показано в этой статье.

Чтобы использовать продвинутые функции прокси-ссылок, помимо передачи telegram_id в дополнительное поле, необходимо установить в HEAD вашего сайта уникальный скрипт от Vortex!

<script type="text/javascript" src="https://app.vortex.pro/static/webapp_integration.js"></script>

Подробнее о том, где найти и как установить скрипт на свой сайт, в этой статье.

 


Итак, теперь при заполнении формы Telegram ID пользователя будет автоматически записываться в дополнительное поле.

 


Вариант 3: связка GetCourse и Salebot

 

Вы также можете передать telegram_id в дополнительное поле через лендинг на GetCourse — по аналогии со способом, реализованным через мини-приложение.

Для этого в GetCourse создайте дополнительное поле у пользователя (см. инструкцию «Вариант 1»). Затем в форму на лендинге добавьте «Поле пользователя», укажите CSS класс элемента (telegram_id и hidden) и вставьте в блок «HTML» следующий код:

<script>
function getParam(name) {
    const params = new URLSearchParams(window.location.search);
    return params.get(name) || '';
}
document.addEventListener('DOMContentLoaded', function () {
    const telegramId = getParam('telegram_id');
    const telegramWrappers = document.querySelectorAll('.telegram_id');
    telegramWrappers.forEach(function (wrapper) {
        const input = wrapper.querySelector('input');
        if (input) {
            input.value = telegramId;
        }
    });
});
</script>

Сохраните и опубликуйте страницу.

Теперь, чтобы значение telegram_id записалось в дополнительное поле, необходимо выдать пользователю через бота ссылку типа https://[ваш_аккаунт].getcourse.ru/[ссылка_на_лендинг]?telegram_id=#{platform_id} или https://[ваш_домен]/[ссылка_на_лендинг]?telegram_id=#{platform_id}

Вариант 4: связка BotHelp и GetCourse

Материал находится на редакции.


Важно отметить, что передача telegram_id через мини-приложение (вариант 2) — наиболее надёжный способ. При его использовании telegram_id фиксируется в GetCourse у 100% пользователей, оставивших заявку.
В сравнении с этим, остальные способы сопряжены с потерями: от 20% до 40% пользователей не переходят в Telegram-бота со страницы благодарности после регистрации на бесплатный продукт, и их telegram_id в систему не попадает.

Этап 2. Передача заказа в Vortex

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

Передача осуществляется через процесс, созданный в конструкторе GetCourse, с использованием вебхука.

Что нужно для передачи данных из GetCourse в Vortex через вебхук?

1. Убедиться, что telegram_id сохраняется в дополнительном поле пользователя

2. Создать группу конверсий в Vortex и выбрать вебхук в качестве источника

Как в Vortex создать группу конверсий

Подробнее о группах конверсий вы можете прочитать в этой статье.

1. Перейдите в Продажи ➡️ Управление конверсиями. Укажите название группы и нажмите «Создать»

1.jpg

2. Добавьте вебхук в качестве источника, нажав на значок «+» в столбце «Действия». Укажите название связки и нажмите «Добавить»

2.jpg

3.jpg

3. Перед вами откроется окно настройки вебхука. Здесь вы можете скопировать или перегенерировать ключ, а также указать название и сумму покупки по умолчанию. Если при передаче заказа не будут переданы название и сумма, в Vortex автоматически подставятся значения по умолчанию. Таким образом, приоритет всегда отдается данным, переданным через вебхук.

Снимок экрана 2025-09-05 124308.png

3. Получить ссылку для отправки вебхука

Как правильно составить ссылку для отправки данных по заказу через вебхук

Ссылка для отправки вебхука состоит из ключа вебхука и переменных, в которых передаются данные заказа.

Пример ссылки, в которой передаются Telegram ID пользователя, стоимость и название заказа: 
https://proxy.vortex.pro/webhooks/sale?key=a1234b5c6789012d34e56789f01g2345?telegram_id={object.user.telegram_id}&purchase_prise={object.cost_money_value}&purchase_name={object.positions}

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

4.jpg

2. Переменные. Так как мы передаем в Vortex данные заказа, то и процесс нужно выстраивать по заказам. При этом в процессах по заказам используются переменные по:

  • заказу,
  • пользователю, которому принадлежит заказ.

Чтобы использовать переменные по заказу, нужно добавить к ним приставку object. Таким образом мы можем передать состав заказа (название предложения), его стоимость, дату создания/оплаты, UTM-метки.
Пример: {object.cost_money_value} — стоимость заказа.

Чтобы в процессе по заказу использовать переменные по пользователю, нужно добавить приставки object и user. Так как мы записываем telegram_id в дополнительное поле пользователя, то и используем переменную по пользователю. Пример: {object.user.telegram_id}

Важно!
Если вы используете собственное обозначение для Telegram ID (например, chat_id, tg_id и т.п.), убедитесь, что именно это значение передаётся в переменной. 
Критически важно, чтобы название дополнительного поля в GetCourse, UTM-метка с Telegram_ID перешедшего в Vortex (при использовании MiniApp) и переменная в ссылке были полностью идентичны.

Это обязательный параметр запроса — без него сервис не сможет корректно добавить конверсию.

Список всех переменных вы можете найти по этой ссылке.

Подробные инструкции:

4. Настроить процесс передачи данных по заказу в Vortex

Теперь, когда мы получили ссылку для передачи данных, нужно создать процесс по заказам в GetCourse.

Как в GetCourse создать процесс передачи данных в Vortex

Процессы в GetCourse бывают по заказам и по пользователям. Нам необходим процесс по заказам.

1. Перейдем в раздел «CRM» ➡️ «Процессы».

1.jpg

2. Создадим новый процесс с типом объекта «Заказы».

2.jpg

3. В настройках выберите пункт «Периодическая проверка» и укажите правило вхождения объекта — то есть конкретное предложение или тип заказа, который нужно передавать в Vortex. В нашем примере — это бесплатный тестовый заказ.

На этом этапе вы также можете задать дополнительные параметры заказа: его статус (оплачен/не оплачен), дату создания и другие необходимые данные.

3.jpg

4. Сохраняем и переходим во вкладку «Процесс». Добавляем блок «Операция» ➡️ «Заказ» ➡️ «Вызвать url».

4.jpg

5.jpg

5. Здесь мы используем GET-запрос и в поле «URL» вставляем ту ссылку, которую мы получили на предыдущем этапе. Сохраняем.

6.jpg

6. Добавляем блок «Завершение процесса» и соединяем. 

7.jpg

7. Наш процесс готов. Осталось его протестировать и запустить.

Как проверить успешность отправки вебхука на сервис

Вы можете сохранить ответ от сервера в дополнительное поле GetCourse. Для этого создайте дополнительное поле заказа, а при добавлении блока «Вызов URL» в процессе укажите это поле в параметре «Записать результат в доп. поле».

После успешной отправки вебхука вы получите ответ от сервера в следующем формате:

{
  "detail": "Successfully added sale",
  "data": {
    "telegram_id": 12321312,
    "first_name": null,
    "last_name": null,
    "username": null,
    "has_premium": null,
    "register_date": null,
    "joined_at": null,
    "left_at": null,
    "purchased_at": "2025-07-02T08:45:48",
    "purchase_name": null,
    "purchase_price": null,
    "seconds_until_purchase": null,
    "time_until_purchase_humanreadable": null,
    "source": {
      "is_tgads": false,
      "name": "Не найдены в базе"
    },
    "audience": null,
    "creative": null,
    "is_bot": null
  },
  "utm_tags": {
    "utm_source": "test",
    "utm_medium": "test",
    "utm_campaign": "test",
    "utm_content": "test",
    "utm_term": "test"
  }
}

Обратите внимание: приведённый ответ — это пример структуры данных. В реальном запросе значения будут уникальными: telegram_id, имя, username, UTM-метки и другая информация зависят от конкретного пользователя и источника перехода. Некоторые поля могут быть пустыми, если данные недоступны или не переданы.

Ответ от сервера состоит из двух основных частей:

  • detail — статус обработки вебхука. Указывает, была ли отправка успешной или произошла ошибка.
  • data — подробная информация о добавленной конверсии, включая данные о клиенте.

Информативную часть ответа data можно отключить с помощью указания параметра запроса:

response_with_data=false

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

Пример ссылки:
https://proxy.vortex.pro/webhooks/sale?key=a1234b5c6789012d34e56789f01g2345?telegram_id={object.user.telegram_id}&purchase_prise={object.cost_money_value}&purchase_name={object.positions}&response_with_data=false

После проверки перед запуском процесса отключите сохранение ответа от сервера в дополнительное поле GetCourse. Это может мешать реальной обработке запроса.

Описание параметров, которые можно передать в ссылке:

Особенность Параметр Описание
*обязательный telegram_id  integer (целое число), Telegram ID покупателя 
*обязательный username  string (строка) , Telegram Username покупателя

Для отправки вебхука необходимо указать либо telegram_id, либо username — достаточно передать хотя бы один из этих параметров.

Если вы передаёте telegram_id, отправка username не требуется.

/опциональное purchase_price  float (число), цена конверсии
/опциональное purchase_name  string (строка), название конверсии
/опциональное purchased_at  Можно не указывать. В этом случае подставится время отправки webhook.
datetime (дата и время), время совершения конверсии.
Если отсутствует — подставится дата отправки настоящего запроса.
/опциональное

utm_source

utm_medium

utm_campaign

utm_content

utm_term

string (строка), значения UTM-меток

 

Можно передать как одну из UTM-меток, так и все сразу.

Каждая из них будет привязана к соответствующей конверсии и отправлена вместе с ней.

Важно: названия UTM-меток должны точно соответствовать установленным стандартам — любое отклонение может привести к некорректному сбору данных.

 

Пример объекта create_session с указанием источника и его UTM-меток:

 

image.png

 

Для того, чтобы передать эти значения, нужно использовать специальные переменные. Они зависят от типа объекта.

 

В процессах по пользователям переменные имеют следующий формат:

  • {object.create_session.utm_source}

В процессах по заказам и покупкам используется дополнительная приставка user.

  • {object.user.create_session.utm_source}

Для передачи UTM-меток используются следующие переменные:

  • {create_session.utm_source}
  • {create_session.utm_medium}
  • {create_session.utm_campaign}
  • {create_session.utm_content}
  • {create_session.utm_term}

Более подробная информация: https://getcourse.ru/blog/275857


Видео-объяснение с примером:

Типовые ошибки при передаче данных через вебхук

1. Некорректное название дополнительного поля в GetCourse
В параметрах вебхука указано имя поля с ошибками — например, содержатся пробелы, точки или другие недопустимые символы. Убедитесь, что имя поля соответствует формату, ожидаемому системой (латиница, без пробелов и специальных символов). 

2. Передача тестовой конверсии без обязательных идентификаторов
Попытка отправить тестовую конверсию без указания telegram_id или username. Для корректной обработки необходимо передавать хотя бы один из этих идентификаторов.

3. Сохранение ответа вебхука в переменную во время отладки
При локальной отладке некоторые разработчики сохраняют ответ вебхука в переменную, что может мешать реальной обработке запроса. Убедитесь, что вебхук корректно отправляется на сервер, а не «заглушается» в коде.

4. Несоответствие типа переменной в GetCourse
GetCourse может некорректно интерпретировать данные, если тип поля (текстовое/числовое) не совпадает с передаваемым значением. Например, telegram_id лучше указывать как числовое поле. При настройке рекомендуется проверить и при необходимости изменить тип поля.

5. Передача значения в виде строкового нуля («0»)
Иногда одно из полей передаётся как строка «0», что может интерпретироваться как пустое или некорректное значение.
Рекомендация: начните с минимального набора параметров (например, только telegram_id), а затем постепенно добавляйте остальные, чтобы выявить проблемное поле.

6. При тестировании не включена опция «Выполнять действия по-настоящему» в GetCourse
Эта галочка обязательна для активации реальной обработки вебхука при тестировании процесса. Если она не установлена, действия не будут выполняться, даже если запрос технически успешен.

8.jpg