Бронирование отеля через 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-минутный кеш снижает нагрузку, но требует сквозной проверки на этапе оплаты: между выбором и оплатой номер мог быть забронирован другим юзером.
Оплата
Два режима:
- Полная предоплата (популярно для горящих туров): СБП через ЮKassa, чек 54-ФЗ, ваучер сразу.
- Гарантия картой (для отелей с поздним заездом): 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 ошибок
- Не делают финальную проверку доступности номера перед оплатой → продают занятый.
- Не выдают чек 54-ФЗ → штраф до 100% суммы оплаты.
- Не присылают ваучер на email — только в Telegram. Юзер потерял аккаунт = нет брони.
- Игнорируют политику отмены — вручную возвращают всем 100%, теряют маржу.
- Не настраивают уведомления — клиент чувствует, что про него забыли.
Итого
Бронирование отелей в 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 недель.