Установка и настройка виджета

Установка и настройка виджета

Для инициализации виджета Concierge Online на сайте необходимо добавить перед закрывающим тегом следующий скрипт:

<script src="https://cncrg.org/popup.js"></script>

Инициализация происходит посредством вызова функции initCncrgPopup(hotelId?, options?)

Она автоматически ожидает момента, когда будет доступен body, создает div-обвертку для виджета, загружает скрипт виджета и затем инициализирует виджет через CncrgWidget и хранит его в window.cncrgWidget

Возвращает промис, выполняющийся при инициализации cncrg объекта

Промис возвращает window.cncrg

Простой пример:

initCncrgPopup('9b177996-da9a-4400-9c3c-88e0fa752ce0', {
  zIndex: '2147483647',
  label: 'Заказать<br/>доп. услуги',
  color: 'rgba(198,61,9,0.8)',
})

Пример, с последующим использованием cncrg:

;(async () => {
  // Нельзя использовать async/await на верхнем уровне вложенности, поэтому обворачиваем в анонимную функцию
  await initCncrgPopup('9b177996-da9a-4400-9c3c-88e0fa752ce0')
  cncrg.toggle()
})()

Альтернативный способ инициализации виджета напрямую без initCncrgPopup, позволяющий выбирать в какой DOM-элемент загружать виджет:

window.cncrgWidget = new CncrgWidget({
  target: document
    .getElementById('cncrg-widget')
    .attachShadow({ mode: 'open' }),
  props: {
    hotelId: '9b177996-da9a-4400-9c3c-88e0fa752ce0',
    zIndex: '2147483647',
    label: 'Заказать<br/>доп. услуги',
    color: 'rgba(198,61,9,0.8)',
  },
})

В таком случае скрипт надо загружать другой:

<script src="https://cncrg.org/widget/index.js"></script>

Когда инстанс CncrgWidget хранится в window.cncrgWidget, то можно изменять настройки на лету с помощью cncrg.patchOptions. Если же хранить в другом месте, то можно сделать это вручную:

cncrgWidget.$$set({ color: 'red' })

Асинхронная загрузка скрипта

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

Однако, также можно использовать async загрузку:

<script
  async
  src="https://cncrg.org/popup.js"
  onload="initCncrgPopup('9b177996-da9a-4400-9c3c-88e0fa752ce0')"
></script>

Синхронный способ для сравнения:

<script src="https://cncrg.org/popup.js"></script>
<script>
  initCncrgPopup('9b177996-da9a-4400-9c3c-88e0fa752ce0')
</script>

Настройки

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

label: string

Текст на кнопке при просмотре с ПК и подсказки в мобильной версии

Значение по умолчанию: Оформить<br>доп. услуги

zIndex: string|number

z-index всех элементов виджета(кнопка, попап, загрузка и т.д)

Значение по умолчанию: 100

color: string

Цвет кнопки и экрана загрузки

Значение по умолчанию: #D79966

hintBackgroundColor: string

Цвет подсказки в мобильной версии

Значение по умолчанию: #4c4c4c

hintTextColor: string

Цвет текста подсказки в мобильной версии

Значение по умолчанию: #ffffff

loadingLabel: string

Текст при загрузке попапа

Значение по умолчанию: Услуги загружаются...

hideButton: boolean

Скрыть кнопку

Например, если сайт хочет отображать ее по-своему

Вместо кнопки попап можно вызывать программно (см. API)

buttonVisibleIn: string[]

Указать, где должна быть видна кнопка

Возможные значения: desktop, mobile

Пример:

buttonVisibleIn: ['desktop'] // кнопка будет видна только на ПК

Значение по умолчанию: ['desktop', 'mobile']

left: boolean

Отображать кнопку слева экрана (по умолчанию справа)

Значение по умолчанию: false

bottom: number

Отступ кнопки от низа экрана в пикселях

Работает только для мобильной версии, на ПК кнопка располагается посередине

Значение по умолчанию: 5

horizontalOffset: number

Отступ кнопки от правой(левой в случае если left:true) стороны экрана в пикселях

Значение по умолчанию: 8

serverUrl: string

Ссылка для попапа

Значение по умолчанию: https://cncrg.org

overrideLocale: object

Переопределить перевод

Пример:

overrideLocale: {
  'auth.enterPhone': 'Введите номер телефона клиента'
},

buttonOpensExternalSite: boolean

Должна ли кнопка вместо открытия попапа перекидывать на отдельную страницу основного сервиса с текущим отелем

Значение по умолчанию: false

token: string

Переопределение авторизационного токена пользователя

API

На странице также появляется глобальный обьект cncrg

Он имеет следующие функции:

toggle(state: boolean?)

Переключить видимость попапа

При отсутствии параметра state переключает состояние видимости на противоположную, иначе устанавливает указанную

Пример: cncrg.toggle() //переключить видимость попапа

Пример: cncrg.toggle(true) //показать попап

openService(serviceId: string, options: object)

Открыть сервис по его ID

Пример: cncrg.openService('4b0ede4b-8fcc-48fb-81f7-80cae93cb35b_9b177996-da9a-4400-9c3c-88e0fa752ce0')

Options:

{
  hideBackBtn: false // Скрыть кнопку "назад"
}

openCategory(categoryId: string, options: object)

Открыть категорию по её ID

Пример: cncrg.openCategory('cc519850-0d99-4746-b29e-ca719b667b87_404a34b0-9958-4085-8963-665ec1a143a5')

Options:

{
  hideBackBtn: false // Скрыть кнопку "назад"
}

openChat()

Открыть чат с отелем

on(event: string, callback: function, once: boolean)

Подписаться на событие

Список всех событий есть в EVENTS.md

once - вызвать только один раз

Пример: cncrg.on('init', () => console.log('попап успешно инициализирован'))

Пример: cncrg.on('show_service', ({service}) => console.log('показан сервис ', service))

setAttributeValue(attrId: string, value: any)

Установить значение аттрибуту

resetCustomerId()

Удалить customerId

close()

Закрывает виджет, но при этом не просто скрывает, а устанавливает флаг чтобы при повторном открытии он загрузился заново

restart()

Перезагружает виджет

Автоматически его открывает если он еще не открыт

На деле просто сокращение для:

cncrg.close()
cncrg.toggle(true)

patchOptions(options: object)

Изменить изначальные настройки виджета

При ручной инициализации виджета см. Подключение виджета

Пример:

cncrg.patchOptions({ color: 'red' })

Query-параметры

showConciergeService

Если установлен на true или 1, то при заходе на сайт сразу открывается попап

conciergeCategory

Открыть категорию по её ID

conciergeService

Открыть сервис по его ID

conciergeSignContract / c_sgn

Открыть подписание контракта по его ID

При наличии автоматически открывает попап