Вебхуки
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