I’ve got a Kotlin Lambda function subscribed to EventBridge to handle conversation.end events from Genesys Cloud. The goal is to only process events for a specific support queue, so I’m trying to filter at the EventBridge rule level to save on Lambda invocations.
The rule uses an event pattern like this:
{
"source": ["com.genesyscloud"],
"detail-type": ["Conversation Ended"],
"detail": {
"conversation": {
"routing": {
"queueId": ["12345678-1234-1234-1234-123456789012"]
}
}
}
}
The problem is the Lambda still gets triggered for conversations in other queues. I’m logging the full EventBridge payload in the handler, and the JSON structure looks slightly different than what I assumed.
Here’s a snippet of the actual detail object I’m seeing in the logs:
{
"conversation": {
"id": "abc-123",
"routing": {
"queueId": "87654321-4321-4321-4321-210987654321",
"skillGroupIds": ["skill-1"]
}
}
}
It seems the queueId is a string, not an array, which matches the filter. But the rule isn’t matching. I’ve double-checked the queue ID is correct. Is the path detail.conversation.routing.queueId wrong? Or does the SDK event payload nest this deeper? I’m using the standard Genesys Cloud EventBridge integration, not a custom webhook forwarder.
Any idea why the filter is letting everything through?