Now that we’ve gone over some more of the basics, let’s look at a few popular functions that have been incorporated into Asterisk.
Zapateller()
is a simple Asterisk application that plays a special
information tone at the beginning of a call, which causes auto-dialers
(usually used by telemarketers) to think that the line has been
disconnected. Not only will they hang up, but their systems will flag
your number as out of service, which could help you avoid all kinds of
telemarketing calls. To use this functionality within your dialplan, simply
call the Zapateller()
application.
We’ll also use the optional nocallerid
option so that the tone will be played only when there is
no caller ID information on the incoming call. For example, you might
use Zapateller()
in the s
extension of your [incoming]
context, like this:
[incomimg] exten => s,1,Zapateller(nocallerid) same => n,Playback(enter-ext-of-person)
Another handy feature is called call
parking. Call parking allows you to place a call on hold in a
“parking lot,” so that it can be taken off hold from another extension.
Parameters for call parking (such as the extensions to use, the number
of spaces, and so on) are all controlled within the
features.conf
configuration file. The [general]
section of the
features.conf
file contains four settings related
to call parking:
parkext
This is the parking lot extension. Transfer a call
to this extension, and the system will tell you which parking
position the call is in. By default, the parking extension is
700
.
parkpos
This option defines the number of parking slots. For
example, setting it to 701-720
creates 20 parking positions, numbered 701 through 720.
context
This is the name of the parking context. To be able to park calls, you must include this context.
parkingtime
If set, this option controls how long (in seconds) a call can stay in the parking lot. If the call isn’t picked up within the specified time, the extension that parked the call will be called back.
Also note that because the user needs
to be able to transfer the calls to the parking lot extension, you
should make sure you’re using the t
and/or T
options to the Dial()
application.
So, let’s create a simple dialplan to show off call parking:
[incoming] include => parkedcalls exten => 103,1,Dial(SIP/Bob,,tT) exten => 104,1,Dial(SIP/Charlie,,tT)
To illustrate how call parking works, say that Alice calls into the system and dials extension 103 to reach Bob. After a while, Bob transfers the call to extension 700, which tells him that the call from Alice has been parked in position 701. Bob then dials Charlie at extension 104, and tells him that Alice is at extension 701. Charlie then dials extension 701 and begins to talk to Alice. This is a simple and effective way of allowing callers to be transferred between users.
Last but not least, let’s cover setting up an audio
conference bridge with the MeetMe()
application.[96] This application allows multiple callers to converse
together, as if they were all in the same physical location. Some of the
main features include:
Let’s walk through setting up a basic
conference room. The configuration options for the MeetMe conferencing
system are found in meetme.conf
. Inside the
configuration file, you define conference rooms and optional numeric
passwords. (If a password is defined here, it will be required to enter
all conferences using that room.) For our example, let’s set up a
conference room at extension 600. First, we’ll set up the conference
room in meetme.conf
. We’ll call it 600
, and we won’t assign a password at this
time:
[rooms] conf => 600
Now that the configuration file is
complete, we’ll need to restart Asterisk so that it can reread the
meetme.conf
file. Next, we’ll add support for the
conference room to our dialplan with the MeetMe()
application. MeetMe()
takes three arguments: the name of
the conference room (as defined in meetme.conf
), a
set of options, and the password the user must enter to join this
conference. Let’s set up a simple conference using room 600
, the i
option (which announces when people enter and exit the conference), and
a password of 54321
:
exten => 600,1,MeetMe(600,i,54321)
That’s all there is to it! When
callers enter extension 600
, they will be prompted
for the password. If they correctly enter 54321
, they will be added to the conference.
You can run core show application MeetMe from the
Asterisk CLI for a list of all the options supported by the MeetMe()
application.
Another useful application is
MeetMeCount()
. As its name suggests, this application counts the number
of users in a particular conference room. It takes up to two arguments: the conference room in which to
count the number of participants, and optionally a variable name to
assign the count to. If the variable name is not passed as the second
argument, the count is read to the caller:
exten => 601,1,Playback(conf-thereare) same => n,MeetMeCount(600) same => n,Playback(conf-peopleinconf)
If you pass a variable as the second
argument to MeetMeCount()
, the count
is assigned to the variable, and playback of the count is skipped. You
might use this to limit the number of participants, like this:
; limit the conference room to 10 participants exten => 600,1,MeetMeCount(600,CONFCOUNT) same => n,GotoIf($[${CONFCOUNT} <= 10]?meetme:conf_full,1) same => n(meetme),MeetMe(600,i,54321) exten => conf_full,1,Playback(conf-full)
[96] In the world of legacy PBXs, this type of functionality is very expensive. Either you have to pay big bucks for a dial-in service, or you have to add an expensive conferencing bridge to your proprietary PBX.