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