Title: Real-time multimedia and communication in packet networks
1Real-time multimedia and communication in packet
networks
Asterisk Dialplan and Native Database
2(No Transcript)
3Last Weeks Prac
- Create and account for your phone
- Play around with some of the settings in the
sip.conf file
4Today's Practical
- 1) Via the dial-plan, Implement a way to record
prompts directly from your phone through the
extension 9100. - 2) Implement a simple front end IVR, allowing
callers to dial extensions, 1 for sales and
suchlike. - Use the show applications to find the method
for performing recordings - Use the show applications to find the method
for jumping to another context - 3) Implement a redial extension using Asterisks
native database. i.e. extension 9200 will redial
the last number you dialled
5Asterisk dialplan
- Dialplan routes every call in the system from its
source through various applications to its
destination i.e.' show applications' - Dialplan composed of one or more contexts
- Each context contains a collection of extensions
- Each context has a unique name associated with it
- When you work, add yourname- to your contexts
to uniquely identify them i.e. mos-first_context
6Understanding Contexts
7Basic extension context
- Diagrammatically an example extension context may
look something like this - In this example context (called default)
- First 4 extensions are associated with ringing
phones for various users - 5th extension (100) allows users to check their
voicemail - 6th extension (101) is associated with an audio
conference room
8Pattern matching
- Extensions can also match patterns
- Patterns to be matched must start with an
underscore _ - May use any of the following special characters
- X any digit from 0-9
- Z any digit from 1-9
- N any digit from 2-9
- 14-6 digits 1,4,5,6
- . matches anything (NB use with extreme caution)
9Pattern matching order
- Employing pattern matching in your Asterisk
dialplan, while very powerful, can be tricky. It
is easy to assume that Asterisk runs through the
dialplan in a completely sequential manner while
this is generally the case, it does prioritize
patterns based on the quality of the match. - The reason for this is simple more than one
pattern might match a dialled number. If two
extensions match a dialled number, Asterisk will
always choose the better (less ambiguous) match.
Before deciding which extension matches best, it
processes the entire context. - Use the dialpan show x command in the CLI to
explore more
10Context inclusion
- One extension context can include the contents of
another
11Asterisk predefined extensions
- Each step in an extension is typically notated as
follows - exten gt ltextengt,ltprioritygt,ltapplicationgt,
(ltargsgt) - Certain extension names are reserved for
specialized purposes. Specifically - s The "start" extension
- t The "timeout" extension. When a caller is in a
voice menu and does not enter the proper number
of digits (or enters no digits at all), the
timeout extension is executed. If the timeout
extension is omitted, then the caller is
disconnected
12Asterisk predefined extensions
- i The "invalid" extension. When a caller enters
an invalid extension number, this extension is
executed. If omitted, the caller is disconnected - h The "hangup" extension. If present, this
extension is executed at the end of call (i.e.
when the caller hangs up or is hung up upon).
Applications executed in this extension should
not try to do anything to the channel itself
since it has been hung up already, but can use it
for logging, executing commands, etc
13Dialling a phone
- Most common extension is that for dialling out
another interface - In this case we use the Dial application
- Dial has a number or arguments
- Do show application Dial to see more details
- exten gt 1000,1,Dial(SIP/100,20)?
- exten gt 1000,2,Voicemail(u100)?
- exten gt 1000,102,Voicemail(b100)?
- example illustrates one of the few exceptions to
execution of an extension being out of order - On entering the extension (priority 1) attempts
to dial the SIP phone 1000 for a maximum of 20
seconds - If the phone is busy, it will jump to priority
n101 if such a priority exists in this extension - In this case, we have such a priority (102),
which sends the caller to voice mailbox 1000,
(with busy announcement)? - If there was simply no answer (or if there was a
busy and we didn't have a step 102), execution
would continue at step 2, where the caller is put
into voice mailbox 1000, (with an unavailable
announcement)?
14Routing by callerid
- Known as the anti-ex girlfriend extension
- exten gt 100/0786346926,1,Congestion
- exten gt 100,1,Dial(Zap/1,20)?
- exten gt 100,2,Voicemail(u100)?
- exten gt 100,102,Voicemail(b100)?
- example builds upon the previous by adding a
special rule that if the caller is 0786346926
(routing by Caller ID is indicated by placing /
and the Caller ID number to match immediately
following), they are immediately presented with
Congestion tone
15Routing by callerid
- If someone phones who doesnt send their callerid
- exten gt 100/,1,Congestion
- exten gt 100,1,Wait(3)?
- exten gt 100,2,Dial(Zap/1)?
16Routing by Time
- A lot of companies disable outgoing calls to PSTN
after hours, we can do this easily in asterisk -
- company
- exten gt _046XXXXXXX,1,Ringing()?
- exten gt _046XXXXXXX,2,GotoIfTime(830-1230
mon-fri1-29?dial-zap,s,1)? - exten gt _046XXXXXXX,3,Playback(so-sorry)?
17Ringing phones in sequence
- Often it is desired that a given extension first
ring one phone, and then if there is no answer,
ring another phone (or set of phones)? - E.g.
- exten gt 1020,1,Dial(Zap/1Zap/2,15)?
- exten gt 1020,2,Dial(Zap/g1,15)?
- exten gt 1020,3,Playback(companymailbox)?
- exten gt 1020,4,Voicemail(100)?
- exten gt 1020,5,Hangup
- try ringing interface Zap/1
- If Zap/1 and Zap/2 are both busy, or no answer
after 15 seconds, we try calling any other
available phone in the Zap group for another 15
seconds - If still no answer (or everyone is busy) then we
playback a message announcing that no one is
available, and to please leave a message in
company mailbox
18Asterisk Native Database
- Simple database resembling the Windows registry
consisting of records of the form ltfamily/key,
valuegt i.e. mosiuoa/foo, bar - Developed on top of version 1 of the Berkeley
database system - We can list current records in the database from
the CLI using the command database show - We have dialplan interfaces to this database
using the commands - Set(DB(family/key)foo Stores a tuple into
the database - Set(fooDB(family/key)) Stores a database
value into a variable - DBDel(family/key) Deletes a tuple from the
database - This database and its interfaces provides us with
data persistence, upon which we can develop
sophisticated applications and services
19Today's Practical
- 1) Via the dial-plan, Implement a way to record
prompts directly from your phone through the
extension 9100. - 2) Implement a simple front end IVR, allowing
callers to dial extensions, 1 for sales and
suchlike. - Use the show applications to find the method
for performing recordings - Use the show applications to find the method
for jumping to another context - 3) Implement a redial extension using Asterisks
native database. i.e. extension 9200 will redial
the last number you dialled
20Real-time multimedia and communication in packet
networks
Asterisk Variables, Macros and Auto-dialing
21Yesterdays Practical
- Implement an IVR (interactive voice response) to
route a user through a menu system using input
from the user - Use voice recording to store sound files that can
be played back to the user i.e. Playback()? - Use DB API commands to implement a simple redial
application of last call made - How is it going?
22Some Dialplan Questions
- Anti-in law example
- mycontext
- exten gt 101/1000,1,Congestion
- exten gt 101,2,Playback(tt-monkeys)?
- exten gt 101,3,Hangup
- main-menu
- exten gt s,1,Playback(welcome)?
- exten gt s,2,Goto(mycontext,101,1)?
the above will give congestion when 1000 calls
and terminate if anyone else calls
23Some Dialplan Questions
- Repeated extension
- default
- exten gt 101,1,SayAlpha(abc)?
- exten gt 101,1,SayAlpha(xyz)?
- exten gt 101,2,Set(TIMEOUT(digit)5)?
- exten gt t,1,Playback(vm-goodbye)?
- exten gt t,2,Hangup
asterisk plays first rule when there is a
ltexten,prioritygt clash
24Variables in the dialplan
- Asterisk makes use of global and channel specific
variables - Variables are expressed in the dialplan using
foo where foo is the name of the variable - A variable may be any alphanumeric string
beginning with a letter, but there are some
variables whose names have special meanings.
Specifically - CONTEXT - The current context
- EXTEN - The current extension
- EXTENx - The current extension with x leading
- digits dropped
- PRIORITY - The current priority
- CALLERID - The current Caller ID (name and
number)? - CALLERIDNUM - The current Caller ID number
- CALLERIDNAME - The current Caller ID name
25Variables
- Global variables specified in the globals
section of the dialplan or can be set using the
SetGlobalVar command - Channel variables are set using Set command in
the dialplan and are accessible to only one
channel - Environment variables allow Asterisk to get
access to UNIX variables using the ENV(foo)
notation - variables
- exten gt 100,1,SetGlobalVar(FOO1011)
- exten gt 100,2,Dial(SIP/FOO)
- exten gt 100,3,Set(FEE7521)
- exten gt 100,4,Dial(SIP/FEE_at_sip.ict.ru.ac.za,20
) - exten gt 100,5,NoOp(ENV(HOSTNAME)
26Including contexts
- One context can include zero or more other
contexts, optionally with a date/time limitation - Contexts are included in the order they are
listed - The format for include is
- include gt ltcontextgtlthoursgtltweekdaysgtltmonthday
sgtltmonthsgt - Where
- ltcontextgt is the context to be included
- lthoursgt are the hours in which this include is
considered valid (in the form of a range, in
military time, e.g. 900-1700)? - ltweekdaysgt are the days of the week considered
valid (e.g. mon-fri)? - ltmonthdaysgt are the days of the month considered
valid (e.g. 22-25)? - ltmonthsgt are the months considered valid
27Including contexts
- newyears
- exten gt s,1,Playback(happy-new-years)?
-
- daytime
- exten gt s,1,Dial(Zap/1,20)?
-
- nighttime
- exten gt s,1,Playback(after-hours-msg)?
-
- default
- include gt newyears1jan
- include gt daytime900-1700mon-fri
- include gt nighttime
28Using Macros
- While Asterisk extension logic is very flexible,
it can also be very verbose when creating many
extensions which are similar - For simplicity, we can take advantage of macros
which simplify dialplans and make it easier to
modify flows on a large scale - Macros are implemented by creating an extension
context whose name begins with macro-, followed
by the name of the macro - Execution begins at the s extension and ends as
soon as the extension drops to a location that is
no longer within the macro
29Using Macros
- Macros define some useful local variables,
specifically - MACRO_EXTEN - The extension calling the macro
- MACRO_CONTEXT - The extension context calling
the macro - MACRO_PRIORITY - The active priority when the
macro was called - MACRO_OFFSET - If set, causes the macro to
attempt to return to n MACRO_OFFSET - ARGn - The nth argument passed to the macro
30Using Macros
- macro-oneline
- Standard one-line phone.
- ARG1 - Device to use
- exten gt s,1,Dial(ARG1,20)?
- exten gt s,2,Voicemail(uMACRO_EXTEN)?
- exten gt s,3,Hangup
- exten gt s,102,Voicemail(bMACRO_EXTEN)?
- exten gt s,103,Hangup
- macro-twoline
- Standard two-line phone.
- ARG1 - First phone
- ARG2 - Second phone
- exten gt s,1,Dial(ARG1,20)?
- exten gt s,2,Voicemail(uMACRO_EXTEN)?
- exten gt s,102,Dial(ARG2,20)?
- exten gt s,103,Voicemail(bMACRO_EXTEN)?
31Using Macros
- After doing the complex work of defining the
oneline macro for a single line phone and the
twoline macro for a two-line phone - implementing the default context becomes
extremely easy, and each extension requires only
a single line instead of several similar lines
32Auto-Dial
- We can use s auto-dial feature to create
outgoing calls from external applications - Typically done by dumping a specially formatted
file in /var/spool/asterisk/outgoing - Can also be done via Manager Interface (more on
this at a later date)?
33Typical Call File
- Channel SIP/1000
- MaxRetries 2
- WaitTime 10
- RetryTime 10
- Context mos-callme
- Extension 500
- Priority 1
we can also use the linux command touch -t
YYYYMMDDhhmm file to schedule callme in the
future
34Today's Practical
- Hope you didnt have any plans for the weekend!
- Create a calculator application using the
Asterisk dialplan - E.g. phone an extension
- answers and provide an IVR menu saying press 1
to go to the calculator, 2 to go somewhere else,
and 3 to go somewhere further - If I press 1 must be routed to calculator where
I am prompted to choose to go to multiplication
menu, division menu, add menu or subtraction menu - 1,2,3,4
- Within each menu prompt user for expression
separated by star ()? - So in addition menu, pressing 10020 should
return 120 - While in multiplication menu pressing 10020 will
return 2000 - Results can be played using Festival or text2wave
- After each result should have option of another
operation or going to one of the other menus
(-/)? - Remember to check out http//www.voip-info.org/ -
Check out the Cut function!