Telegram-бот для управления отпусками и выходными днями

Telegram-бот для управления отпусками и выходными днями Скрипты и боты

Эта статья — полноценное руководство по развёртыванию нашего Telegram-бота “LL weekend bot” на VPS/выделенном сервере. Ниже — что умеет бот, какие задачи закрывает в команде, пошаговая установка под Ubuntu/Debian, автозапуск через systemd, обновления без простоя, бэкапы и типичные ошибки. В конце вы сможете скачать архив с ботом и развернуть его за 10–15 минут.

Кому нужен бот для управления отпусками?

Команды любого размера постоянно сталкиваются с рутиной: заявки на отпуск, согласование, кто когда отсутствует, ограничения по пересечениям, лимиты по дням, CSV-выгрузки для бухгалтерии и т. д. Бот автоматизирует всё это прямо в Telegram, без внешних платных сервисов и лишних интеграций.

Ключевые выгоды:

  • Без абонплат и внешних API: локальная SQLite-БД, всё хранится на вашем сервере.
  • Прозрачность: статусы заявок, история, напоминания, выгрузки.
  • Ускорение процессов: админы утверждают/отклоняют в один клик, сотрудники подают заявки за секунды.
  • Изоляция по командам: каждый workspace — отдельная команда с собственными типами отпусков, политиками и лимитами.
  • Лёгкая поддержка: Python + python-telegram-bot, без сложных брокеров и монструозных стэков.

Функционал бота: краткий обзор

Роли и команды

  • Роли: админские (CEO, OWNER, TIMLID, TECH) и пользовательские (BAER, DESIGNER, FARMER, MANAGER, BUHGALTER).
  • Привязка пользователей к командам, полная изоляция данных по team_id.

Заявки на отпуска

  • Быстрые диапазоны (например, 7/14 дней от ближайшего понедельника) или ручной выбор дат через встроенный календарь.
  • Комментарий сотрудника к заявке (опционально).
  • Проверки: запрещённые даты, пересечения с учётом политики, лимит дней за раз и лимит за год.
  • Статусы: На рассмотрении → Подтверждена/Отклонена.

Админка

  • Добавление/удаление сотрудников, назначение ролей.
  • Управление типами отпусков (название, описание, лимит дней/год).
  • Настройка политики пересечений: разрешить всем / запретить всем / запретить одинаковым ролям.
  • Запреты дат (дни/диапазоны) с примечаниями, список актуальных запретов.
  • Лимиты: дней в год и за один отпуск.
  • Список сотрудников и остатки по годовым лимитам.
  • Заявки на рассмотрении: утверждение/отклонение в один клик + комментарий.
  • Экспорт CSV за год — для бухгалтерии/аналитики.
  • Лёгкая анализ-сводка по месяцам и ролям.

Напоминания

  • Автоматические напоминания сотрудникам за 3 дня и за 1 день до начала отпуска.

Требования к серверу

  • ОС: Ubuntu 22.04/24.04 LTS (подойдёт любой Debian/Ubuntu).
  • Ресурсы: 1 vCPU, 512–1024 МБ RAM, 5+ ГБ диска.
  • ПО: Python 3.10+ (желательно 3.11/3.12), systemd.
  • Доступ: SSH и открытый исходящий HTTPS (бот общается с Telegram API).
  • Сервер можно купить со скидкой в 60% для моих читателей по ссылке: adminvps (промокод BoostClicks)

Что внутри архива

В корне проекта будут файлы:

  • telegram_vacation_bot.py — основной код бота.
  • requirements.txt — зависимости Python.
  • config.py — тонкие настройки (если нужны).
  • .env — переменные окружения (в том числе TELEGRAM_TOKEN).

Перед запуском отредактируйте .env и вставьте ваш токен Telegram Bot.

Так же замените токен в файле telegram_vacation_bot.py и в файле config.py

Пример .env:

TELEGRAM_TOKEN=1234567890:ABCDEF-ваш-настоящий-токен
VACATION_BOT_DB=/home/bot/app/vacation_bot.db

Если параметр VACATION_BOT_DB не указать, бот создаст БД vacation_bot.db в текущей папке.


Установка бота: пошагово

1) Подготовить сервер и пользователя

# Обновления
sudo apt update && sudo apt -y upgrade

# Установить Python и pip
sudo apt -y install python3 python3-venv python3-pip

# Создать системного пользователя (без shell) или обычного:
sudo useradd -m -d /home/bot -s /bin/bash bot
sudo passwd bot  # задайте пароль или используйте SSH-ключи

# Дать права на каталог приложения
sudo mkdir -p /home/bot/app
sudo chown -R bot:bot /home/bot

2) Залить архив и развернуть

С локального ПК (Windows PowerShell):

scp .\telegram_vacation_bot.zip bot@IP_СЕРВЕРА:/home/bot/

На сервере:

sudo -u bot -H bash -lc '
cd /home/bot
unzip -o telegram_vacation_bot.zip -d app
cd app
ls -la
'

Скопируйте и отредактируйте .env:

sudo -u bot -H bash -lc '
cd /home/bot/app
cp .env.example .env 2>/dev/null || true
nano .env
'

3) Виртуальное окружение и зависимости

sudo -u bot -H bash -lc '
cd /home/bot/app
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip

# ВАЖНО: для напоминаний используем extras job-queue
pip install -r requirements.txt
pip install "python-telegram-bot[job-queue]"
'

4) Пробный запуск из консоли

sudo -u bot -H bash -lc '
cd /home/bot/app
source venv/bin/activate
python telegram_vacation_bot.py
'

Если бот стартовал (в логе что-то вроде Application started), остановите Ctrl+C.


Автозапуск через systemd (бот всегда онлайн)

Создайте юнит:

sudo tee /etc/systemd/system/telegram-vacation-bot.service > /dev/null <<'EOF'
[Unit]
Description=Telegram Vacation Bot
After=network-online.target
Wants=network-online.target

[Service]
User=bot
WorkingDirectory=/home/bot/app
Environment="PYTHONUNBUFFERED=1"
EnvironmentFile=-/home/bot/app/.env
ExecStart=/home/bot/app/venv/bin/python /home/bot/app/telegram_vacation_bot.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

Запустить и включить автозапуск:

sudo systemctl daemon-reload
sudo systemctl enable --now telegram-vacation-bot
sudo systemctl status telegram-vacation-bot

Открыть логи:

journalctl -u telegram-vacation-bot -f -n 200

Если видите предупреждение вида JobQueue не инициализирован, убедитесь, что установлен пакет
python-telegram-bot[job-queue] и перезапустите сервис:

sudo systemctl restart telegram-vacation-bot

Первичная настройка бота

  1. Откройте Telegram и напишите вашему боту.
  2. Команда /start — регистрация:
    • Название команды (workspace).
    • Выбор роли (админская роль — чтобы настроить всё остальное).
  3. Добавьте типы отпусков, задайте лимиты и политику пересечений.
  4. Добавьте сотрудников через админку:
    • «👤 Добавить сотрудника» → отправьте @username → выберите роль.
  5. Проверьте «📬 Заявки на рассмотрении», «👥 Сотрудники и остатки» и экспорт CSV — всё готово.

Как обновлять телеграм бота без простоя

Вариант A — заливкой архива:

# загрузили новый zip → распаковали поверх
sudo -u bot -H bash -lc '
cd /home/bot
unzip -o telegram_vacation_bota_new.zip -d app
cd app
source venv/bin/activate
pip install -r requirements.txt --upgrade
'
sudo systemctl restart telegram-vacation-bot

Вариант B — Git (если подключите репозиторий):

sudo -u bot -H bash -lc '
cd /home/bot/app
git pull
source venv/bin/activate
pip install -r requirements.txt --upgrade
'
sudo systemctl restart telegram-vacation-bot

База vacation_bot.db останется на месте. На всякий случай делайте бэкап перед релизами.


Бэкапы базы (SQLite)

База по умолчанию: /home/bot/app/vacation_bot.db (или путь из .env).

Снимок бэкапа:

sudo -u bot -H bash -lc '
cd /home/bot/app
cp vacation_bot.db vacation_bot.db.$(date +%F_%H-%M-%S).bak
ls -lh vacation_bot.db*
'

Автобэкап через cron (ежедневно в 02:15):

sudo -u bot crontab -e
# добавьте строку:
15 2 * * * cp /home/bot/app/vacation_bot.db /home/bot/app/vacation_bot.db.$(date +\%F_\%H-\%M-\%S).bak

Безопасность и надёжность

  • Храните токен бота только в .env и не коммитьте его в публичные репозитории.
  • Права на каталог:
sudo chown -R bot:bot /home/bot
chmod 600 /home/bot/app/.env

UFW/Firewall: вход по SSH, остальное — по необходимости:

sudo apt -y install ufw
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status

Автосоздание БД — без миграций вы не останетесь: скрипт включает защиту и «докидывает» недостающие колонки при апдейтах.


Частые ошибки и решения

1) JobQueue не инициализирован
Не установлены extras. Решение:

source /home/bot/app/venv/bin/activate
pip install "python-telegram-bot[job-queue]"
sudo systemctl restart telegram-vacation-bot

2) Message is not modified в логах
Это warning от Telegram, когда вы пытаетесь «редактировать» сообщение тем же текстом/клавиатурой. В боте уже предусмотрено безопасное подавление этой ошибки — можно игнорировать.

3) Forbidden: bot was blocked by the user
Пользователь заблокировал бота — нормальная ситуация при рассылке уведомлений. Это не авария.

4) database is locked
Редко для SQLite. Если возникнет под нагрузкой:
— убедитесь, что бота не запускают дважды;
— проверьте диск и права;
— при росте команды можно перейти на PostgreSQL (бот легко адаптируется).

5) Не запускается сервис после обновления
Проверьте права и пути:

sudo -u bot -H bash -lc 'ls -la /home/bot/app'
sudo systemctl status telegram-vacation-bot
journalctl -u telegram-vacation-bot -n 200 --no-pager

Почему именно этот бот

  • Простая архитектура: Python + python-telegram-bot + aiosqlite.
  • Гибкая админка: всё конфигурируется в чате — без отдельных кабинетов.
  • Сильные проверки: запреты дат, пересечения, лимиты в год/за раз.
  • Экспорт и аналитика: CSV для бухгалтерии; сводки по месяцам и ролям.
  • Скорость внедрения: один файл сервиса в systemd, и он уже «живёт» на сервере.

FAQ

Как перенести бота на другой сервер?
Скопируйте папку /home/bot/app целиком (особенно vacation_bot.db и .env), поднимите окружение и сервис на новом сервере — готово.

Можно ли развернуть на Docker?
Да. Создайте Dockerfile, монтируйте .env и каталог с БД в volume. Но для простоты в статье описан systemd-подход.

Как сменить токен?
Правьте .envsudo systemctl restart telegram-vacation-bot.


Что мы имеем

А имеем мы пошаговую схему: от чистого сервера до полностью рабочего Telegram-бота для отпусков с админкой, политиками пересечений, напоминаниями и экспортом. Такой подход снимает хаос в календарях и табличках, ускоряет согласование и делает процесс предсказуемым.

Скачайте архив ниже, разверните на своём сервере по инструкции.

Ну а кому лень заниматься установкой и настройкой, вы можете просто заюзать уже установленного бота для планирования отпусков и выходных дней в компании: https://t.me/LLweekend_bot

Оцените статью
BoostClicks