[asterisk-users] Dialplan, Extensions, etc. Worksheet

info at tripple-o.nl info at tripple-o.nl
Mon May 5 16:02:04 CDT 2008


Rod,

I've made a very basic dialplan for an Asterisk for beginners  
presentati on a seminar kind of event  last year.

This are the config files involved:
-/etc/asterisk/  
extensions.conf                                          : the file  
with the dialplan and the includings  of other files that are part of  
the dialplan
-/etc/asterisk/extensions.d/plaza_voiceprompts.conf  : a quick and  
dirty routine to record and listen to your own voiceprompts
-/etc/asterisk/ 
sip.conf                                                          :  
the file with the sip entries for the different sip phones
- /etc/asterisk/ 
voicemail.conf                                             : the  
voicemail boxes for the different phones


This is not a ready to go dialplan but (if I haven't made too many  
typos translating the stuff from Dutch to English) for practicing it  
will do I think. This is the scene:

A company with 4 phones, one for the reception and one for each  
department (registration, communication and finance) Each phone has it  
own context that sets the permissions for making calls (only internal,  
national, international).  There is one phone number that can be  
called and the caller wil enter a menu. If a department is chosen and  
the phone isn't picked up after 10 seconds the reception phone will  
ring. If the reception doesn't pick up the phone the call is  
transfered to an external number and if this is picked up either the  
caller can leave a message.   There is one incoming number that is  
routed into a menu so the caller can make a choice.

The IAX2 trunk is just a fake. You have to configure a SIP, IAX2 or  
ZAP trunk to be able to make or receive phone calls and adjust the  
incoming number and adjust the Dial() line to your own trunk.

The voiceprompt routine is just a quick ad dirty but very handsome  
routine to record your own voiceprompts and listen to them. The idea  
is that you use a numbered list of the voiceprompts and adjust the  
routine to that list. The hard part is to make the voiceprompts that  
are used by the routine itself ("enter the voiceprompt number" and  
"press 1 to make a recordig or 2 to listen") . Number 07 is "press 1  
for recording or 2 for listening" and number 08 is "please enter the  
voieprompt number".

The recordings are saved in /var/lib/asterisk/sounds/plaza but you can  
change it to any directory you like as long as it is available.


Don't panic if you don't understand all of it at once. This example  
contains the most basic issues for making a dialplan:
- menu
- routing calls to phones
- routing calls to voicemail boxes
- number matching (routing calls based on the number dialed and/or the  
cid of the one that makes an inbound call)
- including contexts
- including config files
- set permissions on a per phones base
- voicemail settings
- parking of  a call (transfer a call to number 700, you hear a number  
(f.i. 701) and you can call or shout to a co-worker that a call is  
parked on 701, he/she
   calls 701 and takes over the call) for the settings see /etc/ 
asterisk/features.conf



There is much more to do and to learn but if you understand this  
example I'm sure you will be able to make a very neat dialplan for  
yourself. Succes!


Erik de Wild
Tripple-o
Your Asterisk migration partner


 >>>>>>>>>>>>>
extensions.conf

[global]


[general]
;
;

;;;;;;;;;;;;;;;;
; this is just an example. every phone number has its own context with  
its own permissions. With just a couple of phones this can be used
; in real life, otherwise you have to work with categories
;;;;;;;;;;;;;;

[5000]                                      ; reception
  include => plaza_all_rights     ; the reception has permissions for  
everything


[5001]  ;                                       ; registration  
department (internal and national outbound)
include => plaza_intern
include => plaza_outbound_nl


[5002]                                      ; information department  
(internal and national outbound)

include => plaza_intern
include => plaza_outbound_nl

[5003]                                      ; financial department

include => plaza_intern       ; the finance guys/girls are just  
allowed to make internal calls


[plaza_all_rights]                   ; a context with all the  
permissions included.
include => plaza_intern
include => plaza_outbound_nl
include => plaza_outbound_int
include => plaza_no_autorisation


[plaza_intern]
include => parkedcalls       ; this enables parking calls
;;;;;;;;;;;;;;;
;5000 =reception
;5001 = registration department
;5002 = information department
;5003 = financial department
;;;;;;;;;;;;;;;
exten => _5XXX,1,Dial(SIP/${EXTEN}, 
20,rT)                              ; example number matching, only  
wth 4 digits ad with the first dgit being a "5" this wil match
exten => _5XXX,n(noanswer),n,Playback(plaza/no_answer)  ; a message  
that the phone isn't answered
exten => _5XXX,n,Hangup()


exten => 6000/5000,1,Answer()                      ; ex girlfriend  
extension example. Only the reception can  call the voiceprompt routine
exten => 6000/5000,n,Goto(recording,s,1)   ; calling extension 6000

exten => 6001,1,Answer()                                 ; just to  
test the proper working of music on hold
exten => 6001,n,MusicOnHold()
exten => 6001,n,Hangup()

#include "extensions.d/*.conf"       ; some additional .conf are in / 
etc/asterisk/extensions.d/ just to keep the oversight of the dialplan  
configuration
                                                              ;  
without ending up with one large extensions.conf

[plaza_inbound]

;;;;;;;;;;;
; numbers don't exist anymore
;;;;;;;;;;;

exten => 0307114197,1,Answer()                                   ;  
incoming line on number 0307114197
exten => 0307114197,n,Goto(inbound_menu,s,1)      ; jump to menu

[inbound_menu]
exten => s,1,BackGround(plaza/menu)         ; press 1 for reception, 2  
fr registration department , 3 for info department
                                                                                ; or 
  for for the fiancial department
			

;;;;;;;;;;;;;;;;
;reception
;;;;;;;;;;;;;;;;			
exten => 1,1,Dial(SIP/5000,10,t)
exten => 1,n,Playback(plaza/no_answer)
exten => 1,n,Hangup()			
;;;;;;;;;;;;;;;;
;registration department
;;;;;;;;;;;;;;;;					
exten => 2,1,Dial(SIP/ 
5001,10,t)                                                 ; phone  
5001 rings for 10 seconds
exten => 2,n,Dial(SIP/ 
5000,10,t)                                                 ;  phone  
5000 (reception) rings 10 seconden

exten => 2,n,Playback(plaza/external_transfer)                      ;
exten => 2,n,Dial(IAX2/OOO50608 at OOO_plaza/0621831234,10,t)  ; using  
iax2 trunk OOO50608 external number 0621831234 is called for 10 seconds

exten =>  
2 
,n 
,VoiceMail(5001)                                                     ;  
if no phone answered the caller can leave a message in mailbox 5001
exten => 2,n,Hangup()
;;;;;;;;;;;;;;;;
;information department
;;;;;;;;;;;;;;;;
exten => 3,1,Dial(SIP/ 
5002,10,r)                                              ; phone rings  
for 10 seconds;
exten => 3,2,Dial(SIP/ 
5000,10,t)                                              ; phone of  
reception rings for 10 seconds
exten => 3,3,Dial(IAX2/OOO50608 at OOO_plaza/0621832345,10,t) sing iax2  
trunk OOO50608 external number 0621832345 is called for 10 seconds
  exten =>  
3,4 
,VoiceMail(5002)                                                  ;   
no phone answered the callee can leave a message in mailbox 5002
exten => 3,5,Hangup()

;;;;;;;;;;;;;;
; finance department
;;;;;;;;;;;;;
exten =>  
4,1 
,Voicemail(5003)                                                   ;  
the finance guys/girl only communicate by voicemail
exten => 4,2,Hangup()


; i = invalid

exten => i,1,Playback(plaza/ 
invallid_input)                            ; when a digit other the 1,  
2, 3 or 4 is entered the input is invalid so "the invalid" message is  
played
exten => i,2,Goto,(s, 
1)                                                                 ;  
and then the ibound call  returns back to the menu

; t =  time-out
exten => t,1,Playback(plaza/ 
goodbye)                                    ; caller waited to long
exten => t, 
3 
,Hangup 
                                                                     ;  
not very customer friendly but the line hangs up

[plaza_outbound_nl 
]                                                                   ;  
only national outbound calls

exten => _0Z.,1,Dial(IAX2/OOO50608 at voop_plaza/${EXTEN},20,rt)  ; iax2  
trunk OOO50608 calls out, be aware of the numbermatching _0Z.
exten => _0Z., 
2 
,Hangup 
()                                                                               ; Z 
  =[123456789]

[plaza_outbound_int]
exten => _00Z.,1,Dial(IAX2/OOO50698 at voop_plaza/${EXTEN},20,rt) ;  
number match _00X. allows international calls
exten => _00Z.,2,Hangup()

[plaza_no_autorisation]
exten => _X.,1,Playback(plaza/no_autorisation)  ; in case you enter a  
number that doesn't fit any other available extension (depends on what  
is included)
exten => _X.,n,Hangup

 >>>>>>>>>>>>

/etc/asterisk/extension.d/plaza_voiceprompts.conf

;;;;;;;;;;;;;;;
; Erik de Wild
; quick and dirty routine for recording Media Plaza demo voiceprompts
; 26-05-2007
;;;;;;;;;;;;;;;

[recording]
exten => s,1,Read(VOICEPROMPT_NUMMER|plaza/voiceprompt_nummer|2| 
noanswer|1|15)                    ; enter the voiceprompt number
exten => s,n,Read(OPNEMEN_AFLUISTEREN|plaza/opnemen_afluisteren|1| 
noanswer|1|15)                     ; OPNEMEN_AFLUSTEREN=LISTEN_RECORD
                                                                                                                                                                                              ; press 
  1 for recording or 2 for listening

exten => s,n,Macro(bestandsnaam,$ 
{VOICEPROMPT_NUMMER 
})                                                                     ; calling 
  macro that finds the file name by the
                                                                                                                                                                                              ; voiceprompt 
  number
exten => s,n,NoOp($ 
{MACRO_RESULT 
})                                                                                                                  ;
exten => s,n,Macro(play_recording,${MACRO_RESULT},$ 
{OPNEMEN_AFLUISTEREN})                             ; calling macro  
that records or plays the choosen
                                                                                                                                                                                              ; voiceprompt
exten => s,n,Goto(s,1)

[macro-play_recording]
;;;;;;;;;;;
; ARG1 = file name
; ARG2 = 1 record 2 play
exten => s,1,Goto(s-${ARG2}, 
1 
)                                                                                                                                    ; goto 
  the proper extension based on the choice
                                                                                                                                                                                              ; between 
  recording or playing

exten => s-1,1,Playback(beep)
exten => s-1,n,Wait(1)
exten => s-1,n,Playback(beep)
exten => s-1,n,Record(plaza/$ 
{ARG1 
}:alaw 
)                                                                                                              ; after 
  2 beeps the recording starts

exten => s-2,1,Playback(plaza/$ 
{ARG1 
})                                                                                                                     ; the 
  chosen file is played


[macro-bestandsnaam]      ; this macro matches the voiceprompt number  
with the voiceprompt file name. You can adjust this macro to your own  
needs
;;;;;;;;;;;;;;;;;
; ARG1= number on the voiceprompt list
;;;;;;;;;;;;;;;;;

exten => s,1,Goto(s-${ARG1},1)


exten => s-afspelen,1,Playback(plaza/${ARG1})
exten => s-opnemen,1,Record(plaza/${MACRO_RESULT})

exten => s-01,1,Set(MACRO_RESULT=welkom)                      ; welcome
exten => s-02,1,Set(MACRO_RESULT=menu)                          ;  
Please press 1 for receptions, 2 for the registration department, 3  
for communcation and 4 for
                                                                              finance
exten => s-03,1,Set(MACRO_RESULT=external_transfer)     ; the call  
will be transfered to an external phone

exten => s-04,1,Set(MACRO_RESULT=invalid_input)             ; invalid  
input
exten => s-05,1,Set(MACRO_RESULT=goodbye)                    ; goodbye
exten => s-06,1,Set(MACRO_RESULT=no_autorisation)        ; the number  
you dialed doesn't exist or you do not have the proper permissions to  
dial this
                                                                                                               ; number
exten => s-07,1,Set(MACRO_RESULT=record_listen)             ; press 1  
for recording or 2 for listening
exten => s-08,1,Set(MACRO_RESULT=voiceprompt_nummer) ; please enter  
the voiceprompt number

exten => s-09,1,Set(MACRO_RESULT=not_answered)           ; the call is  
not answered

exten => _s-ZX,1,Playback(plaza/invalid_input)     ; when the number  
is not in the above list


 >>>>>>>>>>>>>>>>>>>
;sip.conf
; the sip phones entries
; most phones will work with this setup I think
;;;;;;;;;;;;;;;;;;;;;

[5000]
;;;;;;;;;;;;;
; receptie
; sipura ata
;;;;;;;;;;;;;
type=friend
context=5000
secret=plaza
host=dynamic
dtmfmode=rfc2833
callerid="5000" <5000>
disallow=all
allow=alaw

[5001]
;;;;;;;;;;;
;afdeling registratie
; E61
;;;;;;;;;;;
type=friend
context=5001
secret=plaza
host=dynamic
dtmfmode=rfc2833
callerid="5001" <5001>
disallow=all
allow=alaw

[5002]
;;;;;;;;;;;;;;
;zyxel w2000 1
;;;;;;;;;;;;;
type=friend
context=5002
secret=plaza
dtmfmode=rfc2833
host=dynamic
callerid="5002" <5002>
disallow=all
allow=alaw

[5003]
;;;;;;;;;;;;;;;;
;zyxel w2000 2
;;;;;;;;;;;;;;;;
type=friend
username=5003
context=5003
secret=plaza
dtmfmode=rfc2833
host=dynamic
callerid="5003" <5003>
disallow=all
allow=alaw


;>>>>>>>>>>>>>>>>




More information about the asterisk-users mailing list