Демо к заказу Отели, цены и фото здесь демонстрационные — в рабочей версии приходят из Roomlink
+7 499 938 46 38
Заказать звонокletter@tctravel.ru
Главная › Страны › Ирак

Отели в Ираке

Выберите город и даты — покажем отели с ценами. Заявка без предоплаты, бронирование подтвердит менеджер.

Пятизвёздочные отели Ирака

Как это работает на сайте. Карусель не обращается к Roomlink при открытии страницы: 10 отелей лежат в кэше, агент Битрикс пересобирает его раз в неделю. Блок с формой и каруселью подключается на /iraq/ одной строкой в include.php.
Главная › Отели ›

Сортировка:
Что уходит в Roomlink по этому поиску (в демо не отправляется)

Как я это сделаю

План рабочей версии на вашем Битриксе. Нажмите на блок, чтобы прочитать, что он делает.

Страницы /iraq/ и /hotels/ include.php · ЧПУ
На /iraq/ в include.php добавляется одна строка — вызов формы поиска и карусели. Раздел /hotels/ — выдача, /hotels/<код отеля>/ — карточка. Параметры поиска лежат в адресе, ссылкой на выдачу можно поделиться.
▼
Компоненты Битрикс форма · карусель · выдача · карточка
Четыре компонента в /local/components/tctravel/. Шаблоны свёрстаны по макетам Figma на стилях сайта: Rubik, кнопки и поля как в форме визы. Тексты и заголовки меняются в параметрах компонента, без программиста.
▼
Модуль tctravel.roomlink /local/modules · настройки в админке
В настройках: BuyerId, UserId, пароль, код страны, срок жизни кэша, адрес для заявок. Смена страны (Ирак → Пакистан или вторая страна рядом) — одно поле, а не переписывание кода. Всё лежит в /local, обновления Битрикс его не затирают.
▼
Клиент Roomlink XML · POST · go-api.aanda.ru
Один класс: собирает XML-запрос, отправляет, разбирает ответ в массивы. Таймаут 10 секунд, один повтор при сбое сети, каждая ошибка пишется в журнал модуля. Логин и пароль остаются на сервере и в браузер не попадают.
▼
Кэш справочников на неделю
Города (CityListRequest), список отелей, типы и категории питания, услуги, удобства отеля и номера, 10 отелей для карусели. Форма и карусель открываются мгновенно и не зависят от доступности поставщика.
Кэш поиска 15 минут
Ответ HotelSearchRequest хранится по ключу «город + даты + гости». Переход по страницам, фильтры и «Показать все номера» работают из него и не тратят запросы к Roomlink.
▲
Агент Битрикс раз в неделю
Перечитывает справочники и собирает карусель: пятизвёздочные отели страны, для каждого — описание и фото из HotelDescriptionRequest. Если Roomlink в этот момент не ответил, остаётся прошлый кэш — карусель не пустеет. В админке есть кнопка «Обновить сейчас».
▼
Заявка «Забронировать» почтовое событие → letter@tctravel.ru
Попап проверяет поля и сессию, создаёт почтовое событие с шаблоном письма (его можно править в админке). Заявка дополнительно сохраняется в журнал на сайте — на случай, если письмо попало в спам. По желанию добавлю создание лида в вашем Битрикс24.

Путь одного поиска

  1. Форма → /hotels/?city=…&in=…&out=…Город, даты, гости и номера уходят в адрес страницы
    сразу
  2. Проверка кэша поискаТакой же запрос за последние 15 минут отдаётся без обращения к поставщику
    ≈ 5 мс
  3. HotelSearchRequestПо одному запросу на каждый состав номера: «2 гостя» и «3 гостя» — два запроса
    0,1–0,4 с*
  4. Разбор ответаОтели, тарифы, питание, наличие. Счётчики звёзд и завтраков — по всей выборке
    ≈ 20 мс
  5. Первые 20 отелейОстальные страницы и фильтры — из кэша, без перезагрузки
    сразу
  6. «Показать все номера»Тарифы уже пришли в ответе поиска, список раскрывается без нового запроса
    сразу

* время ответа — из примеров в документации Roomlink API 4.0.1; на ваших доступах замерю и покажу. Остальное — моя оценка.

Что я уже нашёл в документации Roomlink

Гости и номераВ поиске есть только NumberOfGuests (от 1 до 4), числа номеров в запросе нет. Поэтому единый блок «гости и номера» раскладывается в запросы по составу каждого номера, цены складываются, а число номеров сверяется с остатком Availability Rooms.
ЗвёздыПриходят справочником Stars Code от 1 до 7, среди значений есть отели без категории. В фильтре это отдельная строка «Без звёзд», отели не теряются.
ЗавтракMeal Code="1" — питание включено в цену, "2" — за доплату. «Завтрак включен» = код 1 и тип питания с завтраком: завтрак, полупансион или полный пансион.
ПагинацияAPI отдаёт всю выборку по городу одним ответом. Разбивку по 20 отелей и счётчики делает модуль.
СтранаВ примере CountryListRequest в документации только страны СНГ. Первым делом вызову метод с вашими доступами и проверю, что Ирак есть в выдаче и сколько там пятизвёздочных отелей. В заголовке ТЗ указан Пакистан — уточню, какая страна нужна.
ЦенаЗаявка уходит письмом, бронирования через API нет, поэтому показывается цена на момент поиска. Она же попадает в письмо менеджеру.

Что не сломается

Roomlink недоступенФорма и карусель работают из кэша. Вместо пустой выдачи — сообщение и кнопка «Оставить заявку, подберём вручную».
Двойная отправкаКнопка блокируется после нажатия, проверяется сессия Битрикс, есть скрытое поле от ботов и ограничение — не чаще одной заявки в 30 секунд.
Нагрузка на APIКэш поиска и справочников: посетитель, который листает страницы и щёлкает фильтры, делает один запрос, а не двадцать.
Персональные данныеЧек-бокс согласия и ссылка на политику — так же, как в остальных формах сайта.
ТелефоныВёрстка проверяется на 360, 390, 768 и 1280+ пикселях; фильтр на телефоне сворачивается в кнопку.

Этапы и сроки

1. Основа3 дня · 15 000 ₽

Модуль и настройки, клиент Roomlink, кэш справочников, агент, форма поиска и карусель на /iraq/.

2. Выдача4 дня · 18 000 ₽

/hotels/: список по макету, 20 на страницу, фильтры со счётчиками, номера с ценами, попап и письмо.

3. Карточка3 дня · 12 000 ₽

Карточка отеля, фото, удобства, Яндекс-карта, адаптив, перенос на боевой сайт, инструкция.

45 000 ₽ · 10 рабочих дней. Оплата по этапам после приёмки. Месяц исправляю найденное бесплатно.

Что в этом демо настоящее

Работают форма с календарём и блоком «гости и номера», выдача, фильтры со счётчиками, пагинация, раскрытие номеров, попап и карта. Отели, цены и фотографии — демонстрационные: доступа к вашему договору с Roomlink у меня нет. Письмо в демо не отправляется — после отправки формы показан его текст.