Виджет онлайн-бронирования (КУС)
Описание
Виджет предназначен для создания заявок на бронь в базе «Кинт: Управление санаторием» через форму, размещенную на веб-сайте санатория или отеля. Все созданные заявки отображаются в форме интерфейс «Менеджер продаж», «Шахматке гостиницы» и журнале «Заявки на бронь».
Добавление виджета на сайт
Настройка сайта
Быстрая настройка
Этот метод не рекомендуется для использования на настоящей базе, т.к. при загрузке происходят обращения к базе 1С, что вызывает тормоза открытия страницы. Если он Вам действительно нужен - убедитесь, что база 1С опубликована с использованием веб-сервера IIS, а не Apache, т.к. у последнего большие проблемы с производительностью при работе с 1С.
На веб-сайте необходимо предварительно выбрать место, где будет размещена страница.
Это может быть как полностью отдельная изолированная от основного сайта страница, так и встроенная непосредственно в тело сайта. На месте размещения элемента помещается тег iframe
со ссылкой, указывающей на API-метод, возвращающий страницу макета.
Пример отдельной страницы, на которой будет размещено онлайн-бронирование:
<!DOCTYPE html> <html> <head> <script type="text/javascript" data-booking-url="http://online.kint.ru/kus_test" data-query-selector="body" data-append-api-path="1"> document.addEventListener('DOMContentLoaded', function() { let iframe = document.createElement("iframe"); let dataset = document.querySelector("[data-booking-url]").dataset; let bookingUrl = dataset.bookingUrl; if (dataset.appendApiPath != 0) { bookingUrl += "/hs/KintAPI.hs/GetData?Method=Booking&raw"; } iframe.src = bookingUrl; document.querySelector(dataset.querySelector).appendChild(iframe); }); </script> <style> html { height: 100%; } body { margin: 0; height: 100%; } iframe { width: 99.6%; height: 99.6%; } </style> </head> <body></body> </html>
Пример для интеграции на веб-сайт на новой странице с использованием макета:
<script type="text/javascript" data-booking-url="https://online.kint.ru/kus_test_booking" data-query-selector="#booking"> document.addEventListener('DOMContentLoaded', function() { let dataset = document.querySelector("[data-booking-url]").dataset; let bookingUrl = dataset.bookingUrl; if (dataset.appendApiPath != 0) { bookingUrl += "/hs/KintAPI.hs/GetData?Method=Booking&raw"; } let iframe = document.createElement("iframe"); iframe.src = bookingUrl; iframe.frameBorder = 0; document.querySelector(dataset.querySelector).appendChild(iframe); window.addEventListener('message', function(e) { if (e.source != iframe.contentWindow) return; let data = JSON.parse(e.data); if (data.eventName != 'stateUpdate') return; if (data.step == 'preloader') data.height += 250; iframe.style.height = (data.height + 25) + "px"; }, false); }); </script> <style> #booking iframe { width: 99.6%; height: 250px; } </style> <div id="booking"></div>
Если для публикации используется авторизация, необходимо будет произвести ещё одну публикацию с уже введёнными данными для авторизации (Как опубликовать базу на веб-сервере), и в коде на сайте указать именно ссылку на эту публикацию. Ранее можно было видоизменить ссылку, подставив в неё логин-пароль, чтобы браузер их не запрашивал, но Chrome запрещает так делать с версии 59.
Если вариант с дополнительной публикацией без какой-либо авторизации не устраивает, можно прибегнуть к применению дополнительного PHP-скрипта, который сам производит авторизацию на удалённом сервере, и позволяет только получить макет.
<?php
// Настройки подключения к ИБ
$config = array(
'base_url' => 'http://example.com/pub_url',
'username' => 'Пользователь',
'password' => ''
);
// Скрипт
if (!extension_loaded('curl'))
{
header('Content-Type: text/plain; charset=utf8');
die('Сначала установите расширение cURL для PHP.');
}
$ch = curl_init($config['base_url'] . '/hs/KintAPI.hs/GetData?Method=Booking&raw');
curl_setopt_array($ch, array(
CURLOPT_USERPWD => $config['username'] . ':' . $config['password'],
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC
));
header('Content-Type: text/html; charset=utf8');
curl_exec($ch);
curl_close($ch);
При применении такого метода, потребуется так же у элемента script
установить значение атрибута data-append-api-path
в значение 0
.
Ускоренный вариант
Этот вариант доступен начиная с релиза 20.05.09
Преимуществом данного подхода является то, что страница с виджетом (включая сам виджет) будет грузиться чуть ли не моментально. Но он требует немного больше времени на первоначальную настройку, и при обновлении некоторых данных, используемых виджетом, пересохранения файла с последующим обновлением на веб-сервере. Суть способа заключается в одноразовом формировании файла, который формирует база при запросах на метод апи. В таком варианте, все необходимые базовые данные помещаются в файл страницы, а потому для первоначального запуска, виджет не делает никаких запросов на базу повторно.
Так же, если файл будет размещён на одном логическом домене, что и опубликована база 1С (пример: файл размещён и доступен по адресу https://example.com/booking/
, база опубликована на https://example.com/kus/
), публиковать её беспарольно - не требуется.
Код будет так же использоваться из "быстрой настройки", но значение атрибута data-append-api-path
понадобится изменить на 0
.
- В настройках публикации выполняется действие "Сформировать страницу", итоговый файл сохраняется где-нибудь локально.
- Полученный файл загружается на веб-сервер в папку, доступную из сети Интернет.
- Вместо адреса публикации, в коде указывается ссылка на опубликованный файл.
После проведения всех действий, на странице должна почти моментально загружаться страница с онлайн-бронированием. Скорость зависит от Интернет-соединения, но в этом варианте максимально снижена нагрузка на базу 1С.
Настройка веб-сервера
Если веб-сайт размещается на домене example.com, а публикация - на data.example.com, потребуется внести некоторые дополнительные изменения в конфигурацию веб-сервера.
- Настроить CORS таким образом, чтобы браузеру было разрешено общаться с поддоменом базы (на основном домене настраивается на http://data.example.com (включая протокол)), и наоборот. Можно воспользоваться данной статьей для первичной настройки. Вместо знака звёздочки, должен быть указан адрес публикации.
- Если основной веб-сайт использует TLS-шифрование (HTTPS), аналогичную настройку необходимо произвести и на публикации, иначе браузер откажется делать выполнять запрос для получения страницы без запуска в специальном режиме, что неприемлемо в штатном режиме работы.
Отметим, что необходим полностью валидный сертификат, выданный проверенным удостоверяющим центром, который не придётся добавлять в исключения при открытии страницы.
- Можем посоветовать рассмотреть вариант использования сертификата от Let's Encrypt. Они выдают бесплатные сертификаты сроком действия 3 месяца (потребуется настроить задачу в планировщике системы на автоматический перевыпуск сертификата). С инструкцией о выпуске сертификата (на английском языке) можно ознакомиться здесь.
Параметры работы
Настройка параметров выполняется в форме интерфейс «Администратор системы» на закладке Интернет-сервисы или по ссылке Настройка публикации базы в разделе АДМИНИСТРИРОВАНИЕ.
- Url фонового изображения: позволяет задать фоновое изображение виджета. Задается в виде ссылки на изображение.
- Не бронировать заявки: заявки создаются в статусе «Черновик» и не изменяют состояние номеров гостиницы. Менеджер сам выполняет регистрацию заявки.
- Подбор мест:
- «По категориям» — результаты поиска будут отображаться в виде категорий номеров с выводом количества доступных для заезда номеров в каждой категории. Заявка будет создана в виде предварительной брони.
- «По номерам» — результаты поиска будут отображаться в виде номеров гостиницы, заявка будет создана в виде подтвержденной брони.
- Отправлять подтверждение на электронную почту: после успешного создания заявки клиенту будет отправлено письмо с подтверждением бронирования и номером заявки для проверки ее состояния.
- Шаблон письма: позволяет задать текст и заголовок письма. Если шаблон не указан, будет использован текст по умолчанию.
- Url дополнительных стилей: позволяет задать ссылку на CSS-файл, который будет подгружаться вместе с стандартным. Может быть использовано для изменения цветовой палитры под оформление сайта.
- Дополнительный макет: HTML-шаблон, подключаемый в самом конце страницы. Может использоваться для подключения аналитики Яндекса или Гугл, подключения своих скриптов. Тип макета должен быть HTML, владелец Интерфейсы.
При использовании дополнительного макета, если в нём не будут использоваться особенности шаблонизатора, необходимо всё содержимое обернуть в тег {plain}
.
Пример:
{plain} код аналитики яндекс/гугл {/plain}
Стили позволяют переоформить внешний вид виджета, к примеру, покрасить кнопки под стиль сайта.
/** * Кнопки. */ .btn.btn-orange { /** * Основной цвет. */ background-color: #ebc449; /** * Градиент для кнопки. */ background-image: -webkit-linear-gradient(top,#ebc449,#df9355); background-image: -moz-linear-gradient(top,#ebc449,#df9355); background-image: -o-linear-gradient(top,#ebc449,#df9355); background-image: -ms-linear-gradient(top,#ebc449,#df9355); background-image: linear-gradient(top,#ebc449,#df9355); /** * Бордер. */ border-color: #ebc449; } .btn.btn-blue { /** * Основной цвет. */ background-color: #0383c1; /** * Градиент для кнопки. */ background-image: -webkit-linear-gradient(top,#0383c1,#0c6197); background-image: -moz-linear-gradient(top,#0383c1,#0c6197); background-image: -o-linear-gradient(top,#0383c1,#0c6197); background-image: -ms-linear-gradient(top,#0383c1,#0c6197); background-image: linear-gradient(top,#0383c1,#0c6197); /** * Бордер. */ border-color: #0383c1; }
Демонстрационная версия
Версия для ознакомления доступна по адресу: http://www.kint.ru/kus/booking_demo.
Работает с информационной базой «Кинт: Управление санаторием».