Speech Analytics API returning empty transcript for voice interactions

Why does this setting seem to block transcript retrieval even though the conversation ID is valid? I am building a React Native wrapper around the Genesys Cloud Speech and Text Analytics API to pull full voice-to-text transcripts for offline review. The app runs on a Brazil server time zone, so latency isn’t the issue here. I get a 200 OK from the initial fetch, but the transcript array inside the response is always empty.

I am using the endpoint GET /api/v2/analytics/conversations/details/query with a filter for conversationType: voice. The response structure looks correct, but when I drill into the transcript field, it returns null or an empty list. I have verified that speech analytics is enabled for the specific queue and that the interaction date falls within the retention window. Here is the snippet of the payload I am sending:

{
 "interval": "2023-10-01T00:00:00.000Z/2023-10-02T00:00:00.000Z",
 "view": "conversation",
 "select": ["conversationId", "transcript"],
 "where": ["conversationType EQ voice"]
}

Is there a specific permission scope I am missing in the OAuth token, or does the transcript data require a separate polling mechanism via the /conversations/voice/summary endpoint? The documentation is vague on whether the transcript is included in the initial query response or if I need to make a secondary call to /api/v2/analytics/conversations/voice/{id}/transcript. Any code examples for handling this async flow in JavaScript would be appreciated.

The quickest way to solve this is checking the status field. Transcripts aren’t ready immediately. Use GET /api/v2/analytics/conversations/details/media/{conversationId} and wait for status to equal completed. If it stays processing, your webhook isn’t triggering the async job. Check POST /api/v2/analytics/conversations/queue config.

The simplest way to resolve this is…

  • Poll GET /api/v2/analytics/conversations/details/media/{id} until status is completed.
  • Empty transcripts often mean the async job is still processing.
  • Use the POST /api/v2/analytics/conversations/queue endpoint to explicitly trigger analysis if webhooks are silent.