Для интеграции окна диалога во внешние системы требуется поддержка встраивания HTML фрейма во внешнее приложение.
Для интеграции необходимо добавить фрейм, открывающий следующую ссылку:
В шаблоне ссылки задаются следующие параметры:
requestId – ID диалога для выделения в списке и отражения пользователю
clientIds – список IDs клиентов через запятую для фильтрации в списке диалогов
requestIds – список IDs диалогов через запятую для фильтрации в списке диалогов
cellPhone - номер телефона для получения списка клиентов. Используется, если явно не переданы параметра выше (requestId, cleintIds, requestIds)
clientProfile - идентификатор клиента в канале для получения списка клиентов. Используется, если явно не переданы параметра выше (requestId, cleintIds, requestIds, cellPhone)
-
showClientPanel – true или false в зависимости от необходимости отражать правую панель
showDialogList – true или false в зависимости от необходимости отражать список диалогов
showBorder - true или false в зависимости от необходимости отражать темную рамку вокруг блока с диалогами. По умолчанию применяется значение true
showUserMenu - true или false в зависимости от необходимости скрывать иконку с инициалами пользователя и привязанным меню в правом верхнем углу. По умолчанию применяется значение true
isExternal - true или false в зависимости встраивается диалог во внешнюю систему или нет. В случае true скрывается основное меню с модулями слева
-
externalObjectId – идентификатор для авторизации. Такой идентификатор может формироваться ботом Sherlock Plarform по согласованным правилам или импортироваться из внешней системы. В качестве идентификатора может использоваться ID во внешней системе, email или телефон. Также Sherlock Paltform может формировать временный код для входа и отправлять ссылку с кодом во внешнее API.
externalSystemCode – идентификатор системы с которой идет синхронизация
ExternalId - значение, идентичное Query параметру externalObjectId
InternalId - идентификатор пользователя (Id из tbl_User)
ObjectTypeId - всегда 1 для идентификатора пользователя
ExternalSystemId - идентификатор внешней системы (Id из tbl_ExternalSystem)
ExpiresAt - заполнять, если необходимо ограничение срока действия внешнего идентификатора
Для создания такой записи через API доступен следующий метод:
POST https:///api/v2/ExternalObjectMapping/UpdateByCode
В качестве тела запроса передавать Json следующего формата
{ "externalId": "Внешний идентификатор пользователя", "internalId": "Guid – id пользователя", "objectTypeId": 1, // для пользователя всегда 1 "externalSystemId": "Guid – id внешней системы" }
Помимо этого, когда окно со списком диалогов интегрируется во фрейм, имеется возможность отлавливать событие на выбор диалога с клиентом и отображать id диалога и id клиента.

Ниже приведён пример кода страницы с отображением id диалога и id клиента при выборе диалога:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Example-external-dialog</title> </head> <body style="height: 100vh; width: 100vw; margin: 0; display: flex;"> <iframe width="60%" height="100%" src="http://localhost:4200/externalDialog?showClientPanel=false&showDialogList=true&showBorder=false&showUserMenu=false"> </iframe> <ul style="width: 40%; height: 100%;" id="sherlock-message-list"></ul> </body> <script> let isNullOrUndefined = (val) => val == null || val == undefined; document.addEventListener("DOMContentLoaded", (event) => { let messageList = document.getElementById('sherlock-message-list'); var ifr = document.getElementsByTagName("iframe")[0]; var ifr_window = ifr.contentWindow; console.log(ifr_window); if (!isNullOrUndefined(messageList) && !isNullOrUndefined(ifr_window)) { ifr_window.addEventListener("message", function(e){ console.log(e); if (!isNullOrUndefined(e) && !isNullOrUndefined(e.data) && e.data.eventId == 'sh-click-request') { var li = document.createElement("li"); li.appendChild(document.createTextNode(JSON.stringify(e.data))); messageList.appendChild(li); } }); } }); </script> </html>
Важно: для работы фрейма на сервере необходимо:
Отключить опцию X-Frame-Options в web.config
Включить опцию Content-Security-Policy с указанием домена, где будет размещено внешнее приложение (<add name="Content-Security-Policy" value="frame-ancestors 'self'">)