5 Августа

    Внедрение поиска туров от Слетать.ру

    Поддерживать собственную базу туров на сайте весьма трудоемкая задача. Так как с одной стороны необходимо предоставить туристу множество вариантов выбора по широкому списку направлений, а с другой нужно постоянно отслеживать актуальность данных предложений. В туристическом бизнесе все и постоянно меняется. За час может быть создано несколько сотен новых туров, и закрыто столько же по различным причинам. Отслеживать все и изменять вручную невероятно сложно, если не сказать невозможно.

    Наш клиент, туристическая компания “Tes Travel” из Астаны, прошла по этому пути. Изначально проект создавался как сайт туристического агентства с собственной базой туров. Уже после года работы (даже можно сказать еще очень долго продержались) стало очевидно, что вручную поддерживать базу туров невозможно. Было принято решение о поиске “поставщика” базы туров.

    На сегодняшний день на рынке присутствует довольно много предложений по установке сторонних модулей поиска туров. В этом случае компания (агентство) заключает партнерский договор с компаний поставщиком услуги и устанавливает у себя на сайте поисковик туров по базе агрегатора (или туроператора). При этом агентство получает свой, оговоренный процент, от продажи туров. Схема неплохая и многие ее используют.

    В нашем случае задача была несколько сложнее. Обычно все эти модули поиска имеют свою жесткую структуру и несколько шаблонных дизайн-схем. Тогда при установке подобного модуля сразу видно, что это инородный предмет на вашем сайте.



    Туристы это тоже замечают и с меньшей охотой пользуются таким поиском. При этом данный модуль портит внешний вид сайта и накладывает жесткие ограничения по способу вывода результатов поиска и то как они будут показаны туристу. Как правило все внедряется через iframe, а каждый тур, который смотрит турист, появляется во всплывающем окне, что делает просмотр нескольких туров сразу крайне неудобным, так как такие окна постоянно теряются или “прячутся” за основным окном браузера. Нам нужно было решить задачу так, чтобы поиск был сделан именно в рамках дизайна сайта. Турист, подбирая тур, не должен испытывать никакого дискомфорта, а все туры должны выводиться так, как если бы они принадлежали компании “Tes Travel”.

    Не смотря на то, что такая задача более трудоемка (чем просто установить на сайт код готового модуля, потратив на это 10 минут времени), но вполне решаема. Есть ряд компаний, как правило агрегаторов различных баз туров туроператоров, которые предлагают доступ к базе тур-предложений не только через готовый модуль, но и через XML-шлюз. Что это дает?

    Это практически полностью развязывает нам руки! Обмен данными осуществляется по оговоренному протоколу. При этом мы отправив запрос (поисковый запрос туров) получаем XML-ответ (массив данных) и уже сами решаем в каком виде и как нам все это выводить на сайте. Таким образом, мы создаем собственный дизайн поисковика, страницы результатов поиска, и карточки тура. Тем самым нам не приходится портить дизайн сайта вставками сторонних модулей, а так же делаем удобный вывод информации для туриста. Поиск должен быть простым, удобным и понятным.

    Проанализировав предложения несколько компаний, предоставляющих данную услугу, мы остановились на сервисе от Слетать.ру. Клиента устроила и цена и набор туроператоров, данные от которых будет получать поисковый модуль.

    Условия сотрудничества у Слетать.ру довольно гибкие и мы без труда получили пробную лицензию (бесплатно) для нашей тестовой копии сайта, на которой и выполнялась разработка до ее завершения и переноса на основной сайт. Так мы могли спокойно работать не нарушая работу основного сайта, а клиент не тратил деньги на лицензию пока шел процесс разработки.

    ДИЗАЙН

    Ознакомившись с документацией и набором данных, которые будут нам передаваться через XML-шлюз мы начали работу над дизайном. В итоге был разработан дизайн следующих элементов и страниц:

    • краткая версия модуля поиска
    • расширенная версия модуля поиска (она содержит больший набор полей и позволяет задавать более точные параметры поиска)
    • страница с результатами поиска
    • страница тура
    • страница поиска для конкретной страны (поиск туров по Турции, например)
    • страница с результатами поиска для страны
    • форма online-бронирования (включена в состав страницы тура).


    Дизайн-макеты всех страниц опубликованы в конце статьи.

    ПРОГРАММИРОВАНИЕ

    Завершив работу над дизайном, мы перешли к программированию. В этой части статьи хотим поделиться с какими нюансами нам довелось столкнуться на этапе программной разработки и как были разрешены данные моменты.  

    Первое с чем пришлось разбираться  – это отсутствие документации для реализации на языке php. Вся документация на сайте “Слетать” подготовлена для .NET. Здесь нам на помощь пришла техподдержка сервиса. По запросу предоставили все необходимые данные и примеры интеграции. Немного потратили времени на переписку, но вопрос был успешно решен.

    Следующей неожиданностью оказался скудный набор данных, которые передаются по “стандартной” лицензии модуля поиска. Информация об отеле была самая общая, чуть ли не только название и количество звезд. Я, конечно, утрирую, но данных действительно было мало для того, чтобы турист получил полную “картину” о месте отдыха, куда он хотел бы купить тур. Этот вопрос решался деньгами. Клиенту пришлось докупить модуль “расширенной информации об отелях”. С помощью данной лицензии мы получили для сайта качественные фотографии отелей, их подробное описание, список услуг, предоставляемых отелем, и многое другое. Хотелось вывести на сайте еще больше данных, но тут требовалась бы покупка еще и еще новых модулей, но после совещания с клиентом было решено ограничиться тем что есть. Тем более информации, в принципе,  было уже достаточно.

    Была обнаружена неточность в работе модуля. Не корректно учитывается “звездность” отеля. Можно отправить в параметрах поиска запрос на отели с количеством звезд 3 и 4, а в ответе зачастую все равно приходит результат от 3 и выше. Т.е. и 3, и 4, и 5 звезд.  Как пояснили нам в техподдержке, неточность содержится в данных передаваемых им от туроператоров и устранить ошибку возможности пока нет. Хоть момент и неприятный, но не критичный для работы поиска.

    Пришлось прибегнуть к некоторым модификациям процесса обмена данными с сервером “Слетать”. По стандартному протоколу обмена, когда отправляешь запрос на выборку туров, то ответ с предложениями приходит не сразу. В штатном режиме запросы к серверу отправляются с некоторой периодичностью пока не будет получен ответ удаленного сервера. Для этого постоянно выполняется перезагрузка страницы на стороне сайта (для повторной отправки запроса). Мы, чтобы много раз не перезагружать страницу и не нервировать пользователя, решили сделать данный процесс обмена средствами ajax. Тогда запросы отправляются в “скрытом” от пользователя режиме и нет необходимости обновлять страницу целиком. После каждого ajax-запроса и обратного ответа добавлена проверка – получены данные или нет. Если нет, то повторно отправляем запрос и так пока не получим список туров. Все это время, пока пользователь ожидает результатов поиска, мы выводим ему анимацию процесса поиска в виде лоадера со шкалой “прогресса”.



    Остальной процесс программирования поисковика туров прошел в штатном режиме.

    В результате разработки и отладки модуля он был перенесен на основной сайт клиента и сейчас успешно решает свою задачу, помогая туристам найти оптимальные варианты туров по интересующим их курортам.

    Главная страница


    Результаты поиска


    Страница тура


    Страница страны


    В ЗАКЛЮЧЕНИИ

    К моменту публикации данной статьи прошло около недели, как сайт агентства стал работать с новой поисковой системой. И уже есть положительные результаты. Менеджеры подтверждают, что звонков в офис  стало больше. Туристы теперь даже, если не находят один в один нужный им тур, находят аналоги и тогда звонят в офис, а дальше уже дело за оператором принявшим звонок.

    Нам, как разработчикам, очень приятно, что данная доработка сайта стала весьма полезной для компании клиента.