Problem with Blindxfer

Hi all,

I got a problem with blindxfer, if i want to transfer a call and press # it doesnt do anything. If checked my DTMF settings in sip.conf dtmfmode=rfc2833 and enabled blindxfer in features.conf, iv even remapped it to 22 insted of #. if i do reload res_features.so i get:

– Reloading module ‘res_features.so’ (Call Features Resource)
== Parsing ‘/etc/asterisk/features.conf’: Found
== Remapping feature Blind Transfer (blindxfer) to sequence ‘22’
== Remapping feature Attended Transfer (atxfer) to sequence ‘*2’
– Added extension ‘700’ priority 1 to parkedcalls

If anyone can please help it would be greatly apriciated.

Thanks

Wayne

the CLI or logs should tell you what’s going wrong. turn up the CLI’s verbosity and look at the output when attempting the transfer. on the CLI type:

set verbose 9

what does the output look like?

you can also watch the main log file. in a shell type:

tail -f /var/log/asterisk/full

and watch the output as you attempt the transfer.

don’t hit # at the end of the number.

– Incoming call: Got SIP response 501 “Not Implemented” back from 10.10.12.201
– Incoming call: Got SIP response 501 “Not Implemented” back from 10.10.12.201

This is what i get in my CLI when i try to transfer, when i use the transfer button on some of my sip phones it works though. the problem is not all of them have a transfer button.

see the syntax of the Dial command. are you using the ‘t’ or ‘T’ options? you need to.

I definatly dont have a t option in my dial plan, Could you please give me an example of how i would us it? Would i have something like this

exten => 100,1,Dial(SIP/100)
exten => t,n, <--------- Not Sure?

Thanks for your help apriciate it.

W

exten => whatever,1,Dial(destination,ringsecs,options)

ie

exten => 1234,1,Dial(SIP/1234,20,t)

dials SIP/1234 for 20 seconds and uses the t option to allow transfer…

Thanks no thats working can i ask you how can i set a context for the transfer EG

[transfer]

exten => s,1,Dial(EXTEN,30)
exten => s,2,Dial(${CALLERIDNUM})

Basically i want the call to ring back at extension transfered from if not answered in say 30 Seconds.

Thanks

W

to have an unanswered call ring back to the tranfering extension you could use the BLINDTRANSFER variable. See the Predefined Cahnnels Variables here voip-info.org/wiki-Asterisk+variables.

You’d want to do something like this. (I haven’t tested this…)

exten => s,1,Dial(SIP/123,30)
exten => s,2,Dial(${BLINDTRANSFER})

if you find that the variable holds the sip channel followed by a dash and random characters (SIP/666-wefr4w) you’ll want to use the CUT function.

voip-info.org/wiki/index.php … k+func+cut

Here is how I dealt with this…

exten => 711,1,Dial(sip/gslounge,20,TtrWw)
exten => 711,2,GotoIf($[${LEN(${BLINDTRANSFER})} > 0]?200)
exten => 711,3,Voicemail(u710)
exten => 711,4,Wait(2)
exten => 711,5,Hangup
exten => 711,102,Voicemail(b710)
exten => 711,103,Wait(2)
exten => 711,104,Hangup
exten => 711,200,Set(CALLERID(name)="No Answer 711")
exten => 711,201,Noop(${BLINDTRANSFER})
exten => 711,202,SetVar(ntd=${CUT(BLINDTRANSFER,,1)})
exten => 711,203,Dial(${ntd},,trWw)
exten => 711,204,Hangup
exten => 711,304,Playback(one-moment-please)
exten => 711,305,Playback(busy-pls-hold)
exten => 711,306,Wait(10)
exten => 711,307,Goto(200)

I know this is a little messy, but it works fine. When I get time I will add separate busy handling for blind transferred calls.
At least it gives a good insight as to how the principle works.
Let me know if you would like to see my final solution.
Note that the caller id functionality would not normally be required.

Mike

I haven’t debugged this, so bear in mind that dial plan variables confuse the heck out of me.

This version returns the call if the blind transfered to ext is busy or doesn’t answer. This assumes that a different ext is used to transfer straight to voicemail.

exten => 711,1,Set(btn=${BLINDTRANSFER})
exten => 711,2,Set(btn=${CUT(btn,,1)})
exten => 711,3,Dial(sip/gslounge,20,TtrWw)
exten => 711,4,Set(btreason="711 Not Answered")
exten => 711,5,GotoIf($[${LEN(${btn})} > 0]?110)
exten => 711,6,Voicemail(u711)
exten => 711,7,Wait(2)
exten => 711,8,Hangup
exten => 711,104,Set(btreason="711 Was Engaged")
exten => 711,105,GotoIf($[${LEN(${btn})} > 0]?110)
exten => 711,106,Voicemail(b711)
exten => 711,107,Wait(2)
exten => 711,108,Hangup
exten => 711,110,Set(CALLERID(name)="${btreason}")
exten => 711,111,Wait(2)
exten => 711,112,Dial(${btn},,TtrWw)
exten => 711,113,Hangup
exten => 711,213,Playback(ext-busy-pls-wait)
exten => 711,214,PlayTones(ring)
exten => 711,215,Wait(8)
exten => 711,216,StopPlayTones
exten => 711,217,Goto(112)

As I said, I have not tested or debugged this, so please excuse me if it needs work!

It also requires a sound file ‘ext-busy-pls-wait’ to play when the transfer back ext is busy. also, the Caller ID parts might not be wanted by all users, I just did that so that I can see why the phone is ringing.

I hope someone finds it useful.

Mike.

Thank you, Mike Brazier…
Your solution works fine… it is just what I was looking for!!

Glad to help.

Mike.

mike,

all you need to do now is turn it into a macro :smiley:

Here is my version used in Asterisk 11. I use LEN since some of our sip users have dash in their names and cut would require several steps and some Ifs. Also You can extend the returned info as caller id by adding more Set lines for other cases.

exten=>404,1,Dial(SIP/user-name,30,t)
same=>n,GotoIf($[${LEN(${BLINDTRANSFER})}>0]?RETURN)
same=>n,Hangup
same=>n(RETURN),Log(NOTICE,Returning to transferrer)
same=>n,Set(CALLERID(name)=${IF($[${DIALSTATUS}= NOANSWER]?Transfer Not Answered)})
same=>n,Set(CALLERID(name)=${IF($[${DIALSTATUS}= BUSY]?Transferee was BUSY:Transfer Failed)})
same=>n,Dial(${BLINDTRANSFER:0:$[${LEN(${BLINDTRANSFER})}-9]})
same=>n,Hangup()