Управление бронированиями через 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
- Зайти на хостинг
- отредактировать файл например командой nano /configs/items.yaml
- добавить или удалить нужные позиции
- сохранить и выйти
- запустить docker-compose build
- перезапустить бота docker-compose down и затем docker-compose up
# Обязательные:
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
- Нажмите
📋 СОЗДАТЬ ЗАЯВКУ - Выберите аппарат (данные из
items.yaml) - Введите дату в формате
ДД.ММ.ГГГГ(например,25.12.2024) - Подтвердите данные:
- Используйте кнопку
👤 Использовать имя из Telegram - Или введите имя вручную (2-150 символов)
- Подтвердите номер телефона
- Используйте кнопку
👨💼 Все заявки - Полный список бронирований (с фильтром по статусам из bookings.status)
➕ Создать заявку (Менеджер) - Ручное оформление брони (меняет bookings.manager_id в БД)
/stats - Расширенная статистика (использует database.queries.get_stats)
/manager_booking_123 - Подробности брони #123 (показывает booking.notes)
🔄 Синхронизировать бронирования - Экспорт в таблицу (config.google.bookings_spreadsheet_id)
📅 Синхронизировать расписание - Обновление календаря (config.google.schedule_sheet_name)
- Ввод имени клиента (сохраняется в
users.name) - Номер телефона (проверка по
users.phone) - Выбор периода (
single_dateили диапазонstart_date-end_date) - Добавление комментария (
bookings.manager_notes) - Проверка доступности (
items.availability_schedule)
✅ Управление списком менеджеров (configs/config.yaml: managers)
🚫 Черный список пользователей (configs/config.yaml: blacklist)
📊 Интеграция с Google Sheets через сервисный аккаунт
- configs/items.yaml - важно добавлять новые аппараты с уникальным айди, order может дублироваьтся с имеющимся в файле, тогда новый пункт будет ниже на строку.
- Менеджер может создать заявку на диапазон дат, по сути это будут много заявок, каждая на свою дату.
- Главная команда менеджера /manager_booking_Номерзаявки она позволит посмотреть заявку, вернуть ее в работу, принять по ней другое решение.
! Важно: перед деплоем в production:
- Установите
environment: production - Отключите
telegram.debug - Настройте SSL для PostgreSQL
- Обновите
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
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;