Analytic Events from AI Bridge (Kafka) Not Displaying in Smart Client Alarm Manager

I’ve come back after an extended period away from XProtect and AI Bridge. I tried to run it along with the IVA I’ve been working on and I can see it sending analytic events along happily; however, they do not appear in the Alarm Manager in the Smart Client.

I’m guessing something has changed with the version of XProtect or AI Bridge I’m using since I last had this working with AI Bridge v1.6 (or 1.7) and a much earlier version of XProtect.

I’m currently running AI Bridge v2.0.0 with XProtect Corporate 2025 R1.

So, working through things, I updated the payload I send to be in line with “http://www.insights.data/2024/06/analytics-event.jsonld”. Here is a sample payload (sent to key “ae63bb5a-fc34-4516-bf0e-54e9a0ec5a8e/28dc44c3-079e-4c94-8ec9-60363451eb40”, which is the relevant stream ID):

{"@context":"http://www.insights.data/2024/06/analytics-event.jsonld","type":"AnalyticsEvent","name":"Event Name","timestamp":"2025-09-19T00:23:52.353Z","fromSource":{"type":"Reference","uuid":"ae63bb5a-fc34-4516-bf0e-54e9a0ec5a8e"},"includesSnapshot":[{"type":"Snapshot","name":"Image","description":"Image of person.","imageData":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCABeACADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwCaKWJmwsPPuxrQtYxKMS3UNuv+2RVHW9J1nw+YF1mKKCScEqiSBzgdzistxHN8zjLep5rruaHTSTx2nyWl3HM5/iUZA/SoW+13QxNeoF9NgFYkTCLhB+VX7KW0eaOO9SdPMbaGXpmqRUVcz/E2uSeIvEc1/tZLfy1jhQjG0Ac8e5yaqbto61LqmkXmkTCPUAsMhGQrHkj6daz2cnvWaJZfEhCgKck96t6PLFBq1vcXsZniiyQvo3Y1jxOV57Vu+HdF1DWj/ocYK4J3McDFORvRqRh8SuO8WXI8Q3R1VAIPIjI2O5ZmwOmfSuYR9wqwwlFi8zKVQ8c5qlGcd6lM5y0h6jNd/wCD/FWmeGNGNxcyCe4lUhYAec+/oK84MgHep7ZfNP7uMsy8gqpNDKR0GqW6tpMybVChWYAcc4rh4p3IAPWu9lw0LQD+LiuBlHl3sijoCRTRnckZ2AyTXomhaaiWkchRQzBc5X2rztIpbqRYYRl24AJxXqEF9i3QKPuqB+lTI0izDt1bz49xY4IPP1ritRxHqlwo4Ac16jFCN+CoINea+IhGmvXgi6Bs49KDI0fCUPn6o3/TIBvrXXxx7EAANc/8P49slzcSKdhGFNdbGwZBxQyloT2+BIryfKinLHHQV5HrDrLrV9MjZjcjBr1WS832VwNvWNh+leY2umeeXy4yGxzUxZCO28F24GgM3GCxH610EKKEUAVk+D7K4FlLD5kWxTnpW9GgXC4GR3psq5//2Q=="}]

I can see in the proxy logs things like: “2025-09-19T00:04:25Z Sending analytics event to ‘http://:22331/Central/AlarmServiceToken’ succeeded.”

(The event map is also successfully updated to point “event.12355b21-5a25-4a1d-b6d2-f6e02c9b95b5.event_name.analytics_event” to the management server host.)

If I run tcpdump in the proxy container, I can see the calls succeed with an HTTP 200 OK response. If it matters, here is the HTTP request:

POST /Central/AlarmServiceToken HTTP/1.1
Host: <management-server>:22331
User-Agent: Go-http-client/1.1
Content-Length: 3514
Content-Type: text/xml; charset=utf-8
Soapaction: http://videoos.net/2/CentralServerAlarmCommand/IAlarmCommandToken/AddEvent
Accept-Encoding: gzip
 
<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><AddEvent xmlns="http://videoos.net/2/CentralServerAlarmCommand"><token>TOKEN#7dcfa633-219a-40a3-a66f-a85945632f70#<management-server>//ServerConnector#</token><baseEvent i:type="a:AnalyticsEvent" xmlns:a="urn:milestone-systems" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><a:EventHeader><a:ID>7dc8cc60-d4ca-48d2-8c96-8d8c40c9a0ef</a:ID><a:Timestamp>2025-09-19T00:29:48.311Z</a:Timestamp><a:Class></a:Class><a:Type></a:Type><a:Version>1.0</a:Version><a:Priority>0</a:Priority><a:PriorityName></a:PriorityName><a:Name>Event Name</a:Name><a:Message>Event detection / reporting</a:Message><a:CustomTag></a:CustomTag><a:Source><a:Name></a:Name><a:Description></a:Description><a:FQID><a:ServerId><a:Type>XPCORS</a:Type><a:Hostname><management-server></a:Hostname><a:Port>7563</a:Port><a:Id>911c2e50-71d1-46af-bfde-b7043a521b77</a:Id><a:Scheme>http</a:Scheme></a:ServerId><a:ParentId>911c2e50-71d1-46af-bfde-b7043a521b77</a:ParentId><a:ObjectId>ae63bb5a-fc34-4516-bf0e-54e9a0ec5a8e</a:ObjectId><a:FolderType>0</a:FolderType><a:Kind>5135ba21-f1dc-4321-806a-6ce2017343c0</a:Kind></a:FQID></a:Source><a:ExpireTimestamp>2025-09-20T00:29:48.311Z</a:ExpireTimestamp><a:MessageID>831b73ca-512a-4187-b96e-e5c32d63717a</a:MessageID></a:EventHeader><a:Description></a:Description><a:StartTime>2025-09-19T00:29:45.311Z</a:StartTime><a:EndTime>2025-09-19T00:29:51.311Z</a:EndTime><a:Location></a:Location><a:Count>0</a:Count><a:RuleList i:nil="true"/><a:ObjectList i:nil="true"/><a:ReferenceList i:nil="true"/><a:SnapshotList><a:Snapshot><a:TimeOffset>0</a:TimeOffset><a:Width>0</a:Width><a:Height>0</a:Height><a:HasOverlay>false</a:HasOverlay><a:SizeInBytes>0</a:SizeInBytes><a:Image>/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCABeACADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwCaKWJmwsPPuxrQtYxKMS3UNuv+2RVHW9J1nw+YF1mKKCScEqiSBzgdzistxHN8zjLep5rruaHTSTx2nyWl3HM5/iUZA/SoW+13QxNeoF9NgFYkTCLhB+VX7KW0eaOO9SdPMbaGXpmqRUVcz/E2uSeIvEc1/tZLfy1jhQjG0Ac8e5yaqbto61LqmkXmkTCPUAsMhGQrHkj6daz2cnvWaJZfEhCgKck96t6PLFBq1vcXsZniiyQvo3Y1jxOV57Vu+HdF1DWj/ocYK4J3McDFORvRqRh8SuO8WXI8Q3R1VAIPIjI2O5ZmwOmfSuYR9wqwwlFi8zKVQ8c5qlGcd6lM5y0h6jNd/wCD/FWmeGNGNxcyCe4lUhYAec+/oK84MgHep7ZfNP7uMsy8gqpNDKR0GqW6tpMybVChWYAcc4rh4p3IAPWu9lw0LQD+LiuBlHl3sijoCRTRnckZ2AyTXomhaaiWkchRQzBc5X2rztIpbqRYYRl24AJxXqEF9i3QKPuqB+lTI0izDt1bz49xY4IPP1ritRxHqlwo4Ac16jFCN+CoINea+IhGmvXgi6Bs49KDI0fCUPn6o3/TIBvrXXxx7EAANc/8P49slzcSKdhGFNdbGwZBxQyloT2+BIryfKinLHHQV5HrDrLrV9MjZjcjBr1WS832VwNvWNh+leY2umeeXy4yGxzUxZCO28F24GgM3GCxH610EKKEUAVk+D7K4FlLD5kWxTnpW9GgXC4GR3psq5//2Q==</a:Image></a:Snapshot></a:SnapshotList><a:Vendor><a:Name></a:Name><a:CustomData></a:CustomData></a:Vendor></baseEvent></AddEvent></s:Body></s:Envelope>

I have a corresponding analytic event setup in the Management Server as well as a corresponding Alarm Definition tied to that event and with the appropriate stream/camera as a source trigger.

If I run the “Test Event” function from the Analytic Event screen, the alarm triggers just fine in the Smart Client’s Alarm Manager.

If it matters, I’m running the AI Bridge with “vps-authorization” set to “false” as this is in a local development environment.

Any help would be greatly appreciated.

Thanks as always.

Ok, it looks like I missed the breaking change that comes with AI Bridge 2.0.0 concerning analytics events. The description is a little short on specifics and a touch confusing (examples would be helpful), but I’m going to see if I can work through it to get it working.

In case anyone can jump in here and help show me where I’m wrong:

  • I’m assuming the “app name” mentioned in the release notes for AI Bridge 2.0.0 appears under Processing Servers → → Registered applications. Let’s assume this is called “app 1” (complete with space).
  • Further assume there’s an analytics_event topic called “movement”.
  • I’ve updated the analytic event definition in the Management Client under “Analytic Events”, changing what was previously called “movement” to “app 1/movement”.
  • In the Alarm Definition pertaining to the same analytic event, I can see the triggering event has been updated with the updated analytic event name from above.
  • For good measure, I restarted the Management Server service.
  • I started up the AI Bridge as well as my IVA.
  • I can see the events still being sent to XProtect, but still no joy with the alarm appearing in the Smart Client.

Ok, I think I might have it working. It looks like the “app-name / event-name” format MUST include the spaces on either side of the forward slash. That seems to have done it.

It might be worthwhile calling that out in the release notes. I think it would also be worth having these notes somewhere in the docs, e.g. the AI Bridge reference manual or XProtect Management Client docs.

Hi Duncan,

Glad you got this fixed!

Breaking and other changes, like “New name format for analytic events” can be found here What’s new in Milestone AI Bridge. I’ll pass your proposal over to the documentation team, thanks!