Welcome to the Cisco Networking Professionals Ask the Expert conversation. This is an opportunity to learn about installing, configuring and troubleshooting UCCX with Cisco expert Ryan LaFountain. Ryan is a technical and team lead of a Unified Contact Center Express TAC team. He has worked at Cisco for about 3 years as a TAC engineer. He has experience with voice gateways, CallManager Express, CallManager, IP IVR and Unified Contact Center Express and how these integrate to form Cisco’s Unified Communications solution. Ryan is excited about educating folks on Cisco’s Contact Center offerings to help them increase productivity and lower costs in the call center. He has a Bachelor’s degree in Information Science and Finance from Northeastern University in Boston, Massachusetts.
Remember to use the rating system to let Ryan know if you have received an adequate response.
Ryan might not be able to answer each question due to the volume expected during this event. Our moderators will post many of the unanswered questions in other discussion forums shortly after the event. This event lasts through March 26, 2010. Visit this forum often to view responses to your questions and the questions of other community members.
I had a query from a customer recently regarding enabling staff to log in and service Contact Centre (UCCX) queues remotely during disasters/bad weather etc.
A couple of things came to mind... I wondered if you could comment on the feasibility/supportability from TAC for each solution (obviously any voice quality or other Internet related issues being down to the customer to resolve, and assuming we have any VPN configured appropriately to give fully support a standard home-based VoIP endpoint with two way voice etc):
1) Remote worker using both IP Communicator and CAD via VPN
2) Remote worker using physical phone with ASA-based phone proxy and IPPA
3) Remote worker using physical phone with ASA-based proxy and CAD-BE
4) Are there any roadmapped (or current that I'm not aware of) remote-agent features for UCCX? Any examples of things you've seen customers doing succesfully?
The most important thing here is to make sure all the ports are opened. You can find the port utilization guide here:
The last section goes over port utilization for CAD and CSD. It is horribly written, but all of the ports are there.
I don't see an issue with any of the three situations you have described. UCCX and CAD/CSD interaction is basically layer 3 independent, as long as you can reach the devices and they can communicate, the network in between doesn't matter so much. Although we don't have official support for remote agents like in UCCE, I have seen customers run CAD and IPPA through site to site VPN, and through teleworker solutions such as SOHO routers with VPN and through ASA phone proxies as well.
One thing to keep in mind is that monitoring and recording will not work if you are using SPAN based monitoring and recording and the server and the SPAN source are on different layer 3 segments.
Other than that, it should work fine.
What I see most of the time is agents at home connected through either software or hardware VPN using IP Communicator and CAD. I am not aware of any enhancements on the UCCX roadmaps to enhance this functionality, but they have laxed the network requirements between UCCX and CAD in the latest versions, so I think we're starting to see support for these architectures.
can you tell us what are the major news coming with version 8.0? I was working once with CRS and not familiar with improvments but would like to find answers for few basic questions:
- Is UCCX still windows based application or is now running on Red Hat Linux? What about upcoming version 8.0?
- Is it still only about incoming voice or we can have chat too (messaging)? What about video calls?
- Are there any outbound possibilities?
Most of the documentation for UCCX 8.0 has been posted at the link below. You can check out the Install Guide and Administrator Guide. The SRND is still undergoing edits and should be posted in a few weeks.
To more directly answer your questions:
1. UCCX 8.0 is the first release running on the Linux platform. It is using the same UC OS as Linux based CUCM. We have basically borrowed the OS from CUCM and have written our code on top of that. As a result, much of the code for UCCX has been rewritten to accomodate the Linux environment. There are a few minor changes to the actual application, but most of the functionality is identical to UCCX 7.0(1). The look and feel of the UI is now similar to CUCM, but the functionality of the application is the same.
2. UCCX handles two types of contacts in 7.0(1)SR1 and later, inbound voice and email. Agents can now accept and reply to emails sent to a distribution group on Microsoft Exchange. Web chat functionality is still through eGain CIM integration although I am not sure you can actually order an eGain product for integration with UCCX, only UCCE. I believe this is a feature roadmapped for further revisions of UCCX and may be implemented by Calabrio or Cisco. At this time, we are not sure.
3. UCCX does contain an outbound dialer. More information regarding this is in the Administrator Guide at the link above. Essentially, it is a preview outbound dialer where contact lists are uploaded into the system which then reserves the agent. If the agent accepts the outbound contact, it is dialed through the dialer and bridged to the agent's phone. The agent can then set a callback time, reject, skip, reject-close, skip-close the contact or mark the number invalid in additon to some other functions. The Administrator Guide has more on this, but it is a pretty powerful feature and we're seeing more and more use in the field.
Please let me know if this answers your questions.
I will really appreciate to know the difference between CallManager and CallManager Express.
If i would like to trunk two IPBXs(e.g. Cisco and Alcatel) via SIP,
Which one is advisable to use?
Although this discussion is maily focused on UCCX, I will attempt to answer your question. If you have two IPBXs each with call control functionality, you may just need a CUBE to do SIP to SIP interworking with media flow around if they're both yours and media flow through if one is not controlled by you. You could also use CUCM to interwork these together if both are set up as SIP trunks in CUCM.
Someone more involved with gateways or CUCM can probably answer better.
CallManager is an enterprise call agent and can handle up to 30,000 phones per cluster. It runs on a server over a modified version of Red Hat Linux. CallManager Express (CME) is a much smaller call agent for SOHO and medium sized deployments. It runs on a router with specialized code.
I would explore the documentation on cisco.com, especially the SRNDs to learn more.
I have two questions:
1. Has the horrific (to put it politely) database scheme been corrected in version 8?
2. How to properly calculate (not using the built in stored procedures) logged in time/not ready time based on the scheme found in version 7.x and below.
You can find the database schema for UCCX 8.0 here:
Taking a quick look it does not appear there are any major differences in schema.
As you may know, agent states are held in AgentStateDetail. The eventType decode is:
You should see consecutive states for agents in the table. For example, if you see a Login, you should see a Log Out before the next Login. We have found that this is not always the case and are currenty investigating why that is, but as of now, we have not been able to determine the root cause. I have filed CSCte75642 for investigation into this.
Events in this table are point in time and do not include a begin and end such as those records in ContactCallDetail. Your programming language for parsing this information should be able to come up with the difference between consecutive events. For example, if you craft a SQL query to pull ASD information for a particular agent and order it by eventDateTime. Then, take the time of n+1 - n and you should have duration in that state. I have never done this, so if anyone else has feedback on the logic, let me know. Keep in mind that some states are generated by the system under normal operation. For example, you will see a Log In event and then immediately a Not Ready even with a reason code for 'Agent Login.' So, I would run a test call to an agent in the lab or during off hours and see what gets written to the DB.
It's unfortunate to see the database scheme fundamentally unaltered,
however I understand this from a backwards/product compatibility
Regarding the event AgentStateDetail table, I would really love to see
some SQL detailing the procedure in a concise form (Reading the Stored
Procedures is less than straightforward). As you have mentioned there
are occasions when you will have a second login even before a logout
event. Additionally, because the ASD table uses agentID, this value
may change during even periods causing an agent to log in as agentId =
1, and log out as agentId = 4. I fail to see the reason to use a
non-unique identifier in the fashion versus say, the resourceLoginId
field. The only reason I can think of for this is to track changes
matching to specific resource changes, however even this seems
unlikely and is of poor design.
If anyone has any insight to the contrary I would be most happy to
hear it. This design baffles me and is crude in its execution. As a
result, getting agent state data has proven to be computationally
expensive task and leads to product specific SQL (T-SQL in this case).
I appreciate your time Ryan and look forward to any insights on this matter.
A short question more related to future of the product, not 8.0. Are there any plans to de-couple CAD and CRS editor from CCX?
Let me explain. Many of us have more than one customer and usually all of these customers don't have one version of CCX. Add to that IPIVR. Currently one version of CCX "things" (agent desktop, supervisor desktop, editor) does work only with one particular version of CCX and with one particular cluster. End result is that to develop scripts for one customer and then switch to work with another I have to reinstall at least CAD and script editor. At the moment it's not a problem with editor - I use remote desktop. With version 8.0 in order to switch from one customer to another I will have to reinstall editor also. Maybe there are plans to switch editor to eclipse-base version, like with CVP?
I was faced with this same challenge when I started working exclusively with UCCX. I found that by using a virtualization strategy, vmware workstation in my case, that I am able to have a single vm dedicated to a customer and all of their version specific CCX software. I have had no issues with this setup for the last 6 months or so.
I do the same. I have 6 virtual machines, just to be able to switch relatively quickly from one customer to another. It gets cumbersome really fast. Not to mention a lot of wasted disk space. Basically, to be able to run 20-30M software you waste about 6*10G.
I was going to suggest what you seem to have found already with VMWare. I do not think they will be splitting these anytime soon. As we have made the decision to work with a single vendor for clients in UCCX (Calabrio, with exception of the Editor) as opposed to providing an API like in UCCE, I think the clients will be version locked for some time to come.
Can you tell me below questions about scripting on UCCX7.0?
1. I'm planning to use Select Resource step to customize my script.
I'm not using connect option of Select Resource, and
I set the Goto step in the Selected branch.
In the Select Resource step, an agent status is reserved at Selected branch.
I expected that an agent status would be released from reserved state
and change to available after the Goto step.
But after Goto step, still an agent was reserved state.
The agent was released after call disconnected.
Is it a correct performance?
If this result is correct, how do I change the agent status without disconnect?
Can you post the script for review?
Why are you using a GoTo step in the Selected branch of the Select Resource step?
sorry, I can't post the actual script.
but the reason why I choose Goto step, I expected that
If the script flow goes to after the Select Resource step, the agent will be released reserved state.
Actually, If the flow goes to True branch in If step, I'd like to change the agent status is available.
So, I use Goto step, and I want to go out from Select Resource step.
I'd like to add some infomation, I know I don't have to use Goto step.
If the flow is into Select Resource step, an available agent will be reserved.
Which step will the agent status change from reserved to available?
When you hit the Select Resource step and the system finds an agent, it places that agent into Reserved and begins to ring the agent's phone. This logic is contained in the Select Resource step and is hidden from view in the Script Editor. This is done by the system automatically and the behavior cannot be changed.
If the transfer to the agent fails for some reason such as a ring no answer, and the system is unable to find another agent in the CSQ in 'Ready' state, the call is placed in the Queued branch of the Select Resource step.
Agents are transitioned into the 'Talking' state after the 'Reserved' state once they pick up the call allocated to them and are connected to the caller. By default, agents are returned to the 'Ready' state after a call has been completed if Work mode is not configured.
So, for an inbound call, the normal agent state changes are:
I am confused as to why you would like to change the agent state from Reserved to Ready as this is not intended behavior of the system.
This is not possible. Once you use the Select Resource Step, that Agent is reserved until the contact terminates or connects to the Agent.
You can technically handle this with a bit of black magic. Consider the following:
if the moon is falling
call redirect to some other extension
The call redirect alone will achieve what you want, but give you an abandoned for that CSQ.
EDIT: I was composing while there was no response, sorry to step on toes.
No worries about hijacking. From a serviceability and TAC standpoint I would not recommend doing what you have suggested. When I troubleshoot agent state issues I rarely look in the script as it is very rare for that piece to be the culprit.
Although what you said will work, there should be a very solid business case for configuring it this way. In addition, if you mark the call as Handled within 5 seconds of the Call Redirect step, you shouldn't get an abandoned but you may not see the call as Dequeued as Handled is a terminal state and happens after the Dequeue.
I couldn't agree more. If you didn't want to connect to an Agent, then why did you use the Select Resource step in the first place?
However, I was showing him, that sometimes, you have to get a little creative.
I know. Big ups to you for the creative solution. I just wanted to put that disclaimer out there for all of TAC
a short question about scripting:
Is it possible to modify the calling number inside a UCCX script before redirecting the call?
Basically what we do is, we receive a call, and based on the first 4 digits in the calling number, we choose a redirect target. But before redirecting, we would like to discard the first 4 digits of the calling number. No CSQ / CAD etc. involved here. We use UCCX7.
Thanks for any suggestions,
I do not believe there is a way to do this. You cannot modify the call parametes and set them in JTAPI again. Notice in the Editor that there is a Get Call Contact Info step but no Set Call Contact Info step.
Anthony or another scripting guru on here can confirm.
Depending on exactly what you want to modify in the calling number you may be able to do it with a translation pattern in the CSS assigned to the UCCX CTI ports.
E.g. send the call to a dummy number which is actually a translation pattern, then modify the called/calling numbers as required and route to the intended destination.
That may work.
Depending on how you implement this, you may run into an unsupported config. If the call comes into UCCX and is redirected out to a translation pattern (or any device not controlled by UCCX) and is immediately redirected back to UCCX, bad things will happen
This is documented in the UCCX Release Notes for unsupported configurations on CUCM.
Ah yes - well, a loop is pretty much always a bad thing in telephony... I was assuming that we're just adjusting the way the calling number is presented to an external party...
You're correct, this is not possible via scripting today. Maybe in the future.
Props to Aaron for a creative solution.
I've come across an issue where a custom report takes more than 15 minutes to generate and apparently causes the HRC client to time out. How do I get around this? I've checked the hrcconfig file and it contains nothing specific to timeouts beyond login timeout.
You're help in this matter is greatly appreciated.