Перейти к содержанию

Вебхуки

InfraVision поддерживает настройку исходящих вебхуков, которые могут быть вызваны пользовательскими правилами событий. По умолчанию полезная нагрузка вебхука будет содержать сериализованное представление объекта, снимки до и после (если применимо) и некоторые метаданные.

Регистрация обратных вызовов

Плагины могут регистрировать функции обратного вызова для дополнения полезной нагрузки вебхука собственными данными. Например, может быть желательно, чтобы плагин прикреплял информацию о статусе некоторых объектов на момент внесения изменения.

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

Пример

from extras.webhooks import register_webhook_callback
from my_plugin.utilities import get_foo_status

@register_webhook_callback
def set_foo_status(object_type, event_type, data, request):
    if status := get_foo_status():
        return {
            'foo': status
        }

Результирующая полезная нагрузка вебхука будет выглядеть следующим образом:

{
    "event": "updated",
    "timestamp": "2025-08-07T14:24:30.627321+00:00",
    "object_type": "dcim.site",
    "username": "admin",
    "request_id": "49e3e39e-7333-4b9c-a9af-19f0dc1e7dc9",
    "data": {
        "id": 2,
        "url": "/api/dcim/sites/2/",
        ...
    },
    "snapshots": {...},
    "context": {
        "foo": 123
    }
}

Примечание

Данные, возвращаемые всеми обратными вызовами вебхуков, будут скомпилированы в единый словарь context. Любые существующие ключи в этом словаре будут перезаписаны последующими обратными вызовами, которые включают эти ключи. Чтобы избежать коллизий с данными вебхуков, предоставляемыми другими плагинами, рассмотрите возможность использования пространства имён для данных вашего плагина внутри вложенного словаря:

return {
    'my_plugin': {
        'foo': 123,
        'bar': 456,
    }
}

Аргументы функции обратного вызова

Имя Тип Описание
object_type ObjectType ObjectType, представляющий объект-триггер
event_type String Тип события, вызвавшего вебхук (см. core.events)
data Dictionary Сериализованное представление объекта
request NetBoxFakeRequest Копия запроса (если есть), который привёл к изменению

Где определять обратные вызовы

Обратные вызовы вебхуков могут быть определены в любом месте плагина, но должны быть импортированы во время инициализации плагина. Если вы хотите хранить их в отдельном модуле, вы можете импортировать этот модуль в методе ready() PluginConfig:

def ready(self):
    super().ready()
    from my_plugin import webhook_callbacks