200 lines
7.6 KiB
Markdown
200 lines
7.6 KiB
Markdown
# 📊 Система учета пользователей SalvageDB Bot
|
||
|
||
## 🎯 Обзор
|
||
|
||
Данная система реализует полный учет пользователей Telegram бота в соответствии с требованиями KYC (Know Your Customer) для сервисов, принимающих платежи.
|
||
|
||
## 📝 Что отслеживается
|
||
|
||
### Данные пользователя Telegram:
|
||
- **ID пользователя** (уникальный 64-bit идентификатор)
|
||
- **Имя и фамилия** пользователя
|
||
- **Username** (если есть)
|
||
- **Код языка** (IETF language tag)
|
||
- **Статус Premium** в Telegram
|
||
- **Флаг бота** (для различения ботов и пользователей)
|
||
|
||
### Данные взаимодействий:
|
||
- **Дата первого взаимодействия**
|
||
- **Дата последнего взаимодействия**
|
||
- **Количество взаимодействий**
|
||
- **Источник регистрации** (какая команда/кнопка)
|
||
|
||
### Финансовые данные:
|
||
- **Общая сумма платежей** в Telegram Stars
|
||
- **Количество успешных платежей**
|
||
- **История транзакций**
|
||
|
||
## 🗄️ Структура базы данных
|
||
|
||
### Таблица `bot_users`
|
||
|
||
```sql
|
||
CREATE TABLE bot_users (
|
||
id NUMBER(19) PRIMARY KEY, -- Telegram user ID
|
||
first_name VARCHAR2(256) NOT NULL, -- Имя пользователя
|
||
last_name VARCHAR2(256), -- Фамилия (опционально)
|
||
username VARCHAR2(128), -- Username (опционально)
|
||
language_code VARCHAR2(10), -- Код языка
|
||
is_bot NUMBER(1) DEFAULT 0 NOT NULL, -- Флаг бота
|
||
is_premium NUMBER(1) DEFAULT 0, -- Telegram Premium
|
||
added_to_attachment_menu NUMBER(1) DEFAULT 0, -- Добавлен в меню вложений
|
||
first_interaction_date DATE DEFAULT SYSDATE, -- Первое взаимодействие
|
||
last_interaction_date DATE DEFAULT SYSDATE, -- Последнее взаимодействие
|
||
interaction_count NUMBER(10) DEFAULT 1, -- Количество взаимодействий
|
||
is_active NUMBER(1) DEFAULT 1, -- Активен ли пользователь
|
||
is_blocked NUMBER(1) DEFAULT 0, -- Заблокирован ли
|
||
registration_source VARCHAR2(50) DEFAULT 'bot', -- Источник регистрации
|
||
total_payments NUMBER(10,2) DEFAULT 0, -- Сумма платежей
|
||
successful_payments_count NUMBER(8) DEFAULT 0, -- Количество платежей
|
||
created_at DATE DEFAULT SYSDATE, -- Дата создания записи
|
||
updated_at DATE DEFAULT SYSDATE -- Дата обновления
|
||
);
|
||
```
|
||
|
||
## 🚀 Развертывание
|
||
|
||
### 1. Создание таблицы в Oracle
|
||
|
||
```bash
|
||
# Выполните SQL скрипт для создания таблицы
|
||
sqlplus username/password@database @create_users_table.sql
|
||
```
|
||
|
||
### 2. Настройка переменных окружения
|
||
|
||
Добавьте в ваш `.env` файл:
|
||
|
||
```env
|
||
# Настройки базы данных (уже должны быть)
|
||
db_user=your_oracle_user
|
||
db_password=your_oracle_password
|
||
db_dsn=your_oracle_dsn
|
||
|
||
# ID администратора для команды /admin_stats
|
||
ADMIN_USER_ID=123456789
|
||
```
|
||
|
||
### 3. Обновление кода
|
||
|
||
Код уже интегрирован в основные файлы:
|
||
- `main.py` - обработчики с сохранением данных пользователей
|
||
- `db.py` - методы для работы с пользователями
|
||
- `create_users_table.sql` - SQL скрипт для создания таблицы
|
||
|
||
## 📈 Использование
|
||
|
||
### Автоматическое отслеживание
|
||
|
||
Система автоматически сохраняет данные пользователя при:
|
||
- Использовании команды `/start`
|
||
- Нажатии любых кнопок
|
||
- Обработке VIN
|
||
- Совершении платежей
|
||
|
||
### Команды администратора
|
||
|
||
```
|
||
/admin_stats - Просмотр статистики пользователей
|
||
```
|
||
|
||
Пример вывода:
|
||
```
|
||
📊 Bot Users Statistics
|
||
|
||
👥 Users Overview:
|
||
• Total users: 1,234
|
||
• Premium users: 156
|
||
|
||
💰 Revenue:
|
||
• Total revenue: 567 ⭐️
|
||
• Total transactions: 445
|
||
|
||
📈 Activity:
|
||
• Active last 24h: 89
|
||
• Active last week: 234
|
||
```
|
||
|
||
## 🔧 API методы
|
||
|
||
### Сохранение пользователя
|
||
```python
|
||
await db.save_user(user: User, interaction_source: str = "bot") -> bool
|
||
```
|
||
|
||
### Обновление платежных данных
|
||
```python
|
||
await db.update_user_payment(user_id: int, payment_amount: float) -> bool
|
||
```
|
||
|
||
### Получение статистики пользователя
|
||
```python
|
||
await db.get_user_stats(user_id: int) -> Optional[dict]
|
||
```
|
||
|
||
### Общая статистика
|
||
```python
|
||
await db.get_users_summary() -> dict
|
||
```
|
||
|
||
## 🛡️ Безопасность и соответствие
|
||
|
||
### GDPR/Персональные данные:
|
||
- Сохраняются только данные, предоставляемые Telegram API
|
||
- Данные используются только для предоставления сервиса
|
||
- Пользователи могут быть помечены как неактивные
|
||
|
||
### Финансовая отчетность:
|
||
- Все платежи логируются с timestamp
|
||
- Связь платежей с пользователями для аудита
|
||
- Возможность генерации отчетов
|
||
|
||
### Мониторинг:
|
||
- Отслеживание активности пользователей
|
||
- Выявление подозрительной активности
|
||
- Статистика для бизнес-аналитики
|
||
|
||
## 📊 Полезные запросы
|
||
|
||
### Топ пользователей по платежам:
|
||
```sql
|
||
SELECT first_name, last_name, username, total_payments, successful_payments_count
|
||
FROM bot_users
|
||
WHERE total_payments > 0
|
||
ORDER BY total_payments DESC
|
||
FETCH FIRST 10 ROWS ONLY;
|
||
```
|
||
|
||
### Активные пользователи за месяц:
|
||
```sql
|
||
SELECT COUNT(*) as active_users
|
||
FROM bot_users
|
||
WHERE last_interaction_date >= SYSDATE - 30
|
||
AND is_active = 1;
|
||
```
|
||
|
||
### Конверсия в платящих пользователей:
|
||
```sql
|
||
SELECT
|
||
COUNT(*) as total_users,
|
||
COUNT(CASE WHEN successful_payments_count > 0 THEN 1 END) as paying_users,
|
||
ROUND(COUNT(CASE WHEN successful_payments_count > 0 THEN 1 END) * 100.0 / COUNT(*), 2) as conversion_rate
|
||
FROM bot_users
|
||
WHERE is_active = 1;
|
||
```
|
||
|
||
## 🔍 Мониторинг и алерты
|
||
|
||
Рекомендуется настроить мониторинг для:
|
||
- Необычно высокой активности от одного пользователя
|
||
- Большого количества возвратов платежей
|
||
- Резкого роста/падения количества новых пользователей
|
||
|
||
## 📞 Поддержка
|
||
|
||
При возникновении проблем проверьте:
|
||
1. Права доступа к таблице `bot_users`
|
||
2. Корректность переменных окружения
|
||
3. Логи приложения для ошибок базы данных
|
||
|
||
Все операции с базой данных логируются для отладки. |