cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
585
Views
5
Helpful
1
Replies

Webhook for Courtesy CallBacks Tasks missing hang-ups

BlakeR
Level 1
Level 1

Hello,

We are developing a live dashboard for WebEx Contact Center utilizing the Webhooks Subscription API. We noticed a quirk when it comes to Courtesy Callbacks.

Issue #1:
When the Caller calls in and a new TaskID is generated, we receive the "task:new" and "task:parked" Webhooks as expected. What we think is missing in the case of Courtesy Callbacks is another Webhook event (that does not exist currently) that indicates that the Caller requested a Callback. Without an indication that a Callback was requested, we can only treat the TaskID as a "Live" call when it really is not "Live" while it sits in the Queue waiting for an Agent. We do not know it's a Callback until we receive the "task:connect" Webhook with the "direction" and "outboundType" keys set to "OUTBOUND" and "COURTESY_CALLBACK" respectively. The gap between "parked" and "connect" can be 15+ minutes. 

A new Webhook type for "Caller hung up, but is waiting for a Callback" would be helpful.

Issue #2:
We noticed a separate issue where we receive several "task:ended" Webhooks if the Caller is not answering their phone (Caller RONA). The Callback TaskID reenters the Queue, but order of the Webhooks received is: "connect" -> "parked" -> "ended". This makes the TaskID appear to be complete, but it's actually still in the Queue waiting for another Agent to attempt to connect to the Caller. This is a easier to handle on our side because we can look at the "terminatingParty" and "reason" keys for "System" and "RONA Timer Expired" respectively. The TaskID isn't truly ended until either: we receive the "capture:available" Webhook (if captures are enabled) or we receive a "task:ended" with "terminatingParty" and "reason" keys of "Agent|Customer" and "<Agent|Customer> Left" respectively.

Sample data below: RowID is simply the order we received the Webhooks and inserted them into a SQLite database. Actual IDs/Numbers redacted for privacy.

Normal Callback:

typerowidcreatedTimetaskIDWebHookIDorigindestinationqueueIddirectionoutboundTypeterminatingPartyreason
task:new231302022-10-14 21:06:51.000TaskID_01WebhookID_01Caller_Number_01CC_Number_01NULLINBOUNDNULLNULLNULL
task:parked231542022-10-14 21:07:08.000TaskID_01WebhookID_01Caller_Number_01CC_Number_01QueueID_01INBOUNDNULLNULLNULL
task:connect246282022-10-14 21:22:54.000TaskID_01WebhookID_02CC_Number_01Caller_Number_01QueueID_01OUTBOUNDCOURTESY_CALLBACKNULLNULL
agent:state_change246292022-10-14 21:22:54.000TaskID_01WebhookID_02CC_Number_01Caller_Number_01QueueID_01NULLNULLNULLNULL
task:connected246342022-10-14 21:22:57.000TaskID_01WebhookID_03CC_Number_01Caller_Number_01QueueID_01OUTBOUNDCOURTESY_CALLBACKNULLNULL
task:connected246532022-10-14 21:23:05.000TaskID_01WebhookID_04CC_Number_01Caller_Number_01QueueID_01OUTBOUNDCOURTESY_CALLBACKNULLNULL
agent:state_change246542022-10-14 21:23:05.000TaskID_01WebhookID_04CC_Number_01Caller_Number_01QueueID_01NULLNULLNULLNULL
task:ended250132022-10-14 21:28:13.000TaskID_01WebhookID_05CC_Number_01Caller_Number_01QueueID_01OUTBOUNDCOURTESY_CALLBACKAgentAgent_Left
agent:state_change250142022-10-14 21:28:14.000TaskID_01WebhookID_05CC_Number_01NULLQueueID_01NULLNULLNULLNULL
capture:available250172022-10-14 21:28:17.000TaskID_01WebhookID_06NULLNULLNULLNULLNULLNULLNULL
agent:state_change250832022-10-14 21:29:14.000TaskID_01WebhookID_07NULLNULLNULLNULLNULLNULLNULL

 

Callback with multiple Caller RONAs:

typerowidcreatedTimetaskIDWebHookIDorigindestinationqueueIddirectionoutboundTypeterminatingPartyreason
task:new55842022-10-14 18:34:03.000TaskID_01WebhookID_01Caller_Number_01CC_Number_01NULLINBOUNDNULLNULLNULL
task:parked56582022-10-14 18:34:45.000TaskID_01WebhookID_01Caller_Number_01CC_Number_01QueueID_01INBOUNDNULLNULLNULL
task:connect75852022-10-14 18:49:28.000TaskID_01WebhookID_02CC_Number_01Caller_Number_01QueueID_01OUTBOUNDCOURTESY_CALLBACKNULLNULL
agent:state_change75862022-10-14 18:49:28.000TaskID_01WebhookID_02CC_Number_01Caller_Number_01QueueID_01NULLNULLNULLNULL
task:parked76132022-10-14 18:49:44.000TaskID_01WebhookID_02CC_Number_01Caller_Number_01QueueID_01OUTBOUNDCOURTESY_CALLBACKNULLNULL
agent:state_change76142022-10-14 18:49:44.000TaskID_01WebhookID_02CC_Number_01NULLQueueID_01NULLNULLNULLNULL
task:ended76152022-10-14 18:49:44.000TaskID_01WebhookID_03CC_Number_01Caller_Number_01NULLOUTBOUNDCOURTESY_CALLBACKSystemRONA_Timer_Expired
task:connect79032022-10-14 18:52:19.000TaskID_01WebhookID_04CC_Number_01Caller_Number_01QueueID_01OUTBOUNDCOURTESY_CALLBACKNULLNULL
agent:state_change79042022-10-14 18:52:19.000TaskID_01WebhookID_04CC_Number_01Caller_Number_01QueueID_01NULLNULLNULLNULL
agent:state_change79452022-10-14 18:52:35.000TaskID_01WebhookID_04CC_Number_01NULLQueueID_01NULLNULLNULLNULL
task:parked79462022-10-14 18:52:35.000TaskID_01WebhookID_04CC_Number_01Caller_Number_01QueueID_01OUTBOUNDCOURTESY_CALLBACKNULLNULL
task:ended79472022-10-14 18:52:35.000TaskID_01WebhookID_05CC_Number_01Caller_Number_01NULLOUTBOUNDCOURTESY_CALLBACKSystemRONA_Timer_Expired
task:connect79962022-10-14 18:52:51.000TaskID_01WebhookID_06CC_Number_01Caller_Number_01QueueID_01OUTBOUNDCOURTESY_CALLBACKNULLNULL
agent:state_change79972022-10-14 18:52:51.000TaskID_01WebhookID_06CC_Number_01Caller_Number_01QueueID_01NULLNULLNULLNULL
task:parked80242022-10-14 18:53:07.000TaskID_01WebhookID_06CC_Number_01Caller_Number_01QueueID_01OUTBOUNDCOURTESY_CALLBACKNULLNULL
agent:state_change80252022-10-14 18:53:07.000TaskID_01WebhookID_06CC_Number_01NULLQueueID_01NULLNULLNULLNULL
task:ended80262022-10-14 18:53:07.000TaskID_01WebhookID_07CC_Number_01Caller_Number_01NULLOUTBOUNDCOURTESY_CALLBACKSystemRONA_Timer_Expired
task:connect81322022-10-14 18:54:03.000TaskID_01WebhookID_08CC_Number_01Caller_Number_01QueueID_01OUTBOUNDCOURTESY_CALLBACKNULLNULL
agent:state_change81332022-10-14 18:54:03.000TaskID_01WebhookID_08CC_Number_01Caller_Number_01QueueID_01NULLNULLNULLNULL
task:parked81612022-10-14 18:54:19.000TaskID_01WebhookID_08CC_Number_01Caller_Number_01QueueID_01OUTBOUNDCOURTESY_CALLBACKNULLNULL
task:ended81622022-10-14 18:54:19.000TaskID_01WebhookID_09CC_Number_01Caller_Number_01NULLOUTBOUNDCOURTESY_CALLBACKSystemRONA_Timer_Expired
agent:state_change81632022-10-14 18:54:19.000TaskID_01WebhookID_08CC_Number_01NULLQueueID_01NULLNULLNULLNULL
task:connect82192022-10-14 18:54:47.000TaskID_01WebhookID_10CC_Number_01Caller_Number_01QueueID_01OUTBOUNDCOURTESY_CALLBACKNULLNULL
agent:state_change82202022-10-14 18:54:47.000TaskID_01WebhookID_10CC_Number_01Caller_Number_01QueueID_01NULLNULLNULLNULL
task:connected82242022-10-14 18:54:49.000TaskID_01WebhookID_11CC_Number_01Caller_Number_01QueueID_01OUTBOUNDCOURTESY_CALLBACKNULLNULL
task:connected82402022-10-14 18:55:05.000TaskID_01WebhookID_12CC_Number_01Caller_Number_01QueueID_01OUTBOUNDCOURTESY_CALLBACKNULLNULL
agent:state_change82412022-10-14 18:55:05.000TaskID_01WebhookID_12CC_Number_01Caller_Number_01QueueID_01NULLNULLNULLNULL
agent:state_change83312022-10-14 18:56:03.000TaskID_01WebhookID_13CC_Number_01NULLQueueID_01NULLNULLNULLNULL
agent:state_change83392022-10-14 18:56:05.000TaskID_01WebhookID_14NULLNULLNULLNULLNULLNULLNULL
task:ended85682022-10-14 18:58:02.000TaskID_01WebhookID_15CC_Number_01Caller_Number_01NULLOUTBOUNDCOURTESY_CALLBACKCustomerCustomer_Left
capture:available85692022-10-14 18:58:03.000TaskID_01WebhookID_16NULLNULLNULLNULLNULLNULLNULL
1 Accepted Solution

sdoddali
Cisco Employee
Cisco Employee

Hello BlakeR,

Issue - 1)
For courtesy callback The webhook events will follow the below sequence.

Line 16: type: 'task:new',
Line 37: type: 'task:parked',
Line 58: type: 'task:connect',
Line 78: type: 'task:connected',
Line 120: type: 'task:ended',

// There will not be any event between parked and connect because the call is still active in the system even though the caller left.

The same architecture is followed on the analyzer as well. the task shows 'parked' in the analyzer while caller is waiting for callback.

For issue 2) 

I do see an ended event is sent when the agent is going RONA, Below is the sequence.

Line 16: type: 'task:new',
Line 37: type: 'task:parked',
Line 58: type: 'task:connect',
Line 79: type: 'task:parked',
Line 101: type: 'task:ended',
Line 122: type: 'task:connect',
Line 142: type: 'task:connected',
Line 162: type: 'task:connected',
Line 184: type: 'task:ended',

// We should not be sending ended event when agent goes to RONA, we will open a bug for the same.

View solution in original post

1 Reply 1

sdoddali
Cisco Employee
Cisco Employee

Hello BlakeR,

Issue - 1)
For courtesy callback The webhook events will follow the below sequence.

Line 16: type: 'task:new',
Line 37: type: 'task:parked',
Line 58: type: 'task:connect',
Line 78: type: 'task:connected',
Line 120: type: 'task:ended',

// There will not be any event between parked and connect because the call is still active in the system even though the caller left.

The same architecture is followed on the analyzer as well. the task shows 'parked' in the analyzer while caller is waiting for callback.

For issue 2) 

I do see an ended event is sent when the agent is going RONA, Below is the sequence.

Line 16: type: 'task:new',
Line 37: type: 'task:parked',
Line 58: type: 'task:connect',
Line 79: type: 'task:parked',
Line 101: type: 'task:ended',
Line 122: type: 'task:connect',
Line 142: type: 'task:connected',
Line 162: type: 'task:connected',
Line 184: type: 'task:ended',

// We should not be sending ended event when agent goes to RONA, we will open a bug for the same.