≡ Menu

Call transfer on ISDN PRI interface with PBX

Call transfer from interactive voice response system to human agent is one of the basic requirement and a must for IVR usability in any call center. While transferring an active call on an analog extension is very simple an straightforward, but the same may not be simple in case of ISDN PRI connectivity with PBX. The method of call transfer vary from one PBX manufacturer to another and that makes it more difficult to implement call transfer facility for a new CTI application developer.

Recently, I had faced similar difficulty while trying to implement call transfer facility on ISDN PRI with a PBX. It took many days, but later I realised that, it is mainly due to technical support from PBX manufacturer end only. In my opinion, PBX manufacturer should provide information how call transfer facility has to be used by a CTI application in their manual itself.

But I have learned a lesson and I thought I would share my experience how call transfer should be implemented using D300 Dialogic board or DN300 Donjin board with a PBX on ISDN PRI connection.

I would suggest these steps:-

1. Discuss with PBX technical support clearly that you are attempting to implement call transfer function on the ISDN PRI link, not on PABX extension line. Call transferring on PBX extension line is quite straight forward, put the phone on ON HOOK for 500 ms ( FLASH time, it may again vary from one PBX manufacturer to another), OFF Hook again, dial the number where call has to be forwarded, then disconnect (put of ON HOOK ) the call. I have faced this strange reply from PBX support as soon as I asked them about call transfer facility in their exchange. If they provide the correct information, then your life has become easy, if not then you would go through the same ordeals which I had gone through.

2. If PBX support provides you with standard call transfer method like SSCT( Single Step Call Transfer) or ECT ( Explicit Call transfer) etc. which are standard and known method, then you can let out a sigh of relief, if not keep your finger crossed! They may simply inform to send some messages on on D channel sequentially and then drop the call! Also, they may send you exact message format! Now you are on your own. But you are near to the solution.

3. If you have not learned how to capture ISDN trace for CTI boards, the time has come. Dialogis has very useful and powerful ISDN tool called ISDIAG.EXE ( normally found in DialogicBin directory) which can be used to capture all messages on D channel and use PRITRACE.EXE in the same channel to decode the messages in simple, human readable English language. Also, capture every error messages while using gc_SndMsg() as well all events from PBX end. If by simply sending message using the Global Call protocol function gcSndMsg(), you are able to transfer call then you have been very lucky, if not continue reading next.

4. Once you have all these trace and logs, you would sit down and study them. I am sure, you would now understand what messages you are sending to PBX and why PBX is rejecting your message or not understanding! Major problem occurs sending Facility Message or Information message! At least, in my case, I was sending a Facility Message to PBX while asking PBX to hold the call, while it was expecting a simple Information message! Normally, you could not expect PBX support guys to give this information, hit and trial is the only method.

5. If you complete the above four steps, you would be able to use any features provided by PBX which is accessible on ISDN PRI! Finally, here is the piece of working code snippet for call transfer on ISDN PRI using a Dialogic D300 CTI board and Coral IRIS PABX (using Global Call Protocol and gc_SndMsg function):-

a. Send Hold call
IE_BLK info;

info.length = 3; // Length of data
info.data[0] = 0x2c; // Keyboard Facility code
info.data[1] = 0x01; // Length of facility
info.data[2] = 0x52; // ASCI R

GC_IE_BLK gc_info;
gc_info.gclib = NULL;
gc_info.cclib = &info;

rc = gc_SndMsg( ldev, crn, SndMsg_Information, &gc_info );

b. Send Number to be dialed Information
ie_blk.length = 6; // length of data
ie_blk.data[0] = 0x70; // called party number code
ie_blk.data[1] = 0x04; // IE length
ie_blk.data[2] = 0x81; // numbering plan number type
ie_blk.data[3] = 0x34; // digit “4”
ie_blk.data[4] = 0x32; // digit “2”
ie_blk.data[5] = 0x35; // digit “5” 425 is th number where call would be transferred

rc = gc_SndMsg( ldev, crn, SndMsg_Information, &gc_info );

c. Drop the call normally
gc_DropCall(crn,GC_NORMAL_CLEARING,EV_ASYNC);

That is it! This would transfer your call to another PBX extension 425.

I thought I would share it here as I spend considerable time trying to implement call transfer with that particular exchange and on ISDN PRI interface. I got many help from various forums ( specially Dialogic Developer Network) and Dialogic support.

Next post:

Previous post:

{ 2 comments… add one }

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.