Smart questions
Smart answers
Smart people
Join Tek-Tips Forums

Member Login

Remember Me
Forgot Password?
Join Us!

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!

Join Tek-Tips
*Tek-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.
Jobs from Indeed

Link To This Forum!

Partner Button
Add Stickiness To Your Site By Linking To This Professionally Managed Technical Forum.
Just copy and paste the
code below into your site.

Zowwie438 (Programmer) (OP)
8 Aug 05 7:46

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.


dwalin (TechnicalUser)
8 Aug 05 8:00

afair, you can't set uui field for an existing call. however, you can set it for transferred or conferenced call.
Helpful Member!  Zowwie438 (Programmer) (OP)
8 Aug 05 8:19

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
The following UUI protocol types are supported:
 UUI_NONE — There is no data provided in the data
 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.

dwalin (TechnicalUser)
8 Aug 05 8:38

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.
Zowwie438 (Programmer) (OP)
8 Aug 05 8:47

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.


dwalin (TechnicalUser)
8 Aug 05 14:55

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

Zowwie438 (Programmer) (OP)
24 Aug 05 17:21
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.


Helpful Member!(3)  tjaartv (Programmer)
25 Aug 05 7:38

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.GetLength();

        for (int i=0;i<uui.GetLength();i++)
  [i] = uui[i];
RetCode_t rc1 = attV6RouteSelect(
    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,
Zowwie438 (Programmer) (OP)
25 Aug 05 10:20

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?

Zowwie438 (Programmer) (OP)
25 Aug 05 11:00

GOT IT!   Thanks a million for your help!

mikebk (Programmer)
26 Aug 05 9:16
I'm glad its working now. What was the cause of the problem?


Zowwie438 (Programmer) (OP)
26 Aug 05 10:44
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.

snovitsky (Programmer)
16 Jan 06 19:11
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 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!

snovitsky (Programmer)
17 Jan 06 12:08
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.
Zowwie438 (Programmer) (OP)
17 Jan 06 14:22

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?

snovitsky (Programmer)
17 Jan 06 15:08
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!
Zowwie438 (Programmer) (OP)
17 Jan 06 15:14

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.

snovitsky (Programmer)
17 Jan 06 15:19
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...
snovitsky (Programmer)
9 Mar 06 15:22
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 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.
Zowwie438 (Programmer) (OP)
9 Mar 06 15:43

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. smile LOL

Let me know if 1-5 helps you or not.

snovitsky (Programmer)
9 Mar 06 16:01
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?
Zowwie438 (Programmer) (OP)
9 Mar 06 16:26

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:

Also see Avaya "buttons" document:

See also Avaya knowledge base:;temp.bucketID=108020&PAGE=Document

This 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.

Good luck!


snovitsky (Programmer)
9 Mar 06 18:40
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...
Zowwie438 (Programmer) (OP)
9 Mar 06 20:56

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.

snovitsky (Programmer)
10 Mar 06 9:38
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.
Zowwie438 (Programmer) (OP)
10 Mar 06 11:12

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.

Zowwie438 (Programmer) (OP)
13 Mar 06 14:00

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?

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.

Zowwie438 (Programmer) (OP)
13 Mar 06 19:42

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);lr=&safe=off&amp;rls=GGLD%2CGGLD%3A2003-37%2CGGLD%3Aen&q=tsapi+makecall%28%29+vb

Good luck.

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.
Zowwie438 (Programmer) (OP)
31 May 06 14:20

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.


kennywongjw (Programmer)
27 Sep 06 3:29
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?

Zowwie438 (Programmer) (OP)
27 Sep 06 8:55

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!


Reply To This Thread

Posting in the Tek-Tips forums is a member-only feature.

Click Here to join Tek-Tips and talk with other members!

Back To Forum

Close Box

Join Tek-Tips® Today!

Join your peers on the Internet's largest technical computer professional community.
It's easy to join and it's free.

Here's Why Members Love Tek-Tips Forums:

Register now while it's still free!

Already a member? Close this window and log in.

Join Us             Close