Авторизация
Авторизованная и неавторизованная зоны
Виджет Чата может работать в одном из двух режимов: авторизованном и неавторизованном.
Неавторизованный режим
Время существования сессии пользователя определяется настройками, заданными в Редакторе settings.json в объекте webchat/backend/unauthorizedHistory. Пример настроек:
{
"cookie": {"Max-Age": 15552000}
}
Где Max-Age - время хранения истории для посетителя сайта в секундах.
Идентификатор сессии сохраняется в cookie, параметры хранения задаются в объекте webchat/backend/unauthorizedHistory/cookie, где ключи соответствуют спецификациям директив cookie.
Для передачи в Чат уникального идентификатора пользователя, необходимо создать в глобальном Javascript-объекте window свойство, имя которого указано в Редакторе settings.json как значение параметра unauthClientId. Это нужно сделать до кода инициализации Чата. Если идентификатор сессии не задан, то он будет сгенерирован автоматически.
Пример строки в Редакторе settings.json:
"unauthClientId": "unauthClientId",
unauthClientId должен быть уникальным, постоянным и устойчивым к подбору — избегайте использования телефонов, email и других персональных данных. Если без них не обойтись, строго применяйте RSA-шифрование. При возникновении вопросов обращайтесь на support@edna.ru
Т.е., если вы решили поместить уникальный идентификатор неавторизованного пользователя в свойство объекта window, которое вы решили назвать unauthClientId, как в случае выше, то перед кодом инициализации Чата нужно добавить:
window.unauthClientId = 'идентификатор_неавторизованного_пользователя';
Авторизованный режим
Этот режим можно задействовать для авторизованого пользователя сайта, передав в Чат идентификатор, уникальный для каждого пользователя - для создания связи "клиент в АРМ"-"пользователь сайта". Сессия такого пользователя не привязана к текущей вкладке - авторизованный на сайте пользователь сможет получить историю переписки в любой вкладке, где будет открыт сайт с Чатом. Для передачи в Чат уникального идентификатора авторизованного пользователя, нужно создать в глобальном Javascript-объекте window свойство, имя которого задается в Редакторе settings.json как значение параметра clientId. Сделать это нужно до кода инициализации Чата. Строка в Редакторе settings.json, в самом простом виде, может выглядеть так:
"clientId": "clientId",
clientId должен быть уникальным, постоянным и устойчивым к подбору — избегайте использования телефонов, email и других персональных данных. Если без них не обойтись, строго применяйте RSA-шифрование. При возникновении вопросов обращайтесь на support@edna.ru
Т.е., если вы решили поместить уникальный идентификатор пользователя в свойство объекта window, которое вы решили назвать clientId, как в случае выше, то перед кодом инициализации следует вставить строку
window.clientId = 'идентификатор_пользователя';
Таким же образом имеется возможность передать дополнительные клиентские данные. Эти данные будут отображаться в общей информации о клиенте в АРМ оператора. Установите в параметре clientData settings.json имя свойства, в котором будете передавать данные клиента. Обычно название оставляют таким же - clientData, как в примере ниже:
"clientData": "clientData",
Затем в глобальном Javascript-объекте window задайте значение этого свойства. Для этого перед кодом инициализации добавьте строку
window.clientData = '<клиентские данные>';
где <клиентские данные> - JSON-объект, преобразованный в строку. Как видим, в примере данные передаются в window.clientData, так как именно clientData был задан в качестве имени параметра.
Пример передачи клиентских данных, состоящих из name, phone, email, personal_manager и customField:
window.clientData =
'{"name":"Name Surname","phone":"+7-999-999-99-99","email":"e@mail.com","personal_manager":"login","customField":"customValue"}';
Примечание: Примеры в SDK содержат все необходимые настройки.
Возможные проблемы с использованием одного и того же идентификатора клиента в разных режимах
В гостевом (неавторизованном) и авторизованном режимах Чата нельзя использовать один и тот же идентификатор для unauthClientId и clientId. Идентичные значения приводят к смешению тредов из разных зон безопасности: сообщения гостевого (неавторизованного) пользователя попадают в историю авторизованного, агент получает их как от одного клиента, что нарушает контекст и создаёт риск утечки персональных данных. При продолжении переписки после авторизации нельзя передавать тот же идентификатор пользователя: clientId в авторизованном канале обязан быть уникальным и привязанным к аутентифицированному пользователю.
Расширенная авторизация (опционально)
При необходимости, возможно передавать дополнительные данные в запросах на сервер.
За эти настройки отвечает секция параметров extendedAuth в Редакторе settings.json.
Параметр dataKey - строка, которая содержит имя свойства в глобальном Javascript-объекте window, в котором хранится объект с расширенными данными для авторизации.
Необязательный параметр, значение по умоланию extendedAuth
window.extendedAuth = <данные в формате JSON>;
Например:
{
"custom-property": "value for custom header",
"token": "some token value",
"type": "token type"
}
Параметр cookie.enabled - включение и отключение режима расширенной авторизации для HTTP(S)-запросов и Websocket-подключений посредством передачи cookie (boolean)
Параметр cookie.options - дополнительные атрибуты заголовков cookie (object)
Параметр ws.enabled - включение и отключение режима расширенной авторизации для Websocket-подключений (boolean)
Параметр ws.dataMap - данные для авторизации Websocket-соединения (object)
Параметр http.enabled - включение и отключение режима расширенной авторизации для HTTP(S)-запросов (boolean)
Параметр http.headersMap - объект, ключи - это имена заголовков, передаваемых в HTTP(S)-запросах, а значения - имена свойств из объекта с расширенными данными. Таким способом можно настроить передачу любого количества произвольных заголовков.
Пример:
"extendedAuth": {
"dataKey": "extendedAuth",
"http": {
"enabled": true,
"headersMap": {
"Header-Name": "custom-property",
"X-Auth-Token": "token",
"X-Token-Type": "type"
}
}
}
Пример запроса с дополнительными заголовками:
GET /some/backend/url
Host: example.com
Content-Type: application/json
Header-Name: value for custom header
X-Auth-Token: some token value
X-Token-Type: token type
...