Это телеграм бот, клиенты которого могут заказывать быструю помощь по поддержке, а база из заказчиков может забирать заказы
В боте есть 4 роли:
- Клиент - тот, кому нужна техническая помощь, у него есть тариф с ограничением заказов, доп функциями и временем реакции оплата вне бота ЗДЕСЬ_ГИФКА_ПРОЦЕССА
- Подрядчик - тот, кто оказывает тех помощь, ставка за заказ задается в админке, оплата подрядчикам вне бота ЗДЕСЬ_ГИФКА_ПРОЦЕССА
- Владелец - админ бота, может добавлять пользователей, а также просматривать отчеты ЗДЕСЬ_ГИФКА_ПРОЦЕССА
- Менеджер - предупреждается если заказ долго выполняется или не берется в работу, может получить список свободных заказчиков, чтобы связаться с ними и попросить взять заказ ЗДЕСЬ_ГИФКА_ПРОЦЕССА
Также есть web интерфейс администратора для настройки тарифов и управления системными параметрами
Должны быть установлены следующие программы
- Python 3.9+
В папке ./it_support/it_support
создать файл .env
со следующим содержанием:
DJANGO_SECRET_KEY=REPLACE_ME
TELEGRAM_ACCESS_TOKEN=SECRET_TOKEN
Создать виртуальное окружение в корневой папке проекта
python -m venv venv
Установить зависимости
pip install -r requirements.txt
Перейти в папку it_support
и выполнить миграции
cd ./it_support
python manage.py migrate
Выполнить команду из папки it_support
относительно корневой папки проекта
Для запуска панели администратора
python manage.py runserver
Для запуска бота выполнить команду:
python manage.py start_bot
Проект скачиваем в директорию /opt
.
Устанавливаем все необходимые зависимости. (см. пункт Как установить
)
Также после сделанной миграции вам неободимо подтянуть всю статику командой:
python manage.py collectstatic
Параметры запуска проекта через systemctl смотрите ниже:
- Файл для запуска самой Django:
[Unit]
Description=Django for Telegram bot
[Service]
WorkingDirectory=/opt/ITSupport/it_support
ExecStart=/opt/ITSupport/venv/bin/gunicorn -w 3 -b 127.0.0.1:8100 it_support.wsgi:application
Restart=always
[Install]
WantedBy=multi-user.target
- Файл для запуска бота:
[Unit]
Description=Telegram bot on Django
Requires=django_bot.service
[Service]
WorkingDirectory=/opt/ITSupport/it_support
ExecStart=/opt/ITSupport/venv/bin/python3 manage.py start_bot
Restart=always
[Install]
WantedBy=multi-user.target
Параметры Nginx:
server {
listen 11.111.111.111:80; # Вместо единиц укажите ip вашего сервера
location / {
include '/etc/nginx/proxy_params';
proxy_pass http://127.0.0.1:8100/;
}
location /static/ {
alias /opt/ITSupport/it_support/staticfiles/;
}
}
Уже после данных настроек можно всё активировать и пользоваться админкой на удаленном сервере.
Системные параметры управляют поведением бота, внести их и изменить можно в админ модели по адресу /admin/support_app/systemsettings/
ASSIGNED_CONTRACTORS_TIME_LIMIT
(default=20) - Процент (от 1 до 100 целое число) времени, которое должно пройти от взятия создания заказа до планового времени реакции на тарифе чтобы начать информировать остальных подрядчиков о новом заказе, а не только закрепленныхINFORM_MANAGER_IN_WORK_PROJECT_LIMIT
(default=95) - Процент (от 1 до 100 целое число) времени, которое должно пройти от взятия создания заказа до планового времени реакции на тарифе чтобы начать информировать остальных подрядчиков о новом заказе, а не только закрепленныхINFORM_MANAGER_CREATED_PROJECT_LIMIT
(default=95) - Процент (от 1 до 100 целое число) времени, которое должно пройти от создания заказа до времени реакции на тарифе, чтобы начать информировать менеджера о том, что созданный заказ долго не берутBILLING_DAY
(default=1) - Дата ежемесячного биллинга, должна быть от 1 до 28 включительно (больше могут быть ошибки). Т.е. биллинг начинается с BILLING_DAY каждого месяца по BILLING_DAY следующегоORDER_RATE
(default=500) - ставка за выполнения заказа в рублях
- Разобраться со всеми TODO в коде
- Шифрование и дешифрование доступов к сайтам клиентов
- Сохранение нужных данных в бота до старта (примеры заявок и т.д.)
- Оптимизация и сокращение некоторых запросов
- Работа с эстимейтами при поиске проектов, которые долго берутся в работу, вместо фиксированной цифры
- Переехать на ConversationalHandler, что бы логику похожих кнопок меньше описывать в других состояниях
- Покрыть код тестами
- Профилировать и оптимизировать количество совершаемых запросов
- Логирование
- Мониторинг
- Переезд на postgres
- Упаковка в контейнеры
- Добавить возможность общаться подрядчику и клиенту не только текстом, а также документами, фото и голосовыми
- Добавить возможность подрядчику работать с несколькими заказами
- Добавить возможность клиенту оставлять несколько заказов
- Добавить возможность управления тарифами владельцу через бота
- Добавить возможность изменения тарифа клиента владельцу через бота
- Интеграция оплаты (сама оплата, история цен тарифов, фиксирование стоимостей за период, баланс, задания по биллингу и т.д. и т.д.)
- Удаление некоторых сообщений ботом при общении (например старых меню)
- Сохранение переписки между клиентами и подрядчиками
Код написан в учебных целях — это командный проект в курсе по Python и веб-разработке на сайте Devman.