EventBridge Rule fires but Target Lambda never receives Genesys Cloud event payload

Trying to wire up a real-time trigger from Genesys Cloud to an AWS Lambda via EventBridge. The rule matches the source com.genesyscloud.events, and CloudTrail shows the rule is triggering. However, the target Lambda never executes. No logs in CloudWatch.

Here’s the EventBridge rule pattern:

{
 "source": ["com.genesyscloud.events"],
 "detail-type": ["Conversation Event"],
 "detail": {
 "event": ["conversation.created"]
 }
}

The Lambda handler expects a standard EventBridge input:

def lambda_handler(event, context):
 print(event)
 return {
 'statusCode': 200,
 'body': 'Processed'
 }

I’ve verified the IAM role attached to the Lambda has events:InvokeTargets and lambda:InvokeFunction permissions. The trust policy allows events.amazonaws.com.

What’s weird is that if I send a manual test event from the EventBridge console using the exact same JSON structure, the Lambda works fine. It’s only when the event comes from the Genesys Cloud integration that it drops silently.

Checked the EventBridge dashboard metrics. Invocations on the rule is incrementing. MatchingEvents is also up. But Invocations on the Lambda function itself is flat. Zero hits.

Could there be a serialization issue with the payload coming from GC? The detail object from GC is nested deep. Maybe the size is hitting a limit? Or is there a specific permission missing for cross-service invocation from a specific region?

The GC instance is in us-east-1. EventBridge and Lambda are also in us-east-1. No cross-region setup here.

Any ideas on why the rule matches but the target invocation fails silently? Looking at the dead-letter queue config next, but want to rule out basic setup errors first.

Check the Lambda permission. EventBridge needs explicit permission to invoke it, or the event just gets dropped. Run this to add the permission: aws lambda add-permission --function-name myFunc --statement-id GenesysEvent --action lambda:InvokeFunction --principal events.amazonaws.com --source-arn arn:aws:events:us-east-1:123456789:rule/MyRule. Also verify the EventBridge rule target ARN matches the exact Lambda version or alias.

Spot on with the permission check. That’s usually the silent killer. But if the rule fires and the Lambda still sleeps, you’re likely hitting a payload size or schema mismatch. Genesys webhooks can get chunky, especially with nested participant details. EventBridge has a 256KB limit per event. If the conversation.created payload exceeds that, it drops straight into the dead-letter queue without invoking the target.

Check the EventBus metrics for InvocationsFailed and ExpiredEvents. Also, ensure your Lambda handler isn’t crashing on startup due to missing environment variables. A quick test is to send a minimal mock event via the EventBridge console to isolate it from Genesys.

# Check for failed invocations in CloudWatch Logs Insights
fields @timestamp, @message
| filter @message like /"errorMessage"/
| sort @timestamp desc
| limit 20

If the payload is too large, consider using a S3 bucket as an intermediate sink via a simple Lambda that just writes the raw body to S3, then trigger your main logic from there. Keeps the event flow lean.