Blind XFER to External Numbers fails with "outisbusy"

Hi All,

I am running Asterisk 1.8.28.0 with Yealink SIP-T22P PoE Handsets.

It appears that over the years, we have had some issues with blind transfers. The scenario:

  • Remote party calls in to the office, one of us answers
  • Caller wants to speak to someone that is outside the office but has their cellphone on them
  • I hit “Transfer”, enter the cellphone number and hit “Transfer” again
  • The call is now gone, I am expecting it’s been transferred but it has actually dropped with the remote party being played back a “Call cannot be completed as dialled”

Verbose output of asterisk logs is below.

64222222222 is calling 64111111111; then 64111111111 is blind transfering to 021333333 which is a cell phone.

  == Using SIP RTP TOS bits 184
  == Using SIP RTP CoS mark 5
    -- Executing [64111111111@from-trunk-sip-TRUNK01:1] Set("SIP/TRUNK01-000013f9", "GROUP()=OUT_1") in new stack
    -- Executing [64111111111@from-trunk-sip-TRUNK01:2] Goto("SIP/TRUNK01-000013f9", "from-trunk,64111111111,1") in new stack
    -- Goto (from-trunk,64111111111,1)
    -- Executing [64111111111@from-trunk:1] Set("SIP/TRUNK01-000013f9", "__FROM_DID=64111111111") in new stack
    -- Executing [64111111111@from-trunk:2] Gosub("SIP/TRUNK01-000013f9", "app-blacklist-check,s,1()") in new stack
    -- Executing [s@app-blacklist-check:1] GotoIf("SIP/TRUNK01-000013f9", "0?blacklisted") in new stack
    -- Executing [s@app-blacklist-check:2] Set("SIP/TRUNK01-000013f9", "CALLED_BLACKLIST=1") in new stack
    -- Executing [s@app-blacklist-check:3] Return("SIP/TRUNK01-000013f9", "") in new stack
    -- Executing [64111111111@from-trunk:3] Set("SIP/TRUNK01-000013f9", "CDR(did)=64111111111") in new stack
    -- Executing [64111111111@from-trunk:4] ExecIf("SIP/TRUNK01-000013f9", "0 ?Set(CALLERID(name)=64222222222)") in new stack
    -- Executing [64111111111@from-trunk:5] Ringing("SIP/TRUNK01-000013f9", "") in new stack
    -- Executing [64111111111@from-trunk:6] Wait("SIP/TRUNK01-000013f9", "2") in new stack
    -- Executing [64111111111@from-trunk:7] Set("SIP/TRUNK01-000013f9", "__CALLINGPRES_SV=allowed_not_screened") in new stack
    -- Executing [64111111111@from-trunk:8] Set("SIP/TRUNK01-000013f9", "CALLERPRES()=allowed_not_screened") in new stack
    -- Executing [64111111111@from-trunk:9] Goto("SIP/TRUNK01-000013f9", "timeconditions,1,1") in new stack
    -- Goto (timeconditions,1,1)
    -- Executing [1@timeconditions:1] GotoIfTime("SIP/TRUNK01-000013f9", "08:00-17:01,mon-fri,*,*?truestate") in new stack
    -- Goto (timeconditions,1,10)
    -- Executing [1@timeconditions:10] GotoIf("SIP/TRUNK01-000013f9", "0?falsegoto") in new stack
    -- Executing [1@timeconditions:11] ExecIf("SIP/TRUNK01-000013f9", "0?Set(DB(TC/1)=)") in new stack
    -- Executing [1@timeconditions:12] Set("SIP/TRUNK01-000013f9", "DEVICE_STATE(Custom:TC1)=NOT_INUSE") in new stack
    -- Executing [1@timeconditions:13] ExecIf("SIP/TRUNK01-000013f9", "0?Set(DEVICE_STATE(Custom:TCSTICKY)=INUSE)") in new stack
    -- Executing [1@timeconditions:14] GotoIf("SIP/TRUNK01-000013f9", "1?ivr-2,s,1") in new stack
    -- Goto (ivr-2,s,1)
    -- Executing [s@ivr-2:1] Set("SIP/TRUNK01-000013f9", "TIMEOUT_LOOPCOUNT=0") in new stack
    -- Executing [s@ivr-2:2] Set("SIP/TRUNK01-000013f9", "INVALID_LOOPCOUNT=0") in new stack
    -- Executing [s@ivr-2:3] Set("SIP/TRUNK01-000013f9", "_IVR_CONTEXT_ivr-2=") in new stack
    -- Executing [s@ivr-2:4] Set("SIP/TRUNK01-000013f9", "_IVR_CONTEXT=ivr-2") in new stack
    -- Executing [s@ivr-2:5] Set("SIP/TRUNK01-000013f9", "__IVR_RETVM=") in new stack
    -- Executing [s@ivr-2:6] GotoIf("SIP/TRUNK01-000013f9", "0?skip") in new stack
    -- Executing [s@ivr-2:7] Answer("SIP/TRUNK01-000013f9", "") in new stack
    -- Executing [s@ivr-2:8] Wait("SIP/TRUNK01-000013f9", "1") in new stack
    -- Executing [s@ivr-2:9] Set("SIP/TRUNK01-000013f9", "IVR_MSG=custom/IVR-Main") in new stack
    -- Executing [s@ivr-2:10] Set("SIP/TRUNK01-000013f9", "TIMEOUT(digit)=3") in new stack
    -- Digit timeout set to 3.000
    -- Executing [s@ivr-2:11] ExecIf("SIP/TRUNK01-000013f9", "1?Background(custom/IVR-Main)") in new stack
    -- <SIP/TRUNK01-000013f9> Playing 'custom/IVR-Main.slin' (language 'en')
    -- Executing [1@ivr-2:1] Goto("SIP/TRUNK01-000013f9", "ivr-3,s,1") in new stack
    -- Goto (ivr-3,s,1)
    -- Executing [s@ivr-3:1] Set("SIP/TRUNK01-000013f9", "TIMEOUT_LOOPCOUNT=0") in new stack
    -- Executing [s@ivr-3:2] Set("SIP/TRUNK01-000013f9", "INVALID_LOOPCOUNT=0") in new stack
    -- Executing [s@ivr-3:3] Set("SIP/TRUNK01-000013f9", "_IVR_CONTEXT_ivr-3=ivr-2") in new stack
    -- Executing [s@ivr-3:4] Set("SIP/TRUNK01-000013f9", "_IVR_CONTEXT=ivr-3") in new stack
    -- Executing [s@ivr-3:5] Set("SIP/TRUNK01-000013f9", "__IVR_RETVM=") in new stack
    -- Executing [s@ivr-3:6] GotoIf("SIP/TRUNK01-000013f9", "1?skip") in new stack
    -- Goto (ivr-3,s,9)
    -- Executing [s@ivr-3:9] Set("SIP/TRUNK01-000013f9", "IVR_MSG=custom/Rec-AlbanyHOPress1-PenrosePress2") in new stack
    -- Executing [s@ivr-3:10] Set("SIP/TRUNK01-000013f9", "TIMEOUT(digit)=3") in new stack
    -- Digit timeout set to 3.000
    -- Executing [s@ivr-3:11] ExecIf("SIP/TRUNK01-000013f9", "1?Background(custom/Rec-AlbanyHOPress1-PenrosePress2)") in new stack
    -- <SIP/TRUNK01-000013f9> Playing 'custom/Rec-AlbanyHOPress1-PenrosePress2.slin' (language 'en')
    -- Executing [1@ivr-3:1] Goto("SIP/TRUNK01-000013f9", "ext-group,6000,1") in new stack
    -- Goto (ext-group,6000,1)
    -- Executing [6000@ext-group:1] Macro("SIP/TRUNK01-000013f9", "user-callerid,") in new stack
    -- Executing [s@macro-user-callerid:1] Set("SIP/TRUNK01-000013f9", "AMPUSER=64222222222") in new stack
    -- Executing [s@macro-user-callerid:2] GotoIf("SIP/TRUNK01-000013f9", "0?report") in new stack
    -- Executing [s@macro-user-callerid:3] ExecIf("SIP/TRUNK01-000013f9", "1?Set(REALCALLERIDNUM=64222222222)") in new stack
    -- Executing [s@macro-user-callerid:4] Set("SIP/TRUNK01-000013f9", "AMPUSER=") in new stack
    -- Executing [s@macro-user-callerid:5] Set("SIP/TRUNK01-000013f9", "AMPUSERCIDNAME=") in new stack
    -- Executing [s@macro-user-callerid:6] GotoIf("SIP/TRUNK01-000013f9", "1?report") in new stack
    -- Goto (macro-user-callerid,s,13)
    -- Executing [s@macro-user-callerid:13] GotoIf("SIP/TRUNK01-000013f9", "0?continue") in new stack
    -- Executing [s@macro-user-callerid:14] Set("SIP/TRUNK01-000013f9", "__TTL=64") in new stack
    -- Executing [s@macro-user-callerid:15] GotoIf("SIP/TRUNK01-000013f9", "1?continue") in new stack
    -- Goto (macro-user-callerid,s,26)
    -- Executing [s@macro-user-callerid:26] Set("SIP/TRUNK01-000013f9", "CALLERID(number)=64222222222") in new stack
    -- Executing [s@macro-user-callerid:27] Set("SIP/TRUNK01-000013f9", "CALLERID(name)=64222222222") in new stack
    -- Executing [s@macro-user-callerid:28] Set("SIP/TRUNK01-000013f9", "CHANNEL(language)=en") in new stack
    -- Executing [6000@ext-group:2] Macro("SIP/TRUNK01-000013f9", "blkvm-setifempty,") in new stack
    -- Executing [s@macro-blkvm-setifempty:1] GotoIf("SIP/TRUNK01-000013f9", "1?init") in new stack
    -- Goto (macro-blkvm-setifempty,s,4)
    -- Executing [s@macro-blkvm-setifempty:4] Set("SIP/TRUNK01-000013f9", "__BLKVM_CHANNEL=SIP/TRUNK01-000013f9") in new stack
    -- Executing [s@macro-blkvm-setifempty:5] Set("SIP/TRUNK01-000013f9", "SHARED(BLKVM,SIP/TRUNK01-000013f9)=TRUE") in new stack
    -- Executing [s@macro-blkvm-setifempty:6] Set("SIP/TRUNK01-000013f9", "GOSUB_RETVAL=TRUE") in new stack
    -- Executing [s@macro-blkvm-setifempty:7] MacroExit("SIP/TRUNK01-000013f9", "") in new stack
    -- Executing [6000@ext-group:3] GotoIf("SIP/TRUNK01-000013f9", "1?skipov") in new stack
    -- Goto (ext-group,6000,6)
    -- Executing [6000@ext-group:6] Set("SIP/TRUNK01-000013f9", "RRNODEST=") in new stack
    -- Executing [6000@ext-group:7] Set("SIP/TRUNK01-000013f9", "__NODEST=6000") in new stack
    -- Executing [6000@ext-group:8] GosubIf("SIP/TRUNK01-000013f9", "0?sub-rgsetcid,s,1()") in new stack
    -- Executing [6000@ext-group:9] Gosub("SIP/TRUNK01-000013f9", "sub-record-check,s,1(rg,6000,dontcare)") in new stack
    -- Executing [s@sub-record-check:1] GotoIf("SIP/TRUNK01-000013f9", "1?check") in new stack
    -- Goto (sub-record-check,s,6)
    -- Executing [s@sub-record-check:6] Set("SIP/TRUNK01-000013f9", "__MON_FMT=wav") in new stack
    -- Executing [s@sub-record-check:7] GotoIf("SIP/TRUNK01-000013f9", "1?next") in new stack
    -- Goto (sub-record-check,s,10)
    -- Executing [s@sub-record-check:10] ExecIf("SIP/TRUNK01-000013f9", "0?Return()") in new stack
    -- Executing [s@sub-record-check:11] GotoIf("SIP/TRUNK01-000013f9", "0?rg,1") in new stack
    -- Executing [s@sub-record-check:12] Set("SIP/TRUNK01-000013f9", "__REC_STATUS=INITIALIZED") in new stack
    -- Executing [s@sub-record-check:13] ExecIf("SIP/TRUNK01-000013f9", "1?Set(__REC_POLICY_MODE=dontcare)") in new stack
    -- Executing [s@sub-record-check:14] Set("SIP/TRUNK01-000013f9", "NOW=1527636419") in new stack
    -- Executing [s@sub-record-check:15] Set("SIP/TRUNK01-000013f9", "__DAY=30") in new stack
    -- Executing [s@sub-record-check:16] Set("SIP/TRUNK01-000013f9", "__MONTH=05") in new stack
    -- Executing [s@sub-record-check:17] Set("SIP/TRUNK01-000013f9", "__YEAR=2018") in new stack
    -- Executing [s@sub-record-check:18] Set("SIP/TRUNK01-000013f9", "__TIMESTR=20180530-112659") in new stack
    -- Executing [s@sub-record-check:19] Set("SIP/TRUNK01-000013f9", "__FROMEXTEN=64222222222") in new stack
    -- Executing [s@sub-record-check:20] Set("SIP/TRUNK01-000013f9", "__CALLFILENAME=rg-6000-64222222222-20180530-112659-1527636407.5116") in new stack
    -- Executing [s@sub-record-check:21] Goto("SIP/TRUNK01-000013f9", "rg,1") in new stack
    -- Goto (sub-record-check,rg,1)
    -- Executing [rg@sub-record-check:1] GosubIf("SIP/TRUNK01-000013f9", "0?record,1(rg,dontcare,64222222222)") in new stack
    -- Executing [rg@sub-record-check:2] Return("SIP/TRUNK01-000013f9", "") in new stack
    -- Executing [6000@ext-group:10] Set("SIP/TRUNK01-000013f9", "RingGroupMethod=hunt") in new stack
    -- Executing [6000@ext-group:11] Macro("SIP/TRUNK01-000013f9", "dial,15,tr,1004-1002-1006") in new stack
    -- Executing [s@macro-dial:1] GotoIf("SIP/TRUNK01-000013f9", "1?dial") in new stack
    -- Goto (macro-dial,s,3)
    -- Executing [s@macro-dial:3] AGI("SIP/TRUNK01-000013f9", "dialparties.agi") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/dialparties.agi
 dialparties.agi: Starting New Dialparties.agi
 dialparties.agi: Caller ID name is '64222222222' number is '64222222222'
       > dialparties.agi: USE_CONFIRMATION:  'FALSE'
       > dialparties.agi: RINGGROUP_INDEX:   ''
 dialparties.agi: Methodology of ring is  'hunt'
    -- dialparties.agi: Added extension 1004 to extension map
    -- dialparties.agi: Added extension 1002 to extension map
    -- dialparties.agi: Added extension 1006 to extension map
    -- dialparties.agi: Extension 1004 cf is disabled
    -- dialparties.agi: Extension 1002 cf is disabled
    -- dialparties.agi: Extension 1006 cf is disabled
    -- dialparties.agi: Extension 1004 do not disturb is disabled
    -- dialparties.agi: Extension 1002 do not disturb is disabled
    -- dialparties.agi: Extension 1006 do not disturb is disabled
       > dialparties.agi: extnum 1004 has:  cw: 1; hascfb: 0 [] hascfu: 0 []
       > dialparties.agi: extnum 1002 has:  cw: 1; hascfb: 0 [] hascfu: 0 []
       > dialparties.agi: extnum 1006 has:  cw: 1; hascfb: 0 [] hascfu: 0 []
    -- dialparties.agi: Filtered ARG3: 1004-1002-1006
       > dialparties.agi: NODEST: 6000 adding M(auto-blkvm) to dialopts: trM(auto-blkvm)
       > dialparties.agi: NODEST: 6000 blkvm enabled macro already in dialopts: trM(auto-blkvm)
    -- <SIP/TRUNK01-000013f9>AGI Script dialparties.agi completed, returning 0
    -- Executing [s@macro-dial:20] NoOp("SIP/TRUNK01-000013f9", "Returned from dialparties with hunt groups to dial ") in new stack
    -- Executing [s@macro-dial:21] Set("SIP/TRUNK01-000013f9", "HuntLoop=0") in new stack
    -- Executing [s@macro-dial:22] GotoIf("SIP/TRUNK01-000013f9", "1?a30") in new stack
    -- Goto (macro-dial,s,26)
    -- Executing [s@macro-dial:26] Set("SIP/TRUNK01-000013f9", "HuntMember=HuntMember0") in new stack
    -- Executing [s@macro-dial:27] GotoIf("SIP/TRUNK01-000013f9", "1?a32:a35") in new stack
    -- Goto (macro-dial,s,28)
    -- Executing [s@macro-dial:28] Set("SIP/TRUNK01-000013f9", "CT_EXTEN=1004") in new stack
    -- Executing [s@macro-dial:29] Set("SIP/TRUNK01-000013f9", "DB(CALLTRACE/1004)=64222222222") in new stack
    -- Executing [s@macro-dial:30] Goto("SIP/TRUNK01-000013f9", "s,a42") in new stack
    -- Goto (macro-dial,s,38)
    -- Executing [s@macro-dial:38] Dial("SIP/TRUNK01-000013f9", "SIP/1004,15,trM(auto-blkvm)") in new stack
  == Using SIP RTP TOS bits 184
  == Using SIP RTP CoS mark 5
    -- Called SIP/1004
    -- SIP/1004-000013fa is ringing
    -- Nobody picked up in 15000 ms
    -- Executing [s@macro-dial:39] GotoIf("SIP/TRUNK01-000013f9", "0?ANSWER,1") in new stack
    -- Executing [s@macro-dial:40] Set("SIP/TRUNK01-000013f9", "HuntLoop=1") in new stack
    -- Executing [s@macro-dial:41] GotoIf("SIP/TRUNK01-000013f9", "1?a46") in new stack
    -- Goto (macro-dial,s,43)
    -- Executing [s@macro-dial:43] Set("SIP/TRUNK01-000013f9", "HuntMembers=2") in new stack
    -- Executing [s@macro-dial:44] Goto("SIP/TRUNK01-000013f9", "s,a22") in new stack
    -- Goto (macro-dial,s,22)
    -- Executing [s@macro-dial:22] GotoIf("SIP/TRUNK01-000013f9", "1?a30") in new stack
    -- Goto (macro-dial,s,26)
    -- Executing [s@macro-dial:26] Set("SIP/TRUNK01-000013f9", "HuntMember=HuntMember1") in new stack
    -- Executing [s@macro-dial:27] GotoIf("SIP/TRUNK01-000013f9", "1?a32:a35") in new stack
    -- Goto (macro-dial,s,28)
    -- Executing [s@macro-dial:28] Set("SIP/TRUNK01-000013f9", "CT_EXTEN=1002") in new stack
    -- Executing [s@macro-dial:29] Set("SIP/TRUNK01-000013f9", "DB(CALLTRACE/1002)=64222222222") in new stack
    -- Executing [s@macro-dial:30] Goto("SIP/TRUNK01-000013f9", "s,a42") in new stack
    -- Goto (macro-dial,s,38)
    -- Executing [s@macro-dial:38] Dial("SIP/TRUNK01-000013f9", "SIP/1002,15,trM(auto-blkvm)") in new stack
  == Using SIP RTP TOS bits 184
  == Using SIP RTP CoS mark 5
    -- Called SIP/1002
    -- SIP/1002-000013fb is ringing
  == Using SIP RTP TOS bits 184
  == Using SIP RTP CoS mark 5
    -- SIP/1007-000013fc answered SIP/TRUNK01-000013f9
    -- Executing [s@macro-auto-blkvm:1] Set("SIP/1007-000013fc", "__MACRO_RESULT=") in new stack
    -- Executing [s@macro-auto-blkvm:2] Macro("SIP/1007-000013fc", "blkvm-clr,") in new stack
    -- Executing [s@macro-blkvm-clr:1] Set("SIP/1007-000013fc", "SHARED(BLKVM,SIP/TRUNK01-000013f9)=") in new stack
    -- Executing [s@macro-blkvm-clr:2] Set("SIP/1007-000013fc", "GOSUB_RETVAL=") in new stack
    -- Executing [s@macro-blkvm-clr:3] MacroExit("SIP/1007-000013fc", "") in new stack
    -- Executing [s@macro-auto-blkvm:3] ExecIf("SIP/1007-000013fc", "0?Set(MASTER_CHANNEL(CONNECTEDLINE(num))=1002)") in new stack
    -- Executing [s@macro-auto-blkvm:4] ExecIf("SIP/1007-000013fc", "0?Set(MASTER_CHANNEL(CONNECTEDLINE(name))=Aaron Low)") in new stack
    -- Started music on hold, class 'default', on SIP/TRUNK01-000013f9
    -- Stopped music on hold on SIP/TRUNK01-000013f9
  == Spawn extension (from-internal-xfer, 021333333, 1) exited non-zero on 'SIP/TRUNK01-000013f9' in macro 'dial'
  == Spawn extension (from-internal-xfer, 021333333, 1) exited non-zero on 'SIP/TRUNK01-000013f9'
    -- Executing [021333333@from-internal-xfer:1] Macro("SIP/TRUNK01-000013f9", "user-callerid,LIMIT,") in new stack
    -- Executing [s@macro-user-callerid:1] Set("SIP/TRUNK01-000013f9", "AMPUSER=64222222222") in new stack
    -- Executing [s@macro-user-callerid:2] GotoIf("SIP/TRUNK01-000013f9", "0?report") in new stack
    -- Executing [s@macro-user-callerid:3] ExecIf("SIP/TRUNK01-000013f9", "0?Set(REALCALLERIDNUM=64222222222)") in new stack
    -- Executing [s@macro-user-callerid:4] Set("SIP/TRUNK01-000013f9", "AMPUSER=") in new stack
    -- Executing [s@macro-user-callerid:5] Set("SIP/TRUNK01-000013f9", "AMPUSERCIDNAME=") in new stack
    -- Executing [s@macro-user-callerid:6] GotoIf("SIP/TRUNK01-000013f9", "1?report") in new stack
    -- Goto (macro-user-callerid,s,13)
    -- Executing [s@macro-user-callerid:13] GotoIf("SIP/TRUNK01-000013f9", "1?continue") in new stack
    -- Goto (macro-user-callerid,s,26)
    -- Executing [s@macro-user-callerid:26] Set("SIP/TRUNK01-000013f9", "CALLERID(number)=64222222222") in new stack
    -- Executing [s@macro-user-callerid:27] Set("SIP/TRUNK01-000013f9", "CALLERID(name)=64222222222") in new stack
    -- Executing [s@macro-user-callerid:28] Set("SIP/TRUNK01-000013f9", "CHANNEL(language)=en") in new stack
    -- Executing [021333333@from-internal-xfer:2] Set("SIP/TRUNK01-000013f9", "MOHCLASS=default") in new stack
    -- Executing [021333333@from-internal-xfer:3] Set("SIP/TRUNK01-000013f9", "_NODEST=") in new stack
    -- Executing [021333333@from-internal-xfer:4] Gosub("SIP/TRUNK01-000013f9", "sub-record-check,s,1(out,021333333,)") in new stack
    -- Executing [s@sub-record-check:1] GotoIf("SIP/TRUNK01-000013f9", "0?check") in new stack
    -- Executing [s@sub-record-check:2] ResetCDR("SIP/TRUNK01-000013f9", "") in new stack
    -- Executing [s@sub-record-check:3] GotoIf("SIP/TRUNK01-000013f9", "1?check") in new stack
    -- Goto (sub-record-check,s,6)
    -- Executing [s@sub-record-check:6] Set("SIP/TRUNK01-000013f9", "__MON_FMT=wav") in new stack
    -- Executing [s@sub-record-check:7] GotoIf("SIP/TRUNK01-000013f9", "1?next") in new stack
    -- Goto (sub-record-check,s,10)
    -- Executing [s@sub-record-check:10] ExecIf("SIP/TRUNK01-000013f9", "0?Return()") in new stack
    -- Executing [s@sub-record-check:11] GotoIf("SIP/TRUNK01-000013f9", "1?out,1") in new stack
    -- Goto (sub-record-check,out,1)
    -- Executing [out@sub-record-check:1] ExecIf("SIP/TRUNK01-000013f9", "0?Set(__REC_POLICY_MODE=)") in new stack
    -- Executing [out@sub-record-check:2] GosubIf("SIP/TRUNK01-000013f9", "0?record,1(exten,021333333,64222222222)") in new stack
    -- Executing [out@sub-record-check:3] Return("SIP/TRUNK01-000013f9", "") in new stack
    -- Executing [021333333@from-internal-xfer:5] Macro("SIP/TRUNK01-000013f9", "outisbusy,") in new stack
    -- Executing [s@macro-outisbusy:1] Progress("SIP/TRUNK01-000013f9", "") in new stack
    -- Executing [s@macro-outisbusy:2] GotoIf("SIP/TRUNK01-000013f9", "0?emergency,1") in new stack
    -- Executing [s@macro-outisbusy:3] GotoIf("SIP/TRUNK01-000013f9", "0?intracompany,1") in new stack
    -- Executing [s@macro-outisbusy:4] Playback("SIP/TRUNK01-000013f9", "cannot-complete-as-dialed, noanswer") in new stack
    -- <SIP/TRUNK01-000013f9> Playing 'cannot-complete-as-dialed.gsm' (language 'en')
    -- Executing [s@macro-outisbusy:5] Congestion("SIP/TRUNK01-000013f9", "20") in new stack
  == Spawn extension (macro-outisbusy, s, 5) exited non-zero on 'SIP/TRUNK01-000013f9' in macro 'outisbusy'
  == Spawn extension (from-internal-xfer, 021333333, 5) exited non-zero on 'SIP/TRUNK01-000013f9'
    -- Executing [h@from-internal-xfer:1] Macro("SIP/TRUNK01-000013f9", "hangupcall") in new stack
    -- Executing [s@macro-hangupcall:1] GotoIf("SIP/TRUNK01-000013f9", "1?theend") in new stack
    -- Goto (macro-hangupcall,s,3)
    -- Executing [s@macro-hangupcall:3] ExecIf("SIP/TRUNK01-000013f9", "0?Set(CDR(recordingfile)=)") in new stack
    -- Executing [s@macro-hangupcall:4] Hangup("SIP/TRUNK01-000013f9", "") in new stack
  == Spawn extension (macro-hangupcall, s, 4) exited non-zero on 'SIP/TRUNK01-000013f9' in macro 'hangupcall'
  == Spawn extension (from-internal-xfer, h, 1) exited non-zero on 'SIP/TRUNK01-000013f9'

I’m not surprised that it failed, but I haven’t looked at the “from-internal-xfer” context does to see what the code does with a call to an external number.

Try setting a Custom Extension (IIRC) with the cell number as the destination and give it a local extension and see if it still fails.

The fact that the call unceremoniously fails after these two checks tells me that it doesn’t allow you to transfer a call over a trunk that isn’t either an emergency trunk or an intracompany trunk, but that’s just interpretation.

Your post title has “Attended XFER” but the body text refers to blind transfers. Which is it?

On an attended transfer, you shouldn’t have this issue. Hit Transfer, dial the mobile number (if required then hit send), wait for mobile to answer. You are speaking privately with the mobile; announce the caller. Then hit Transfer again to complete the transfer.

On a blind transfer, the system default is to display the number of the original caller on the mobile. This means that you are asking the trunking provider to send a caller ID that is not yours. Some providers don’t allow this at all; you could route the call via another provider or change the setup so your company number is sent instead. With other providers, you need special trunk settings, e.g. Diversion header. And with still others, there could be an issue with number format (country code or not, initial + or not, etc.)

Other scenarios that can send numbers that are not yours include Follow Me to an external number, call forwarding to an external number, and e.g. IVR options that route to an external number. Do these work properly on your system, and is the original caller’s number displayed?

Apologies, I have too many spinning plates. The issue is definitely with BLIND transfer - attended ones are OK.

We have a wholesaler account with our upstream - they allow me to announce any CID we wish (for the purposes of cfwd rules etc).

I have rules (e.g. after hours forwarding) that works just fine - the correct caller ID comes through when the call gets bounced off our PBX - which is why this issue is so perplexing.

Sorry, I missed that the dialout-trunk macro never got called (I had assumed it had failed).

It’s as if 021333333 somehow matched an outbound route with no trunks, because the outisbusy call was on the line following the sub-record-check call. Are there any such routes on your system? Using caller-ID-based routing or other restrictions that may be relevant?

I don’t know whether a higher level of verbosity will show what pattern was matched.

Hi Stewart1, I have 3 outbound routes on this system. Of these 3 outbound routes, the first 2 are used to match by extension (e.g. if the extn is 1xxx, then outbound CID should be x and if the extn making the call is 2xxx, then outbound CID should be y - these are because extn 1xxx is at site A and extn 2xxx is at site B - so depending on where callers are aclling out of, the correct outbound caller ID is displayed at the remote end).

The 3rd outbound route is a catch-all that will just announce the head office CID.

Other than that no outbound restrictions are in place.

I don’t know what’s wrong here. I would assume that the external call should use the catch-all, because the caller ID does not match either special case. As a start, test whether you can dial 021333333 from an extension not in either special range.

1 Like

Stewart1, you had it right.

The result of this appears to be that the “catch all” route didn’t actually have an outbound trunk configured; So any calls would fail with “outisbusy” presumably since there are no trunks available to make this call.

I updated this route and now unattended transfers are working great.

What had me confused was the client mentioned these were working before but stopped recently so I immediately excluded the possibility that it was our PBX that was misconfigured…

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.