Best way to get and possibilities of Call State

Hi

We're developing an integration through the REST API, to make and receive calls.

However we're facing some problems to identify the how works the Call State.
Follow some informations:

  • We've already checked the link below to understand how the presence change works.
    https://developer.genesys.cloud/useragentman/presence/understanding-presence

  • We must to implement call state features for Outbound Call, Inbound Calls and Manual Calls. We need to check the updated call state when the agent get a new call (or do one);

  • We've found the following request that bring us some call states
    GET /api/v2/conversations/calls

Questions:

  1. Are we correct using this request to bring the most updated call state?
    GET /api/v2/conversations/calls

  2. We need to know all the call state possibilies to identify the actual state and the meaning. For example:
    dialing - state to initiate a manual call ...
    terminated - call finished...
    ...

  3. During an active outbound call, we've seen 4 different purposes of the same call. But we have only the participant_id related to the last one (Purpose 4), besides that an outbound call were identified like an "inbound" direction considering the participant_id

-- Purpose 1
"purpose": "customer",
"state": "connected",
"direction": "outbound",

-- Purpose 2
"purpose": "acd",
"state": "terminated",
"direction": "inbound",
"disconnectType": "transfer",

-- Purpose 3
"purpose": "dialer.system",
"state": "terminated",
"direction": "outbound",

-- Purpose 4
"purpose": "agent",
"state": "connected",
"direction": "inbound",

  1. We need some extra call information:

Unique mailing ID - is the dialerContactId? (was setted as @ACCOUNT)
State - when more than one participant is returned from the request, which one we must consider to define the final valid state?
Actual phone number - would be address field, is default field?
Wrap Up timeout - would be wrapupTimeoutMs field?

  1. We tried using the following request, but it haven't all the call information we need:
    https://api.mypurecloud.com/api/v2/conversations/{conversation_id}

  2. Actually we need to know the agent state and the updated call state to take some decisions;

Thank you.

Have you reviewed the documentation about how the Genesys Cloud conversation model is defined: https://developer.genesys.cloud/routing/conversations/

Every human/service that is involved in a conversation is considered a participant. The "purpose" field will indicate their purpose in the conversation (See the "Conversation model example" section on the page above). Note: as Genesys features expand, more participant types may be added.

Each participant will have a 'state' value that will indicate the state at that point in time. The states are documented here (https://developer.genesys.cloud/routing/conversations/conversations-apis#get-api-v2-conversations-calls--conversationId-) look in the "200 - successful operation" response and expand the "participants" to see the "state" property and its valid values. These values are mostly self-explanatory.

The participant array itself should not be relied on for order and you should refer to the startTime/endTime fields to understand what order participants were involved in the conversation. Note some participants can be involved at the same time.

I often find it helpful to run some test scenarios and then use the Performance menu in Genesys Cloud to look at an Interaction's Timeline (View an interaction's timeline - Genesys Cloud Resource Center). The timeline takes data directly from the participant array in the JSON and lays it out in a visual representation.

I hope that helps you start to make some sense of the Genesys Cloud conversation model.

Hi,
We`ve reviewed the information about this link (developer.genesys.cloud/routing/conversations/)

And we could separate this interaction states:

  • Idle - Agent is waiting for a conversation
  • Interacting - Agent has been assigned a conversation
  • Communicating - Agent is on a non-ACD conversation, such as consulting with a colleague
  • Not Responding - Agent failed to answer an alerting conversation
  • Off Queue - Agent’s status is something other than On Queue

But some of then can not represent the updated call status.
For example:

  • The agent's routing status is IDLE, when he receives a new call, the routing changes to INTERACTING, but if the call is suddenly finished, the routing status keeps the Status INTERACTING, while the call ins't in course anymore, so we need to change the status to a new one before the WrapupTimeout is reached.

In this case, just check the routing status isn't enough, so we need to check the real call status at moment. But is confuse checking some call information during the routing process among ACD, Customer and Agent. Because We've just get the last participant_id, and the information here sometimes doesn`t represent what the call means. The call array starts correctly,

"purpose": "customer",
"state": "connected",
"direction": "outbound",

but after the call has been routed and reach the agent, the direction, doesn`t represent the concept of the call (I did an Outbound call, dialing from a mailing, but the last state represents an Inbound call, and this participant_id is what i got).

"purpose": "agent",
"state": "connected",
"direction": "inbound",

Here we`ve found some purpose meaning, but the array cascade is still confuse.

Conversation model example

The following example shows a conversation for a phone call. The conversation has a participants list that contains the people in the conversation. Each participant has a state property that indicates their status. The participant also has a purpose property that can have the following values:

  • user - Represents an internal Genesys Cloud user on a business conversation
  • external - Represents a non Genesys Cloud person on a business conversation
  • agent - Represents an Genesys Cloud agent on a contact center conversation
  • customer - Represents the customer on a contact center conversation
  • acd - Non-human participant that represents the ACD queue the conversation was routed through
  • ivr - Non-human participant that represents the voice IVR that the conversation was routed through
  • voicemail - Represents a Genesys Cloud user's voicemail
  • fax - Represents a non-human fax participant if the voice call is transmitting a fax document
  • group - Represents a non-human participant that represents the Group that was used for a group-ring voice conversation

We need an explanation and interpretation about the following response JSON

{
"id": "47b4b7cc-99e4-4810-b4e1-7d93a222ab77",
"participants": [
{
"id": "bf23f444-9fe7-4f8a-8f4e-c13b7ec6554f",
"address": "sip:Schroering420HD@172.18.182.10",
"startTime": "2016-03-07T18:02:55.422Z",
"connectedTime": "2016-03-07T18:02:59.651Z",
"endTime": "2016-03-07T18:03:15.524Z",
"state": "disconnected",
"direction": "outbound",
"disconnectType": "client",
"held": false,
"wrapupRequired": true,
"wrapupPrompt": "optional",
"user": {
"id": "43b126e2-5e2c-44fd-896b-8528ca344199",
"selfUri": "/api/v2/users/43b126e2-5e2c-44fd-896b-8528ca344199"
},
"queue": {
"id": "b32ab90f-0285-44a5-8eea-3425c628ff5c",
"selfUri": "/api/v2/routing/queues/b32ab90f-0285-44a5-8eea-3425c628ff5c"
},
"attributes": {},
"muted": false,
"confined": false,
"recordingState": "none",
"purpose": "user"
},
{
"id": "8e929853-2cad-4161-bbcc-27d99099c335",
"name": "Weather Line",
"address": "tel:+13172222222",
"startTime": "2016-03-07T18:02:55.867Z",
"connectedTime": "2016-03-07T18:02:59.651Z",
"endTime": "2016-03-07T18:03:15.523Z",
"state": "disconnected",
"direction": "outbound",
"disconnectType": "peer",
"held": false,
"wrapupRequired": false,
"queue": {
"id": "b32ab90f-0285-44a5-8eea-3425c628ff5c",
"selfUri": "/api/v2/routing/queues/b32ab90f-0285-44a5-8eea-3425c628ff5c"
},
"attributes": {},
"muted": false,
"confined": false,
"recordingState": "none",
"purpose": "external"
}
],
"otherMediaUris": ["/api/v2/emails/47b4b7cc-99e4-4810-b4e1-7d93a222ab77"],
"recordingState": "none",
"selfUri": "/api/v2/calls/47b4b7cc-99e4-4810-b4e1-7d93a222ab77"
}

Thank you.

Can you provide so idea of the solution you are building? If I know that then I can probably provide you some better advice on what APIs to use and what states to look at.

And to answer your question about explaining the Conversation JSON you provided. It appears that a Genesys user placed a non-queue, outbound call from a Genesys/Audiocodes 420HD hard phone. They called an external phone number (+13172222222 - weather line). They listened to the weather for 15-16 seconds before hanging up.

Hi,
Basically we need to integrate our custom CRM, using REST requests and get some call data.

In short the call flow is like:
Outbound/Inbound Call - LOGIN -> IDLE -> INTERACTION -> WRAPUP -> IDLE | LOGOUT | BREAK
With the call in course - HUNGUP | TRANSFER | APPOINTMENT

Manual call - LOGIN -> IDLE -> DIALING -> INTERACTION -> WRAPUP -> IDLE | LOGOUT | BREAK
With the call in course - HUNGUP | TRANSFER | APPOINTMENT

Notes:

  • We intend just manipulate 1 call each time, not simultaneously;
  • We won't manipulate different media time, only telephony.

Follow

  • So each interaction we need to know how to check the most updated Call State in the JSON call stack, because the call can be disconnected and the Routing Status keeps as INTERACTING;
  • As mentioned the call routes among different "purpose" and bring us differents data (dynamically);
  • When there is an incoming call we need mailing Unique ID and phone number;
  • We need to get the Wrap timeout after Interaction
  • We need to get the Call type depending on the kind.
    Example:
  • a call that was dialed by the mailing, we need to know how identify as an "outbound" call
  • a call received by the ACD we need to know how identify as "inbound" call
  • a call dialed by the agent we need to know how identify as "manual" call

Thank you.

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