First, the only call xfer type available for us (at least at this moment) is tromboning ("hair-pin"). It has quite obvious pros and cons: it works no matter what kind of telephony protocol you're using (interoperable as long as your gateway can perform outbound calls) but the gateway stays in the call for the duration of the transferred call when both call legs belong to PSTN (resulting into two channels allocated, which is quite expensive).
Do I need anything special configured for the call transfer?
dial-peer voice 200 pots application session incoming called-number . direct-inward-dial
Now all calls coming from the PSTN through this dial-peer will be processed by the “session” application and will be able to perform call xfer later.
Note: It seems that Cisco has added new command that helps to avoid configuring this “application session” for each inbound dial-peer: “call application global session”. I didn't try it yet.
Call transfer still doesn’t work. Why?
*May 19 04:24:53.602: //13141/BACA45859589/CCAPI/cc_process_call_setup_ind: >>>>CCAPI handed cid 13141 with tag 100 to app "DEFAULT"
then you didn’t configure your gateway correctly. This call still goes through the dial-peer (in this case, it’s a dial-peer 100) that doesn’t have “application session” configured.
If you see application "session” there, then you’ll have to look at the time when the call transfer is initiated. Turn on “deb voip ccapi inout” and “deb ccsip messages” and see what happens when REFER arrives.
7-, 10-digit numbers and a prefix “9”…
Some time ago I ran into this issue with the outbound calls (and transfer as well). What appeared to be a misunderstanding between Cisco GW and PBX SL-100 (which our GW is connected to) with respect to the TON (TypeOfNumber) field for the Called Party Number, produced quite amazing ISDN Q.931 message exchange:
*Jun 6 01:04:04.735: ISDN Se3/0:23 Q931: TX -> SETUP pd = 8 callref = 0x0421 Bearer Capability i = 0x8090A2 Standard = CCITT Transer Capability = Speech Transfer Mode = Circuit Transfer Rate = 64 kbit/s Channel ID i = 0xA98397 Exclusive, Channel 23 Calling Party Number i = 0x2180, '4255554592' Plan:ISDN, Type:National Called Party Number i = 0xC1, '95557310' Plan:ISDN, Type:Subscriber(local)*Jun 6 01:04:04.831: ISDN Se3/0:23 Q931: RX <- STATUS pd = 8 callref = 0x8421 Cause i = 0x808B - Excessive digits received, call is proceeding Call State i = 0x01*Jun 6 01:04:04.835: ISDN Se3/0:23 Q931: TX -> STATUS pd = 8 callref = 0x0421 Cause i = 0x80E4 - Invalid information element contents Call State i = 0x01*Jun 6 01:04:04.839: ISDN Se3/0:23 Q931: RX <- CALL_PROC pd = 8 callref = 0x8421 Channel ID i = 0xA98397 Exclusive, Channel 23*Jun 6 01:04:04.843: ISDN Se3/0:23 Q931: RX <- DISCONNECT pd = 8 callref = 0x8421 Cause i = 0x809C - Invalid number format (incomplete number)*Jun 6 01:04:04.843: ISDN Se3/0:23 Q931: TX -> RELEASE pd = 8 callref = 0x0421*Jun 6 01:04:04.879: ISDN Se3/0:23 Q931: RX <- RELEASE_COMP pd = 8 callref = 0x8421
So, in the Q.931 SETUP we provide 7-digit number with “9” prefix. The PBX didn’t really like the 8-digit number, complaining “Excessive digits received” in the Q.931 STATUS.
(Interestingly enough, Cisco GW didn’t like this STATUS message either, complaining back with “Invalid information element contents”. This status exchange is harmless – both sides just keep complaining :-).
I guess, PBX didn’t only complain about extra digits, it also cut them off. The DISCONNECT cause code says “incomplete number”.
There are two solutions to this: