Combination View Flat View Tree View
Threads [ Previous | Next ]
I'm trying to build in redundancy into my CVP applications by playing media from the box the call is on. Meaning, instead of identifying an IP in the element, or in the application properties, I want to play from the localhost. Is there a way to accomplish this using studio?
 
As this is an implemented product, bringing in the active VXML server from ICM and setting as a session variable, then playing from there may not suffice. Any easier ways to accompish this?

If you want to grab audio from the same Vxml Server that is running your studio app, just set the default audio path to /CVP/audio/  and put your audio files into the directory C:/Cisco/CVP/VXMLServer/Tomcat/webapps/CVP/audio directory.  Be aware, that it's the VoiceXML Gateway fetching the audio. So, even if it's on the VXML Server box (not a separate webserver) it's not really 'local' to the gateway. You could store files on the gateway in flash memory and access them as flash:fileName  but I don't know the implications of having a lot of audio on the gateway.
 
Janine
www.TrainingTheExperts.com

Using the Apache server on the VXML box will work, but I ended up avoiding this when I was trying to accomplish this same thing, because at the time, the version of Apache would not support HTTP headers for content expiration.
 
Also, quite frankly, IIS is easier to set up and hand off to the customer for these types of things (setting expiration/refresh).
 
The method I've found that works well was developed with a hint from one of the CCBU developers, but basically what you do is use ICM to pass the "Call.RoutingClient" field to the VXML Server with a tag like "ms" (I like to keep it short to preserve space).  So, say this is "CVP1" or "CVP2", you simply use that to build your default audio path, like this:
 
http://{Data.Session.ms}/MediaFiles/{Data.Session.locale}
 
So that's one part, and Janine hits on the second, which is that the VXML gateway(s) need to be able to interpret that.  So I've been using static host entries on the gateways for this.  You can also still take advantage of the built-in "-backup" fault tolerance in the gateway VXML Voice Browser setup.  This would be something as simple as entries like this on the gateways:
 
ip host cvp1 [IP Address of CVP1]
ip host cvp1-backup [IP Address of CVP2]
ip host cvp2 [IP Address of CVP2]
ip host cvp2-backup [IP Address of CVP1]
 
It's a little cumbersome if you have more than 2 CVP servers, but it works well and provides the "isolated" processing that you desire.  These entries can also be put into the customer's DNS if desired, but I've leaned towards static host entries in IOS so far.
 
I'm going to revisit the use of Apache on my next install, just because using IIS means installing and running another component on the server (IIS isn't required otherwise), and I'm a little anal like that!!  Also, as Janine mentions, the ability to use a relative path makes the applications a bit more simple.
 
But depending on the ease of use, I may still stick with the small additional load of IIS...
 
 - Bill
 

Why not use the Content Switch to load balance and failover your media files? That is what is recomended in the admin guide for CVP.

That's certainly an option, but it is an option that adds $$ and configuration time, and another component in the mix to fail, IMHO.
 
If it is a very large deployment with 6+ total CVP servers, then it might make some sense.  Or if you have separate CVP Call Server and VXML Servers, it might also be a good fit.
 
I tend to be a minimalist, and with the scalability of CVP/VXML collocation with SIP and the ability to use a small amount of config to keep traffic local to the CVP Server the call started from, I don't see much need to complicate things by separating components and adding load balancers...
 
My $0.02...
 
 - Bill