Please enable JavaScript.
Coggle requires JavaScript to display documents.
TricksBot - Complete User Flows & Use Cases - Coggle Diagram
TricksBot - Complete User Flows & Use Cases
РОЛИ В СИСТЕМЕ
ADMIN (Администратор)
Полный доступ ко всей системе
Управление пользователями, регионами, поставщиками
Обработка выплат
Настройки системы
MANAGER (Менеджер)
Использование номеров для регистраций
Получение SMS кодов
Просмотр статистики
PROVIDER (Поставщик)
Добавление своих номеров
Отправка SMS кодов
Получение выплат
Управление сессиями
ADMIN - Административная панель
START → Главное меню
Статистика (admin_stats_menu)
stats → Системная статистика
Пользователи (всего/активных)
Поставщики (всего/активных)
Регионы (всего)
Номера (всего/доступно)
Использования (всего/активных)
view_analytics → Аналитика
viewAnalytics conversation
Выбор периода
Фильтры по регионам
Графики и метрики
Экспорт данных
Управление (admin_management_menu)
users → Управление пользователями
Список пользователей (пагинация)
admin_users_page → Переход по страницам
admin_user → Детали пользователя
ID, Telegram, роль, статус
Регион, тимлид
Дата создания
admin_change_role → Изменить роль
admin_set_role:ADMIN
admin_set_role:TEAM_LEAD
admin_set_role:MANAGER
admin_set_role:PROVIDER
✅ Роль изменена → Обновление
admin_assign_dept → Назначить в регион
Выбор региона
admin_set_dept → Назначение
✅ Назначен → Обновление
admin_block_user → Заблокировать
✅ Заблокирован
admin_unblock_user → Разблокировать
✅ Разблокирован
delete_entity → Удалить
deleteEntity conversation
Подтверждение
✅ Удалено
departments → Управление регионами
Список регионов
admin_dept → Детали региона
admin_edit_dept → Редактировать
admin_assign_regional → Назначить регионала
delete_entity:dept → Удалить
admin_create_dept → Создать регион
createDepartment conversation
Ввод названия
Выбор регионала
✅ Создано
providers → Управление поставщиками
Список поставщиков
admin_provider → Детали поставщика
Баланс, рейтинг
Количество номеров
Статистика использований
admin_edit_provider → Редактировать
admin_block_provider → Заблокировать
admin_view_provider_phones → Номера
admin_create_provider → Создать
createProvider conversation
Выбор пользователя
Установка тарифов
✅ Создано
services → Управление сервисами
Список сервисов
admin_service → Детали сервиса
Название, иконка, категория
Порядок сортировки
Активность
admin_edit_service → Редактировать
admin_toggle_service → Вкл/Выкл
delete_entity:service → Удалить
admin_create_service → Создать
createService conversation
Название
Категория
Иконка
Порядок
✅ Создано
Финансы (admin_finance_menu)
payments → Управление выплатами
Список заявок
Фильтры: PENDING, CONFIRMED, REJECTED
admin_payment → Детали выплаты
Поставщик, сумма, метод
Реквизиты
Дата создания
admin_confirm_payment → Подтвердить
✅ Выплата одобрена
Списание баланса
Уведомление поставщику
admin_reject_payment → Отклонить
Причина отклонения
❌ Выплата отклонена
Уведомление поставщику
Настройки (admin_settings_menu)
editSettings conversation
30+ параметров системы
Таймауты
Лимиты
Уведомления
Hot-reload поддержка
manageCountries conversation
Управление странами
Работа (admin_work_menu)
get_number → Взять номер
MANAGER - Панель менеджера
START → Главное меню
Взять номер (get_number)
getNumber conversation START
VALIDATION 1: Роль != PROVIDER
❌ Provider → Доступ запрещен
✅ OK → Continue
VALIDATION 2: Лимит активных номеров
Лимиты по ролям
MANAGER: 1
TEAM_LEAD: 2
HEAD: 3
ADMIN: unlimited
Превышен → ❌ Exit
OK → Continue
STEP 1: Выбор сервиса
Список активных сервисов
InlineKeyboard (2 в ряд)
Mamba (service:1)
Teamo (service:2)
VK (service:3)
❌ Отмена
Ожидание (timeout: 3 мин)
Timeout → ⏱️ Exit
Cancel → ❌ Exit
Selected → Continue
STEP 2: Выбор страны
Список поддерживаемых стран
InlineKeyboard
🇷🇺 Россия (+7)
🇺🇦 Украина (+380)
❌ Отмена
Ожидание (timeout: 3 мин)
Timeout → ⏱️ Exit
Selected → Continue
STEP 3: Поиск номера
usageService.assignNumber()
Поиск доступного номера
WHERE status = AVAILABLE
AND country = selected
AND NOT banned for service
Найден → ✅ SUCCESS
CREATE Usage
status: ACTIVE
userId
phoneNumberId
serviceId
takenAt: now()
Не найден → ❌ Exit
STEP 4: Выдача номера
Расшифровка номера
PhoneCard
Сервис
Номер (полный)
Страна
Оператор
Статус: Активен
InlineKeyboard
👍 request_sms (Я отправил SMS)
✅ complete_usage (Завершить)
🔄 change_service (Сменить сервис)
🚫 ban_and_replace (Забанен)
😢 ban_number (Не работает)
❌ cancel_usage (Отменить)
Мои номера (my_numbers)
Получить активные Usage
WHERE userId = current
AND status IN (ACTIVE, WAITING_SMS)
Пусто → 📭 Нет номеров
Есть → Список
Header: Активные (X/LIMIT)
Для каждого usage
Сервис | Номер | Статус | Время
InlineKeyboard
view_usage → Детали
🔄 Обновить
⬅️ Главное меню
view_usage → Детали использования
Получить Usage с деталями
Показать
Сервис, номер (полный)
Страна, оператор
Статус
Время использования
SMS код (если есть)
InlineKeyboard (по статусу)
Если ACTIVE && !smsCode
📨 request_sms
Если WAITING_SMS
🔄 request_sms (повторно)
Если smsCode получен
✅ complete_usage
Всегда доступны
🚫 ban_number
❌ cancel_usage
⬅️ Назад
Запрос SMS (request_sms)
VALIDATION 1: Лимит запросов
smsRequestCount >= MAX (3)
❌ Превышен лимит
Предложить: взять новый / отменить
OK → Continue
VALIDATION 2: Cooldown (30 сек)
< 30 сек → ⏳ Подождите
= 30 сек → OK
usageService.requestSmsCode()
UPDATE Usage
status = WAITING_SMS
smsRequestedAt = now()
smsRequestCount++
UPDATE PhoneNumber
status = WAITING_SMS
Уведомить поставщика
notificationService
Если online → Уведомление
Если offline → Fallback
Ответ менеджеру
⏳ Ожидание SMS кода
Что происходит (1-4 шаги)
⏱️ Обычно: 10-60 сек
Завершение (complete_usage)
usageService.returnNumber()
UPDATE Usage
status = COMPLETED
returnedAt = now()
duration = calc
UPDATE Provider
balance += rate
totalEarned += rate
UPDATE PhoneNumber
status = COOLDOWN
lastUsedAt = now()
timesUsed++
Ответ
✅ Успешно возвращен
Детали: номер, сервис, время
История событий
Бан номера (ban_number)
Выбор действия
📸 Со скриншотом
banNumber conversation
Запрос скриншота
Ожидание (timeout: 5 мин)
Сохранение
usageService.banNumber()
⏩ Без скриншота
usageService.banNumber()
UPDATE Usage: BANNED
UPDATE PhoneNumber: BLOCKED
ADD to bannedServices
Уведомить поставщика
Ответ: Отмечен забаненным
ban_and_replace → Бан + замена
Забанить текущий
Найти новый (тот же provider)
Найден → ✅ Выдать новый
Не найден → ❌ Взять вручную
Смена сервиса (change_service)
Список активных сервисов
InlineKeyboard (2 в ряд)
switch_to_service
UPDATE Usage: serviceId
✅ Сервис изменен
Статистика (stats)
getUserStats()
total, completed, cancelled, banned
Показать
Имя, роль
Использование номеров
Эффективность
История (viewHistory conversation)
Фильтры
По периоду
По статусу
По сервису
Пагинация (10 записей)
Детали использования
Рейтинги (viewRatings conversation)
Личный рейтинг
Рейтинг команды (если TEAM_LEAD)
Топ сотрудников
Помощь (help)
Справочная информация
PROVIDER - Панель поставщика
START → Главное меню (Persistent Keyboard)
🏠 Главное меню → Dashboard
Получить данные поставщика
Provider (balance, rating)
Количество номеров
Pending SMS requests
Показать Dashboard
Статус (Онлайн/Оффлайн)
Номеров
Баланс
SMS запросы
🔄 Сменить статус
currentStatus = user.isOnline
UPDATE: isOnline = !current
Если ONLINE
🟢 Онлайн
Будете получать уведомления
Если OFFLINE
🔴 Оффлайн
Не будете получать уведомления
Номера остаются доступными
📨 Запросы SMS
Получить активные SMS запросы
WHERE providerId = current
AND status = WAITING_SMS
ORDER BY smsRequestedAt ASC
Пусто → ✅ Нет запросов
Есть → Список запросов
Для каждого
Номер
Сервис
ID запроса
Время ожидания
InlineKeyboard
📨 send_sms_code (для каждого)
🔄 Обновить
⬅️ Главное меню
send_sms_code → Отправка кода
sendSmsCode conversation START
SECURITY 1: Ownership
WHERE id AND provider.userId
Не найдено → ❌ Доступ запрещен
VALIDATION 2: Status = WAITING_SMS
!= WAITING_SMS → ❌ Не требуется
SECURITY 3: Rate limiting (10/мин)
10 → ⚠️ Много попыток
STEP 1: Детали запроса
Номер, сервис, сотрудник
Время ожидания
Отправьте SMS код (4-6 цифр)
❌ Отмена
STEP 2: Ожидание кода (5 мин)
Timeout → ⏱️ Exit
Cancel → ❌ Exit
Получен → Validate
STEP 3: Валидация
Regex: ^\d{4,6}$
Не совпадает → ❌ Retry
Совпадает → OK
Маскировка: 12••••
Подтверждение
✅ Да → Continue
❌ Нет → Retry
STEP 4: Отправка
UPDATE Usage
smsCode = code
smsReceivedAt = now()
status = ACTIVE
UPDATE PhoneNumber
status = IN_USE
UPDATE Provider
balance += smsRewardRate
Метрики
statisticsCollector
emaPerformanceTracker
Уведомить сотрудника
🔐 SMS код получен
Сервис, номер, код
Ответ поставщику
✅ Код отправлен
💰 +10₽ к балансу
➕ Добавить номер
addPhones conversation START
VALIDATION 1: Роль = PROVIDER
!= PROVIDER → ❌ Exit
VALIDATION 2: Активная сессия
Нет → ❌ Станьте онлайн
STEP 1: Запрос номеров
Отправьте номера (до 5)
Формат: +7..., один на строку
❌ Отмена
STEP 2: Ожидание (2 мин)
Timeout → ⏱️ Exit
Cancel → ❌ Exit
Получен → Parse
STEP 3: Парсинг и валидация
Split by \n
Для каждого
Trim
Regex: ^+\d{10,15}$
Не совпадает → ⚠️ Пропустить
Совпадает → OK
Определить страну
Проверка дубликата
Шифрование
Нет валидных → ❌ Exit
STEP 4: Добавление в БД
Для каждого валидного
INSERT PhoneNumber
providerId
phoneNumber (encrypted)
country
operator
status = AVAILABLE
sessionId
Результат
✅ Успешно: X
⚠️ Пропущено: Y
Список добавленных
📱 Мои номера
Получить номера
WHERE providerId = current
AND session.isActive = true
AND status != DELETED
ORDER BY addedAt DESC
Пусто → 📭 Нет номеров
Есть → Показать
Группировка по статусам
AVAILABLE
IN_USE
WAITING_SMS
COOLDOWN
BLOCKED
Сводка
Всего
Доступно
Используется
Ожидает SMS
Последние 10 номеров
Статус | Страна | Использований
InlineKeyboard
➕ Добавить
🔄 Обновить
🔙 Назад
💰 Баланс
balance callback
Получить данные
Provider (balance, totalEarned)
Pending payments (count, sum)
Показать
Баланс
Всего заработано
Заявки на вывод (в обработке)
Минимум: 100₽
✅ Можете создать заявку
Button: 💸 Вывести средства
requestWithdrawal conversation
Ввод суммы
Метод (card/crypto/bank)
Реквизиты
Подтверждение
✅ Заявка → PENDING
Admin approve → CONFIRMED
Списание баланса
Уведомление
Admin reject → REJECTED
Уведомление + причина
📋 История
viewHistory conversation (role: PROVIDER)
История использований своих номеров
📊 Статистика
stats (role: PROVIDER)
Получить статистику
Rating, phones count
Usage counts
Today's usages
Показать
Рейтинг
Мои номера (всего/активных)
Использования (всего/завершено/забанено)
⚙️ Настройки
Меню настроек
🎯 Выбрать сервисы (в разработке)
🔔 Уведомления (в разработке)
💰 Реквизиты
SHARED FLOWS
История (viewHistory)
Роль-зависимый просмотр
MANAGER → Свои использования
PROVIDER → Использования своих номеров
ADMIN → Вся система
Фильтры
Период
Статус
Сервис
Пагинация (10 записей)
Рейтинги (viewRatings)
MANAGER
Личный рейтинг
Топ сотрудников
TEAM_LEAD
Рейтинг команды
Топ команд
PROVIDER
Личный рейтинг
Топ поставщиков
ADMIN
Все рейтинги
STATE MACHINES
PhoneNumber Status
AVAILABLE (доступен)
get_number → IN_USE
IN_USE (используется)
request_sms → WAITING_SMS
WAITING_SMS (ждет SMS)
send_sms_code → IN_USE + code
IN_USE + code
complete_usage → COOLDOWN
COOLDOWN (отдыхает)
timeout → AVAILABLE
BLOCKED (заблокирован)
ban_number
DELETED (удален)
Usage Status
ACTIVE (активен)
request_sms → WAITING_SMS
complete_usage → COMPLETED
cancel_usage → CANCELLED
ban_number → BANNED
WAITING_SMS (ждет SMS)
send_sms_code → ACTIVE + code
wrong_code → WAITING_SMS (retry)
ACTIVE + code
complete_usage → COMPLETED
COMPLETED (завершено)
Final state
CANCELLED (отменено)
Final state
BANNED (забанен)
Final state
NOTIFICATIONS
Manager → Provider (SMS Request)
Trigger: request_sms
notificationService.notifyProviderSmsRequest()
Если online
📨 Новый запрос SMS
Номер, сервис, ID
Button: Отправить код
Если offline
Fallback to manager chat
Provider → Manager (SMS Code)
Trigger: send_sms_code
notificationService.notifyUserSmsReceived()
🔐 SMS код получен
Сервис, номер, код
Admin → Provider (Payment)
Trigger: admin payment action
CONFIRMED
✅ Выплата одобрена
Сумма, метод
REJECTED
❌ Выплата отклонена
Причина
KEY METRICS
System Performance
SMS Response Time (avg, EMA)
Number Assignment Time
Completion Rate
Provider Response Rate
Business Metrics
Total Revenue
Pending Withdrawals
Average earning per usage
Total usages
Active usages
Completion rate %
Ban rate %
Provider Metrics
Total providers
Active providers (online)
Average rating
Total phones available
SECURITY
Phone Encryption
Add → encryptPhone()
Storage → AES-256-GCM
Display → decryptPhone() → masked/full
Rate Limiting
Provider SMS: Max 10/min
Manager SMS: Max 3/usage + 30s cooldown
Access Control
requireRole (callback handlers)
Role checks (conversations)
WHERE clauses (DB queries)
CONFIGURATION
Settings System (30+ parameters)
Timeouts
MAX_USAGE_DURATION
SMS_REQUEST_TIMEOUT
COOLDOWN_DURATION
Limits
MAX_SMS_RETRIES
MAX_PHONES_PER_ADD
MIN_WITHDRAWAL_AMOUNT
Rates
USAGE_RATE
SMS_REWARD_RATE
Features
ENABLE_AUTO_COOLDOWN
ENABLE_NOTIFICATIONS
ENABLE_STATISTICS
Hot-reload support
Supported Countries
Add country
Name, Code, Flag, Order
Edit, Activate, Deactivate, Delete
CALLBACK REFERENCE
Common
main_menu
help
noop
stats
Admin
users, admin_user, admin_change_role, admin_set_role
admin_block_user, admin_unblock_user
admin_assign_dept, admin_set_dept
departments, services, providers
payments, admin_confirm_payment, admin_reject_payment
Manager
get_number, my_numbers, view_usage
request_sms, complete_usage, cancel_usage
ban_number, ban_and_replace
change_service, switch_to_service
Provider
sms_requests, send_sms_code
add_phones, my_phones
balance, request_withdrawal
QUICK REFERENCE
Manager Actions
📱 get_number
📋 my_numbers
📨 request_sms
✅ complete_usage
Provider Actions
➕ add_phones
📨 send_sms_code
💰 balance
🔄 toggle status
Admin Actions
👥 users
💸 payments
⚙️ editSettings
📊 viewAnalytics