Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations strongm on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

CTI Programming (UUI setting) 4

Status
Not open for further replies.

Zowwie438

Programmer
Aug 27, 2004
74
US
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
 
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
 
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

 
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().
 
'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
 
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 = uui;

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
 
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.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top