Some checks failed
CI / run (push) Has been cancelled
- Автоматический сбор диагностики (статус, пинг, протокол, логи) - Кнопка 'Сообщить о проблеме' в настройках - Анонимная отправка багрепортов в Telegram - Telegram бот настроен и готов к работе
7.6 KiB
7.6 KiB
🐛 Система отправки багрепортов в техподдержку
📋 Обзор
Реализована полноценная система для сбора и отправки багрепортов в 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:
- Настройки → Логи и отладка → "Сообщить о проблеме"
- Всегда доступна
- Основной способ отправки багрепорта
🔧 Как использовать
Для пользователя:
- Откройте Настройки
- Раздел "Логи и отладка"
- Нажмите "Сообщить о проблеме" 🐛
- Опишите проблему
- Нажмите "Отправить"
Для разработчика:
// Показать диалог программно
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
Проблема:
Пользователи оставляют плохие отзывы когда:
- Не могут подключиться
- Приложение "не работает"
- Не понимают, что делать
Решение:
- Перехватываем недовольство — кнопка "Сообщить о проблеме" даёт альтернативу отзыву
- Собираем контекст — автоматически видим ЧТО именно не работает
- Быстро реагируем — получаем отчёт в Telegram → можем помочь
- Показываем заботу — пользователь видит, что есть поддержка
📱 Дополнительные места размещения (опционально)
Можно добавить кнопку в:
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
- Создайте бота через @BotFather
- Получите токен
- Создайте приватный канал/группу
- Получите Chat ID
- Настройте в
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 → быстрая помощь → довольный пользователь → ⭐⭐⭐⭐⭐
Готово к использованию! 🚀