Webhook Event - 'conversation.participants' Array Empty

Hey all, sorry if this is kinda dumb, but I’m running into a weird issue with conversation webhooks. We’re subscribed to the conversations.message event and, for some flows, the conversation.participants array is completely empty. It’s like it doesn’t even see the participants.

I’m using the Java SDK 4.0.261 and we’re on Genesys Cloud release 23.1.20.1. The Architect flow triggering the message is pretty simple - just a Voice IVR with a transfer to an agent. It’s not a chat or email flow. The webhook endpoint is a simple Spring Boot app that just logs the event payload to Kafka.

Here’s an example of what we’re getting - the conversationId is valid, and the message data looks okay, but no participants:

{
 "eventTimestamp": "2024-02-29T14:30:00.000Z",
 "eventId": "some-uuid-here",
 "eventType": "conversations.message",
 "conversation": {
 "id": "123e4567-e89b-12d3-a456-426614174000",
 "name": "Voice Conversation",
 "state": "active",
 "participants": []
 },
 "message": {
 "id": "abcdef01-2345-6789-abcd-ef0123456789",
 "timestamp": "2024-02-29T14:29:55.000Z",
 "type": "text",
 "text": "Hello!"
 }
}

We’ve checked the event filter in the webhook subscription and it’s pretty broad - just filtering on conversation.state != disconnected. I was wondering if maybe it’s something to do with the way the flow handles participant data? It almost feels like the agent isn’t being properly added as a participant before the message event fires.

I’m also looking at API rate limits. Is it possible the initial conversation creation event is getting throttled and the participant info isn’t being sent? The documentation isn’t super clear on the relationship between the conversation.create event and subsequent conversation.message events.

I’ve tried looking at the conversation details in the GC interface and they do show the agent as a participant, so it’s not like they aren’t being added at all. Just… not showing up in the webhook payload.

Anyone run into anything similar? Is there something I’m missing with the participant data?

1 Like

This behavior is typically indicative of a race condition within the notification service. The payload is often delivered before the participant record is fully committed to the database.

A common workaround is to implement a retry logic with a short delay. The team should perform a GET request to /api/v2/conversations/messages/{conversationId}/participants/{participantId}/wrapupcodes to verify the record exists before processing.

1 Like

The race condition mentioned in the earlier reply is a common culprit, but it’s often just a payload synchronization lag. If conversation.participants is empty, the event was likely triggered before the participant record was fully committed.

Instead of a blind retry, hit the conversation endpoint directly using the conversationId from the webhook.

curl -X GET "https://api.mypurecloud.com/api/v2/conversations/{conversationId}" \
-H "Authorization: Bearer {accessToken}"

Data is usually AVAILABLE by the time the HTTP request hits the API, even if the webhook payload was stripped. If that returns empty too, it’s a legitimate provisioning delay. This is usually solved by a 500ms sleep before the first GET call.

1 Like