Reviewers (PMD-3571):
User Story
As a call center supervisor tracking agent activity, I expect to see separate xDRs in a call parking scenario - one for the agent who parked the call and one for the agent who retrieved it - so that I can accurately audit employee activity and resolve disputes about call handling faster.
As a service provider, I need PortaSwitch to generate a separate xDR for each agent leg in a call parking scenario, so that I reduce troubleshooting effort and customer complaints related to incorrect call statistics.
Example of use
- Business owner employs agents John and Mary.
- John received an incoming call from a client, John talked to the client for 20 seconds and parked the call because he couldn't answer the client's question. Mary unparked this call and talked to the client for 40 seconds.
- Business owner checks the list of xDRs under Mary's account, and sees an xDR with duration of 40 seconds and indication that this is a retrieved call parking call linked to another call (to John's).
- Business owner checks the list of xDRs under John's account, finds an xDR with duration of 20 seconds and indication that this call is linked to another call (to Mary's) via call parking.
- Business owner has a clear picture of agents activity.
Business model
CloudPBX, other VoIP models
Technology
VoIP
Current Solution
Currently, PortaSwitch treats the entire call as a single billing session owned by the account that initiated the parking event when a call is parked and subsequently retrieved. The whole media duration of the call is attributed to the parking agent, incorrectly assigning the talk time of the retrieving agent to the parking agent.
Example of the current behavior:
- Business owner employs agents John and Mary.
- John received an incoming call from a client, John talked to the client for 20 seconds and parked the call because he couldn't answer the client's question. Mary unparked this call and talked to the client for 40 seconds.
- Business owner checks the list of xDRs under Mary's account, and sees that there are no xDRs.
- Business owner thinks that she didn't take any calls, because there are no xDRs. However, Mary claims that she talked to the client after John, and handled the client's request.
- Business owner starts investigation, checks the list of xDRs under John's account, finds an xDR about incoming call from the client with duration of 60 seconds. The call recording of this call confirms that Mary participated in this call and talked to the client.
Technical root cause: when a call is parked via a blind REFER request and the retrieving agent picks it up, the system applies a routing bypass, which prevents a new billing session from being opened for the retrieving party. The retrieving agent is simply attached to the existing call leg, which remains assigned to the parking agent’s billing session. As a result, only one xDR is created, for the parking agent, covering the full call duration.
While SIP logs contain the full call trace — including the retrieving agent’s involvement — those logs are retained for only a few days, making retroactive auditing impractical.
Stakeholders and their benefits
Who are the users / whom we bring value to?
| Benefit / Stakeholders | More Comfort | Increased Efficiency | Saves Time | Tighter Control | Customer satisfaction |
|---|---|---|---|---|---|
CSP/Network operations /Support of CSP | ✓ | ✓ | ✓ | ||
| Call center supervisors | ✓ | ✓ | ✓ | ✓ | |
| Call center agents | ✓ |
Use Cases
Use case #1: Separate xDRs for Call Parking participants
Roles:
- Client - customer of a call center
- John - call center agent
- Mary - call center agent
- Call center supervisor
- PortaBillling system
Preconditions:
There is a CloudPBX customer "Acme Corp" with a configured toll-free call center number 18005556666 with 0.01 USD/minute price for incoming calls.
- Call parking feature is enabled for the customer "Acme Corp" with park prefix *70 and retrieve prefix *71
- John is a call center agent at "Acme Corp" with configured extension 2001
- Mary is a call center agent at "Acme Corp with configured extension 2002
Use scenario #1.1 Call Park and Retrieve from another phone
At 09:00:00, an "Acme Corp" client calls the call center number 18005556666.
- John answers the call, listens to the client's request and understands that his colleague Mary can assist the client better.
- At 09:00:20 John parks the call by dialing *702002.
- PortaBilling authorizes John's request for parking, closes the session for John and generates an xDR about an incoming call with 20 seconds media duration.
- At 09:00:40 Mary dials *712002 to retrieve the call from her deskphone and the call with the client resumes.
PortaBilling identifies this as a call retrieval event and opens a new billing session for Mary at 09:00:40.
- At 09:02:10 Mary ends the call.
- PortaBilling generates an xDR for Mary about an outgoing call with 1 minute and 30 seconds media duration.
- Call center supervisor can see two separate xDRs generated for John and Mary in the list of recent calls, with a clear indication that they are linked via call parking.
- Customer "Acme Corp" is charged 0.02167 USD for 2 minutes and 10 seconds (20 seconds of John's media duration + 1 minute and 30 seconds of Mary's media duration + 20 seconds of call parking (hold) duration).
Use scenario #1.2 Call Park and Retrieve from the same phone
At 09:00:00, an "Acme Corp" client calls the call center number 18005556666.
- John answers the call, listens to the client's request and understands that he can hardly hear the client in the noisy workspace.
- At 09:00:20 John parks the call by dialing *702001.
- PortaBilling authorizes John's request for parking, and the call is parked.
- John goes to the conference room, but finds out that it is busy, so he comes back to his desk.
- At 09:00:40 John dials *71 to retrieve the call from his deskphone and the call with the client resumes.
- At 09:02:10 John ends the call.
- PortaBilling generates a single xDR for John about an incoming call with 1 minute and 50 seconds media duration (20 seconds before parking + 1 min and 30 seconds after retrieval).
- Call center supervisor can see one xDR generated for John in the list of recent calls.
- Customer "Acme Corp" is charged 0.02167 USD for 2 minutes and 10 seconds (1 minute and 50 seconds of John's media duration + 20 seconds of call parking (hold) duration).
Wireframes
N/ANon-functional requirements
N/A
Peculiarities
- Separate xDRs for call parking participants should be generated for all types of call parking:
- Parking and retrieving a call using an extension
- Parking and retrieving a call using a randomly generated number
- Parking and retrieving a call using a single key on iP phones
- Call parking from external apps
- Call parking with automatic retrieval
- CSP confirmed that 1 xDR should be generated for the scenario where a call is parked and retrieved from the same phone.
- Points to consider during Solution Design phase:
- exact mechanism of linking 2 xDRs (so that a supervisor can reconstruct the full call journey)
- double-check if the following 2 options from PC WI will be affected by subj in one way or another: SepOCallIds (requests B2BUA to create new unique call-id for each originated call leg) & NewOCallId (requests B2BUA to create new call-id, common for all originated call legs)
Performance / Clustering, Geo Redundancy/ Dual-Version, Porter / Call Control API / ESPF / Monitoring
N/A