CVP and load balancing with custom ASR/TTS VXML app
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-02-2017 01:12 AM - edited 03-14-2019 05:06 PM
Hello
consider the following architecture:
HCS-CC/UCCE v11.0.2 with 3 CVP servers, CUCM (PUB+4 SUB); 2 CUBEs with 2 separate IOS VXML VBs.
The ASR/TTS VXML apps (non call studio apps) run on 2 dedicated separate VXML app servers with 3 Nuance speech servers.
Load balancing "between" the 3 CVP servers and the 2 VXML app servers is done by ICM scripting (setting media server and 50/50 %allocation)
(not sure if this can also be done using a CUSP)
I am struggling on how to load balance between the 2 IOS VXML VBs and the 3 Nuance speech servers.
Can this be done with CUSP v9.1 ? I could not find any config sample on how to do this.
CVP v11 doc refers to ACE but they seem end of life (?)
What would be the preferred way to implement this kind of load balancing ?
Any help appreciated.
- Labels:
-
Other Contact Center
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-05-2017 02:14 PM
Peter,
I have done something similar. The customer has 4 VXML servers per side (also non-CVP Studio). They have 4 Nuance servers per side. We use MRCP v2. (I hope you are using v2).
With MRCP v2 you can use the dial peers on the voice gateways to load balance your Nuance servers. It may not be obvious, and it's certainly not intuitive, but the following does work.
voice class uri TTS sip pattern tts@10.199.199.101 voice class uri ASR sip pattern asr@10.199.199.101 ivr asr-server sip:asr@10.199.199.101 ivr tts-server sip:tts@10.199.199.101 dial-peer voice 100 voip description SIP TTS Media Call session protocol sipv2 session target ipv4:10.199.199.101 session transport tcp destination uri TTS dtmf-relay rtp-nte codec g711ulaw no vad dial-peer voice 101 voip description SIP ASR Media Call session protocol sipv2 session target ipv4:10.199.199.101 session transport tcp destination uri ASR dtmf-relay rtp-nte codec g711ulaw no vad dial-peer voice 102 voip description SIP TTS Media Call session protocol sipv2 session target ipv4:10.199.199.102 session transport tcp destination uri TTS dtmf-relay rtp-nte codec g711ulaw no vad dial-peer voice 103 voip description SIP ASR Media Call session protocol sipv2 session target ipv4:10.199.199.102 session transport tcp destination uri ASR dtmf-relay rtp-nte codec g711ulaw no vad dial-peer voice 104 voip description SIP TTS Media Call session protocol sipv2 session target ipv4:10.199.199.103 session transport tcp destination uri TTS dtmf-relay rtp-nte codec g711ulaw no vad dial-peer voice 105 voip description SIP ASR Media Call session protocol sipv2 session target ipv4:10.199.199.103 session transport tcp destination uri ASR dtmf-relay rtp-nte codec g711ulaw no vad dial-peer voice 106 voip description SIP TTS Media Call session protocol sipv2 session target ipv4:10.199.199.104 session transport tcp destination uri TTS dtmf-relay rtp-nte codec g711ulaw no vad dial-peer voice 107 voip description SIP ASR Media Call session protocol sipv2 session target ipv4:10.199.199.104 session transport tcp destination uri ASR dtmf-relay rtp-nte codec g711ulaw no vad
With these 4 equal preference dial peers for ASR, and 4 equal preference dial peers for TTS, the load is distributed and fault tolerance is achieved. A failure of the SIP call to a down Nuance server causes the gateway to retry and another dial peer is selected.
One comment to readers looking at this configuration. What is the role of the configuration settings for voice class uri values and the asr-server and tts-server? How can we have different values for those when they are singletons (can only appear once in the configuration)?
As I said - it's not intuitive. The Cisco documentation is not clear on what to use here, but we simply used the first address of the 4 Nuance servers.
Regards,
Geoff
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-09-2017 06:05 AM
thx Geoff
This works although we invented a slightly diff method by using a server-group for the speech servers and a keep alive profile and then use these in 2 dial peers (1 for asr and 1 for tts)
It seems the keep alive profile can only be put in one of the 2 dial peers; if put in both the cube vxml vb gets "confused" when one or more speech servers are disconnected.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-09-2017 06:39 AM
Peter
That sounds like a great idea - having a server-group. If you feel like posting a snippet of your config, that would be fine.
Regards,
Geoff

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-10-2017 09:56 AM
Hi there,
Thanks for the fab question and replies, it helped a lot.
Would you guys know if we could still use the Gateway dial peers configuration (suggested above) if using CVP Call Studio Custom VXML Apps?
Thanks a lot
Nando
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-10-2017 10:02 AM
You sure would. At this particular customer the VXML server was a non-Cisco platform, but it will be the same.
Regards,
Geoff

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-10-2017 10:08 AM
Cisco docs can be hard to read sometimes, they have this statement in the CVP Configuration guide:
"For ASR/TTS failover to function when using Custom VXML Applications, you require either an Application Control Engine (ACE) or any other supported load balancer."
I agree with you, can't see a reason why it wouldn't work, but when you read the above, it scares me a bit.
Any comments?
Nando
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-12-2017 04:16 PM
With MRCP v1 the only way was with the CSS (Cisco Content Services Switch) which was superceded by the ACE. So in some sense the Cisco comment is OK.
But with MCRP v2 there is a better way. By the way, I had a NetScaler at this deployment and tried to make that load balancer work for ASR but could not make it happen. Used the dial peer method and it's terrific.
Regards,
Geoff
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-14-2018 04:21 AM
an additional comment when using server groups in the asr and tts dial-peers.
we initially had only a "voice-class sip options-keepalive profile .." stmt in the tts dial-peer.
However it was found that "failover" to another Nuance ASR/TTS server in the server group failed when it was completely shutdown (so not only some apps on that server). When adding the keep alive to the asr dial-peer as well this was resolved. Not 100% clear on why this worked.
