EventBridge filter rule not catching conversation.end for specific queue

Trying to set up an EventBridge rule to trigger a Lambda only when a conversation ends for a specific queue in Genesys Cloud. The goal is to avoid processing every single ended conversation in the region.

I have the webhook configured in Genesys Cloud to send conversation.end events to EventBridge. That part works fine, I see the events arriving in the EventBridge console.

The problem is the EventBridge rule filter. I want to filter by routing.queueId. When I test the rule with the actual event payload, it matches. But in production, the rule never triggers for my target queue.

Here is the event pattern I am using in the rule:

{
 "source": [
 "genesys.cloud"
 ],
 "detail-type": [
 "Conversation Ended"
 ],
 "detail": {
 "routing": {
 "queueId": [
 "12345678-abcd-1234-abcd-123456789012"
 ]
 }
 }
}

The actual event payload from Genesys looks like this (simplified):

{
 "source": "genesys.cloud",
 "detail-type": "Conversation Ended",
 "detail": {
 "id": "conv-uuid",
 "routing": {
 "queueId": "12345678-abcd-1234-abcd-123456789012",
 "queueName": "Support Tier 1"
 }
 }
}

I’ve tried changing the filter to use detail.routing.queueId as a string instead of an array, but that didn’t help either. The event definitely has the queueId field. Is there a nested structure issue I am missing? Or does EventBridge not support deep object filtering for this specific source?

Also, I noticed the detail object sometimes contains a routing object and sometimes just flat fields depending on the event type. Is conversation.end consistent?

Any help on the correct JSON path for the filter would be appreciated.