Телеграм-бот для организации системы вопросов и ответов в корпоративной среде с поддержкой форумов, таймеров активности и статистики.
- Описание
- Возможности
- Требования
- Установка и запуск
- Настройка окружения
- Структура проекта
- Использование
- База данных
Бот-Вопросник — это корпоративное решение для автоматизации процесса обработки вопросов сотрудников. Бот создает форумные топики для каждого вопроса, отслеживает активность диалогов, предоставляет статистику и поддерживает систему ролей.
- 📝 Создание вопросов с автоматическим созданием топиков
- 🔗 Прикрепление ссылок на регламенты
- 🔄 Возврат закрытых вопросов в работу
- ⭐ Оценка качества помощи
- 📊 Просмотр личной статистики
- 💬 Взятие вопросов в работу
- ⏰ Автоматическое отслеживание бездействия
- 🎯 Оценка самостоятельности специалистов
- 🔓 Переоткрытие вопросов
- 🚀 Освобождение вопросов
- 📈 Выгрузка статистики в Excel
- 🎭 Смена ролей пользователей
- ⚙️ Управление настройками бота
- ⏲️ Таймеры бездействия с предупреждениями
- 🗑️ Автоматическое удаление старых вопросов
- 📱 Уведомления о премиум-эмодзи
- 🔄 Автоматическое закрытие неактивных диалогов
- Python 3.13+
- Docker и Docker Compose
- Microsoft SQL Server
- Microsoft ODBC Driver 18 for SQL Server
git clone <repository-url>
cd questioner-botСкопируйте файл примера и настройте его:
cp .env.dist .envОтредактируйте файл .env согласно инструкции по настройке.
# Сборка и запуск
docker-compose up --build
# Запуск в фоновом режиме
docker-compose up -d
# Просмотр логов
docker-compose logs -f botdocker-compose downСоздайте файл .env на основе .env.dist и заполните следующие параметры:
# Токен бота от @BotFather
BOT_TOKEN=123456:Your-TokEn_ExaMple
# Направление работы (НТП или НЦК)
DIVISION=НТП
# Использование Redis (пока не реализовано)
USE_REDIS=False# ID форума в Telegram для создания топиков
FORUM_ID=1234567890
# Запрашивать ссылку на регламент перед отправкой вопроса
ASK_CLEVER_LINK=True
# Автоматическое удаление старых вопросов
REMOVE_OLD_QUESTIONS=True
REMOVE_OLD_QUESTIONS_DAYS=60
# Система таймеров бездействия
ACTIVITY_STATUS=True
ACTIVITY_WARN_MINUTES=5 # Предупреждение о бездействии
ACTIVITY_CLOSE_MINUTES=10 # Автозакрытие при бездействии# Параметры подключения к SQL Server
DB_HOST=your-sql-server.com
DB_USER=your_username
DB_PASS=your_password
# Имя основной базы данных
DB_MAIN_NAME=STPMain# Настройки Redis для кеширования
REDIS_HOST=redis_cache
REDIS_PORT=6379
REDIS_DB=1
REDIS_PASSWORD=your_redis_passwordquestioner-bot/
├── bot.py # Точка входа приложения
├── docker-compose.yml # Конфигурация Docker Compose
├── Dockerfile # Образ Docker
├── pyproject.toml # Зависимости Python
├── uv.lock # Lockfile для uv
├── alembic.ini # Конфигурация миграций
├── .env.dist # Пример переменных окружения
├── infrastructure/ # Инфраструктурный слой
│ ├── database/ # Работа с базой данных
│ │ ├── models/ # Модели SQLAlchemy
│ │ │ ├── base.py
│ │ │ ├── user.py # Модель пользователя
│ │ │ └── question.py # Модель вопроса
│ │ ├── repo/ # Репозитории для работы с данными
│ │ │ ├── base.py
│ │ │ ├── users.py # Операции с пользователями
│ │ │ ├── questions.py # Операции с вопросами
│ │ │ └── requests.py # Объединение репозиториев
│ │ └── setup.py # Настройка подключения к БД
│ └── migrations/ # Миграции базы данных
└── tgbot/ # Телеграм-бот
├── config.py # Конфигурация приложения
├── handlers/ # Обработчики событий
│ ├── admin/ # Админские функции
│ │ ├── main.py # Основные админ-команды
│ │ └── stats_extract.py # Выгрузка статистики
│ ├── user/ # Пользовательские функции
│ │ ├── main.py # Основные команды
│ │ ├── active_question.py # Работа с активными вопросами
│ │ └── return_question.py # Возврат вопросов
│ └── group/ # Групповые функции
│ ├── main.py # Обработка топиков
│ └── cmds.py # Команды в топиках
├── keyboards/ # Inline клавиатуры
│ ├── admin/ # Админские клавиатуры
│ └── user/ # Пользовательские клавиатуры
├── filters/ # Фильтры для обработчиков
├── middlewares/ # Промежуточное ПО
├── services/ # Сервисы
│ ├── broadcaster.py # Рассылка сообщений
│ ├── logger.py # Настройка логирования
│ └── scheduler.py # Планировщик задач
└── misc/ # Вспомогательные модули
├── states.py # FSM состояния
├── dicts.py # Словари и константы
└── helpers.py # Вспомогательные функции
- Запуск бота:
/start - Создание вопроса: Нажать "🤔 Задать вопрос"
- Отправка текста: Написать вопрос одним сообщением
- Прикрепление регламента: Добавить ссылку на clever (если требуется)
- Ожидание ответа: Вопрос появится в форуме
- Общение: Переписка идет через бот
- Закрытие: Нажать "✅ Закрыть вопрос" или команда
/end - Оценка: Оценить качество помощи
- Взятие в работу: Написать любое сообщение в топике
- Общение: Переписка через топики транслируется специалисту
- Закрытие: Команда
/endили кнопка "✅ Закрыть вопрос" - Оценка: Оценить самостоятельность специалиста
- Освобождение: Команда
/releaseдля передачи другому старшему
- Админ-панель:
/start→ админские кнопки - Статистика: "📥 Выгрузка статистики" → выбор периода
- Смена роли: "👶🏻 Стать спецом" для тестирования
В боте используется две базы:
- question_repo - БД
QuestionerBot - main_repo - БД
STPMainилиSTPMainTemp
Команды:
- Генерация миграции:
alembic revision --autogenerate -m "Create tables" --sql - Применение миграций:
alembic upgrade head