Showing results for 
Search instead for 
Did you mean: 

Calling CVP VXML app from ICM Admin Script

Hi Champs,

Is it possible to call VXML mirco-app directly from ICM admin script rather than routing script. I have a requirement to call a VXML application to update some custom tables on specific dates / time e.g office close / open hours. So i want to automate this process rather updating DB manually all the time. the VXML application is going to update the DB. However, i want to trigger this app automatically. 

So initial idea is to keep checking the date / Time and once the desired time tigers call the VXML app. ICM admin script has capability to run autonomously and can set values for PVs but don't know if we can call VXML.

any other thoughts and idea would be welcome.

10 Replies 10

Piyush Verma
Level 4
Level 4
You can't invoke a VXML application from the admin script, but you can definitely use the "DBLookup" node in the admin script. You can still keep the VXML application that allows anyone to call in, and write the values to a database. Now You can retrieve those values using DBLookup node in admin script. ICM only supports SQL though for the DBLookup.

This email and any attachments may contain confidential, proprietary, and/or privileged information. If you are not the intended recipient, please immediately notify the sender by return email and delete this communication and all attachments, retaining no copies. Any dissemination or use of the information by a person other than the intended recipient is unauthorized and may be subject to disciplinary actions, civil or criminal liability.


It  'is' possible, here's what Paul Tindall recommended (but I haven't tired it)

Use the ICM App Gwy in the admin script to trigger a CVP app via HTTP.


You'd need to add an App Gateway host. For simple non-critical things you could use the Node.JS that was published on GitHub.


Node.JS is pretty straightforward to use, is the place to start.

Install it.
Use 'npm' utility to load and manage node packages.
Use command: 'node' to run something.
Or, use node on its own to use interactive


Thanks @janinegraves ,

I will take a look on it.


Kind Regards,




You can find code to create the app gateway and node.js stuff on github at this link  (I haven't tried it, but this info was supplied by a reliable source Paul Tindall at Cisco):

Thanks Janie,

Yeah i have been looking for some document to get the idea how to use and configure app gateway to work with Node.JS. BTW, I know Paul very well :).


However, also wanna check some thing with you if i manage to call VXML app from ICM admin script then inside the app i should be able to perform all sort of supported stuff e.g. DB dip and update using JNDI or API. It should be totally independent of ICM as i won't pass any value, VXML suppose to do all the stuff.    


Thanks again,


Well you have 2 options there.


1. You could just trigger the updateApp.bat to execute for a Studio app written with AppStart java class (which runs whenever the app is loaded into memory - reboot, updateApp, etc). This is useful if all you want to do is trigger the Studio app to re-read a file or DB or execute a rest call and update Global Data variables.


2. If you are trying to get a Studio app to actually execute its call flow, then you'd have to make an HTTP call to http://IP:7000/CVP/Server?application=appname&var=value&var=value  and then that app will execute, use a VXMLServer license,  and could do a DB or WS call and return the data in the Return element.


I think using a Subdialog_Return instead of a CVP_Sudialog_Return might be easier, as CVP_Subdialog_Return requires two request/response steps to get the data returned and the VXMLServer license freed; Whereas the Subd_Return would probably just require one step.




Thanks, Janie,

So first option is not the requirement as i need to execute the call flow as well inside the VXML app.

Also let me be precise about my requirement and idea so i am sure i can get better ideas.

Requirement / Problem:

Currently we have Table where we manually set the data light savings time of different regions and for some specific countries. As this is very old setup and i want some automation in it and as first step i want to make this DB update automatic on specific dates with any human intervention. 

Ideas in mind:

1. Make outbound call using IVR based campaign (UCCE Dialler) and set datetime of that campaign in admin script to run run on specific date. This outbound call will hit ICM routing script and call VXML app inside that routing script which will perform the DB update. But this require some external number to mapped with this script. Or i am not sure id ucce dialler supports dialling internal number which was indeed the case with legacy SCCP dialler.

2. Use admin script to run on daily bases once and call VXML application which will execute the complete call flow by doing DB update etc and return successful.

3. If ICM admin script can not call VXMl app (that is why i raised this question in the community), try to call VXML application by scheduling some Cron job and execute the VXML call flow. Currently i am using some of the cron jobs to monitor the VXML application statuses and number of call on each application.


So long story short, challenge is to call VXML application automatically on particular date / time and let it execute the call flow as well :).

I hope you did not get bore with this requirement


Thank you,



If you want to drive your update work with a call into CVP there's a couple of things here that can help you implement some of your ideas.

Outbound destination simulator providing an outbound destination on a gateway/CUBE that can handle the dialer's SIP REFER necessary to transfer the call to the handler (IVR or agent).

Makes periodic test calls into CVP so you can use that to trigger anything you wish.



Thanks Paul, 

I will also look in to this. 


Thank you,


Just a thought, if you want to go in a completely different direction but one that might be easier to implement and accomplish the same thing, is just add logic to call it based on activity in your routing script.

So if in a couple of your busier UCCE script, have an IF box to look at calls offered in say the past hour or whatever your rule is. If 0, then send the call to execute your VXML app and then continue on.

If offered>0, then continue on without executing your app.

This avoids the updating the database all the time like you were saying, doesn't add much overhead, no need for admin script, etc.

Again, just another way to approach it.