Telegram User-Agent: что это и как с ним работать

Строка User-Agent встроенного браузера Telegram встречается в логах веб-сервера сразу после того, как кто-то открыл ссылку из чата: запрос приходит не от Chrome или Safari напрямую, а от WebView внутри мессенджера, и это ломает привычную аналитику. Если вы настраиваете трекинг переходов, фильтруете трафик ботов или отлаживаете Telegram Mini App, первое, что нужно сделать, — посмотреть заголовок User-Agent входящего запроса в журнале сервера или через phpinfo() / аналог на вашем стеке.

В этой статье разберём, какие User-Agent используют клиенты Telegram на разных платформах, чем отличается агент встроенного браузера от агента Bot API, как определить Telegram-трафик на сервере и какие ошибки при этом допускают чаще всего.

Что такое User-Agent и как его формирует Telegram

User-Agent — это строка, которую клиентское приложение отправляет в HTTP-заголовке каждого запроса. По ней сервер понимает, какой браузер, операционная система и движок рендеринга используются, и может адаптировать ответ: отдать мобильную версию, включить нужные скрипты или заблокировать нежелательного клиента.

Telegram не создаёт собственный движок браузера. Встроенный просмотрщик ссылок использует системный WebView: на Android это Chromium WebView, на iOS — WKWebView на базе WebKit. Поэтому строка агента во многом повторяет обычный мобильный браузер, но с дополнительными маркерами, по которым можно распознать именно мессенджер.

Важно различать три сценария, в которых фигурирует User-Agent в контексте Telegram: открытие ссылки во встроенном браузере, запросы бота к вашему серверу через Bot API и запросы самого приложения к серверам Telegram. В каждом случае строка формируется по-разному.

User-Agent встроенного браузера Telegram

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

Типичные признаки, по которым определяют Telegram WebView:

  • 🔍 На iOS в строке присутствует Safari и Mobile, но отсутствует полноценный маркер версии браузера — это отличие WebView от обычного Safari.
  • 🤖 На Android встречается маркер wv в конструкции вида Version/4.0 ... wv), указывающий на WebView.
  • 📱 Некоторые версии клиента добавляют служебные токены, но их набор меняется от версии к версии, поэтому жёстко привязываться к ним не стоит.
  • 🧭 Дополнительный признак — заголовок X-Requested-With со значением пакета приложения (например, org.telegram.messenger) на Android.

Точный вид строки зависит от версии приложения и ОС, поэтому универсального «эталонного» User-Agent Telegram не существует. Надёжнее проверять комбинацию признаков, а не совпадение с фиксированной строкой.

📊 Откуда чаще всего приходит Telegram-трафик на ваш сайт?
Ссылки в каналах и чатах
Telegram-боты
Mini Apps (Web Apps)
Не отслеживаю источник

User-Agent ботов и запросов Bot API

Отдельный случай — запросы, которые инициирует бот. Когда вы вызываете методы Bot API из своего кода, User-Agent формирует HTTP-клиент вашей библиотеки, а не Telegram. Например, это может быть строка вида python-telegram-bot/x.y, aiohttp/x.y или стандартный агент curl — всё зависит от стека.

Обратная ситуация — вебхуки: серверы Telegram сами обращаются к вашему endpoint, когда приходит обновление. Такие запросы идут с сетей Telegram, и полагаться на их User-Agent как на средство аутентификации нельзя. Для проверки подлинности вебхука предусмотрен механизм секретного токена в заголовке X-Telegram-Bot-Api-Secret-Token — используйте именно его.

⚠️ Внимание: фильтровать вебхуки Telegram по User-Agent небезопасно — заголовок легко подделать. Единственный надёжный способ подтвердить, что обновление пришло от Telegram, — проверка secret token и/или ограничение доступа по диапазону IP-адресов Telegram.

Как определить Telegram-трафик на сервере

Практическая задача обычно звучит так: нужно отличить посетителей, пришедших из Telegram, от остальных. Делается это комбинацией нескольких сигналов, потому что по одному User-Agent выводы делать рискованно.

Порядок проверки выглядит так:

  • 📋 Посмотрите заголовок User-Agent входящего запроса в логах веб-сервера (например, в access.log у Nginx или Apache).
  • 🧩 Проверьте наличие маркеров WebView: wv на Android, отсутствие версии Safari на iOS.
  • 🔗 Сопоставьте с заголовком Referer и UTM-метками в ссылках, которые вы публикуете в каналах.
  • 📲 На Android дополнительно проверьте X-Requested-With — там может быть пакет приложения.

Пример того, как строка попадает в лог Nginx, если включён стандартный формат combined:

203.0.113.10 - - [10/Jan/2026:12:00:00 +0000] "GET /page HTTP/2.0" 200 5120 "-" "Mozilla/5.0 (Linux; Android 13; ...; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/... Mobile Safari/537.36"

Если нужно проверить, какой агент видит сервер прямо сейчас, откройте ссылку из Telegram на страницу, которая выводит заголовки запроса, — например, на собственный скрипт, возвращающий $_SERVER['HTTP_USER_AGENT'], или на публичный сервис отображения заголовков.

☑️ Диагностика Telegram User-Agent

Выполнено: 0 / 5

Сравнение User-Agent на разных платформах

Ниже — обобщённая таблица характерных признаков. Это не эталонные строки, а ориентиры для распознавания: конкретные версии и токены меняются с обновлениями клиентов.

Клиент Движок Характерные маркеры Дополнительный признак
Telegram для Android (WebView) Chromium WebView wv, Version/4.0, Chrome/... X-Requested-With: org.telegram.messenger
Telegram для iOS (WebView) WKWebView (WebKit) Mobile, Safari без версии браузера Отсутствие CriOS/FxiOS
Telegram Desktop Встроенный просмотрщик / системный браузер Зависит от способа открытия ссылки Часто ссылка открывается во внешнем браузере
Бот (Bot API) HTTP-клиент вашей библиотеки Например, python-telegram-bot, aiohttp Задаётся разработчиком, не Telegram
Вебхук от серверов Telegram Серверный клиент Telegram Не является средством проверки Проверка по secret token

Обратите внимание на строку про Desktop: десктопный клиент нередко передаёт ссылку в системный браузер по умолчанию, и тогда в логах вы увидите обычный Chrome или Firefox без каких-либо следов мессенджера. Отследить такой переход можно только через UTM-метки или Referer, если он не обрезан.

User-Agent в Telegram Mini Apps (Web Apps)

Для разработчиков Mini Apps тема особенно актуальна: ваше веб-приложение открывается внутри Telegram, и вам нужно знать окружение. Здесь User-Agent — лишь часть картины. Основной источник данных о клиенте — объект Telegram.WebApp из скрипта telegram-web-app.js: через него доступны платформа (platform), версия клиента и параметры темы оформления.

Опираться только на User-Agent внутри Mini App не стоит по двум причинам. Во-первых, строка может совпадать с обычным мобильным браузером, и вы не отличите открытие внутри Telegram от открытия напрямую. Во-вторых, надёжный признак того, что приложение запущено именно в Telegram, — наличие объекта window.Telegram.WebApp и валидные init-данные, которые проверяются на сервере по подписи.

if (window.Telegram && window.Telegram.WebApp) {

const platform = window.Telegram.WebApp.platform;

// platform: 'android', 'ios', 'web', 'tdesktop' и т.д.

}

Типичные ошибки и ограничения

Самая частая ошибка — попытка заблокировать или перенаправить пользователей Telegram по точному совпадению строки агента. После очередного обновления приложения строка меняется, правило перестаёт работать, и легитимные посетители получают ошибку или неправильную версию страницы.

Вторая ошибка — доверие к User-Agent как к доказательству. Заголовок подделывается одной строкой в curl:

curl -A "Mozilla/5.0 (Linux; Android 13; wv) ..." https://example.com

⚠️ Внимание: никогда не используйте User-Agent как единственный критерий для доступа к закрытым разделам, отключения защиты от ботов или выдачи персональных данных. Это декларативный заголовок, который клиент может установить произвольно.

Третья проблема — аналитика. Если вы разделяете трафик по User-Agent без UTM-меток, часть переходов из Telegram «растворится» в общем мобильном трафике, потому что WebView выглядит почти как обычный браузер. Связка «метки в ссылках + анализ заголовков» даёт заметно более точную картину.

⚠️ Внимание: состав User-Agent и набор заголовков могут меняться с обновлениями Telegram и операционных систем. Перед внедрением правил фильтрации проверяйте актуальные строки на реальных устройствах, а не копируйте примеры из статей как готовые регулярные выражения.

Как быстро посмотреть свой User-Agent из Telegram

Отправьте себе в «Избранное» ссылку на страницу, отображающую HTTP-заголовки (свой скрипт или публичный echo-сервис), и откройте её внутри Telegram. Сравните строку с той, что покажет обычный браузер на том же устройстве, — разница наглядно покажет маркеры WebView.

Когда User-Agent вообще не поможет

Есть сценарии, где анализ агента бесполезен, и это нужно признать честно. Если ссылка из Telegram открывается во внешнем браузере (настройка многих пользователей и поведение по умолчанию на Desktop), мессенджер в заголовках не оставляет следов. Если трафик проходит через VPN, прокси или приватные релеи, часть заголовков может быть изменена или обрезана.

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

Часто задаваемые вопросы

Какой User-Agent у Telegram на Android?

Это строка Chromium WebView с характерным маркером wv и конструкцией Version/4.0 ... Chrome/.... Точный вид зависит от версии Android и компонента WebView, поэтому единой фиксированной строки нет.

Можно ли определить, что посетитель пришёл именно из Telegram?

Только с оговорками. Маркеры WebView и заголовок X-Requested-With на Android дают косвенные признаки, но надёжнее всего — UTM-метки в опубликованных ссылках. Если ссылка открылась во внешнем браузере, следов Telegram в заголовках не будет.

Какой User-Agent у Telegram-бота?

Такой, какой задаёт HTTP-клиент вашей библиотеки: например, python-telegram-bot, aiohttp или curl. Telegram не навязывает свою строку для исходящих запросов бота, и во многих библиотеках агент можно переопределить.

Безопасно ли фильтровать вебхуки Telegram по User-Agent?

Нет. Заголовок легко подделать. Для проверки подлинности вебхука используйте секретный токен в заголовке X-Telegram-Bot-Api-Secret-Token и, при необходимости, ограничение по IP-диапазонам Telegram.

Как в Mini App узнать платформу пользователя?

Через объект window.Telegram.WebApp: свойство platform возвращает значения вроде android, ios, tdesktop или web. Это надёжнее, чем разбор User-Agent, который внутри WebView почти не отличается от обычного браузера.