Files
umbrix/BUG_REPORT_SYSTEM.md
Umbrix Developer 2058aba483
Some checks failed
CI / run (push) Has been cancelled
🐛 v1.7.8: Добавлена система багрепортов в Telegram
- Автоматический сбор диагностики (статус, пинг, протокол, логи)
- Кнопка 'Сообщить о проблеме' в настройках
- Анонимная отправка багрепортов в Telegram
- Telegram бот настроен и готов к работе
2026-01-22 07:07:04 +03:00

7.6 KiB
Raw Blame History

🐛 Система отправки багрепортов в техподдержку

📋 Обзор

Реализована полноценная система для сбора и отправки багрепортов в Telegram с автоматическим сбором диагностической информации.

Что реализовано

1. Автоматический сбор диагностики (BugReportService)

Система автоматически собирает:

  • Информация об устройстве (анонимно): OS, версия
  • Статус подключения: connected/disconnected/connecting
  • Ошибки подключения: если есть
  • Активный прокси: тип протокола, тег сервера
  • Пинг/задержка: в миллисекундах + оценка качества
  • Логи: последние 100 строк из core.log и app.log

2. UI для отправки багрепортов (BugReportDialog)

Диалоговое окно с:

  • Поле для описания проблемы пользователем
  • Чекбокс "Включить логи" (по умолчанию включён)
  • Информация о конфиденциальности
  • Кнопка "Отправить" с индикатором загрузки

3. Интеграция с Telegram

Использует существующий TelegramLogger:

  • Отправка как текст (если помещается в 4KB)
  • Или как файл (если логи большие)
  • Красиво форматированный отчёт с эмодзи

📍 Где находится

Код:

lib/features/bug_report/
├── data/
│   └── bug_report_service.dart      # Сервис сбора и отправки
└── widget/
    └── bug_report_dialog.dart       # UI диалога

Кнопки в UI:

  1. Настройки → Логи и отладка → "Сообщить о проблеме"
    • Всегда доступна
    • Основной способ отправки багрепорта

🔧 Как использовать

Для пользователя:

  1. Откройте Настройки
  2. Раздел "Логи и отладка"
  3. Нажмите "Сообщить о проблеме" 🐛
  4. Опишите проблему
  5. Нажмите "Отправить"

Для разработчика:

// Показать диалог программно
await BugReportDialog.show(context);

// Или получить сервис напрямую
final service = ref.read(bugReportServiceProvider);
final result = await service.sendBugReport(
  userDescription: 'Описание проблемы',
  includeLogs: true,
);

📊 Формат отчёта

Отчёт выглядит так:

🐛 БАГРЕПОРТ UMBRIX
═══════════════════════════════

📝 ОПИСАНИЕ ПРОБЛЕМЫ:
Не могу подключиться к серверу, таймаут

═══════════════════════════════
💻 УСТРОЙСТВО:
Android 12

🔌 СТАТУС ПОДКЛЮЧЕНИЯ:
DISCONNECTED
Ошибка: Connection timeout

🌐 ПРОКСИ:
Тип: vmess, Тег: server-1, Пинг: 450ms
Задержка: 450ms (🟠 Медленно)

🕐 ВРЕМЯ:
2026-01-22T15:30:00.000Z

═══════════════════════════════
📋 ЛОГИ (ПОСЛЕДНИЕ 20 СТРОК):

Core:
[INFO] Starting connection...
[ERROR] Connection failed: timeout
...

App:
[DEBUG] User clicked connect
[ERROR] Failed to establish connection
...

🔐 Безопасность и конфиденциальность

Мы НЕ собираем:

  • Личные данные
  • IP адреса
  • Конфигурацию серверов (URL, пароли)
  • Историю посещений

Мы собираем ТОЛЬКО:

  • Тип ОС (Android/iOS/Windows...)
  • Статус подключения
  • Задержку пинга
  • Технические логи (без личных данных)

🎯 Как это предотвращает негативные отзывы в Play Store

Проблема:

Пользователи оставляют плохие отзывы когда:

  • Не могут подключиться
  • Приложение "не работает"
  • Не понимают, что делать

Решение:

  1. Перехватываем недовольство — кнопка "Сообщить о проблеме" даёт альтернативу отзыву
  2. Собираем контекст — автоматически видим ЧТО именно не работает
  3. Быстро реагируем — получаем отчёт в Telegram → можем помочь
  4. Показываем заботу — пользователь видит, что есть поддержка

📱 Дополнительные места размещения (опционально)

Можно добавить кнопку в:

1. Экран ошибки подключения

// В connection_failure_screen.dart
FilledButton.icon(
  onPressed: () => BugReportDialog.show(context),
  icon: const Icon(FluentIcons.bug_20_regular),
  label: const Text('Сообщить о проблеме'),
)

2. Меню приложения (три точки)

// В app_bar_actions.dart
PopupMenuItem(
  child: const Text('Сообщить о проблеме'),
  onTap: () => BugReportDialog.show(context),
)

3. Диалог обновления (при ошибке)

// Если обновление провалилось
if (updateFailed) {
  TextButton(
    child: const Text('Сообщить о проблеме'),
    onPressed: () => BugReportDialog.show(context),
  )
}

🚀 Настройка Telegram

  1. Создайте бота через @BotFather
  2. Получите токен
  3. Создайте приватный канал/группу
  4. Получите Chat ID
  5. Настройте в lib/core/telegram_config.dart:
class TelegramConfig {
  static const String botToken = 'YOUR_BOT_TOKEN';
  static const String chatId = 'YOUR_CHAT_ID';
}

🧪 Тестирование

// Протестировать сбор диагностики
final service = ref.read(bugReportServiceProvider);
final diagnostics = await service.collectDiagnostics();
print(diagnostics.connectionStatus);
print(diagnostics.pingDelay);

// Протестировать отправку
final result = await service.sendBugReport(
  userDescription: 'Test report',
  includeLogs: true,
);
print(result.isSuccess);

📈 Метрики для отслеживания

  • Количество отправленных багрепортов
  • Среднее время ответа поддержки
  • Процент решённых проблем
  • Соотношение багрепортов к негативным отзывам

🎉 Результат

Вместо:

☆☆☆☆ "Не работает, не подключается" — в Play Store

Получаем:

🐛 Багрепорт в Telegram → быстрая помощь → довольный пользователь →


Готово к использованию! 🚀