Skip to content

gerruda/bronivik

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bronivik GO - Бронировочный бот

Управление бронированиями через Telegram с интеграцией Google Sheets, PostgreSQL и Redis.

Требования

  • Go 1.20+
  • PostgreSQL 12+ / SQLite3
  • Redis 5+
  • Google Cloud Platform аккаунт

Конфигурация

Основные параметры (configs/config.yaml):

app:
  name: "bronivik-go"
  environment: "staging"  # production/staging
  version: "1.0.0"

telegram:
  bot_token: ${BOT_TOKEN}  # Обязательная переменная
  debug: true  # Включить логирование дебага

database:
  path: "./data/bookings.db"  # SQLite по умолчанию
  postgres:  # Опционально для PostgreSQL
    host: "localhost"
    user: ${BOT_USER}
    password: ${BOT_PASSWORD}

google:
  credentials_file: ${GOOGLE_CREDENTIALS_FILE}  # Путь к JSON-ключу Google API
  bookings_spreadsheet_id: ${BOOKINGS_SPREADSHEET_ID}

Общая информация

Файл configs/items.yaml содержит конфигурацию всех аппаратов для бронирования в системе. После внесения изменений требуется перезапуск бота.

Структура файла

items:
- id: 1                    # Уникальный числовой идентификатор
  name: "BBL S"           # Название аппарата
  description: ""         # Описание (опционально)
  total_quantity: 1       # Общее количество единиц
  order: 10               # Порядок отображения (чем меньше, тем выше)
- id: 2
  name: "Ultraformer MPT"
  description: ""
  total_quantity: 2
  order: 20
# ... остальные аппараты

Поля: id (обязательное) - уникальный числовой идентификатор. Нельзя повторять!

name (обязательное) - название аппарата для отображения в боте

description (опционально) - дополнительное описание

total_quantity (обязательное) - максимальное количество доступных единиц для бронирования

order (обязательное) - порядковый номер для сортировки (рекомендуется использовать шаг 10)

При Удалении или добавлении позиции, id обязан быть уникальным. При удалении позиции, его id больше не используется. Поэтому лучше комментировать строки его конфигурации. При добавлении позиции, его id НЕ может совпадать с другими существующими! Для изменения порядка можно переопределять поле order. В случае совпадения этого поля, то выше в списке будет тот у кого id ближе к order

Порядок обновления оборудования

  1. Зайти на хостинг
  2. отредактировать файл например командой nano /configs/items.yaml
  3. добавить или удалить нужные позиции
  4. сохранить и выйти
  5. запустить docker-compose build
  6. перезапустить бота docker-compose down и затем docker-compose up

Переменные окружения (.env)

# Обязательные:
BOT_TOKEN=your_telegram_token
GOOGLE_CREDENTIALS_FILE=path/to/service-account.json

Запуск

# Установка зависимостей
go mod tidy

# Запуск с конфигом по умолчанию
go run main.go --config=configs/config.yaml

# Или с переменными окружения
export BOT_TOKEN=your_token && go run main.go

Команды бота

Пользовательские команды

/start - Начало работы, проверка статуса броней

Быстрые действия через кнопки:

  • 💼 Ассортимент - Показать доступное оборудование (данные из configs/items.yaml)
  • 📅 Посмотреть расписание - Выбрать дату бронирования
  • 📊 Мои заявки - Показать активные брони
  • 📞 Контакты менеджеров - Контакты из configs/config.yaml: managers_contacts

Процесс бронирования:

  1. Нажмите 📋 СОЗДАТЬ ЗАЯВКУ
  2. Выберите аппарат (данные из items.yaml)
  3. Введите дату в формате ДД.ММ.ГГГГ (например, 25.12.2024)
  4. Подтвердите данные:
    • Используйте кнопку 👤 Использовать имя из Telegram
    • Или введите имя вручную (2-150 символов)
    • Подтвердите номер телефона

Административные команды

Основные команды через меню:

👨‍💼 Все заявки - Полный список бронирований (с фильтром по статусам из bookings.status)
➕ Создать заявку (Менеджер) - Ручное оформление брони (меняет bookings.manager_id в БД)

Специальные команды:

/stats - Расширенная статистика (использует database.queries.get_stats)
/manager_booking_123 - Подробности брони #123 (показывает booking.notes)

Работа с Google Sheets:

🔄 Синхронизировать бронирования - Экспорт в таблицу (config.google.bookings_spreadsheet_id)
📅 Синхронизировать расписание - Обновление календаря (config.google.schedule_sheet_name)

Процесс создания заявки (ручной режим):

  1. Ввод имени клиента (сохраняется в users.name)
  2. Номер телефона (проверка по users.phone)
  3. Выбор периода (single_date или диапазон start_date-end_date)
  4. Добавление комментария (bookings.manager_notes)
  5. Проверка доступности (items.availability_schedule)

Основные функции

✅ Управление списком менеджеров (configs/config.yaml: managers)
🚫 Черный список пользователей (configs/config.yaml: blacklist)
📊 Интеграция с Google Sheets через сервисный аккаунт

Особенности реализации

  1. configs/items.yaml - важно добавлять новые аппараты с уникальным айди, order может дублироваьтся с имеющимся в файле, тогда новый пункт будет ниже на строку.
  2. Менеджер может создать заявку на диапазон дат, по сути это будут много заявок, каждая на свою дату.
  3. Главная команда менеджера /manager_booking_Номерзаявки она позволит посмотреть заявку, вернуть ее в работу, принять по ней другое решение.

! Важно: перед деплоем в production:

  1. Установите environment: production
  2. Отключите telegram.debug
  3. Настройте SSL для PostgreSQL
  4. Обновите managers_contacts

При разработке использовать команду для запуска инфраструктуры git pull docker-compose down docker-compose build --no-cache docker-compose up docker logs -f booking-bot

docker-compose -f ./docker/docker-compose.dev.yml up -d

docker-compose -f ./docker/docker-compose.dev.yml --env-file .env up -d

sqlite

sqlite3 /path/to/your/database.db

-- Посмотреть таблицы .tables

-- Посмотреть структуру таблицы bookings .schema bookings

-- Посмотреть первые 10 записей SELECT * FROM bookings LIMIT 10;

-- Посмотреть количество записей SELECT COUNT(*) FROM bookings;

-- Посмотреть заявки за последние дни SELECT id, user_name, item_name, date, status, created_at FROM bookings WHERE date(created_at) >= date('now', '-7 days') ORDER BY created_at DESC;

-- Выйти .quit

-- Удалить все записи, кроме первых двух (по ID) DELETE FROM bookings WHERE id > 2;

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages