Send HTTP Webhook
Send metadata, snapshots, clips from the pipeline to a HTTP endpoint / API at a periodic interval or based on a trigger.
Overview
Send HTTP Webhook node sends pipeline metadata to a Web service periodically or when a trigger condition is met.
Inputs & Outputs
- Inputs : 1, Media Format : Any
- Outputs : 1, Media Format: Same as Input
- Output Metadata : None
Properties
Property | Description | Type | Default | Required |
---|---|---|---|---|
trigger_type | When to collect metadata. Options: custom_trigger , auto_trigger , periodic , startup , shutdown . Auto Trigger is when significant node properties change. | enum | auto_trigger | true |
trigger | Custom trigger condition. Send a webhook when this condition evaluates to true. Conditional on trigger_type being custom_trigger | trigger-condition | null | false |
interval | Publish interval in seconds. How frequently to send webhook. Set to 0 to publish every time metadata is collected. | number | 0 | true |
webhook_url | POSTs to this URL directly from the Gateway | string | null | true |
format | Webhook format. Options: application_json , form_multipart , custom_body_post , http_get | enum | application_json | true |
metadata_filter_patterns | Comma separated list of metadata patterns to keep in the JSON body of the webhook | metadata-list | null | false |
custom_body_template | Use Jinja2 template syntax to customize the body of the POST request. Conditional on format being custom_body_post | text | {} | true |
json_format | Metadata JSON format. Options: dynamic_keys : Dynamic Keys uses certain attributes (such as ROI names) as keys, useful for JSON Path operations. static_keys : Static Keys converts all such attributes to a named static key. | enum | dynamic_keys | true |
include_frame_metadata | Attach frame metadata. Conditional on format being form_multipart | bool | true | false |
include_snapshot | Attach frame snapshot. Conditional on format being form_multipart | bool | false | false |
include_object_snapshots | Attach snapshots for all matching objects from the time the trigger happened with the webhook. Conditional on format being form_multipart | model-label | null | false |
clip_node | Attach the most recent clip from the named Save Clip node with the webhook. Conditional on format being form_multipart | node | null | false |
include_clip_metadata | Attaches metadata from the clip along with the media. Conditional on format being form_multipart | bool | false | false |
max_media_wait_time | Max. wait time until media clip is available in seconds. Conditional on format being form_multipart | number | 10 | false |
auth | Authentication method. Options: none , basic , digest | enum | none | false |
username | Username for authentication | string | null | false |
password | Password for authentication | string | null | false |
extra_headers | Comma separated list of headers to insert into the request. Format: HeaderName:HeaderValue . Ex Authorization:Bearer xad32248fhsad, X-Extra-Header:Foo | string | null | false |
max_retries | Maximum number of times to retry in case of failure | number | 3 | false |
compression | If true, enable GZIP content-encoding for the webhook data. ex. true / false Note: This is only applied to this Frame's metadata, not any other attachments in case of Form Multipart POST format | bool | true | false |
debug | Log debug messages? | bool | false | false |
Webhook Format
JSON POST
When format
is set to application_json
, the contents of the Frame's metadata (see Frame Metadata section below) are sent as the body of a POST request made to the webhook_url
.
Form Multipart POST
When format
is set to form_multipart
, the POST request to the webhook_url
can contain one or more of the following "files" when the corresponding settings are enabled in the node settings.
Key | FileName | File Contents |
---|---|---|
metadata | meta.json (or meta.json.gz if compression is enabled) | Contains the contents of the triggering Frame's Metadata described below. Maximum 1 per POST request. |
snapshot | snapshot.jpg | Contains the snapshot from the frame when the webhook was triggered. |
clip | <capture-timestamp>.mp4 | Media Clip generated by a Save Clip Node |
clipmetadata | <capture-timestamp>.mp4.json | Metadata corresponding to the entire Media Clip, in the same format as described below. |
Frame Metadata
This section describes the format of each Frame's metadata that is sent in the webhook.
Key | Value |
---|---|
version | 1 : Dynamic Keys2 : Static Keys |
deployment_id | The deployment ID of the deployment that produced this metadata. |
meta | Contains Metadata object, a dictionary of timestamp - frame level metadata pairs. |
meta.<relative_timestamp> | Contains Frame level metadata for a frame with this timestamp (relative to start of stream). This metadata is a set of key-value pairs containing metadata from each node in the pipeline up until the Webhook node, so exact properties will vary. If batch property of the Webhook node is set to True, the meta element will contain multiple frame's metadata, each with it's own timestamp. |
{
"version": 1,
"deployment_id": "6372b7e6-e5d6-45b8-b31b-c400a3754ff4",
"meta": {
"0:06:40": {
"timestamp": "2022-11-04T23:41:34.036574Z",
"nodes": {
"video1":{
"type": "video_source",
"source_id": "6372b7e6-e5d6-45b8-b31b-c400a3754ff4",
"source_name": "Milestone-AXIS P1455-LE (172.16.0.38) - Camera 1",
"source_type": "stream",
"uri": "rtsp://172.16.0.45:554/live/658040e2-fe47-4d4b-9a27-2217af4c4193"
},
"annotate_presence1": {
"type": "annotate_presence",
"rois": {
"roi1": {
"coords": [[1,1],
[100,100],
[200,200]],
"total_objects": 2,
"objects_entered_delta": 1,
"objects_exited_delta": 0,
"objects_above_max_time_threshold_count": 1,
"current_objects_count": 2,
"current_objects": {
"15069984211300461000": {
"first_seen": 20,
"time_present": 3600
},
"1506998428100461000": {
"first_seen": 22,
"time_present": 20
}
}
}
}
}
},
"objects": [
{
"attributes": [],
"probability": -0.10000000149011612,
"class_id": 0,
"rect": {
"top": 236.29208374023438,
"height": 15.62222957611084,
"left": 339.904052734375,
"width": 31.91175079345703
},
"id": 1506998428100461000,
"label": "car"
},
{
"attributes": [],
"probability": -0.10000000149011612,
"class_id": 0,
"rect": {
"top": 250.60275268554688,
"height": 19.088224411010742,
"left": 235.5812530517578,
"width": 35.78194046020508
},
"id": 1506998428100461000,
"label": "car"
},
{
"attributes": [],
"probability": -0.10000000149011612,
"class_id": 0,
"rect": {
"top": 447.784912109375,
"height": 244.92181396484375,
"left": 0,
"width": 158.60867309570312
},
"id": 1506998428100460500,
"label": "car"
},
{
"attributes": [],
"probability": -0.10000000149011612,
"class_id": 0,
"rect": {
"top": 495.3921813964844,
"height": 205.00851440429688,
"left": 427.19415283203125,
"width": 135.38002014160156
},
"id": 1506998428100460500,
"label": "car"
},
{
"attributes": [],
"probability": -0.10000000149011612,
"class_id": 0,
"rect": {
"top": 518.0147705078125,
"height": 194.1524200439453,
"left": 239.1914825439453,
"width": 158.16836547851562
},
"id": 1506998428100460500,
"label": "car"
},
{
"attributes": [],
"probability": -0.10000000149011612,
"class_id": 0,
"rect": {
"top": 538.0975952148438,
"height": 173.88412475585938,
"left": 96.46807098388672,
"width": 154.6107940673828
},
"id": 1506998428100461000,
"label": "car"
}
],
}
}
}
{
"version": 2,
"deployment_id": "6372b7e6-e5d6-45b8-b31b-c400a3754ff4",
"meta": [
{
"relative_timestamp": "0:06:40",
"timestamp": "2022-11-04T23:41:34.036574Z",
"nodes": [
{
"id": "video1",
"type": "video_source",
"source_id": "6372b7e6-e5d6-45b8-b31b-c400a3754ff4",
"source_name": "Milestone-AXIS P1455-LE (172.16.0.38) - Camera 1",
"source_type": "stream",
"uri": "rtsp://172.16.0.45:554/live/658040e2-fe47-4d4b-9a27-2217af4c4193"
},
{
"id": "annotate_presence1",
"type": "annotate_presence",
"rois": [
{
"label": "roi1",
"coords": [[1,1],
[100,100],
[200,200]],
"total_objects": 2,
"objects_entered_delta": 1,
"objects_exited_delta": 0,
"objects_above_max_time_threshold_count": 1,
"current_objects_count": 2,
"current_objects": [
{
"id": "15069984211300461000",
"first_seen": 20,
"time_present": 3600
},
{
"id": "1506998428100461000",
"first_seen": 22,
"time_present": 20
}
]
}
]
}
],
"objects": [
{
"attributes": [],
"probability": -0.10000000149011612,
"class_id": 0,
"rect": {
"top": 236,
"height": 15,
"left": 339,
"width": 31
},
"id": 1506998428100461000,
"label": "car"
},
{
"attributes": [],
"probability": -0.10000000149011612,
"class_id": 0,
"rect": {
"top": 250,
"height": 19,
"left": 235,
"width": 35
},
"id": 1506998428100461000,
"label": "car"
},
{
"attributes": [],
"probability": -0.10000000149011612,
"class_id": 0,
"rect": {
"top": 447,
"height": 244,
"left": 0,
"width": 158
},
"id": 1506998428100460500,
"label": "car"
},
{
"attributes": [],
"probability": -0.10000000149011612,
"class_id": 0,
"rect": {
"top": 495,
"height": 205,
"left": 427,
"width": 135
},
"id": 1506998428100460500,
"label": "car"
},
{
"attributes": [],
"probability": -0.10000000149011612,
"class_id": 0,
"rect": {
"top": 518,
"height": 194,
"left": 239,
"width": 158
},
"id": 1506998428100460500,
"label": "car"
},
{
"attributes": [],
"probability": -0.10000000149011612,
"class_id": 0,
"rect": {
"top": 538,
"height": 173,
"left": 96,
"width": 154
},
"id": 1506998428100461000,
"label": "car"
}
]
}
]
}
Custom Body POST
When format
is set to custom_body_post
, the contents of custom_body_template
are sent as the body of a POST request made to the webhook_url
.
custom_body_template
uses Jinja2 Template Syntax for customizing the body of the POST request.
Variables available to the template:
Variable | Description |
---|---|
meta | Original webhook metadata in JSON format. This contains the contents of the metadata as per the Frame Metadata section above. |
application_id | The application ID of the deployment that produced this metadata. |
application_name | The application name of the deployment that produced this metadata. |
deployment_id | The deployment ID of the deployment that produced this metadata. |
deployment_name | The deployment name of the deployment that produced this metadata. |
gateway_id | The gateway ID of the deployment that produced this metadata. |
gateway_name | The gateway name of the deployment that produced this metadata. |
Example templates
Static text content:
Text content
Reference specific metadata (when used with json_format
set to static_keys
):
{ "deployment_id": "{{ deployment_id }}", "source_id": "{{ meta['meta'][0]['nodes'][0]['source_id'] }}" }
Metadata reinserted as is:
{{ meta | tojson }}
Metadata
This node does not add any new metadata to the frame.
Metadata Property | Description |
---|---|
None | None |
Updated 3 months ago