[Asterisk-Users] Setting a "Forward" to an external number on yourphone

Jim Van Meggelen jim at vanmeggelen.ca
Tue Feb 15 09:16:32 MST 2005


asterisk-users-bounces at lists.digium.com wrote:
> Hi!
> 
> Maybe I have just been looking on the wrong pages but there is a
> question that is very important for me. I already studied some
> Demo-Dialplans and made some basic experiences with Asterisk.
> But what I
> need to find out is how I can handle this.
> 
> I am leaving my office and I want to tell asterisk to forward
> calls now
> to my mobile phone by just hitting a key (on my IP-Phone) or
> by using a
> special key-sequence.
> 
> How can this be handled because I need to change the dialplan
> based on
> some information coming from a device attached to a channel.
> When back in my office I hit the key again and the calls are
> now routed
> to my IP-Phone (or ISDN-Phone on zap-channel) again.
> 
> With IP-Phones I can imagine just unregistering the phone and
> having a
> dialplan with a fallback-option or something like that. But what if I
> want to tell asterisk to forward calls from now on to a
> number I want to
> manually add just for today (hitting a key, entering the new target
> number and that's it). where can I find some information on
> how to make
> this feature available.

There's probably a whole lot of ways this could be achieved. It's kind
of a cookbook type thing: more than one recipe.

What I've been working on is a way to change where "zero-out" or main
menu timeouts. I want to be able to do this while on the road or in the
office, so I built it into the dial plan.

All the authentication issues aside, I need to set a variable that
defines where I want calls to go. Additionally, I want the state of this
variable to survive a restart.

What I've been messing with is using a file-based semaphores to do this.
Perhaps it's kludgy, but it works. Also, there's no database work
required: it all happens in the dialplan.

There's a lot more work needed here - I just hacked this together. Works
pretty well though, it's just not very friendly.

I wouldn't intall this at a customer without some more work, but mostly
because I'd want it a bit more friendly.

Anyhow, I have not tested this exact one, but it's similar to what I've
got so far. Enjoy:

[global]

MyCell=18005551212
Reception = SIP/YourPhone

; These are your semaphores. Because they are files they will survive a
restart
#include /var/lib/asterisk/remote_context
#include /var/lib/asterisk/remote_exten

[incoming]
; somewhere you'll need to put the exten that sends you to [presence]
; Make sure this is secure, but you'll probably want to be able to 
; access it extenally
exten => 4321,1,Goto(presence,s,1)

[local_sets]
exten => 1000,1,Macro(exec_set,${EXTEN},${Reception})

[remote_sets]
exten => 2000,1,Macro(cell_user,${MyCell})

[presence]
;just record a basic prompt so you know what's up
exten => s,1,SayDigits(${ATDT_EXTEN}) ; raw, but it'll tell you where
it's going
exten => s,2,Background(prompt_for_choice)
;;;;this sets calls to go to one place
 ; first we write the semaphore
  exten => 1,1,System(echo ATDT_CONTEXT=remote_sets >
/var/lib/remote_context)
 ;then we set the value of the variable
  exten => 1,2,SetGlobalVar(ATDT_CONTEXT=remote_sets)
  exten => 1,3,System(echo ATDT_EXTEN=2000 > /var/lib/remote_exten)
  exten => 1,4,SetGlobalVar(ATDT_EXTEN=2000)
  exten => 1,5,Goto(presence,s,1)
;;;;this sets calls to go to somewhere else
  exten => 2,1,System(echo ATDT_CONTEXT=local_sets >
/var/lib/remote_context)
  exten => 2,2,SetGlobalVar(ATDT_CONTEXT=local_sets)
  exten => 2,3,System(echo ATDT_EXTEN=1000 > /var/lib/remote_exten)
  exten => 2,4,SetGlobalVar(ATDT_EXTEN=1000)
  exten => 2,5,Goto(presence,s,1)
;;;;you can have as many of these as you need
  exten => 3,1,System(echo ATDT_CONTEXT=[some_context] >
/var/lib/remote_context)
  exten => 3,2,SetGlobalVar(ATDT_CONTEXT=[some_context])
  exten => 3,3,System(echo ATDT_EXTEN=[some_exten] >
/var/lib/remote_exten)
  exten => 3,4,SetGlobalVar(ATDT_EXTEN=[some_exten])
  exten => 3,5,Goto(presence,s,1)

[cleanup]
; hang up the call and whatever else
exten => s,1,Playback(goodbye)
exten => s,2,Hangup()

;;; MACROS ;;;
[macro-exec_set]
exten => s,1,Dial(${ARG2},20)                   ; Ring the interface, 20
seconds maximum
exten => s,2,Goto(s-${DIALSTATUS},1)            ; Jump based on status
(NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
exten => s-NOANSWER,1,Voicemail(u${ARG1})       ; If unavailable, send
to voicemail w/ unavail announce
exten => s-NOANSWER,2,Goto(default,s,1)         ; If they press #,
return to start
exten => s-BUSY,1,Voicemail(b${ARG1})           ; If busy, send to
voicemail w/ busy announce
exten => s-BUSY,2,Goto(default,s,1)             ; If they press #,
return to start
exten => _s-.,1,Goto(s-NOANSWER,1)              ; Treat anything else as
no answer
exten => a,1,VoicemailMain(${ARG1})             ; If they press *, send
the user into VoicemailMain

[macro-cell_user]
; This will only work if your external line supports link transfer
exten => s,1,Playback(transfer)
exten => s,2,Flash()
exten => s,3,SendDTMF(${ARG1})
exten => s,4,Hangup()



-- 
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.300 / Virus Database: 265.8.8 - Release Date: 14/02/2005
 




More information about the asterisk-users mailing list