Отправка целей из бота через свой сайт
Как настроить отправку целей Яндекс.Метрики для бота в Telegram — связав действия в боте с конкретным посетителем сайта.
- Бот живёт в мессенджере Telegram.
- Не используется бот-лендинг или виджет для сайта.
- Нужно отправлять цели Метрики из бота, связывая их с пользователем сайта.
Шаг 1. Включение офлайн-конверсий
В настройках счётчика Яндекс.Метрики:
- Перейдите в «Загрузка данных».
- Включите учёт офлайн-конверсий.
- Дождитесь активации — это занимает около суток.
До завершения активации офлайн-конверсий цели из бота не будут засчитываться — настройку лучше начать заранее.
Шаг 2. Добавление Яндекс-аккаунта в конструкторе
В Quescha добавьте Яндекс-аккаунт, в котором находится счётчик Метрики для сайта.
Шаг 3. Получение clientID на сайте
На вашем сайте через JavaScript получите clientID посетителя из Яндекс.Метрики и подставьте его в параметр start ссылки на бот.
Базовая логика
// Получаем clientID посетителя сайта
var yaID;
ym(XXXXXXX, 'getClientID', function(clientID) { yaID = clientID });
// Связываем его с userID Метрики
ym(XXXXXXX, 'setUserID', yaID);
// Подставляем в ссылку на бот
var botlink = 'https://t.me/mybot?start=' + yaID;
Где XXXXXXX — номер вашего счётчика Метрики. Эту ссылку выводите посетителю сайта.
Готовый скрипт
Скрипт ниже ждёт инициализации Метрики, получает clientID и автоматически дописывает его во все ссылки и кнопки, ведущие на бот.
<script type="text/javascript">
const counterId = 12345678; // замените на свой счётчик метрики
const botlink = 'https://t.me/mybot'; // замените на свою ссылку на бот
function waitForYandexMetrika(counterId, timeout = 5000) {
return new Promise((resolve, reject) => {
const startTime = Date.now();
const interval = setInterval(() => {
if (typeof window['yaCounter' + counterId] !== 'undefined') {
clearInterval(interval);
resolve(true);
} else if (Date.now() - startTime > timeout) {
clearInterval(interval);
reject(new Error('Таймаут ожидания Яндекс.Метрики'));
}
}, 100);
});
}
waitForYandexMetrika(counterId)
.then(() => {
var yaID;
ym(counterId, 'getClientID', function (clientID) { yaID = clientID });
ym(counterId, 'setUserID', yaID);
var newlink = botlink + '?start=' + yaID;
document.querySelectorAll('a').forEach(link => {
if (link.href.includes(botlink)) {
link.href = link.href.replace(botlink, newlink);
}
});
document.querySelectorAll('button[onclick]').forEach(button => {
if (button.getAttribute('onclick').includes(botlink)) {
button.setAttribute('onclick', `window.location.href='${newlink}'`);
}
});
})
.catch(err => console.error(err.message));
</script>
Шаг 4. Сохранение start в боте
В сценарии бота присвойте значение start переменной metrikauserid — например, в стартовом блоке через сценарий действий.
Перед присвоением проверьте, что start не пуст — иначе вы запишете пустое значение для пользователей, пришедших не с сайта:
'#{start}' != ''
Шаг 5. Отправка целей
- В счётчике Яндекс.Метрики создайте цели типа «JavaScript-событие».
- В нужных блоках бота настройте отправку цели.
Теперь действия подписчиков в боте будут засчитываться как конверсии в Метрике — связанные с конкретным посетителем сайта.

