INTELLIGENT WORK FORUMS FOR COMPUTER PROFESSIONALS
Come Join Us!
Are you a Computer / IT professional? Join Tek-Tips now!
- Talk With Other Members
- Be Notified Of Responses
To Your Posts
- Keyword Search
- One-Click Access To Your
Favorite Forums
- Automated Signatures
On Your Posts
- Best Of All, It's Free!
*Tek-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.
Partner With Us!
"Best Of Breed" Forums Add Stickiness To Your Site

(Download This Button Today!)
Feedback
"...My thanks to the contributors who freely share their knowledge and enthusiasms. This forum restores some
measure of my faith in human nature..."
Geography
Where in the world do Tek-Tips members come from?
|
CTI Programming (UUI setting) (4)
|
|
All,
I have been looking through Avaya's TSAPI docs as well as others regarding attPrivateData and I am UNABLE to set the UUI data field. :(
Here is the deal: 1) User calls Avaya switch. 2) Switch collects digits and adjunct routes to CTI app. 3) CTI app can see input digits and all works well. 4) CTI app MUST be able to take entered digits and assign to UUI private data field. 5) I can read UUI private data coming in, but I am unable to set it and return it to switch.
Normally... From what I have read, if I receive the following it should work:
1) CTI app receives adjunct route request. 2) I perform some logic. 3) I set value to UUI value and assign UUI type (ASCII). 4) I then answer the adjunct route request and pass my privateData structure.
However... When I return my private data, the UUI value is still blank.
Does anyone have some sample code on this... I am spinning some serious wheels trying to figure this out.
Thanks,
Zowwie
|
|
|
dwalin (TechnicalUser) |
8 Aug 05 8:00 |
Zowwie438,
afair, you can't set uui field for an existing call. however, you can set it for transferred or conferenced call. |
|
Dwalin,
Thanks for the reply, but this IS NOT GOOD! :( If I understand you correctly you are saying:
1) I can assign UUI data to new calls. 2) I can assign UUI data to a call I conf. 3) I can assign UUI data to a call I trans.
BUT I CAN NOT assign UUI data to an existing call when I respond to a CSTA_ROUTE_EXT.
If the above is valid... That makes NO SENSE. Are you aware of any work arounds to this?
I MUST be able to set this UUI field when I receive the route request ext.
The DEFPROG.PDF lists the following for cstaRouteSelectInv():
Private Parameters: callingDevice, directAgentCallSplit, priorityCalling, destRoute, collectCode, userProvidedCode, userInfo
userInfo [optional] Contains user-to-user information. This parameter allows the application to associate caller information, up to 32 or 96 bytes, with a call. It may be a customer number, credit card number, alphanumeric digits, or a binary string. It is propagated with the call whether the call is routed to a destination on the local switch or to a destination on a remote switch over PRI trunks. The switch sends the userto- user information (UUI) in the ISDN SETUP message over the PRI trunk to establish the call. The local and the remote switch include the UUI in the Delivered Event Report and in the CSTARouteRequestExtEvent to the application. A NULL indicates that this parameter is not present. Prior to G3V8, the maximum length of userInfo was 32 bytes. Beginning with G3V8, the maximum length of userInfo was increased to 96 bytes. An application using private data version 5 and earlier can only receive a maximum of 32-byte data for userInfo, regardless of the size data that is sent by the switch. The following UUI protocol types are supported: UUI_NONE — There is no data provided in the data parameter. UUI_USER_SPECIFIC — The content of the data parameter is a binary string. The correct size (maximum of 32 or 96 bytes) of data must be specified in the size parameter. UUI_IA5_ASCII — The content of the data parameter must be a null-terminated IA5 (ASCII) character string. The correct size (maximum of 32 or 96 bytes excluding the null terminator) of data must be specified in the size parameter. 1. The user-to-user code collection stops when the user enters the requested number of digits or enters a # character to end the digit entry. If a user enters the # before entering the requested number of digits, then the # appears in the character string.
Based on the above... it appears to me that I SHOULD be able to SET UUI data when answering a RouteRequestExt.
Please advise.
--Zowwie |
|
|
dwalin (TechnicalUser) |
8 Aug 05 8:38 |
Zowwie438,
according to the doc you quoted, 'The switch sends the userto- user information (UUI) in the ISDN SETUP message over the PRI trunk to establish the call.'. if there is no call setup occuring, how do you expect to set uui field? i'd suggest going two ways: either conference a call to cti (virtual) station and then issue route select, or don't actually use uui on this stage. please explain in more detail, what exactly you want to achieve. if you want to 'mark' this call to be able to track it further on its way, use ucid instead. if you want the uui to be delivered to agent desktop or some adjunct, there also are ways to get over this limitation. |
|
Dwalin, Thanks for the tips so far... It's been a challenge locating people who have worked with UUI, so thanks in advance for what you have sent so far. Here is the deal: 1) Vectors and Announcements on switch collect customers digits. 2) Vector does adjunct route to my C++ tsapi app. 3) I take entered digits and look up customer info for rep that is about to get call. 4) I place monitor on callID so I can track call for life. 5) When I send routeSelectInv back to switch... All works fine. HOWEVER... When the vector collects the digits, it is placed in the attPrivateData "entered digits" VS that of the UUI. While I have the call in my control for that customer lookup... I must be able to take the value of "entered digits" and assign it to the attPrivateData UUI before sending it back to the switch. The reason for this... There is a third party vendor that sits further down the call tree that may take control of the call. When they do, they MUST have that "entered digit" data set inside the UUI field. You would think that since the routeSelectInv accepts privateData... That I would be able to set it on the way back to the switch. If I have to do a Round Robin type approach to/from a VDN in order to overcome this issue... Then that is what I will do. Please provide further info or purge all your CTI knowledge on reply.  Thanks Dwalin. --Zowwie |
|
|
dwalin (TechnicalUser) |
8 Aug 05 14:55 |
Zowwie438,
the only way i see for you is to originate a new call and set uui for it. to minimize losses, try to use one-step conference function, this way call should retain its ucid and have your modified uui. i can't say exactly what would happen if you try to conference a call during route request processing, but my estimation is a switch should detect it and drop route request. to make it sure, you can use cstaRouteEndInv(). |
|
|
mikebk (Programmer) |
18 Aug 05 17:20 |
'm not quite sure what environment you are working in (programming a vector?). I've populated UUI many times but always over ASAI. The normal way of doing this has been to have the vector to do a route request (over ASAI) providing collected digits, etc. The routing application then inserts the data in UUI with the Route Select function and actually selects the destination.
You might want to write a small TSAPI application that does this processing. At one time Avaya had some PC based applications that could do this without needing to write a TSAPI application.
Hope this helps
Mike |
|
Well guys... I am still having issues here.
Does anyone have some sample code on passing ATTPrivateData to a routeSelect, a makeCall or anything else?
I have tried till I am blue in the face to pass private data and it's just not working. :( I can read it all day long, but I can't pass anything back.
I'll take any kind of sample you can provide... JTAPI, TSAPI, ASAI... I just need to see how they are passing it back to the G3PD driver.
Thanks,
Zowwie
|
|
(3) tjaartv (Programmer) |
25 Aug 05 7:38 |
Hi,
I have done this many times. See sample code below. This is done in reply to a adjunct route request.
CString uui = "test uui data";
ATTUserToUserInfo_t UUI; //UUI.type = UUI_USER_SPECIFIC; UUI.type = UUI_IA5_ASCII; UUI.data.length = uui.GetLength();
for (int i=0;i<uui.GetLength();i++) UUI.data.value[i] = uui[i]; RetCode_t rc1 = attV6RouteSelect( PrivateDataPtr, NULL, NULL, // ACD Agents // split FALSE, // TRUE = On, // FALSE = Off // (or not // specified) NULL, // TAC/ARS/AAR for // off-PBX ext NULL, // Request DTMF // tone detector NULL,// Code to send // with routed // call &UUI); // user-to-user // info with call //route the call RetCode_t rc = cstaRouteSelectInv(AcsHandle, InvokeID, ReqID, RoutingXRef, &Destination, 1, NULL, FALSE, (PrivateData_t*)PrivateDataPtr); |
|
Tjaartv,
Is it required to use the attV6RouteSelect in combination with the cstaRouteSelectInv? Or did you just place that there to show two different version uses?
--Zowwie |
|
Tjaartv,
GOT IT! Thanks a million for your help!
--Zowwie |
|
|
mikebk (Programmer) |
26 Aug 05 9:16 |
I'm glad its working now. What was the cause of the problem?
Thanks
Mike |
|
I was only calling cstaRouteSelectInv and did not call attV6RouteSelect.
I didn't see attV6RouteSelect in the TSAPI docs, but I did find something related inside the Multivantage programming docs.
Once I tried what tgarrtv showed me, all worked like a charm. Now that I know more about some of the attv6 commands I am off to find out what else I can do.
My next goal is to obtain statistics on the VDN's, Splits and trunks and based on intervals... Relay that data to a webService. This will allow us to use this data inside other client applications or expose that data to other developers within the company.
This will allow them to "impose" the switch load or help desk load inside applet like applications or their clients.
Thanks to everyone who provided me a helping hand... I am so glad I found this forum, because google doesn't have that much about privateData.
--Zowwie
|
|
Should we be able to set ATTUserProvidedCode_t userProvidedCode field in a similar way? With or without ATTUserToUserInfo_t userInfo. For some reason I'm always getting empty userProvidedCode. At the same time (through the same code) userInfo is being passed fine.
As a test I'm setting userProvidedCode.type to UP_DATA_BASE_PROVIDED and userProvidedCode.data to something like "12345".
Both VDNs involved are being monitored. Call arrives to VDN1/vector1, hits adjunct, in the code I'm setting userInfo and userProvidedCode for attV6RouteSelect(...), and route the call to VDN2/vector2 -> skillset with a logged in/ready agent. Call is being delivered to the agent's station but DELIVERED event contains userInfo only. userEnteredCode comes empty.
Is the problem here because attV6RouteSelect(...) sets ATTUserProvidedCode_t but DELIVERED event contains ATTUserEnteredCode_t? Is there a way to make this work?
Thanks in advance! Sergei
|
|
Never mind, got it working! Obviously not like ATTUserEnteredCode_t in the DELIVERED event as it's a different type/element. But the UserProvidedCode can be seen on the station display when the call is routed / delivered to the station. |
|
Sergei,
I am REALLY glad you mentioned this! I am working on a major project where all calls will come through on of my servers for proper routing. Now that you have given me some idea on how to sending different text to the phone, this will help.
Are you attaching that "text" data to the callID object... Or are you sending it directly to the deviceID when the agent or endpoint answers the phone?
--Zowwie
|
|
Zowwie - Here is exactly what I'm doing. I'm setting ATTUserProvidedCode_t variable and then call attV6RouteSelect(...). When it returns, I'm calling cstaRouteSelectInv(...) passing new, routed VDN to the switch. When the call is being delivered to the agent's station, agent can see the ProvidedCode data on the station's display. The data can be seen as soon as the call is ringing at the station, after pressing a corresponding button on the phone. Hope this helps! |
|
Sergei,
One things to note on your text fields. Although the switch may accept 20, 30, 50 or 100 characters (what ever it is)... The end result of displaying that text is limited by the model telephone where the call terminates AS WELL as the format that it is being displayed. (line 1, line 2, etc)
In our world.. We are limited to 17 characters ONLY.
--Zowwie
|
|
Yes, sure. Data field in the ATTUserProvidedCode_t strycture has limit of 24+1. And for the userCode, contrary to UUI, we can set digits, *, and # only...
|
|
Do you guys know what "type" needs to be assigned to a button on the hard-phone (page 3 of the station config in Definity after executing "change station XXXXX") to display UserProvidedCode received from a database? Let's say I'm setting userProvidedCode.data to "11111" and userProvidedCode.type to UP_DATA_BASE_PROVIDED in my application and would like to see the "11111" on the agent's hard-phone when the call is routed to this agent. Assigning the station button to "callr-info" displays not the UserProvidedCode I'm setting but what a caller punched on the hard-phone (collected digits), if prompted in the vector. Just for the record, I'm setting UserProvidedCode and UserToUserInfo in attV6RouteSelect() and then call cstaRouteSelectInv(). Both functions return ACSPOSITIVE_ACK. |
|
Snovitsky, No... Sorry my friend I have never set and sent text to a phone directly or with extra button. What you could do it this: 1) Start up the Avaya tools (Excerciser). 2) Create a monitor with no filters to a device. 3) Pickup device and press tons of buttons. 4) Review your logs and you she see your type for each button pressed. 5) You may have to criss-cross the button value being depicted in the log with the DWORD name inside the .header file of the API's. Also... Did I send you a direct email some time ago with the cut/paste of that UUI setting thing that I got working many months ago? If so, pls resend it back to me cuz by email archives were erased (thanks IT security!). Also... Stop TSAPI stalking me! I just just in here yesterday for the first time since we last communicated, and now I hear from you again.  LOL Let me know if 1-5 helps you or not. Zow |
|
Zow - Not sure we are talking about the same things. Let me try to clarify my question. If you login as an admin to G3, execute "change station xxxxx", and then go to the Page 3 of the station xxxxx configuration, you can assign/re-assign different "types" to the station buttons. Correct? Hope yes. All the types available for the assigning can be seen by pressing [Help] on the G3 terminal. Thus, my question was about the "type" that needs to be assigned to an available station's button so we can see UserProvidedCode I'm setting in my application (before routing to the station xxxxx). Do you know? |
|
Snov, Yeah... I now know what you are talking about, but I don't actually do the programming on the switch or even have access to those screens. I am stricly a TSAPI geek. However... What I do know is this: 1) Features or buttons assigned to a phone are normally controlled by the model of the phone. 2) I would hope that the G3 admin interface does not provide you a 1,000 item list of all button possibilities... But narrows them down to the ones isolated to that model. Since I don't know... You could try the process of ellimination. 1) Find one of those old hotel/motel/switchboard/operator models. 2) Program each button on the model to what you think is what you are looking for. 3) Route some calls there using your code to isolate what button it is. 4) If you need to see the exact methods or model type DWORD names or numbers... Use the 1-5 I mentioned above. I know the above sounds like a long way around, but if you can't find the answer here... I assume you have already been through google, dogpile, etc. As far as Avaya docs... See pages 28-32: http://support.avaya.com/edoc/docs/defg1/g1acdsp3.pdfAlso see Avaya "buttons" document: http://www.svcc.edu/resources/telephone/images/buttons.pdfSee also Avaya knowledge base: http://support.avaya.com/japple/css/japple?temp.documentID=111611&temp.productID=107666&temp.bucketID=108020&PAGE=DocumentThis may be what you are looking for... Search for "callr" inside this PDF, but pay special attention to the section entitled "Displaying digits on the agents set" on page 193. http://support.avaya.com/elmodocs2/callctr/VectorEASR1.2.pdfGood luck! Zow |
|
Thanks for the documents. Unfortunately they don't provide information regarding my question - how can data set as ATTUserProvidedCode_t be displayed on agent's hard-phone. Is it possible in general? If not, where/how ATTUserProvidedCode (type=UP_DATA_BASE_PROVIDED or another) can be used instead? Assigning a button to 'callr-info' does NOT display ATTUserProvidedCode...
|
|
Snov,
Did you try pressing the info button multiple times? I recall seeing in the docs that once the display is full you have to keep pressing it to see the next batch of data.
Not sure how many you can Q up this way.
Zow
|
|
The issue is not related to the screen. In our phones when a button is assigned to a certain function (like 'callr-info' or 'uui-info') agent has to press this button to see the information, if available. The issue with UserProvidedCode is I'm not sure if:
1. It's possible, in general, to display UserProvidedCode on the phone's display.
2. If yes, what function code (like 'callr-info' or 'uui-info') needs to be assigned to a button to display UserProvidedCode set in my application.
|
|
Snov,
Rather than trying to get this stuff on the phones display and assign buttons... Have you thought about building a small screen popping application to send that data down to the agent?
Doing so would allow you to send all the data they could ever desire all at once.
From what I understand from your needs... It sounds like the person answering the phone has a "need" for all this data.
It also sounds like it is placing a burden on you to try and get data onto the telephone device itself (and you will have issues between phone models) with respect to display size and character length.
Sounds to me like a small home grown screen pop display similar to an IM like approach would be very useful.
It's pretty simple to impliment:
1) Create a backend process that does the following: a) Binds to inbound VDN. b) Adds itself as the routerequest for that VDN. c) Program VDN to adjunt route to application. d) When app received adjunct route request, place monitor on callID. e) When monitor for callID sees ANSWER, then send data to client.
2) Client code can be lightweight C, C++ or C#.
Let me know how it goes Snov... I really wish I had the right answer for you, but I don't my friend. :(
If you wish to communicate in real time... Contact me using yahoo IM @ zowwie438.
Zow
|
|
Snov,
Have you had experience with the TSAPI event differences between a switch that supports TDM phones VS that of TDM and VOIP phones?
I ask because we have some recording software that depends on the on/off hook event... And I recall reasing elsewhere that VOIP phones will NOT send this TSAPI event.
Any thoughts?
Zow
|
|
|
cwjr (IS/IT--Management) |
13 Mar 06 19:19 |
Zowwie438 and others,
I don't mean to "hijack" this thread, but can someone quickly tell me if there is a way to make the calls to the C, or C++ dlls from VB.Net? That is the only programming environment we use in our company.
Again, sorry for taking this on a tangent.
|
|
CWJR, Well... I do recall seeing some VB examples on the Novell site while searching for TSAPI. However... if you are calling TSAPI API calls for "call control" related functions (especially from a server side app like we do)... I would HIGHLY recommend against using VB. If you are building a mission critical call control application, it is VERY important that you know every last piece of functional code in addition to it being light weight and being able to handle mass traffic and load. I feel that if you use VB, you will have so much BS in the running code that you will seriously effect your performance and ability to handle calls in a "top notch" like manner. If your comany ONLY allows VB code to run... Then I guess they need to trash the whole windows OS then, because most of that is created in C. The decision to use VB is really up to your boss, but it sounds like there are some education issues there. Check out google and search for something like: tsapi makecall vb (all in one line) http://www.google.com/search?hl=en&lr=&safe=off&rls=GGLD%2CGGLD%3A2003-37%2CGGLD%3Aen&q=tsapi+makecall%28%29+vbGood luck. Zowwie |
|
|
cwjr (IS/IT--Management) |
13 Mar 06 23:26 |
I hear ya. I'm and old C programmer from way back. I used to (15 years ago) be with a company that created POS systems. We did everything from UI (In DOS of course) as well as writing our own screen,serial port, and other interrupts, gas pump controls, etc.
Problem is, I haven't written any code in years, and all of our in house developers (about 30) are VB. Our current call center app is totally VB, so our hands are a bit "tied". I was kinda hoping someone had written a "wrapper" control that would call the C functions in the telephony dll's, but I guess no luck.
Thanks very much for taking time to answer my post. |
|
All,
Awhile back we all shared discussions regarding the setting of UUI data with respect to attPrivateData_t and the use of Attv6RouteSelect. When this is used in conjunction with cstaRouteSelectInv... UUI data and other private data is set.
The problem is this... Using cstaRouteSelectInv REQUIRES you to specify a desinationRoute.
I don't like hard coding stuff and I want to be able to use cstaRouteEnvInv to tell the switch GENERIC_UNSPECIFIED so the switch can continue processing it's vector coding. The problem is... When you use attV6RouteSelect in conjunction with cstaRouteEndInv... No private data is passed.
PLEASE HELP!
|
|
Hi all, I am using JTAPI for the development of CT Application. If I have a call coming in from A to B and B will manually transfer (transfer using the phone) the call to C, could i include a UUI at the point when B pick up the call or when B Held event is fired?
The reason is that i am not able to get the C caller ID once transfer completed to C.
Anyone have any idea?
Thanks |
|
KennyWong,
Setting the UUI only occurs on making calls, routing calls to a specific destination and a few others.
The easiest way to find what methods accept UUI data is to check the csta.h and attpriv.h headers and search for UUI in the arguments. That is a good indication that it accepts it.
If YOU transfered the call and not the agent from the phone... Then YOU could set the UUI data when you make the call to agent C since a tranfer is the act of placing A on hold, making call to C and then merging the two with transfer.
Just keep in mind that you have to use the att stuff to set the UUI data.
Reply to this thread or contact me directly if you need some cut/paste stuff (in tsapi / c++).
Good luck!
Zowwie |
|
|
 |
|