Legan Studio
Все статьи
~ 4 мин чтения

Бот для бронирования отелей в Telegram

Как собрать бот бронирования отелей: интеграция с GDS/Channel Manager, календарь дат, оплата в Stars или картой, ваучеры и поддержка 24/7.

  • Telegram
  • отели
  • бронирование
  • путешествия

Бронирование отеля через Telegram — рабочая ниша 2026: меньше комиссии, чем у Booking, прямой контакт с клиентом, лояльность и повторные продажи. Технически это сложный сервис: нужна интеграция с PMS/Channel Manager отеля, актуальные цены и доступность, оплата с фискальным чеком и ваучер с QR.

Разберём архитектуру, варианты интеграции с PMS, шаблоны диалога и юридические моменты.

Архитектура

[Mini App: каталог + календарь]
        ↓
[Backend API]
        ↓ Channel Manager API (TravelLine, Bnovo, OtelMS)
[PMS отеля]
        ↘
[Stars / ЮKassa] → чек 54-ФЗ → ваучер → email

Mini App для подбора отеля и дат — обязателен, простой бот не справляется с двусторонним календарём и галереей фото.

Источники данных

Три варианта для отельного контента:

ИсточникПлюсыМинусы
Прямая интеграция с PMS отеляактуально, низкая комиссиядолго подключать каждый отель
Channel Manager (TravelLine, Bnovo)один API на 10+ отелейкомиссия 3–5%, ограничен список PMS
GDS / Booking.com APIсотни тысяч отелейкомиссия 15–20%, сложная интеграция

Для нишевого бренда с 5–50 отелями — Channel Manager. Для агрегатора — GDS (Hotelbeds, Travelfusion, Expedia EPS).

Ядро воронки

@router.message(F.text == "/book")
async def book(message: Message):
    await message.answer(
        "Куда едем?",
        reply_markup=cities_kb(),
    )

# дальше: даты → гости → варианты → бронь → оплата

В Mini App это становится полноценным календарём с двумя точками (заезд/выезд), счётчиком гостей и фильтрами.

Календарь и даты

В Bot API нет нативного date picker. В Mini App используется обычный JS-компонент:

<DateRangePicker
  minDate={new Date()}
  maxDate={addMonths(new Date(), 12)}
  blockedDates={hotelUnavailableDates}
  onChange={({ from, to }) => setDates({ from, to })}
/>

Запрещённые даты подгружаются с бэка после выбора отеля.

Поиск доступных номеров

async def search_rooms(hotel_id: int, dates: DateRange, guests: int):
    # 1. Кеш на 5 минут
    cache_key = f"rooms:{hotel_id}:{dates.from}:{dates.to}:{guests}"
    if cached := await redis.get(cache_key):
        return json.loads(cached)
    # 2. Запрос в Channel Manager
    rooms = await travelline.get_availability(
        hotel_id=hotel_id,
        check_in=dates.from,
        check_out=dates.to,
        guests=guests,
    )
    await redis.set(cache_key, json.dumps(rooms), ex=300)
    return rooms

5-минутный кеш снижает нагрузку, но требует сквозной проверки на этапе оплаты: между выбором и оплатой номер мог быть забронирован другим юзером.

Оплата

Два режима:

  1. Полная предоплата (популярно для горящих туров): СБП через ЮKassa, чек 54-ФЗ, ваучер сразу.
  2. Гарантия картой (для отелей с поздним заездом): hold на сумму, списание в день заезда.

Stars здесь не подходят — отель оказывает услугу вне Telegram, по 54-ФЗ нужна касса.

Ваучер

После оплаты бот формирует PDF-ваучер и шлёт юзеру:

async def issue_voucher(booking_id: int):
    b = await bookings.get(booking_id)
    pdf = await pdf_generator.render("voucher.html", {
        "guest": b.guest_name,
        "hotel": b.hotel.name,
        "address": b.hotel.address,
        "check_in": b.dates.from,
        "check_out": b.dates.to,
        "room_type": b.room.type,
        "qr_code": qr.png(b.confirmation_code),
        "support_phone": SUPPORT_PHONE,
    })
    await bot.send_document(
        b.user_id,
        BufferedInputFile(pdf, filename=f"voucher_{b.id}.pdf"),
        caption="Ваучер на заселение. Покажите на стойке регистрации.",
    )

QR-код кодирует booking_id + hash для быстрой проверки на ресепшен.

Отмены и возвраты

Политика отмены — отдельный бизнес-процесс. Стандартно:

Срок до заездаВозврат
>30 дней100%
7–30 дней80%
1–7 дней50%
менее 24 часов0%

В боте кнопка «Отменить бронь» → проверка политики → расчёт суммы возврата → подтверждение → возврат через ЮKassa API + чек возврата.

Уведомления

Триггерные сообщения за дни до и после заезда:

  • За 7 дней: «Скоро заселение, нужны ли трансфер/завтрак».
  • За 1 день: напоминание + контакт ресепшена.
  • В день заезда: «Доброе утро, ждём вас с 14:00».
  • День выселения: «Спасибо! Оцените отель» (NPS).
  • Через 3 месяца: «Куда планируете в следующий раз?» (повторные продажи).

Каждое уведомление — повод для допродажи: трансфер, экскурсия, спа.

Поддержка 24/7

Гость в чужом городе с проблемой нуждается в моментальной помощи. Архитектура:

  • Бот отвечает на FAQ через AI (RAG по правилам отеля).
  • Сложные кейсы — эскалация на оператора в forum-topic.
  • SLA: первый ответ < 5 минут в любое время суток.

Связка AI + оператор закрывает 70% обращений автоматически.

Юридика

  • Ст. 5 152-ФЗ: трансграничная передача данных гостя в зарубежные системы — отдельное согласие (актуально для GDS).
  • 54-ФЗ: чек на каждую оплату через ЮKassa с признаком «Полный расчёт» и реквизитами услуги.
  • Политика отмены — отдельная страница в боте + ссылка перед оплатой.
  • Закон о туристической деятельности: услуги физ. лицам оказывает только аккредитованный туроператор/турагент.

Топ-5 ошибок

  1. Не делают финальную проверку доступности номера перед оплатой → продают занятый.
  2. Не выдают чек 54-ФЗ → штраф до 100% суммы оплаты.
  3. Не присылают ваучер на email — только в Telegram. Юзер потерял аккаунт = нет брони.
  4. Игнорируют политику отмены — вручную возвращают всем 100%, теряют маржу.
  5. Не настраивают уведомления — клиент чувствует, что про него забыли.

Итого

Бронирование отелей в Telegram — сложный, но прибыльный продукт. Технически нужны: Mini App с календарём, интеграция с Channel Manager, оплата с фискализацией, ваучер с QR, уведомления и сильная поддержка 24/7. Запуск под ключ — 6–10 недель и от 1.5 млн ₽ при работе с одной сетью отелей. Главное преимущество перед Booking — прямая коммуникация и нулевая комиссия за повторные брони.

Частые вопросы

Какой Channel Manager выбрать?

Для России — TravelLine (самая широкая интеграция с PMS), Bnovo (попроще, дешевле), OtelMS (для малых гостиниц). Все три отдают REST API с availability, rates, booking. Комиссия 1.5–4% от брони. Перед выбором проверьте, поддерживает ли ваш PMS этот Channel Manager — иначе придётся писать прямую интеграцию с PMS.

Можно ли работать без Channel Manager?

Да, если у вас один-два отеля и собственный PMS с открытым API (Fidelio, OperaCloud, Logus). Прямая интеграция даёт нулевую комиссию и моментальные обновления. Минус — каждый новый отель = месяц работы программистов на новый PMS.

Как часто обновлять цены и доступность?

Минимум раз в 5 минут (наш кеш). Хорошо — webhook от Channel Manager на изменения, бот мгновенно инвалидирует кеш. Это критично перед high-season и горящими предложениями: разница между актуальной и кешированной ценой = жалоба клиента.

Нужна ли касса при оплате через Stars?

Stars не подходит для услуг отеля по российскому законодательству — это услуга вне Telegram, требует 54-ФЗ. Используйте ЮKassa, CloudPayments, Tinkoff Pay с автоматической отправкой чека через ОФД. Stars оставьте для цифровых тарифов лояльности и микро-покупок типа «ранний заезд за 200 Stars».

Как обрабатывать овербукинг?

Если несмотря на проверки номер занят — извинения, мгновенный возврат + промокод 20% на следующую бронь. И автоматический поиск аналогичного номера в этом же отеле или соседнем за ваш счёт. Ручная эскалация на менеджера в течение 5 минут. Овербукинг ≠ скандал, если вы оперативно решаете.

Можно ли продавать туры (отель + перелёт)?

Технически — да, добавляете GDS для авиа (Amadeus, Sabre). Юридически — это уже туроператорская деятельность с обязательным членством в реестре Ростуризма и финансовым обеспечением. Для большинства студий проще остаться на отелях, а перелёты предлагать как ссылку на партнёрский сервис.

Какой средний чек и конверсия?

В сегменте региональных отелей в РФ — средний чек 12–25 тыс. ₽, CR из захода в Mini App в бронь — 4–8% (выше, чем у Booking за счёт нативности). LTV хорошего канала — 1.8–2.5 (повторные брони в течение года). Это даёт окупаемость трафика 4–6 недель.