It has been a while since I posted my last version of the free of charge wallboard.
Some of you know that I changed jobs since (because my former employer did not like me working on the walboard). Since then I no longer have the option to further develop the script because the current employer is an Avaya shop for telephony.
I keep receiving a lot of request for the files, for unencrypted version, et cetera (and I note that a lot of people never read the full thread, which I have to say that I think that is just lame).
Because so many of you seem to enjoy the wallbaord and have great ideas for add ons and changes, I am posting version 2.4 which is last release I will post here.
The only thing changed from 2.3 to 2.4 is that I removed the encryption.
This will enable the Cisco netpro forum community to further develop this script. Note that the disclaimer file in the archive contains important info about how I would like you to handle the copyright (don't try to make mony from my efforts, unless you are willing to provide me a fair share :-))
Also important to know is that I had no possibility to run a test on this last version so it may contain small errors (shouldn't be the case, but just so you know).
Last but not least, since I have no test bed, I am unable to provide any form of support. So please, don't email me with support questions. If you do need to contact me for whatever other reason please send a mail to email@example.com
If statements on lines 160 - 180 and 215 - 235 are missing their "then" clauses. I have attached the updated file. Also the CSQ stats aren't displaying properly for me. They show up as just 1 row with the CSQ names with no data. I'm working on correcting that now. Agent stats display fine. When I turn on the option for overall ICD stats nothing happens. Not sure if that's a bug or if the functionality hasn't been built in yet.
Figured it out. The parameters.cfg was missing the Const's for the CSQ stats. Added them in from the wallboard.asp file. Now all CSQ stats and Agent Stats display fine.
Need to add the following lines to your parameters.cfg file to display CSQ info:
Const DisplayCSQloggedInAgents = 1
Const DisplayCSQavailableAgents = 1
Const DisplayCSQcallsWaiting = 1
Const DisplayCSQcallsHandled = 1
Const DisplayCSQtotalCalls = 1
Const DisplayCSQcallsAbandoned = 1
Const DisplayCSQlongestWaitDuration = 1
Const DisplayOverallStatsTrue = 1
I have written an IP Phone service to compliment this wallboard application. The service displays a subset of the information found in the wallboard app and also allows for sending alerts to the phones when certain queue thresholds have been met.
That service can be found here:
I've made some minor changes to correct some issues and add functionality.
Modified initial Select Case "" statement to instantly forward you to selected stats rather then wait for refresh timeout.
Modified Case "CSQStats" because it wasn't calling the correct function.
Added ICDStats function to enable displaying of overall ICD stats.
Last Round of updates for today...
Modified Select Case statment to take QueryString params that can be refereced elsewhere in the script.
(i.e. what was ?CSQstats or ?AgentStats...is now ?Stats=CSQ and ?Stats=Agent)
Added option to hold current displayed page. This option keeps the current page refreshing and prevents the application from moving to the next set of stats (CSQ, Agent, ICD).
"Modularized" the code to make it easier to navigate through, easier to add optional and separate code, and easier to give credit where due. Because i'm not aware of who's responsible for what, all modules that I haven't written have been credited to Leo. If other credit is due it should be added accordingly.
Side note, if this grows much beyond it currently development state I would suggest opening a sourceforge page for it to make it easier to maintain a proper versioning system, and easier for end users to obtain the lastest code, without having to sift through all of the threads on this page.
edit: I disabled the logos in the code and forgot to reenable them before I posted the latest version. If you wish to reenble the logos before the next code update remove the leading ' from lines 140, 259, and 368.
Great job in making it more modular. As said, it allows to provide proper credit. For all modules that where in the existing packet it was indeed me doing all the hard work on writing the code, testing it and making it work. However, in the disclaimer I do give credit to people who helped me big time with some specifics.
sourceforge page? Sounds like a great idea. If freely available I am more then willing to (one of the) moderator(s) of such page.
Again, great job so far ;-)
Ever since this project started I have received a lot of mails from people requesting if the reasoncode could be added. Well, the answer is yes, because you can basically add anything you would like.
In fact this is very simple (if you do have some coding experience. Sicne I have no test bed I am going to provide the rough guide lines, hoping someone picks it up to add this into the agent stats.
First, it would require the SQL query to change so it would actually get the reasoncode.
Today it looks like this:
strSQL = "SELECT x.resourceName, t.eventType, x.datetime FROM (SELECT t1.resourceID, t1.resourceName, MAX(t2.eventDateTime) AS datetime FROM Resource AS t1 INNER JOIN AgentStateDetail AS t2 ON t2.agentID = t1.resourceID GROUP BY t1.resourceID, t1.resourceName ) AS x INNER JOIN AgentStateDetail AS t ON t.agentID = x.resourceID AND t.eventDateTime = x.datetime ORDER BY x.resourceName"
Just change that string to this:
strSQL = "SELECT x.resourceName, t.eventType, t.reasonCode, x.datetime FROM (SELECT t1.resourceID, t1.resourceName, MAX(t2.eventDateTime) AS datetime FROM Resource AS t1 INNER JOIN AgentStateDetail AS t2 ON t2.agentID = t1.resourceID GROUP BY t1.resourceID, t1.resourceName ) AS x INNER JOIN AgentStateDetail AS t ON t.agentID = x.resourceID AND t.eventDateTime = x.datetime ORDER BY x.resourceName"
Now the query contains the reasoncode. However, you will have to translate the codes (small integers) to text to let it make sense on the display. If you wnt to to this neat, find out which table hold the values, make a querie that digs that table one time and loads the text values into local variables (make sure you define variables using dim).
Or, if your lame, like me, do something like this after the line "While Not objRS.EOF":
If objRS("reasonCode") = 1 Then
strReasonCode = "Lunch"
If objRS("reasonCode") = 2 Then
strReasonCode = "End of Day"
and so on
Last but not least, add a column to the table in the html output (I'll leave that up to your imagination).
I've been using a page similar to this for a while. I ran into this thread and found the solution to setting mix mode authentication on the SQL server.(not TAC supported) I've followed the instructions in the .doc file but am getting the following error when I switch to Windows only-
Login failed for user '(null)'. Reason: Not associated with a trusted SQL Server connection.
The most likely cause of this error is not changing the IIS guest account to a user that has access to the SQL database. Check the Directory Security properties on your IIS Virtual Website and make sure the account used for anonymous access is your "wallBoardUser" account, or whatever account you created to access your CRSSQL database.
I am getting the same error.
I have an IPCCX 5.0(2) cluster and I am trying the wallboard 4.2.1 version.
I have followed the user guide steps. Some remarks to this:
In IPCCX 5.0(2) administration waebpage for Real Time Snapshot Config I must set for the Wallboard System the following parameters:
- Server Name --> I put the IP address of the Web server where I copied the wallboard files.
- Administrator ID --> I put an ID of a database administrator for the IPCCX MS SQL (no wallboardUser, but an ID of an administrator).
- password --> the password for this ID.
In the parameters.cfg I set the IPCCversion = 4 as the "5.0(2)" seems to fail.
Using the default anonimous account in the IIS server I get the previously posted error. If I change the name to "wallboardUser" I get a "no permission to access this page" error.
"wallboardUser" is a user of the IPCCX database, it is not a user of any OS (nor IPCCX nor wallboard server). How does it affect the webpage permissions?
How can I solve this problem??
Thanks in advance for your kind support.
I get it working following the instructions for authentication with IPCCX 4.x. Instead of using the CiscoWbUsr user I have created a new one to avoid changing its unknown password.
Now I get the CSQ statics, when the agent statictics tried to be shown I get an error:
SELECT permission denied on object 'Resource', database 'db_cra', owner 'dbo'.
Another update, I'm working on a rewrite that adds a nice frontend. Currently I'm using the Gila2 xhtml/css wrapper. Should have the first fully functioning version out by the end of the day.
This Front end incorporates all 3 queries (CSQ, ICD, and Agent) into 1 screen. It also allows you to sort the CSQ stats by column.
I've attached a screenshot of my dev code so you can see where I'm going with it.
I think this is neat, but do have one important comment. I would try to avoid having a scroll bar in a walboard presentation (agents list requires to scroll down in your current view).
Maybe you can try to enlarge the right panel and have more columns to display all agents.
Remember that most wallboards will be displaying only and not have a keyboard/mouse available.
Just my 2cents.
Hope it helps ;-)
I'm still working on the output formating, I will try to squeeze it all on one page, but even the original wallboard.asp scrolled for me. My company has 40 CSQ's with 80 agents on two separate servers so it's going to be hard to compress the entire page into one screen. What I might do instead is make a drop down where you can select an individual team to look at. Also, I've rotated my display 90 degrees and it makes for a much better experience.
Here is my go at fixing the scrolling issue. I've created 3 pages, First page gives you ICD + CSQ + Agent Summary. 2nd page give you ICD + Agent Detail, 3rd Page gives you ICD + CSQ stats.
I'm just working on cleaning up the code now. I should have it posted by 5pm est.
I'm also working on a module for the next revision that will allow you to click on an agent in a "not ready" state and allow you to make them ready from the web page. Not so much of a wallboard feature as a supervisor feature, but useful nonetheless.
IMHO the gila-overall.jpg looks much better this way. I like the grouping for the agents ;-)
Good job, keep up the good work.
Ok, here is the first release of the "Gila" wrapped wallboard 2.4.1.
A few minor changes to the original code:
1st: I noticed that the sql call that retrieves the agent stats wasn't checking to see if the agents that it was returning were active or not. This was causing it to return multiple rows for agents whose skill set had been modified recently. (IPCC doesn't update the original resource config when you change a resource's settings in RmCm, it instead creates a new resource and marks the old one as inactive...so if you make a change to a resource, that resource would show up twice on the wallboard.) I modified the query to make this check.
2nd: I didn't see a need to differentiate between an agent that was "logged in" and an Agent that is "not ready" on the summary page. For all practical purposes they are in the same state, and wont become ready until they manually press the ready button.
My next release will include the detailed agent stats page which will have the reason code column that will tell you why they are in the state they are in, so if you need to tell the difference between a "logged in" agent and a "not ready" agent you will be able to do so there.
There is a new variable in the parameters.cfg file: "fileName". If you wish to rename the gila-wallboard.asp to some other name, update this parameter to reflect whatever name you change it to.
Build 20080220.002 Changes:
Updated to FSF GPL licensing and added necessary verbiage.
Added distinction between agents who are "not ready" and agents who are on "non-acd" calls. This was done by returning the reason code in the agentStats query and parsing the not ready eventType against the reason code for the "not ready" status.
that was a big help to me. We have one queue where they primarily make outbound calls, and prior to this there was no distinction in the script between not ready and not ready because they picked up the phone and made an outbound call. once I updated Leo's code with that If/then/Else code you provided, it was clear that some of those blinking NotReady agents were on outbound calls.
I like the plethura of stats your gila-wallboard has, it is great to provide to the managers but not on a 42" plasma due to the scrollbar. Good job.
I think it is fantastic that you all have taken your knowledge and applied it to a much needed tool in the call center arena. Thank you all for the contribution.
I attached a couple pages I did using the same code. just a little showcase, nothing fancy or elaborate. I thought it would be good to present what everyone's help can do.
We rotated our wallboards 90* and the output is much better. Only caveat is that the gila wallboard requires a minium of 1024 display width so in order to rotate the display 90* on a plasma it has to be able to support 1080i/p output.
I was hoping the code for the gila-agent and gila-gueue pages could be posted as well when clicked from the gila-overall screen. I am not a programmer so what you guys are doing is absolutely amazing to me. I am a router switch phone system guy that now has to take care of our UCCX server. Thanks a ton fellas - great work.
Sure, but know this. I took both mmelbourne and lmourits code and combined it into one CSQ page and possibly someone else. I scoured posts dated back to 2 years ago and sampled everyone's code and all versions until I found what I could work with. thanks again everyone for contributing. I couldn't have done it without you all. The wallboard page is again lmourits code but I stopped the changeing of the page on refresh so its just a main CSQ Summary page and then I used hyperlinks for each CSQ to its respective CSQ/Agent details page. I say this because the CSQ/Agent code will be messy when you look at it. I tried to clean it up but it got out of control with some of the variables so I figured "If it ain't broke, don't fix it" . I'm a network engineer not a programmer so I don't feel so ashamed for the sloppy code, although I acknowledge its not good practice to leave it that way. Anyway....
Lmourits code references a parameters.cfg file for the database connection and referencing some variables, where as mmelbournes has all of it within the code itself so you will see each separate table has separate pieces of code and i just used html to combine the two together and made some minor adjustments.