Filtering EventBridge conversation.end events for specific queues

  • Does anyone know how to filter EventBridge events to only receive conversation.end for a specific queue?
  • We are migrating our Five9 reporting logic to Genesys Cloud and need to process queue-specific hangup metrics.
  • The default webhook sends every conversation.end event which overwhelms our consumer.
  • I attempted to use the filter pattern in the EventBridge rule.
  • Here is the JSON payload I used for the filter:
{
 "detail": {
 "resourceType": ["conversation"],
 "eventType": ["conversation.end"],
 "data": {
 "routing": {
 "queueId": ["550e8400-e29b-41d4-a716-446655440000"]
 }
 }
 }
}
  • The rule triggers but the events still arrive with empty routing data or wrong queue IDs.
  • I verified the queue ID is correct via the /api/v2/routing/queues endpoint.
  • The event detail structure seems deeper than I expected.
  • I suspect the queueId is nested differently in the actual event payload.
  • Our Python consumer runs in us-east-1 and processes these events.
  • We need this to work for our Chicago-based support team metrics.
  • I checked the documentation but it lacks specific examples for queue filtering.
  • Is there a known workaround or a correct path for the filter?
  • The current setup causes unnecessary processing costs.
  • I want to ensure we only catch the relevant events.
  • Any insights on the correct filter structure would help.

The problem here is relying on EventBridge input transformers for logic that belongs in the source. You cannot filter conversation.end by queue in the rule itself because the queueId is nested deep within the routing object, and EventBridge filtering has strict path limitations.

Stop trying to filter at the edge. Configure the webhook in Genesys Cloud to only emit events for the specific routing object. Use the /api/v2/webhooks endpoint. Set the events array to include conversation:end. Crucially, use the filters object to target the routing.queueId. This reduces payload noise before it hits AWS.

{
 "name": "Queue Specific End",
 "events": ["conversation:end"],
 "filters": [
 {
 "name": "routing.queueId",
 "op": "equals",
 "values": ["your-queue-id-here"]
 }
 ],
 "address": "https://your-lambda-url",
 "contentType": "application/json"
}

If you need dynamic queue filtering, use a Lambda trigger on the generic webhook and filter in code. Do not burn EventBridge throughput on unfiltered streams. Terraform state will handle the webhook resource definition. Keep the provider version pinned to avoid schema drift.

Make sure you verify the event payload structure before filtering.

  1. Confirm the routing object contains the queueId.
  2. Update the EventBridge rule filter to match $.detail.routing.queueId.
  3. Test with a sample event to ensure the path resolves correctly.

If I remember correctly…
Cause: analytics endpoints are cached so they lag during k6 spikes. try the websockets api instead for real-time data…
Solution: use genesyscloud.dataaction in Terraform to …