[Asterisk-Users] "Reverse Hold" feature prototype...

Mike Benoit ipso at snappymail.ca
Thu Jul 15 17:17:36 MST 2004


I have no idea what this really should be called, so for lack of a
better name, I called it "reverse hold". Hopefully someone else can make
use of it, or even make it better, as its the first thing of its kind
I've made for asterisk.

Like most people, I'm very busy, so when I call other companies, sitting
on hold really sucks. If you have speaker phone, its not so bad, but
then you have to sit there and listen to the company's horrible choice
in music.

The solution: Reverse Hold.

When your on hold, blind transfer the call to the special extension.
This extension repeats "Press 1 to be connected to the caller, do not
hangup" constantly. Once the remote party presses 1, the original
extension is dialed back. No more listening to hold music, or having a
phone stuck to your ear forever! ;)

It confuses people at first, but for the most part it works great.

This will definitely need some tweaking to fit in to your own setup.

Extensions.conf
------------------------
;This is used in case you manually set the callerid 
;in your extensions.conf, ie: Nufone
;It saves the originating EXT for use later on.
;I tried getting the src channel, and just dialing it back,
;but it didn't work out so well.
[macro-set-callerid]
exten => s,1,setGlobalVar(SRC_EXT=${CALLERIDNUM})
exten => s,2,SetCallerID(${ARG1})
exten => s,3,SetCIDName(${ARG2})

[reverse-hold]
exten => s,1,GotoIf($["${SRC_EXT}" = ""]?99:2)
exten => s,2,NoOp(Reverse Hold from: ${SRC_EXT})
exten => s,3,AbsoluteTimeout,600  ;10 mins, then force a callback to the
originating ext as a reminder the call is still on hold

exten => s,4,Wait,2
exten => s,5,Background(reverse-hold-repeat)
exten => s,6,Goto(s,4)                                  ;Loop

exten => s,99,Macro(set-callerid,5555555555,Foo Company) ;If SRC_EXT
isn't set already, this will set it

exten => i,1,Goto(s,4) ; Keep repeating if they don't press 1
exten => t,1,Goto(s,4)

exten => 1,1,NoOp(Reverse Hold party dialed 1, calling back: ${SRC_EXT})
exten => 1,2,Goto(reverse-hold,999,1)

exten => T,1,NoOp(Reverse Hold timeout, calling back: ${SRC_EXT})
exten => T,2,Goto(reverse-hold,999,1)

exten => 999,1,SetCallerID(${EXTEN})
exten => 999,2,SetCIDName(Reverse-Hold)
exten => 999,3,AbsoluteTimeout,0
exten => 999,4,Goto(extensions,${SRC_EXT},1)
exten => 999,5,Goto(s,4)

exten => 899,1,Goto(reverse-hold,s,1)


Ideally something like this would become its own application, or tied in
to something like parkedcalls. But for now, the above works relatively
well. The biggest drawback is there is no way to get back to call on
hold until it times out. 

Enjoy.

-- 
Mike Benoit <ipso at snappymail.ca>




More information about the asterisk-users mailing list