Найти в Дзене
Программист - турист

«Method not found» в Telegram WebView: как я искал причину ошибки

Несколько дней гонялся за таинственным method not found: как я искал причину и почему виноват оказался Telegram. Пару дней подряд мне в Sentry прилетал лаконичный репорт: Error: method not found Без стека и без понятного источника. Проект — Vue + vue-router. В Chrome и мобильных браузерах всё стерильно. Значит, это точно мой косяк — решил я и ушёл дебажить. Проект на Vue + vue-router. В Chrome и мобильных браузерах — стерильно. Иногда в проде в Sentry прилетает лаконичное: Error: method not found Без стека, без явного источника. Моя первая мысль — где-то у меня дублируется вызов или пересекаются асинхронные цепочки, и какой-то метод прилетает в «не то состояние». Начал копать себя. Первым делом полез смотреть не падает ли флоу работы, к счастью никаких следов влияния на работу найдено не было. Можно было бы заигнорить ошибку, но учитывая формулировку "Method not found" и то, что за ней могут появиться реальные краши системы не давало мне покоя. Нужно больше метрик. Покрывал избыточно,
Оглавление

Несколько дней гонялся за таинственным method not found: как я искал причину и почему виноват оказался Telegram.

Пару дней подряд мне в Sentry прилетал лаконичный репорт:

Error: method not found

Без стека и без понятного источника. Проект — Vue + vue-router. В Chrome и мобильных браузерах всё стерильно. Значит, это точно мой косяк — решил я и ушёл дебажить.

Как всё началось: «это точно мой косяк».

Проект на Vue + vue-router. В Chrome и мобильных браузерах — стерильно. Иногда в проде в Sentry прилетает лаконичное:

Error: method not found

Без стека, без явного источника. Моя первая мысль — где-то у меня дублируется вызов или пересекаются асинхронные цепочки, и какой-то метод прилетает в «не то состояние». Начал копать себя.

Анализ повторов.

Первым делом полез смотреть не падает ли флоу работы, к счастью никаких следов влияния на работу найдено не было. Можно было бы заигнорить ошибку, но учитывая формулировку "Method not found" и то, что за ней могут появиться реальные краши системы не давало мне покоя.

Метрики/sentry.

Нужно больше метрик. Покрывал избыточно, чтобы шанс попасть был выше. В ход пошло всё, он ssr до подключения пакетов. Если ошибку на найдем, то хоть поймем в какой момент она стреляет.

Спойлер, метрики не дали ничего нового.

Разбор устройств.

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

Финиш.

Информация об устройствах дала подсказку куда копать. Спустя часы гуглёжки и допытывания нейросетей наткнулся на обсуждение vue-router, где было пользователь предположил, что проблема связана с meta telegram, а точней его отсутствием. Добавление пары строк решило проблему.

Уроки, которые я вынес

  1. Не влюбляйтесь в гипотезу «я всё сломал». Иногда проблема вне вашего кода.
  2. Тегируйте окружение: webview/браузер, платформа, UA — это дешёвый способ резко сузить круг поиска.
  3. Мета-данные — это не только про превью. Встроенные контейнеры реально завязаны на них.
  4. Sentry — это не просто «поймать ошибку». Правильные tags, breadcrumbs, fingerprint превращают шум в расследование.

Мини-чеклист для подобных кейсов

  • Добавьте базовые OG-теги, минимум:
    <meta property="og:site_name" content="..." />
    <meta property="og:title" content="..." />
    <meta property="og:description" content="..." />
  • В Sentry прокиньте:
    tags: container, ua, platform,
    breadcrumbs по роутам,
    release и environment.

В коде оберните потенциально внешние вызовы проверками окружения:

const isTg = /Telegram/i.test(navigator.userAgent);
if (isTg && window.Telegram?.WebApp?.ready) {
window.Telegram.WebApp.ready();
}