Вебхуки

Вы можете настроить FindFace Security для автоматической отправки уведомлений об определенных событиях на заданный URL-адрес. Для этого создайте и настройте вебхук. При наступлении нужного события FindFace Security отправит HTTP-запрос на URL-адрес, указанный в настройках вебхука.

Вебхуки можно использовать для решения разнообразных задач, например, для уведомления пользователя об определенном событии, вызова определенных действий на целевом веб-сайте, при решении задач безопасности, таких как удаленное автоматическое управление доступом и др.

В этом разделе:

Настройка вебхука

Важно

Для создания вебхука необходимы права администратора.

Примечание

Для того чтобы использовать вебхуки, обязательно укажите по крайней мере один из параметров SERVICE_EXTERNAL_ADDRESS/EXTERNAL_ADDRESS в файле /etc/ffsecurity/config.py.

Для создания вебхука выполните следующие действия:

  1. Перейдите на вкладку Настройки. Выберите Вебхуки.

  2. Нажмите +.

    create_webhook_ru

  3. Введите имя вебхука.

    webhook_ru

  4. Укажите адрес, на который будут отправляться оповещения.

  5. FindFace Security будет автоматически отправлять оповещения о событиях, удовлетворяющих заданным фильтрам. Фильтровать события можно по следующим параметрам:

    • camera_group_in: id группы камер, число.
    • matched_dossier_in: id совпавшего досье, число.
    • matched: статус события совпадение (true или false), логический.
    • camera_in: id камеры, число.

    Важно

    Используйте только фильтры, соответствующие цели поиска. Для выключения фильтра удалите его из вебхука. Не оставляйте фильтр пустым ([]), поскольку в этом случае фильтр вернет пустой результат.

    Примечание

    Для получения оповещений обо всех совпадениях с досье передайте скобки без вложенных фильтров:

    {}
    

    Примечание

    За исключением matched, для каждого фильтра можно задать несколько значений. В этом случае вебхук будет активироваться при совпадении одного из значений фильтра. В примере ниже вы будете оповещены о событии с группы камер 1 или 3, если совпало досье с id 12 или 25.

    {
      "camera_group_in": [1, 3],
      "matched_dossier_in": [12,25]
    }
    
  6. Поставьте флажок Активный.

  7. Нажмите Сохранить.

Как работает вебхук

Для тестирования работы вебхука можно использовать следующий простой веб-сервер на Python, обеспечивающий захват отправленных вебхуком оповещений о событиях:

from pprint import pprint
from aiohttp import web


async def handle(request):
    pprint(await request.json())
    return web.Response(status=200)


app = web.Application()
# for aiohttp v 3.x
# app.add_routes([web.post('/', handle)])

# for aiohttp v 2.x
app.router.add_post('/', handle)

web.run_app(app, port=8888)

Если для вебхука не задано ни одного фильтра, данный веб-сервер будет получать оповещения о каждом произошедшем в системе событии. Оповещения отправляются в следующем формате:

======== Running on http://0.0.0.0:8888 ========
(Press CTRL+C to quit)
[{'acknowledged': True,
  'acknowledged_by': None,
  'acknowledged_date': '2019-04-09T12:29:23Z',
  'acknowledged_reaction': None,
  'camera': 2,
  'confidence': 0.9098,
  'created_date': '2019-04-09T12:29:23Z',
  'face': 'http://172.20.77.17/uploads/2019/04/09/event/122955_face_aT3ZZh.jpg',
  'features': {'age': None,
               'beard': None,
               'emotions': None,
               'gender': None,
               'glasses': None,
               'liveness': None},
  'frame': 'http://172.20.77.17/uploads/2019/04/09/event/122955_image_3msdHH.jpg',
  'frame_coords_bottom': 981,
  'frame_coords_left': 1630,
  'frame_coords_right': 1911,
  'frame_coords_top': 701,
  'id': '4173669353687265180',
  'looks_like_confidence': None,
  'matched': True,
  'matched_dossier': 1,
  'matched_face': '4173665826982243136',
  'matched_lists': [1],
  'normalized_photo': 'http://172.20.77.17/uploads/2019/04/09/event/122955_face0_E638aW.png',
  'quality': -0.000158,
  'scores': {'direction_score': -2.62964,
             'frame_no': 800,
             'score': -0.000158435,
            'tracking_duration': 34000}}]

Для просмотра статуса отправки вебхука в FindFace Security, выполните следующую команду:

sudo journalctl -u findface-security.service | grep 'WebhookUpdaterService'

Ответ в случае успеха:

Jan 24 14:08:49 ffsec4 ffsecurity[25316]: INFO     [WebhookUpdaterService] [SC:PcQr6bjA-VW:bea6c7b5] Webhook updater got event 4240944471810639375
Jan 24 14:08:49 ffsec4 ffsecurity[25316]: INFO     [WebhookUpdaterService] [SC:PcQr6bjA-VW:bea6c7b5] Event 4240944471810639375 enqueued for webhook 1 (1 items in queue)
Jan 24 14:08:49 ffsec4 ffsecurity[25316]: INFO     [WebhookUpdaterService:1] <queue:  0> Received 1 events from queue: ['4240944471810639375']
Jan 24 14:08:50 ffsec4 ffsecurity[25316]: INFO     [WebhookUpdaterService:1] <queue:  0> Attempting to send 1 events
Jan 24 14:08:50 ffsec4 ffsecurity[25316]: INFO     [WebhookUpdaterService:1] <queue:  0> Sent 1 events: ['4240944471810639375']

Ответ, если попытка была неудачной:

Jan 24 14:09:02 ffsec4 ffsecurity[25316]: INFO     [WebhookUpdaterService] [SC:TSlJfHlU-VW:107b37da] Webhook updater got event 4240944506705010458
Jan 24 14:09:02 ffsec4 ffsecurity[25316]: INFO     [WebhookUpdaterService] [SC:TSlJfHlU-VW:107b37da] Event 4240944506705010458 enqueued for webhook 1 (1 items in queue)
Jan 24 14:09:02 ffsec4 ffsecurity[25316]: INFO     [WebhookUpdaterService:1] <queue:  0> Received 1 events from queue: ['4240944506705010458']
Jan 24 14:09:02 ffsec4 ffsecurity[25316]: WARNING  [WebhookUpdaterService:1] <queue:  0> Backing off for 0.270 seconds after failure: ClientConnectorError(111, 'Connection refused')
Jan 24 14:09:03 ffsec4 ffsecurity[25316]: WARNING  [WebhookUpdaterService:1] <queue:  0> Backing off for 0.729 seconds after failure: ClientConnectorError(111, 'Connection refused')
Jan 24 14:09:03 ffsec4 ffsecurity[25316]: WARNING  [WebhookUpdaterService:1] <queue:  0> Backing off for 1.968 seconds after failure: ClientConnectorError(111, 'Connection refused')