cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Announcements
Walkthrough Wednesdays

ICM Ad-Hoc Closure w/o Administrator Intervention

522
Views
5
Helpful
1
Comments
This document was generated from CDN thread

Created by: Ryan Burtch on 03-09-2013 11:46:26 PM
I'm looking for a way to have a customer be able to call into an ICM script>enter in an access code> and be able to 'Ad-Hoc Close' a contact center.

Does anyone know how to do this?

Subject: RE: ICM Ad-Hoc Closure w/o Administrator Intervention
Replied by: Ryan Burtch on 04-09-2013 08:38:10 AM
Hemal:

Can you provide any input on how to get the authentication piece of this working?  I want the customer to have to enter an access code, but I'm not sure how best to authenticate them (e.g. flat files, DB, LDAP, etc).
 Any direction would be appreciated.

Subject: RE: New Message from Ryan Burtch in Customer Voice Portal (CVP) - General D
Replied by: Hemal Mehta on 04-09-2013 07:08:07 AM
You can do this through several ways.  I myself do it through CVP and prefer it due to lot more flexibility in doing different types of login validations using DB, flat files, ldap etc. In ICM, you will need to match the access code and do a update/lookup through DB and set a global flag to open or close a call center.
Based on the flag set the call center will show as closed or open. You can then do a update to open it or close it through your IVR app.  You can also configure a web app to do this.
Hemal
From: Cisco Developer Community Forums [mailto:cdicuser@developer.cisco.com]
Sent: Tuesday, September 03, 2013 11:47 PM
To: cdicuser@developer.cisco.com
Subject: New Message from Ryan Burtch in Customer Voice Portal (CVP) - General Discussion - All Versions: ICM Ad-Hoc Closure w/o Administrator Intervention

Ryan Burtch has created a new message in the forum "General Discussion - All Versions": -------------------------------------------------------------- I'm looking for a way to have a customer be able to call into an ICM script>enter in an access code> and be able to 'Ad-Hoc Close' a contact center.

Does anyone know how to do this?
--
To respond to this post, please click the following link: http://developer.cisco.com/web/cvp/forums/-/message_boards/view_message/18899603 or simply reply to this email.

Subject: RE: ICM Ad-Hoc Closure w/o Administrator Intervention
Replied by: Hemal Mehta on 04-09-2013 08:55:46 AM
Let's say you want to use DB. You will need to of course create a table where the table could have entry like Customer id and access code.  You could add the customer id and corresponding access code to this table. Then you could have the user enter the access code in CVP or ICM and then match it with the access code from DB.
If valid, the user can open or close the call center.  You could have another table which has the status of the call center. 
If open, you play the current status to customer and give them the option to close it and vice versa. When they open/close you update the values in DB to reflect the status.
For flat file and LDAP you will need to write java code and action classes to access these.  The DB mechanism will allow you to get away with minimum or no java code when used from CVP/ ICM.
Hemal

Subject: Re: New Message from Ryan Burtch in Customer Voice Portal (CVP) - General D
Replied by: Janine Graves on 04-09-2013 09:31:25 AM
If you need to do verification, I'd suggest you create a Studio application. Have ICM pass the current value of the CallCenterOpen flag to the Studio application in the ToExtVxml array. The studio app collects a user ID  and a PIN using Digits elements and then uses a Database element to check these values in a SQL database.  If it's all valid, then play the current value of the CallCenterOpen flag to the caller, use a Menu to see if they'd like to change the value. If so, confirm it with them and then send the new value back to ICM in the CVP_Subdialog_Return element. ICM can then check that value and set the flag appropriately. -- Janine Graves

Subject: RE: ICM Ad-Hoc Closure w/o Administrator Intervention
Replied by: Ryan Burtch on 04-09-2013 10:35:53 AM
Jameson:

I'd like to do this in CVP, if at all possible.  I will have several users who will need this functionality.  Our environment has about 40 Contact Centers and all of them will need this functionality in some capacity.

Subject: RE: ICM Ad-Hoc Closure w/o Administrator Intervention
Replied by: Jameson Gagnepain on 04-09-2013 09:20:03 AM
Ryan,

How flexible/granular do you want this to be? How many users and access codes? How many contact centers? You're going to get different answers to this question depending on who you ask... Ask in a CVP forum, and lots of folks will tell you "Use a CVP script! Use DB dips or a Web Service call!". Ask in a UCCE forum, and everyone will tell you to do it all in ICM scripting. When you're a hammer, every problem looks like a nail...

If you just want one access code to close down one contact center, it's simplest to do this entirely in ICM. Essentially this would be an ICM script that the user calls and enters their code - an If statement checks the caller entered digits against a hard-coded number, and then gives the caller options to open/close if it's a match. A Global variable would be set based on this input. Other scripts would check against this global variable to see if they're open or closed. You could potentially have an Admin script that would come back later and automatically re-open/close the contact center at a later point, or you can require the user call back to switch the state again. This can be done with more users/access codes as well, I've built something similar for 5 seperate access codes.

If you want more flexibilty, a DB is useful, especially combined with CVP scripting. You could tie specific access codes to specific extensions (or external numbers even), give control over multiple contact centers, and provide more dynamic menuing to the user based on who they are and the current contact center state. You would still be well off to store results in ICM global variables - ICM works well with these for routing decisions. I'm having a hard time seeing how LDAP integration would make much sense here (unless you're making a web page interface), as it's difficult to enter an alphanumeric passcode into a phone.

-Jameson

Subject: RE: ICM Ad-Hoc Closure w/o Administrator Intervention
Replied by: Ryan Burtch on 04-09-2013 11:34:04 AM
Janine:

You mentioned "Have ICM pass the current value of the CallCenterOpen flag to the Studio application in the ToExtVxml array".
   - I know that I can do this in a Peripheral Variable, but could you help me out with the 'Value' to pass?  My Global Variable is: Global.userBVT_Open_Hours
   - Also,  Do you know how I would program the Global Variable 'Value' / Perameter in the Decision Element (CVP Call Studio)?  (i.e. I want to be able to announce the current state of the call center (closed/open) and ask the caller what they would like to do.)

This is what I have so far:

See attached.

Subject: RE: ICM Ad-Hoc Closure w/o Administrator Intervention
Replied by: Jameson Gagnepain on 04-09-2013 11:07:11 AM
Yeah, sounds like CVP is definitely the way to go, then.

What do you currently use for open/close checks for your 40 contact centers? You may potentially want to store the status result from this script in the same way, whether that's in a DB or in ICM variables.

Would it just be "Supervisor" agents who need this ability? Do Agent IDs match Instrument IDs in your contact centers? Do your Agent Teams match up well with your Contact Centers? You could perhaps do DB dips into the Agent, Person, Agent_Team, etc. views of the AW HDS to check the following:
  1. Does the caller's ANI match a PeripheralNumber?
  2. Does that PeripheralNumber match a SupervisorAgent with LoginEnabled?
  3. Which Agent_Teams does this Supervisor supervise?
You could potentially do a lot with your pre-existing data in the ICM database here. At a minimum you would still need an external DB for passcode storage, as the passwords in the Person view are encoded... not sure if there's a good way to work with those. You may also need to have a table to match Agent Teams or Supervisors to the specific Contact Center(s) you would like them able to close, depending on how consistent your naming scheme in ICM is.

Subject: RE: ICM Ad-Hoc Closure w/o Administrator Intervention
Replied by: Janine Graves on 05-09-2013 08:23:20 AM
Ryan Burtch:
Janine:

You mentioned "Have ICM pass the current value of the CallCenterOpen flag to the Studio application in the ToExtVxml array".
   - I know that I can do this in a Peripheral Variable, but could you help me out with the 'Value' to pass?  My Global Variable is: Global.userBVT_Open_Hours
   - Also,  Do you know how I would program the Global Variable 'Value' / Perameter in the Decision Element (CVP Call Studio)?  (i.e. I want to be able to announce the current state of the call center (closed/open) and ask the caller what they would like to do.)

This is what I have so far:

See attached.
NOTE -----An omission in my previous reply, when you return back to ICM from the Studio application, ensure that ICM looks at the FROM External VXML[0] to see what the new value should be for your global var.----- (I've fixed it below):


In the ICM script that invokes the VXML Server application, you are already setting Call.user.microapp.ToExtVXML[0] = "application=Appname".
You can use another SetVariable node and set ToExtVXML[1] to concatenate("CCflag=", Global.userBVT_Open_Hours)
This will then be available in your Studio/VxmlServer application as a String value stored as Session Data named CCflag
In Studio Decision element, select Data: Session
And then manually enter the name of the variable CCflag

When you return back from Studio application, use the CVP_Subdialog_Return element and set the caller_input to something like change or done.
If done, then perhaps the person didn't verify or changed their mind, ICM could release the call.
If change then perhaps ICM looks at the FROM External VXML[0] variable to ensuer the new value is valid (true or false, perhaps) and set the Global Variable accordingly.
ICM




Subject: RE: ICM Ad-Hoc Closure w/o Administrator Intervention
Replied by: Ryan Burtch on 10-09-2013 03:16:07 PM
Janine:

I'm still a bit confused.  I have set the decision element to the name of my global variable (Global.userBVT_Open_Hours).  See attachment to verify If I'm doing this right.  I need to pass the value that is currently set in Global.userBVT_Open_Hours to CVP Call Studio, but I can't figure that out.  My goal is to announce the current state of the call center (open or closed) to the caller and then offer them the option to "Press 1 to open (or close) the call center..." . Once the caller presses 1, I want to set the value of Global.userBVT_Open_Hours to the indicated (0 = Closed or 1 = Open) and pass that result back to ICM.

Also, I don't know what the syntax is to set IF statements in ICM for actions that pertain to FROM External VXML.  Sorry for all the questions.

Subject: RE: ICM Ad-Hoc Closure w/o Administrator Intervention
Replied by: Janine Graves on 10-09-2013 03:33:45 PM
Ryan Burtch:
Janine:

You mentioned "Have ICM pass the current value of the CallCenterOpen flag to the Studio application in the ToExtVxml array".
   - I know that I can do this in a Peripheral Variable, but could you help me out with the 'Value' to pass?  My Global Variable is: Global.userBVT_Open_Hours
   - Also,  Do you know how I would program the Global Variable 'Value' / Perameter in the Decision Element (CVP Call Studio)?  (i.e. I want to be able to announce the current state of the call center (closed/open) and ask the caller what they would like to do.)

This is what I have so far:

See attached.
Hi Ryan,
1) In ICM you must pass the value of the global variable to the Studio/VxmlServer by assigning it into the ToExtVxml array.
Call.user.microapp.ToExtVXML[]
Index: 1
Value: concatenate("CallCenterOpen=",Global.userBVT_Open_Hours)

2) When you get to Studio/VxmlServer, this will no longer be a Global variable. It will come in from ICM as 'Session data' with the name 'CallCenterOpen' but it'll have the same value as was in the global ICM variable.

3) In your Decision element, the left hand side is fine (Session Data, named CallCenterOpen) but you'll need to compare it to the Constant String: open (or whatever value it has in ICM). Or you can compare it to the Constant String: closed

4) If you decide to pass a value back to ICM, use the CVP_Subdialog_Return element and set either Caller_Input to open or to closed or cancel

5) In ICM, use an IF element and check if Call.user.microapp.caller_input=="open"  (or "closed" or "cancel")

Subject: RE: ICM Ad-Hoc Closure w/o Administrator Intervention
Replied by: Ryan Burtch on 11-09-2013 07:55:47 AM
Janine:

Thank you so much for the help!  I was able to get it working and your direction really strengthened my understanding of CVP Call Studio and ICM.

You should really write a book on this stuff   ...I would buy it.

Subject: RE: ICM Ad-Hoc Closure w/o Administrator Intervention
Replied by: Ryan Burtch on 12-09-2013 10:30:33 PM
Jameson:

I figurred out how to do this using Global Variable in ICM and passing the current contact center state (Global Varible Value...aka Session Date) to CVP.  I'm wanting to take this a bit further in that I'd like to give supervisors the ability to close individual Queues.

Most Call Flows are like so:

Call comes into ICM>MainMenu (In CVP)>Press 1,2,3, etc>back to ICM>IF statement (e.g. If caller pressed 1)>Go To Script Node>Option 1 ICM Script w/ Queue to SG.

Any direction you can provide would be much appreciated.

Subject: RE: ICM Ad-Hoc Closure w/o Administrator Intervention
Replied by: Jameson Gagnepain on 13-09-2013 10:37:48 AM
Ryan,

Let's see here...  You probably need to start with some of the following:
  • A way for the supervisor to select which queue they'd like to close. Probably through menu selection in CVP, unless you'd like them to enter a code specific to the queue.
  • Storage of each individual queue's "open/close" status. How you store this depends a little on where you're making decisions based on this status:
  •       If your decisions on this status happen in ICM, you'll need User Variable(s). Creating 40 User Variables for this is probably a bit much... you could make this easier by making a single Persistent variable with an Object type like Call Type, Master Script, Skill Group, or whatever you think is appropriate here. If you use a different Call Type for each queue, it would seem appropriate to create a Call Type variable to store that queue's open/close status.
  •      If all of your decisions on the status happen in CVP, it would be simpler to create a database table to record these in.
  • You'll need a way to get the current open/close status for the selected queue into CVP after the supervisor makes their selection:
  •      If you're storing the status in User Variables, you'll have to request some data from ICM. This can be done through either a ReqICMLabel node, or splitting your execution into two different CVP scripts with some ICM logic in between. The latter may be simpler to implement.
  •      If you're storing the status in a database, you can just do a DB node in CVP to get the status.
Hopefully this gives you a good jumping off point. I'd be glad to answer any questions on the specifics. This sounds like it'll be a pretty cool project, I've thought in the past about implementing something similar. Check out this thread on the Cisco Contact Center community - https://supportforums.cisco.com/thread/2236395?tstart=60 - If you use ICM variables to store the status, you could potentially store it as a time+date to automatically re-open the queue after. Neat concept.
Comments
shafeinabil
Beginner

thank you

Content for Community-Ad