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.