Missing recordingState for Get Conversations.calls

Hi,

.NET SDK is not offering the possibilty to capture
recordingStatus
securePause
in Get conversations.calls at the participant level (not just the conversation level)

We are using .NET SDK version 195

Comparing with the Platform API:

https://developer.genesys.cloud/devapps/api-explorer#get-api-v2-conversations-calls

Thanks,
Jean-Christophe

There is no property named that in the API or SDK. However, there is recordingState. It's documented in both the API Explorer docs and the SDK.

The securePause property is there also.

Thanks Tim, my bad I have updated the title to reflect the correct syntax.

As mentioned these are not available in the .NET SDK version 195
Is the solution to build our own SDK from source then ?

Hello,

What do you mean?
Your code does not compile/build. You have an error at runtime. ....
What's your code?

RecordingState and SecurePause are both available in CallConversation and in CallMediaParticipant.

Regards,

the challenge is this:

If you GET /api/v2/conversations/call using Curl/Postman/JS then you get an object back which contains a list of conversatations, within each conversation a list of participants and on each participant, a recordingStatus and securePause property.

There is also a recordingStatus and securePause property on the conversation object as it happens.

If an agent accepts a voice call which is being recorded, then the recordingStatus and securePause properties on the customer participant are correct, and reflect the fact that the recording is not paused.

If you perform a secure pause operation (either using the PATCH /api/v2/conversations/call api or using the PUT /api/v2/conversations/call/recordingstate API - behaviour is the same no matter which you use), then the securePause property on the customer participant is correct, and so is the securePause on the conversation object. Resume (via the same APIs) also works and updates both flags correctly.

However, if the agent puts the caller on hold, does a consultation call with a flow, and then resumes the call with the customer, THEN performs a secure pause (using the UI or either of these APIs) then there is a problem:

The customer participant securePause flag is set correctly, but the securePause flag on the conversation shows that the recording is NOT PAUSED. The UI similarly does not show the padlock symbol in red, indicating that the UI does not think the recording is paused.

When you look at the call recording via the UI, you can see that the recording was in fact paused.

This does look like a bug to me - but ther might be a workaround: if we could access the securePause property on the customer participant, we could tell whether the recording is paused or not.

Unfortunately, whilst we can see the securePause property in the JSON returned from GET /api/v2/conversations/calls, the .NET nuGet Package "PureCloudPlatform.Cklkient.V2" version 195.0.0 does not expose the securePause property on the participant. It's clearly being returned by Genesys, but the .NET API does not make it available.

So I think there are two bugs here:

  1. The securePause property on the conversation object does not reflect the fact that the recording is paused under some circumstances
  2. Although Genesys correctly returns the securePause property on the conversation participant object (specifically for purpose=customer), the .NET API does not permit this to be accessed.

I hope that makes sense - from our perspective, issue 2 is the more serious as it prevents us being able to work around issue 1.

I hope this clarifies.

Please open a case with Genesys Cloud Care to report this bug. This is related to a new feature that was just released yesterday.

I can't find any package by that name, and it definitely isn't one Genesys publishes. Is that just a typo and you meant https://www.nuget.org/packages/PureCloudPlatform.Client.V2? Just making sure we're on the same page.

The .NET SDK does have the SecurePause property as far as I can tell, as demonstrated in the GitHub source code for the SDK linked above. That code is what is used to compile the public package. It's theoretically possible there was an issue with publishing the package, but I'm not set up to decompile the DLL to verify myself. I have asked a colleague to take a look, and he has verified that he can access these properties.

To add to what Time already replied, I don't understand what you mean by "does not expose the securePause property".
In none of your message, you are saying what you are checking/where/how.

SecurePause and RecordingState are described in the Platform API .Net SDK documentation
GetConversationsCalls returns a CallConversationEntityListing with entities being CallConversation
CallConversation does have a SecurePause and RecordingState.
CallConversation contains CallMediaParticipants.
CallMediaParticipant does have a SecurePause and RecordingState.

The following quick code works (tried via a mono project):

// Get active call conversations for the logged in user
CallConversationEntityListing result = apiInstance.GetConversationsCalls();
CallConversation firstCall = result.Entities[0];
Console.WriteLine("Call RecordingState: " + firstCall.RecordingState);
Console.WriteLine("Call SecurePause: " + firstCall.SecurePause.ToString());
CallMediaParticipant firstParticipant = firstCall.Participants[0];
Console.WriteLine("Participant RecordingState: " + firstParticipant.RecordingState);
Console.WriteLine("Participant SecurePause: " + firstParticipant.SecurePause.ToString());

So I don't understand what you mean when you are saying that the SDK does not expose the SecurePause.

Regards,

Hi Jerome

I think I understand where the confusion arises.

In C#, we call conversationsApi.GetConversations("Call") - which I had assumed mapped to GET /api/v2/conversations/call - but in fact it's /api/v2/conversations with a query parameter of communicationType=Call.

This returns the list of active conversations associated with the current agent (we're trying to pause the recording for the current call from a desktop app that the customer needs to take payment from)

In c#, this returns a ConversationEntityListing object, which exposes the conversations in the "Entities" property, which is a list of Conversation objects.

The Conversation object contains a list of participants in the Participants property, but these do not expose any recording information. They are present in the json returned by Genesys, but not in the c# wrapper object. They probably should be.

On the other hand, the GetConversationsCall() method returns a CallConversation object which as you say contains the CallMediaParticipant objects and does expose the recording status.

In short: I think there is an issue with data being returned in the JSON from the GET /api/v2/conversations call, which isn't accessible from .NET applications - specifically the Participant object not containing any information about recording status even though it is actually returned by Genesys.

However, there's a workaround which is to get the conversationid from /api/v2/conversations response, and make another api call to GET /api/v2/conversations/call which will enable us to determine the recording status via the customer participant there.

Sorry for getting the initial API call wrong and sending you looking in the wrong direction!

Thanks

David Groves

RecordingState and and SecurePause are also exposed when invoking the GetConversations("Call").
GetConversations returns a ConversationEntityListing with entities being Conversation
Conversation does have a SecurePause and RecordingState.
Conversation contains a list of Participant
Participant exposes different media sessions - for Call - Calls with entities being Call
That's because you are requesting conversations (which can contain sessions of different media types: calls, chats, ...).
Call does have a SecurePause and RecordingState.

// Get active conversations for the logged in user
ConversationEntityListing result = apiInstance.GetConversations("Call");
Conversation firstConversation = result.Entities[0];
Console.WriteLine("Conversation RecordingState: " + firstConversation.RecordingState);
Console.WriteLine("Conversation SecurePause: " + firstConversation.SecurePause.ToString());
Participant firstParticipant = firstConversation.Participants[0];
Call firstParticipantCall = firstParticipant.Calls[0];
Console.WriteLine("Participant's Call RecordingState: " + firstParticipantCall.RecordingState);
Console.WriteLine("Participant's Call SecurePause: " + firstParticipantCall.SecurePause.ToString());

Regards,

This topic was automatically closed 31 days after the last reply. New replies are no longer allowed.