savagedb_bot/wiki/README_USER_TRACKING.md

200 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 📊 Система учета пользователей 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. Логи приложения для ошибок базы данных
Все операции с базой данных логируются для отладки.