EventBridge Rule matching fails for Genesys Cloud Conversation events

Trying to wire up an AWS EventBridge rule to catch real-time Genesys Cloud events. We’ve got the integration configured in the Genesys Cloud admin console, pointing to our EventBridge bus. The docs say it should push events like conversation:created directly into the bus.

I’ve set up an EventBridge rule with a pattern that looks like this:

{
 "source": ["genesys.cloud"],
 "detail-type": ["Conversation Event"]
}

The target is a Lambda function that just logs the event payload to CloudWatch. I’m testing by starting a chat conversation in the sandbox environment. I can see the event hitting the bus if I put a rule that matches everything, but my specific rule never triggers.

When I look at the raw event in CloudWatch from the catch-all rule, the structure is slightly different than expected. The detail object contains a nested event field with the actual type. It looks like this:

{
 "source": "genesys.cloud",
 "detail-type": "Genesys Cloud Event",
 "detail": {
 "event": {
 "type": "conversation:created",
 "data": { ... }
 }
 }
}

My rule is failing because detail-type is Genesys Cloud Event, not Conversation Event as I assumed from some older blog posts. Also, the source seems to include the org ID sometimes? Or is that just the integration ID?

I tried updating the rule to match "detail-type": ["Genesys Cloud Event"] and adding a condition for "detail.event.type": ["conversation:created"], but EventBridge rules don’t support nested object matching in the pattern easily without using detail path syntax which I’m struggling with.

Has anyone got the exact JSON pattern that works? I don’t want to catch every single event and filter in the Lambda, that’s going to be expensive and slow. Need a clean way to match just the conversation lifecycle events. The documentation on the AWS side is pretty sparse on the exact payload shape from Genesys.

That pattern is too broad. EventBridge rules match the top-level source and detail-type, but Genesys Cloud pushes a specific detail object that contains the actual event type. Your rule is likely catching noise or nothing at all because the detail-type from the integration isn’t always “Conversation Event”.

Check the raw event in the EventBridge console or CloudWatch logs. The detail object usually has a eventType field. You need to match against that. Try this pattern instead:

{
 "source": ["genesys.cloud"],
 "detail": {
 "eventType": ["conversation:created"]
 }
}

Also, verify the source value. It might be genesys.cloud.integration depending on how the webhook was configured. If you’re still missing events, enable the EventBridge archive for that bus and search for genesys.cloud to see the exact structure. Don’t guess the schema. Look at what’s actually arriving.