Ссылка на бота: как довести метки визита до диалога

Обычная проблема рекламы на ботов: человек кликнул по объявлению, попал в бота — и всё, связь с источником потеряна. Бот не знает ни кампании, ни ключевого слова, ни визита Яндекс.Метрики. Деньги потрачены, а откуда пришёл платящий клиент — неизвестно.

Здесь это решается так: короткая ссылка фиксирует визит, а идентификатор визита подставляет боту в start-параметр. Бот при первом сообщении спрашивает у нас, что это был за визит, и получает всё: метки, реферер, идентификатор Метрики.

Шаг 1. Создать ссылку в режиме «бот»

В кабинете или на главной выберите режим Бот: подставить start-параметр, укажите адрес бота и номер счётчика Метрики.

Что получится: короткая ссылка вида https://2vip.ru/vCG78a. При переходе по ней человек попадёт на https://t.me/ваш_бот?start=mNVSagHB, где mNVSagHB — идентификатор визита.

Параметр по умолчанию называется start — так его понимают Telegram и MAX. Если нужен другой, задаётся полем bot_param при создании через API.

Шаг 2. Получить ключ API

Ключи выпускаются в кабинете, раздел Ключи. Ключ показывается один раз: в базе хранится только его отпечаток, восстановить нельзя — потеряли, отзовите и выпустите новый.

Шаг 3. Спросить у нас про визит

Бот получил /start mNVSagHB. Дальше один запрос:

GET https://2vip.ru/api/visits/mNVSagHB
Authorization: Bearer ВАШ_КЛЮЧ

В ответе — всё, что мы знаем о визите:

{
  "success": true,
  "visit_id": "mNVSagHB",
  "link_code": "vCG78a",
  "counter_id": 51902021,
  "created_at": "2026-08-21 16:20:48",
  "data": {
    "ip": "203.0.113.7",
    "user_agent": "Mozilla/5.0 …",
    "referer": "https://yandex.ru/",
    "utm_source": "yandex",
    "utm_campaign": "avgust-bot",
    "yclid": "17870000000000",
    "client_id": "1787218959508123456",
    "mode": "bot"
  },
  "events": [
    {"event": "click", "created_at": "2026-08-21 16:20:48"},
    {"event": "client_id", "created_at": "2026-08-21 16:20:49"},
    {"event": "redirected", "created_at": "2026-08-21 16:20:49"}
  ]
}

client_id — тот самый идентификатор посетителя из Яндекс.Метрики. По нему визит из бота сшивается с визитом на сайте и с целями в Метрике.

Шаг 4. Отметить, чем всё кончилось

Когда человек в боте дошёл до нужного действия — оставил заявку, оплатил — скажите нам:

GET https://2vip.ru/api/visits/mNVSagHB/goal?goal=paid
Authorization: Bearer ВАШ_КЛЮЧ

Цель ляжет в события визита как goal:paid и попадёт в воронку на странице ссылки. Теперь видно не «сколько кликов», а сколько из них дошло до денег.

Пример на Python

import requests

TOKEN = "vip_..."
API = "https://2vip.ru/api"
HEAD = {"Authorization": f"Bearer {TOKEN}"}

def on_start(visit_id: str):
    r = requests.get(f"{API}/visits/{visit_id}", headers=HEAD, timeout=5)
    data = r.json()
    if not data.get("success"):
        return None
    return data["data"]          # utm-метки, client_id, referer

def on_paid(visit_id: str):
    requests.get(f"{API}/visits/{visit_id}/goal",
                 params={"goal": "paid"}, headers=HEAD, timeout=5)

Пример на PHP

$token = 'vip_...';
$ctx = stream_context_create(['http' => [
    'header'  => "Authorization: Bearer $token\r\n",
    'timeout' => 5,
]]);
$raw = @file_get_contents("https://2vip.ru/api/visits/$visitId", false, $ctx);
$visit = $raw === false ? null : json_decode($raw, true);

«А это же и так видно в Метрике?»

Нет. Метрика видит только страницы со своим счётчиком — а внутри бота счётчика нет и быть не может. Запуск бота, заявку и оплату она не увидит никогда, их присылает сюда сам бот. Разбор целиком — в статье «Зачем цели здесь, если есть Метрика», там же про то, как вернуть эти цели обратно в Метрику и в Директ.

Чего ожидать

Идентификатор визита — 8 символов, влезает в 64-символьный start Telegram с запасом.

Визит создаётся в момент клика, ещё до того, как человек дошёл до бота. Поэтому визиты без последующего /start — это норма: человек передумал по дороге.

Ключ передавайте только заголовком. В адресной строке он осел бы в логах, в истории браузера и уехал бы в заголовке Referer.

← ко всем инструкциям