Получение результатов верификации через webhooks

Didit не отправляет email при изменении статуса верификации - настройте webhook, чтобы ваш бэкенд узнавал об этом в момент события, и проверяйте подпись перед тем, как доверять данным.

Short answer

Webhook - это HTTP-запрос, который Didit отправляет на ваш URL при изменении. Добавьте назначение в разделе API & Webhooks, подпишитесь на нужные события - подстановочного знака нет, перечислите каждое - сохраните секрет подписи и проверяйте подпись, прежде чем что-либо обрабатывать.

Didit не отправляет вам email, когда сессия переходит в In Review или Declined. Чтобы узнавать об изменении статуса в момент, когда оно происходит, не обновляя консоль вручную, настройте webhook - URL на вашем сервере, на который Didit автоматически отправляет обновление.

Webhooks - это рекомендуемый способ интеграции. Опрос endpoint решений работает как запасной вариант, но он медленнее, требует больше запросов и пропускает события, которые доставляются только через webhook, - правки данных, внесённые ревьюером, изменения статуса транзакций и изменения на уровне сущностей.

#Настройка

  1. Перейдите в API & Webhooks

    В Business Console откройте приложение, для которого хотите получать события, затем перейдите в API & Webhooks.

  2. Добавьте назначение

    Задайте название, публичный HTTPS-URL вашего эндпоинта и выберите нужные события - как минимум изменения статуса сессии.

  3. Сохраните секрет подписи

    Назначение показывает секрет один раз. Сохраните его - ваш сервер использует его, чтобы подтвердить, что запрос действительно пришёл от Didit, а не от кого-то, кто выдаёт себя за него. Полное описание проверки: проверка подписи.

  4. Проверьте настройку

    Используйте Try Webhook на той же странице, чтобы отправить полностью сформированное тестовое событие - сценарии approved, declined, in review, KYB, entity и transaction - на ваш эндпоинт. Так можно проверить интеграцию без запуска настоящей верификации.

Назначения webhook в консоли Didit с подписанными событиями и историей доставки
  1. Add destination регистрирует URL, на который Didit отправляет результаты.
  2. Проверяйте каждую доставку по этому секрету подписи, прежде чем ей доверять.
  3. Выберите, какие события будет получать назначение.
  4. Test Webhook отправляет пример payload, чтобы вы могли убедиться, что ваш эндпоинт его принимает.
У каждого назначения свои подписанные события, секрет подписи и лог доставки.

#На какие события можно подписаться

Подстановочного знака нет - перечисляйте каждое нужное семейство событий. Разнести их по нескольким назначениям - это нормально и часто даже удобнее.

СобытиеСрабатывает, когда
status.updatedМеняется статус сессии KYC или KYB. То, что вам почти наверняка нужно
data.updatedДанные верификации редактируются после создания - например, ревьюер исправляет поле
user.status.updatedКонсолидированный пользователь переходит между ACTIVE, FLAGGED и BLOCKED
user.data.updatedМеняется профиль, счётчики или идентификаторы консолидированного пользователя
business.status.updatedМеняется статус консолидированной компании
business.data.updatedМеняются данные консолидированной компании
transaction.createdТранзакция создана, и по ней готов первоначальный вердикт
transaction.status.updatedСтатус транзакции меняется впоследствии
travel_rule.status.updatedМеняется статус обмена по Travel Rule
Note

Событий session.status.updated или kyc.completed не существует. Если вы подписались на название, которого нет в этом списке, вы не получите ничего - и это будет выглядеть в точности как сбой доставки. Сначала проверьте название.

#Что должен делать ваш эндпоинт

  • Проверять подпись раньше всего остального. Считайте HMAC от сырого тела запроса - никогда от пересериализованной версии разобранного JSON, потому что повторная сериализация меняет байты, и подпись перестаёт совпадать. Используйте сравнение за постоянное время.
  • Быстро возвращать 2xx. Тяжёлую работу выполняйте асинхронно, уже после ответа.
  • Быть идемпотентным. Ключом должен быть id события либо связка id сессии + статус + тип webhook. Повторы и дубликаты случаются.
  • Обрабатывать каждый статус, который для вас важен, включая те, что приходят намного позже онбординга - одобренная сессия может позже перейти в In Review из-за постоянного AML-мониторинга.
  • Только HTTPS. Обычные HTTP-эндпоинты не поддерживаются.

#Повторы

При 5xx, 404, таймауте или обрыве соединения Didit повторяет попытку дважды:

  • Первый повтор примерно через 1 минуту после первоначального сбоя
  • Второй повтор примерно через 4 минуты после этого

После этого доставка прекращается. Каждая попытка логируется отдельно во вкладке Deliveries назначения, поэтому вы можете увидеть, что именно произошло, а не гадать.

Important

Два повтора за пять минут - это не надёжная очередь. Если ваш эндпоинт не работал час, эти события потеряны. Сверяйтесь при старте, опрашивая endpoint решений по сессиям, для которых у вас нет финального статуса - webhooks это быстрый путь, а не единственный.

#За файрволом или WAF

Didit доставляет события со статического IP 18.203.201.92 с user agent DiditWebhook/2.0. Если ваш периметр блокирует неизвестных клиентов - как, например, поведение Cloudflare по умолчанию, - разрешите этот IP для принимающего хоста, иначе доставки будут падать, не доходя до вашего кода.

#Ещё нет бэкенда?

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

#Дальнейшие шаги