Essential Use Cases

Voicebots / Virtual Agents

Let your voicebot increase self-service rates of standard queries, transactions and business processes.

The core of a voicebot is a text-based chatbot. But the environment of a chatbot and a voicebot is very different. If you just simply turn your chatbot into voice without adjusting your product, some users will be disapointed by their voicebot experience.

Please be aware that there are no visual elements like menu buttons, lists, quick replies or carousels like the GUI provided by text chatbots. Instead, voicebot just provide a voice user interface (VUI). Producers have to carefully consider how users could understand what particular services a voicebot can offer.

The general sequence diagram of a voicebot looks like this:

        sequenceDiagram;
Caller->>CVG: Phone Call
CVG->>Bot: POST /session
loop dialog between Caller and Bot
Bot->>CVG: POST /call/say
note left of Bot: text
CVG->>Caller: audio announcement
note right of Caller: speech
alt something is said
Caller->>CVG: some utterance
note right of Caller: speech
CVG->>Bot: POST /message
note left of Bot: text
else nothing is said
note right of Bot: inactivityTimeout<br/>defined in CVG project<br/>
CVG->>Bot: POST /inactivity
end
end
Bot->>CVG: POST /call/say
note right of Bot: final words of Bot<br/>in this dialog
Bot->>CVG: POST /call/drop
CVG->>Caller: Phone Call on CVG dropped
    

Call-Transfer from 3rd party IVRs/ACDs to your Voicebot

The following sequence diagram shows the general flow for handling a call that

  • is first accepted by a 3rd party ACD/IVR system and processed there (e.g. for greetings, notes on data protection, classic IVR features)

  • is then passed on to CVG - and thus the bot - for further processing (e.g. for pre-qualification, automatic processing of standard requests or outside hotline opening hours)

  • and finally returned to the 3rd party IVR/ACD (after case completion by the bot or for transferring the call to a hotline with human agents)

        sequenceDiagram;
Caller->>ACD/IVR: Phone Call
ACD/IVR->>CVG: POST /provision/call
CVG-->>ACD/IVR: Response with CVG phone number
ACD/IVR->>CVG: Forward Phone Call
CVG->>Bot: POST /session
loop dialog between Caller and Bot
Bot->>CVG: POST /call/say
alt something is said
CVG->>Bot: POST /message
else nothing is said
note right of Bot: inactivityTimeout <br/>needs to be defined<br/>in initial<br/>POST /provision/call<br/>request
CVG->>Bot: POST /inactivity
end
end
Bot->>CVG: POST /call/say
note right of Bot: final words of Bot<br/>in this dialog
note right of CVG: set EndReason <br/>to handover control<br/> to ACD/IVR
Bot->>CVG: POST /dialog/.../data
Bot->>CVG: POST /call/drop
CVG->>ACD/IVR: Phone Call on CVG dropped
ACD/IVR->>CVG: GET /dialog
CVG-->>ACD/IVR: Response includes dialog and EndReason
ACD/IVR->>CVG: DELETE /dialog
note over Caller, ACD/IVR: Depending on EndReason either<br/>call termination <br/>(case-closing processing by the bot)<br/>or caller gets connected<br/>with relevant skill group<br/>of ACD (bot2agent transfer)
    

The beginning of the dialog and the actual dialog between Caller and Bot does not differ from the bot’s point of view from a caller who was directly accepted by CVG and is processed by the bot.

However, at the end of the bot’s dialog it is now absolutely necessary for the bot to give ACD/IVR a hint on how to proceed with the caller. For this purpose, appropriate key/value pairs must be agreed upon between the bot developer and IVR/ACD, e.g. routing/skill group. These key value pairs can be transferred between bot and ACD/IVR via CVG’s Dialog API.

When the bot calls the end point /call/drop, in conjunction with an ACD/IVR, this does not automatically mean that the call is hung up. In interaction with the IVR/ACD, the call is terminated on the CVG side and the call is returned to the IVR. The ICR/ACD uses the information provided by the bot to decide how to handle the call, e.g. whether it should be transferred to a hotline with human agents or whether it should actually be terminated.

Adding information when transferring a Call

In some use cases ACD/IVR already has more detailed information about the call that should be transmitted to the bot so that it can target the call processing accordingly.

Note

A simple example is that the caller wants to change a subscription. ACD/IVR already knows which of the subscriptions offered by the company is concerned via the called ACD/IVR number or a classic IVR dialog.

Alternative 1: Provisioning API and Dialog API

This information about the call can be transferred to CVG and the bot as follows when the call is transferred:

        sequenceDiagram;
Caller->>ACD/IVR: Phone Call
ACD/IVR->>CVG: POST /provision/call
CVG-->>ACD/IVR: Response with CVG phone number <br/>(valid for 10 seconds)
ACD/IVR->>CVG: POST /dialog/.../data
note right of CVG: multiple key/value pairs <br/>can be provided at once
ACD/IVR->>CVG: Forward Phone Call
CVG->>Bot: POST /session
note left of Bot: get information <br/>about call
Bot->>CVG: GET /dialog
loop dialog
Bot->>CVG: POST /call/say
note right of CVG: ...
end
    

Alternative 2: Custom SIP Headers

An alternative - and often easier - way to transfer call information from an upstream system to the bot is to use Custom SIP Headers. The disadvantage of Custom SIP Headers is that they are limited in length (128 characters) and you need to make sure that network elements do not filter Custom SIP headers. But for many use cases Custom SIP headers do a good job.

        sequenceDiagram;
Caller->>ACD/IVR: Phone Call
ACD/IVR->>CVG: Foreward Call to CVG<br/>via SIP with Custom SIP Headers (X-...)
note left of Bot: send information <br/>about call
CVG->>Bot: POST /session with customSipHeaders
loop dialog
Bot->>CVG: POST /call/say
note right of CVG: ...
end
    

Alternative 3: External Call ID

A specific Custom SIP header X-VIER-Call-ID supports external call IDs. This external Call ID is a simple way of integrating bots built with CVG into contact centers.

The X-VIER-Call-ID SIP header can be used to pass in a custom call ID generated by a contact center or another upstream system. The value should be unique per call of a project. This X-VIER-Call-ID SIP header is also available for the bot (just as other Custom SIP Headers).

        sequenceDiagram;
Caller->>ACD/IVR: Phone Call
ACD/IVR->>CVG: Foreward Call to CVG<br/>via SIP with external call ID<br/>X-VIER-Call-ID
note left of Bot: send information <br/>about call ID<br/>in upstream systems
CVG->>Bot: POST /session with customSipHeader<br/>X-VIER-Call-ID
loop dialog
Bot->>CVG: POST /call/say
note right of CVG: ...
end
    

Such an external call ID is often used for a foreseen agent handover, i.e. passing or returning the call from the bot to a human agent.

The endpoint /dialog/{resellerToken}/external/{projectToken}/{externalCallId} gets the dialog data by this external ID set via X-VIER-Call-ID. This allows a downstream system (e.g. an Agent Desktop Application) to download the dialog data without knowing the dialogId generated by CVG.

Outbound Voicebots

Inbound and outbound describe the communication direction of a call between the company and the customer. While inbound calls are made by the customer to your company (resp. voicebot), outbound calls are made from your company (resp. voicebot) to the customer.

Tip

Contact us to enable outgoing calls for your CVG project. Initiating outgoing calls is disabled by default.

For outbound the call has to be initiated by the bot by /call/dial. Answering Machine Detection is always enabled, you can specify if a call answered by an answering machine should be continued by the bot or not.

After the call is successfully established the flow is just the same as for inbound bots.

        sequenceDiagram;
Bot->>CVG: POST /call/dial
CVG->>Called Party: try to establish call
alt call successfully established
CVG->>Bot: POST /session
loop dialog between Called Party and Bot
Bot->>CVG: POST /call/say
note right of Bot: text
CVG->>Called Party: audio announcement
note left of Called Party: speech
alt something is said
Called Party->>CVG: some utterance
note left of Called Party: speech
CVG->>Bot: POST /message
note right of Bot: text
else nothing is said
note left of Bot: inactivityTimeout<br/>defined in<br/>CVG project<br/>
CVG->>Bot: POST /inactivity
end
end
Bot->>CVG: POST /call/say
note left of Bot: final words of Bot<br/>in this dialog
Bot->>CVG: POST /call/drop
CVG->>Called Party: Phone Call on CVG dropped
else call could not be established
note left of Bot: Bot needs to handle<br/>unsuccessful call
end
    

Transfer Custom Data from Bot to Called Party

Use SIP Custom headers to transfer some custom data from your bot to the called party when initiating the call via the SIP protocol.

In the Call API, endpoints that initiate outgoing calls (dial, forward and bridge) can specify customSipHeaders.

The called SIP application can read these SIP headers. One possible use case is to route the call to the right skill-group based on the content of the custom header fields.

Also the Start entry in the Dialog API includes the customSipHeaders.

Agent Assistance

Live transcription of customer calls can be used to look up relevant information in backend systems and to suggest responses to the human agent.

Make agents more productive and knowledgeable with agent assistance and improve the overall customer experience.

        sequenceDiagram;
Caller->>CVG: Phone Call
CVG->>Bot: POST /session
loop optional dialog between Caller and Bot
Bot->>CVG: POST /call/say
CVG->>Caller: audio announcement
Caller->>Bot: something is said
CVG->>Bot: POST /message
end
Bot->>CVG: POST /call/bridge (w headNumber and extensionLength)
note right of Bot: Bot transfers call<br/>to Contact Center,<br/>CVG stays in the loop
CVG->>ACD: Establish Call (headNumber + extension)
ACD->>CVG: POST /assist/accept (w resellerToken, headNumber + extension, endpoint for transcription results)
note right of ACD: get dialogId to link<br/>incoming call<br/>with dialog
ACD->> Agent UI: Send information about<br/>new call to be transcribed and<br/>agentId who handles call
note left of ACD: Tell Agent UI<br/>live transcriptions can<br/>be requested
Agent UI->>CVG: POST /assist/transcription/start<br/>(w resellerToken, dialogId, speaker)
note left of Agent UI: start transcription
loop All speech input of caller is transcribed and sent to Agent UI
Caller->>CVG: something is said
note right of Caller: speech
CVG->> Agent UI: POST <endpoint>/transcription
note left of Agent UI: text said by caller
end
Caller->>CVG: Phone call dropped
CVG->>Agent UI: POST /call/terminated