03-20-2011 09:02 AM - edited 03-14-2019 07:36 AM
Dear Geoff;
This is the output of the show flash:
VIVADRVG1#show flash:
-#- --length-- -----date/time------ path
1 2763 Nov 28 2001 08:21:16 +03:00 bootstrap.vxml
2 23589532 Feb 7 2000 09:52:06 +03:00 c5350-js_ivs-mz.124-9.T7.bin
3 35574928 Nov 20 2001 09:48:28 +03:00 c5350-jk9s-mz.124-24.T4.bin
4 35602340 Nov 26 2001 06:38:34 +03:00 c5350-js_ivs-mz.124-24.T4.bin
5 6384 Nov 28 2001 08:24:34 +03:00 CVPSelfService.tcl
6 4831 Nov 28 2001 08:24:58 +03:00 CVPSelfServiceBootstrap.vxml
7 2446 Nov 28 2001 08:25:14 +03:00 en_0.wav
8 2446 Nov 28 2001 08:25:32 +03:00 en_1.wav
9 2446 Nov 28 2001 08:25:44 +03:00 en_2.wav
10 2446 Nov 28 2001 08:26:00 +03:00 en_3.wav
11 2446 Nov 28 2001 08:26:10 +03:00 en_4.wav
12 2446 Nov 28 2001 08:26:18 +03:00 en_5.wav
13 2446 Nov 28 2001 08:26:32 +03:00 en_6.wav
14 2446 Nov 28 2001 08:26:42 +03:00 en_7.wav
15 2446 Nov 28 2001 08:26:54 +03:00 en_8.wav
16 2446 Nov 28 2001 08:27:04 +03:00 en_9.wav
17 54522 Nov 28 2001 08:27:22 +03:00 en_error.wav
18 126454 Nov 28 2001 08:27:34 +03:00 en_holdmusic.wav
19 26582 Nov 28 2001 08:27:54 +03:00 en_pleasewait.wav
20 2446 Nov 28 2001 08:28:08 +03:00 en_pound.wav
21 2446 Nov 28 2001 08:28:22 +03:00 en_star.wav
22 52062 Nov 28 2001 08:28:36 +03:00 error.wav
23 80058 Nov 28 2001 08:28:48 +03:00 fetchwait.wav
24 1186 Nov 28 2001 08:29:10 +03:00 handoff.tcl
25 557 Nov 28 2001 08:29:22 +03:00 recovery.vxml
26 371990 Nov 28 2001 08:29:40 +03:00 STC_ULAW.wav
27 92615 Nov 28 2001 08:30:00 +03:00 survivability.tcl
28 20580 Dec 21 2001 23:44:10 +03:00 bootstrap.tcl
29 3188 Dec 21 2001 23:45:58 +03:00 ringtone.tcl
30 1652 Dec 21 2001 23:46:28 +03:00 cvperror.tcl
31 32110 Dec 21 2001 23:46:54 +03:00 ringback.wav
32 58446 Dec 21 2001 23:47:24 +03:00 critical_error.wav
32940032 bytes available (95793152 bytes used)
VIVADRVG1#
Next?
Also I am posting my dial-peer (by the way, it should be service vru-leg or service bootstrap?)
dial-peer voice 81111 voip
description *** VRU Leg ***
translation-profile incoming block
service vru-leg
voice-class codec 1
incoming called-number 8111111111T
dtmf-relay rtp-nte h245-signal h245-alphanumeric
no vad
What do u advise?
Regards
Bilal
Solved! Go to Solution.
03-20-2011 09:13 AM
Why don't you post the entire "show run"?
If the application section is configured as follows:
application
service new-call flash:bootstrap.vxml
paramspace english index 0
paramspace english language en
paramspace english location flash
paramspace english prefix en
service cvperror flash:cvperror.tcl
paramspace english index 0
paramspace english language en
paramspace english location flash
paramspace english prefix en
service handoff flash:handoff.tcl
paramspace english index 0
paramspace english language en
paramspace english location flash
paramspace english prefix en
service vru-leg flash:bootstrap.tcl
paramspace english index 0
paramspace english language en
paramspace english location flash
paramspace english prefix en
Then you need your dial-peer to call vru-leg.
After you configured the applications, did you load them individually or reboot the gateway (which willl load them all)
Regards,
Geoff
03-20-2011 09:15 AM
The syntax to load an application is something like "call voice application load APP"
Regards,
Geoff
03-20-2011 01:36 PM
Absolutely - for calls from the PSTN, the first node should always be the Send To VRU. As I said, the X will go to an End node (not a Release) so that survivability is invoked on the voice gateway should Send To VRU fail.
But you will need two Send To VRU nodes for CUCM-generated calls, as you have proven. And you will need this for warm transfers from agents to the queues, or from inbound calls from IP phones to the queues (say a non-agent gets a customer call and they want to transfer them to customer service).
So what you have learnt will be useful in your contact center.
By the way, we should discuss the rest of your script. That % allocation node is not how you want to reach your two VXML servers.
Regards,
Geoff
03-20-2011 05:22 PM
That % allocation
* Why?I was need to ask about the media server (the server that we place our media on it), this server IP address: where I have to place its IP address?
There are three totally separate cases we have to deal with. Let's examine them.
1. Microapps
2. CVP VXML (Audium) applications
3. Playing WAV files from within the CVP VXML applications.
1. Microapps
The CVP Call Server has a retry mechanism built in that you want to make use of. The way this works is when the Call Server builds the VXML page for Play Media, Menu, Get Digit etc. prompts and passes this to the IOS Voice Browser for rendering, it detects a bad fetch at the voice gateway and rebuilds the page in a special way and resubmits it.
When the Call Server builds the page for the first time, it takes whatever is in the media_server ECC variable, the app or sys media_lib ECC variable depending on the config of the microapp, and the locale ECC variable and builds a URL to the WAV file. If the media_server does not start with http:// it is prepended, so don't supply this in that variable. Basically we will get for the full URL of the prompt aaa.wav
http://
This goes over to the gateway. If you have the IP address in the
The Call Server detects the bad fetch failure at the gateway and rebuilds the URL like this:
http://
Lets say say locale=en-us and app_media_lib=app, which are the defaults.
If you used the IP address (say A.B.C.D) for the ECC variable, then you will get http://A.B.C.D-backup/en-us/app/aaa.wav, and that's not going anywhere good.
But remember who has to play the VXML - it's the gateway. So we could use a keyword in the ECC variable and have the "ip host" table resolve the keyword. Normally we see Cisco documentation use the keyword "media", but it could be anything. So if we set the ECC variable media_server to "media" then the URL created is
http://media/en-us/app/aaa.wav
and if the voice gateway has
ip host media A.B.C.D
then the call will resolve to the Web server A.B.C.D and all is just as before. But now examine the failure case. The Call Server does its usual trick of appending the "-backup" and turns the URL into
http://media-backup/en-us/app/aaa.wav
and if we have another entry in the "ip host" table
ip host media-backup W.X.Y.Z
we have just achieved fault tolerance on microapps.
In order to spread the load across your Web servers, configure one gateway with
ip host media A.B.C.D
ip host media-backup W.X.Y.Z
and the other gateway with
ip host media W.X.Y.Z
ip host media-backup A.B.C.D
Always do your gateways in pairs like this at the branch offices.
2. CVP VXML (Audium) applications
For CVP VXML applications, you are going to set the ECC variable media_server using a different keyword - say "cvpvxml" in the form
app_media_lib MUST be "..", the locale should not be defined (the deafult of en-us wil be used) and the microapp is GS,Server,V. Assume the ToExtVXML[0] variable is "application=MyApp". The Call Server munges this all together in exactly the same way as above
and comes up with
http://cvpvxml:7000/CVP/en-us/../Server?application=MyApp
The ".." cancels the locale en-us, so we have
http://cvpvxml:7000/CVP/Server?application=MyApp
Now if the ip host table has an entry
ip host cvpvxml L.M.N.O
then we get http://L.M.N.O:7000/CVP/Server?application=MyApp
and we are off to the races. If for some reason the VXML server is not running, a bad fetch is returned, and the Call Server is notified and it rebuilds the URL and resubmits teh VXML page. It looks for a colon in the media_server and inserts the "-backup" before that, so it deals with this case nicely and we get
http://cvpvxml-backup:7000/CVP/Server?application=MyApp
and now a second entry in the ip host table
ip host cvpvxml-backup E.F.G.H
takes us to http://E.F.G.H:7000/CVP/Server?application=MyApp
Cisco say that you should catch the failure of the Run External Script on the GS,Server,V and retry, but I have not found that necessary. Again, you want to configure your gateways in pairs to distribute the load across the VXML servers. Almost always you are going to have a pair of gateways at the branch office, so it will work out for you.
If you have ONLY coresident Call Server/VXML servers you can use the trick described in the CVP 7.x SRND on page 12-2 using the Call Routing client name as the media_server and defining that on the gateway in the ip host table. Be aware of the restrictions on the characters allowed.
This only works if all Call Servers have VXML servers. But it's a nice feature that could work for you, because the Gatekeeper will only send the call to a Call Server that's on-line, so at least we know the box is up. Doesn't mean that VXML is up, but it's a start.
3. Playing WAV files from within the CVP VXML applications.
When Playing WAV files from within the CVP VXML applications. Normally you set the default audio path in your Studio app to something like, the follwing, using an IP address of the Web server
http://S.T.U.V/en-us/app/myapp/
and then each audio element lists just a WAV file like aaa.wav
If the IIS at S.T.U.V is down, there is a failure and you cannot recover. The -backup is a feature of the CVP Call Server, and not the VXML Server.
If your Media Servers are all co-resident with your Call Servers, you can use the trick described in the SRND 12-2 to redefine the default media path with an Application Modifier using substitution.
ip host media J.K.L.M
ip host media-backup J.K.L.M
ip host cvpvxml R.S.T.U
ip host cvpvxml-backup R.S.T.U
03-22-2011 05:59 PM
SayItSmart, by default when I am installing the CVP VXML, I am finding it under the directory common\lib and not under the classes!
I'm not referring to a Cisco provided JAR. When I said:
"reusable components including SayItSmart and dynamic configuration classes should go in common\classes"
my SayItSmart reference there was to special SayItSmart classes that you have built.
Say you want to read back alphabetic characters (not digits) to the customer that you have retrieved from the database, like a number plate string - Cisco don't provide one of those, so you will have to make one, if you need that function.
If you do, your SayItSmart class will go in VXMLServer\common\classes.
As I understand that compiling the classes on the java 1.5 is mandatory, correct?
I would be repeating myself if I said "yes". How about if I say - too right?
From the other side, what I see in the VXML Server is JRE and JDK, and this JRE is under C:\Cisco\CVP\jre as u can see below in the picture, so any advise regarding this point?
What's your question? A 1.5 JRE with a 1.5 JDK. Sounds good, doesn't it?
Another thing, any need to place any configurations (related to path or something else that java will need it)?
If you are using JNDI, Connection Pooling and the built in Database Element, your SQL jar (Microsoft, Oracle, MySQL) must go in VXMLServer\Tomcat\common\lib.
If you are using JAXB (Java XML Binding), you will find that the JAXB JARs want to be in VXMLServer\Tomcat\common\endorsed.
Be aware that using CVP VXML, Tomcat and class loaders can sometimes be tricky - very tricky indeed. Good luck.
Regards,
Geoff
03-20-2011 09:13 AM
Why don't you post the entire "show run"?
If the application section is configured as follows:
application
service new-call flash:bootstrap.vxml
paramspace english index 0
paramspace english language en
paramspace english location flash
paramspace english prefix en
service cvperror flash:cvperror.tcl
paramspace english index 0
paramspace english language en
paramspace english location flash
paramspace english prefix en
service handoff flash:handoff.tcl
paramspace english index 0
paramspace english language en
paramspace english location flash
paramspace english prefix en
service vru-leg flash:bootstrap.tcl
paramspace english index 0
paramspace english language en
paramspace english location flash
paramspace english prefix en
Then you need your dial-peer to call vru-leg.
After you configured the applications, did you load them individually or reboot the gateway (which willl load them all)
Regards,
Geoff
03-20-2011 09:15 AM
The syntax to load an application is something like "call voice application load APP"
Regards,
Geoff
03-20-2011 10:37 AM
Dear Geoff;
I think maybe we reached to the problem.
Because I checked the sizes of the files in the flash and it differs than those on the Consol. Actually other colleage prepared the voice gateway and did not expect this !
Now I loaded them, but did not understand what u mean by:
After you configured the applications, did you load them individually or reboot the gateway (which willl load them all)
* What is the correct?
Also I did not get this command "call voice application load APP", when to use it? Actually did not find it in the voice gateway.
Appreciate ur kindly help.
Regards
Bilal
03-20-2011 11:52 AM
Because I checked the sizes of the files in the flash and it differs than those on the Consol. Actually other colleage prepared the voice gateway and did not expect this !
I was thinking about that at the coffee shop.
I was wondering about the "isn-vxml" thing and wondered if you were perhaps using OLD .vxml and .tcl files on the gateway. Then I looked at the flash listing and see that the files are from 2001. That can't be right.
Either the time setting on the gateway is wrong (and I think it is) or you are still using files from CVP 3.x.
Let's look at one. bootstrap.vxml from CVP7 is 5044 bytes. What do you have?
2763 Nov 28 2001 08:21:16 +03:00 bootstrap.vxml
Regards,
Geoff
03-20-2011 11:52 AM
Dear Geoff;
I have to thanks u and ur help and the gr8 hands u put with us.
The problem was in the application files that should be loaded, i uploaded the corrected one.
But, u know: I was having a lot of wrong in my configuration and this problem pushed me to resolve it .. words are not enough to say Thanks for you.
Such person like u, he has to buy Cisco he he he
About the call application voice load app_name, really I tried and I was trying to give the name of the file complete with the extension and even without the extension, but it was giving me that script is not defined ! I do not know why.
So I did reload .. and it is working now ..
Also I removed the add ip host isn-vxml and it is working fine ...
By the way, it is working with one Send To VRU node.
Again, Thanks Geoff.
Regards
Bilal
03-20-2011 11:57 AM
Trust me on this - use two Send To VRU nodes. Everything is cleaner that way.
Even when you come in from the PSTN, use a Send To VRU with an End on the failure port (the X) so that survivability will kick in on the gateway if the bootstrap fails.
This is the RIGHT way to do it. Don't rely on the implicit Send to VRU - it occurs anyway, as I said. But the best design is to insert the node as the VERY FIRST node in a CVP script.
Ones that come from the CUCM should have two Send To VRU nodes. Put a comment in so others know what you are doing.
Regards,
Geoff
03-20-2011 11:59 AM
About the call application voice load app_name, really I tried and I was trying to give the name of the file complete with the extension and even without the extension, but it was giving me that script is not defined ! I do not know why.
Not the file name - the name of the application - the "service".
Regards,
Geoff
03-20-2011 12:01 PM
I can't recall the syntax exactly - it could be "call application voice load SERVICE_NAME". Anyway, reload will load them all.
Regards,
Geoff
03-20-2011 12:51 PM
Dear Geoff;
About having two Send to VRU:
As u know that using the extension was for testing purposes, but originally the calls should be originated by the voice gateway when the E1 will reach. If it will originate from the voice gateway, then one Send to VRU is enough, u do not think so?
Regards
Bilal
03-20-2011 01:36 PM
Absolutely - for calls from the PSTN, the first node should always be the Send To VRU. As I said, the X will go to an End node (not a Release) so that survivability is invoked on the voice gateway should Send To VRU fail.
But you will need two Send To VRU nodes for CUCM-generated calls, as you have proven. And you will need this for warm transfers from agents to the queues, or from inbound calls from IP phones to the queues (say a non-agent gets a customer call and they want to transfer them to customer service).
So what you have learnt will be useful in your contact center.
By the way, we should discuss the rest of your script. That % allocation node is not how you want to reach your two VXML servers.
Regards,
Geoff
03-20-2011 03:29 PM
Dear Geoff;
As I said, the X will go to an End node (not a Release)
* OK this I will note it and modify.
That % allocation
* Why?
I was need to ask about the media server (the server that we place our media on it), this server IP address: where I have to place its IP address?
Regards
Bilal
03-20-2011 05:22 PM
That % allocation
* Why?I was need to ask about the media server (the server that we place our media on it), this server IP address: where I have to place its IP address?
There are three totally separate cases we have to deal with. Let's examine them.
1. Microapps
2. CVP VXML (Audium) applications
3. Playing WAV files from within the CVP VXML applications.
1. Microapps
The CVP Call Server has a retry mechanism built in that you want to make use of. The way this works is when the Call Server builds the VXML page for Play Media, Menu, Get Digit etc. prompts and passes this to the IOS Voice Browser for rendering, it detects a bad fetch at the voice gateway and rebuilds the page in a special way and resubmits it.
When the Call Server builds the page for the first time, it takes whatever is in the media_server ECC variable, the app or sys media_lib ECC variable depending on the config of the microapp, and the locale ECC variable and builds a URL to the WAV file. If the media_server does not start with http:// it is prepended, so don't supply this in that variable. Basically we will get for the full URL of the prompt aaa.wav
http://
This goes over to the gateway. If you have the IP address in the
The Call Server detects the bad fetch failure at the gateway and rebuilds the URL like this:
http://
Lets say say locale=en-us and app_media_lib=app, which are the defaults.
If you used the IP address (say A.B.C.D) for the ECC variable, then you will get http://A.B.C.D-backup/en-us/app/aaa.wav, and that's not going anywhere good.
But remember who has to play the VXML - it's the gateway. So we could use a keyword in the ECC variable and have the "ip host" table resolve the keyword. Normally we see Cisco documentation use the keyword "media", but it could be anything. So if we set the ECC variable media_server to "media" then the URL created is
http://media/en-us/app/aaa.wav
and if the voice gateway has
ip host media A.B.C.D
then the call will resolve to the Web server A.B.C.D and all is just as before. But now examine the failure case. The Call Server does its usual trick of appending the "-backup" and turns the URL into
http://media-backup/en-us/app/aaa.wav
and if we have another entry in the "ip host" table
ip host media-backup W.X.Y.Z
we have just achieved fault tolerance on microapps.
In order to spread the load across your Web servers, configure one gateway with
ip host media A.B.C.D
ip host media-backup W.X.Y.Z
and the other gateway with
ip host media W.X.Y.Z
ip host media-backup A.B.C.D
Always do your gateways in pairs like this at the branch offices.
2. CVP VXML (Audium) applications
For CVP VXML applications, you are going to set the ECC variable media_server using a different keyword - say "cvpvxml" in the form
app_media_lib MUST be "..", the locale should not be defined (the deafult of en-us wil be used) and the microapp is GS,Server,V. Assume the ToExtVXML[0] variable is "application=MyApp". The Call Server munges this all together in exactly the same way as above
and comes up with
http://cvpvxml:7000/CVP/en-us/../Server?application=MyApp
The ".." cancels the locale en-us, so we have
http://cvpvxml:7000/CVP/Server?application=MyApp
Now if the ip host table has an entry
ip host cvpvxml L.M.N.O
then we get http://L.M.N.O:7000/CVP/Server?application=MyApp
and we are off to the races. If for some reason the VXML server is not running, a bad fetch is returned, and the Call Server is notified and it rebuilds the URL and resubmits teh VXML page. It looks for a colon in the media_server and inserts the "-backup" before that, so it deals with this case nicely and we get
http://cvpvxml-backup:7000/CVP/Server?application=MyApp
and now a second entry in the ip host table
ip host cvpvxml-backup E.F.G.H
takes us to http://E.F.G.H:7000/CVP/Server?application=MyApp
Cisco say that you should catch the failure of the Run External Script on the GS,Server,V and retry, but I have not found that necessary. Again, you want to configure your gateways in pairs to distribute the load across the VXML servers. Almost always you are going to have a pair of gateways at the branch office, so it will work out for you.
If you have ONLY coresident Call Server/VXML servers you can use the trick described in the CVP 7.x SRND on page 12-2 using the Call Routing client name as the media_server and defining that on the gateway in the ip host table. Be aware of the restrictions on the characters allowed.
This only works if all Call Servers have VXML servers. But it's a nice feature that could work for you, because the Gatekeeper will only send the call to a Call Server that's on-line, so at least we know the box is up. Doesn't mean that VXML is up, but it's a start.
3. Playing WAV files from within the CVP VXML applications.
When Playing WAV files from within the CVP VXML applications. Normally you set the default audio path in your Studio app to something like, the follwing, using an IP address of the Web server
http://S.T.U.V/en-us/app/myapp/
and then each audio element lists just a WAV file like aaa.wav
If the IIS at S.T.U.V is down, there is a failure and you cannot recover. The -backup is a feature of the CVP Call Server, and not the VXML Server.
If your Media Servers are all co-resident with your Call Servers, you can use the trick described in the SRND 12-2 to redefine the default media path with an Application Modifier using substitution.
ip host media J.K.L.M
ip host media-backup J.K.L.M
ip host cvpvxml R.S.T.U
ip host cvpvxml-backup R.S.T.U
03-22-2011 11:26 AM
Dear Geoff;
As in the both cases of:
CVP VXML (Audium) applications
Or
Playing WAV files from within the CVP VXML applications.
We are running VXML application, correct? So, what is the difference between playing the wave file in first case (from the ICM script) and in second case (by determining it through the VXML script it self)?
And why u called it Audium in first case?
I got ur point about the backup and redundancy, it is very magic and fully thanks for this gr8 notes and information that it is important to be used.
Now, from the other side: I am facing a problem with my VXML application which its name is KTCIVR. Actually it is running on the production environment which is old version environment (CVP version 3.1.2), and in this application there is java classes. In the production environment, the used java version is 1.4 and it is JDK while in the new environment it is JRE 1.5. We compiled the KTCIVR on the new studio version 7 and deployed to the VXML server, but at the server we have the following error as in the picture:
Actually some of the java classes are requesting a jar files (for example, when need to connect with the database, so ODBC driver is required, and for this thing we need a jar file), when we place these jar files in the lib directory (under the commond directory), then all the applications will stop working (including the HelloWorld application). So, I decided to place these jar files in the lib directory but under the application it self (and not under the common), in this case the other application is working, but the KTCIVR application does not work (still displaying the above error message as in the picture).
Then I tried to do compilation again for the application with these jar files (under the lib directory) on the CVP Studio 7 and deploying it, but same error !!
I feel that there should be a place to configure the path to where these jar files should be placed to be able to load it. But where I can do this?
What could be my problem?
Why when placing these jar files under the lib directory that is under the common directory, then all applications stop working?
Again, these jar files that we are placing it in the lib directory, it is used at the production which is running the old version of VXML (version 3) and it has the JDK of version 1.4. Some of these JAR files are done by our team and some of these JAR files were downloaded from the Internet.
At the same time, any application does not have Java is working fine (as HelloWorld), and if it has Java classes, then it is working as long as there is not jar files are used. When there is a jar files are used, then the above error appears.
Where the Jar should be located? What I have to configure a path for it? Any issue about versions and compilation? Any special setting is required?
Thanks for the gr8 help.
Regards
Bilal
03-22-2011 01:30 PM
Now you are getting into an area where you are really going to earn your pay, and you can't get much help from Cisco TAC. You have a big application with lots of custom classes and JARs and when the class loader barfs like that (as we see in your error message), you have to sort out where the problem is, and the only satisfactory way is to bring the class files and jars in one at a time until the loader fails.
However, before you start, you MUST be aware that the CVP 7 VXML server is built on the 1.5 JDK, not the 1.4.2 JDK of CVP 3.x, so all Java source code must be recompiled with a 1.5 Java compiler and JAR'd again. Any JARs downloaded from the Internet will have to be verified to see if there is a 1.5 version.
Now the right place for those JARs is VXMLServer\common\lib, reusable components including SayItSmart and dynamic configuration classes should go in common\classes, in-line code in application\KTCIVR\java\classes.
Regards,
Geoff
Find answers to your questions by entering keywords or phrases in the Search bar above. New here? Use these resources to familiarize yourself with the community: