Widget Workflow
Widget Workflow встраивает готовый интерфейс биометрической проверки непосредственно в веб-страницу. Backend создаёт сессию заранее настроенного Workflow и передаёт браузеру session_id. Браузер загружает библиотеку Biometric.Vision, монтирует виджет в контейнер и обрабатывает событие завершения.
Workflow определяет состав и порядок технологий. Виджет отвечает за интерфейс и прохождение этих технологий, а клиентская система — за создание сессии, размещение виджета и обработку итогового состояния.
Границы интеграции¶
В интеграции участвуют четыре стороны:
- backend клиентской системы хранит
API KEY, создаёт сессию и проверяет её итоговое состояние; - браузер получает только
session_id, загружает библиотеку и предоставляет контейнер для виджета; - Biometric.Vision отображает интерфейс и выполняет технологии Workflow;
- конечный пользователь предоставляет доступ к камере и проходит проверку.
Не передавайте API KEY в браузер
API KEY должен оставаться в секретах backend. Не помещайте его в HTML, JavaScript, query-параметры, клиентские логи или системы аналитики.
sequenceDiagram
title Встраивание Widget Workflow в веб-приложение
participant API as Backend клиентской системы
participant WEB as Браузер
participant WIDGET as Biometric.Vision
participant USER as Конечный пользователь
note over API,WEB: Сессия Workflow создана на backend
API-->>WEB: {session_id}
WEB->>WIDGET: Загрузка flow-widget.umd.js
WEB->>WIDGET: FlowWidget.startSession({id, selector, ...})
WIDGET->>USER: Интерфейс проверки
USER->>WIDGET: Прохождение технологий Workflow
WIDGET-->>WEB: finish {aborted, result?}
WEB->>API: Уведомление о завершении
API->>API: Проверка итогового состояния
Ограничение Document Recognition V2
Технология Document Recognition V2 не работает в Widget Workflow. Используйте этот способ интеграции только с поддерживаемыми технологиями выбранного Workflow.
1. Подготовка контейнера¶
Страница должна содержать контейнер с уникальным id. Задайте ему явные width и height: виджет рассчитывает внутреннюю разметку по фактическим размерам контейнера. Также установите position: relative и разрешите прокрутку.
Для мобильных устройств рекомендуется полноэкранный контейнер. На desktop можно использовать фиксированные размеры, но контейнер всё равно должен иметь явную ширину и высоту.
Страница должна работать в защищённом контексте HTTPS, чтобы браузер мог предоставить доступ к камере. Запрашивайте только разрешения, необходимые технологиям Workflow.
2. Загрузка и запуск виджета¶
Подключите библиотеку с домена Remote UI:
После загрузки вызовите FlowWidget.startSession. Метод принимает следующие параметры:
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
id |
string |
Да | Значение session_id, полученное от backend |
selector |
string |
Да | CSS-селектор контейнера для виджета |
locale |
string |
Нет | Язык интерфейса |
localeList |
string[] |
Нет | Языки в переключателе; массив должен содержать хотя бы одно поддерживаемое значение |
isMobile |
boolean |
Нет | Принудительный тип устройства вместо автоматического определения |
shadow |
boolean |
Нет | Монтирование в Shadow DOM; значение по умолчанию — false |
Поддерживаемые значения locale: kz, en, ru, my, de, es, fa, fr, it, ja, kg, ko, pt. Если localeList содержит неподдерживаемый язык, при его выборе интерфейс отображается на английском.
Включите shadow: true, если глобальные стили страницы искажают виджет или стили виджета влияют на страницу. Shadow DOM изолирует CSS, сохраняя доступ к камере и другим датчикам в контексте хост-страницы.
3. Полный пример¶
Пример принимает готовый session_id от backend, регистрирует обработчик завершения и запускает Widget Workflow:
<style>
html,
body,
.workflow-widget-shell {
width: 100%;
height: 100%;
margin: 0;
}
#workflow-widget {
width: 100%;
height: 100%;
position: relative;
overflow: scroll;
}
</style>
<div class="workflow-widget-shell">
<div id="workflow-widget"></div>
</div>
<script
type="module"
src="https://remote.biometric.vision/widget/flow-widget.umd.js"
></script>
<script type="module">
const sessionId = '<session_id>'
window.addEventListener('finish', (event) => {
const { aborted, result } = event.detail
// Update the UI and ask your backend for the authoritative state.
console.log({ aborted, result })
}, { once: true })
FlowWidget.startSession({
id: sessionId,
selector: '#workflow-widget',
locale: 'ru',
shadow: true,
})
</script>
4. Обработка завершения¶
После завершения клиентской части виджет отправляет событие finish на объекте window. Данные доступны в event.detail:
| Поле | Тип | Описание |
|---|---|---|
aborted |
boolean |
true, если проверка прервана из-за ошибки на стороне клиента |
result |
object |
Данные, собранные виджетом; поле может отсутствовать при завершении через QR-режим |
Событие finish относится к жизненному циклу интерфейса. Не принимайте доверенное бизнес-решение только по данным из браузера: передайте управление backend и получите актуальный результат сессии. Обработчик события должен корректно работать при отсутствии result.
Если в Workflow включён show_qr и камера недоступна либо включён always_mobile, виджет показывает QR-код. Пользователь продолжает проверку на мобильном устройстве, а виджет отслеживает состояние сессии. После завершения на мобильном устройстве виджет отправляет то же событие finish; дополнительная клиентская логика не требуется.