Book Image

FreeSWITCH 1.2 - Second Edition

Book Image

FreeSWITCH 1.2 - Second Edition

Overview of this book

FreeSWITCH is an open source telephony platform designed to facilitate the creation of voice and chat-driven products, scaling from a soft-phone to a PBX and even up to an enterprise-class soft-switch. It is always exciting to design and build your own telephony system to suit your needs, but the task is time-consuming and involves a lot of technical skill."FreeSWITCH 1.2" comes to your rescue to help you set up a telephony system quickly and securely using FreeSWITCH. It is rich with practical examples and will give you all of the information and skills needed to implement your own PBX system.You will start with a detailed description of the FreeSWITCH system architecture. Thereafter you will receive step-by-step instructions on how to set up basic and advanced features for your telephony platform.The book begins by introducing the architecture and workings of FreeSWITCH before detailing how to plan a telephone system and then moves on to the installation, configuration, and management of a feature-packed PBX. You will learn about maintaining a user directory, XML dial plan, and advanced dial plan concepts, call routing, and the extremely powerful Event Socket. You will finally learn about the online community and history of FreeSWITCH."FreeSWITCH 1.2" is an indispensable tool for novice and expert alike.
Table of Contents (24 chapters)
FreeSWITCH 1.2
Credits
About the Authors
About the Reviewers
www.PacktPub.com
Preface
Index

Voicemail


We now shift our attention to a feature that is available in both systems: voicemail.

Asterisk

The Asterisk dialplan application, Dial, offers the ability to add the number of seconds the phone can ring. It will wait for that amount of seconds (for example, 10) for the called party to answer and then move to the next priority. In this example we have the VoiceMail application. Please replace the /etc/asterisk/extensions.conf with this content:

[default] 
exten => _200[1-2],1,Dial(SIP/${EXTEN}, 10)
exten => _200[1-2],n,VoiceMail(${EXTEN},u)

Asterisk needs some additional configuration for the voicemail boxes. Please replace the file /etc/asterisk/voicemail.conf with:

 [general]
format = wav
attach = yes
[default]
2000 => 1234,Mr. X
2001 => 1234,Mr. Y

Now you can make a call and after approximately 10 seconds the Dial application stops calling. Asterisk increases the priority by 1 and starts the VoiceMail application for the voicemail box ${EXTEN}, and the calling party can leave a message.

FreeSWITCH

Voicemail configuration in FreeSWITCH is very different. Please replace the file /usr/local/freeswitch/conf/dialplan/default/01_New.xml with this content:

<?xml version="1.0" encoding="utf-8"?>
<include>
  <context name="default">
    <extension name="Local_Extension">
      <condition field="destination_number"
       expression="^(200[1-2])$">
        <action application="export" 
          data="dialed_extension=$1"/>
        <action application="set" data="call_timeout=10"/>
        <action application="set" 
          data="hangup_after_bridge=true"/>
        <action application="set" 
          data="continue_on_fail=true"/>
        <action application="bridge" 
          data="user/${dialed_extension}@${domain_name}"/>
        <action application="answer"/>
        <action application="sleep" data="1000"/>
        <action application="bridge" 
data="loopback/app=voicemail:default ${domain_name} ${dialed_extension}"/>
      </condition>
    </extension>
  </context>
</include>

The FreeSWITCH dialplan is a bit more complex but also gives more control. With call_timeout=10 you can set the maximum time in seconds the bridge application tries to call the other party. The setting hangup_after_bridge=true tells FreeSWITCH to hang up after a bridged call has occurred. (This is also important for when the caller goes to voicemail and hangs up.) The setting continue_on_fail=true handles the scenario when the called party is busy. After the bridge application we have the answer, which means that FreeSWITCH kind of "picks up the phone" itself. After a one second sleep (which just feels a bit more human than without it) it bridges the call to a loopback destination for the voicemail application. You can also use the voicemail application without the loopback channel; however, by using this specific syntax we allow for attended transfers into a user's voicemail box.

Accessing voicemail

Now that we've configured the system to record voicemail messages for our users, let's discuss how to access those messages. In each case, be sure to call and leave a voicemail message for a user and then follow the instructions for retrieving.

We'll create dialplans that allow us to check voicemail boxes by dialing 4000.

Asterisk

Please replace the /etc/asterisk/extensions.conf file with this content:

[default] 
exten => _200[1-2],1,Dial(SIP/${EXTEN}, 10)
exten => _200[1-2],n,VoiceMail(${EXTEN},u)
exten => 4000,1,VoiceMailMain(${CALLERID(num)})

The Asterisk application VoiceMailMain offers a gateway to a caller's personal voicemail box. The function ${CALLERID(num)} returns the number of the caller. Don't mix it up with ${EXTEN}, which is the number you are dialing and would be 4000 in this example.

FreeSWITCH

First we need to define a password for accessing the voicemail box by the owner. For simplicity we use 1234 as a password again.

Open /usr/local/freeswitch/conf/directory/default/2000.xml and locate this line:

<param name="password" value="1234"/>

Add a new param line:

<param name="password" value="1234"/>

Save the file. Repeat for /usr/local/freeswitch/conf/directory/default/2000.xml.

At this point you can dial 4000 to retrieve a message because the example FreeSWITCH dialplan already defines 4000 as the message retrieval extension. You can alternatively dial *98 to access voicemail.

Notice that the system asks you to key in both your "ID number" (that is, 2000 or 2001) as well as your password. Some people prefer to have the system assume that if you dial voicemail from a particular extension then it should attempt to log in to that extension's voicemail box. This is easily achieved. Open the file /usr/local/freeswitch/conf/dialplan/default.xml and locate this extension:

    <extension name="vmain">
      <condition field="destination_number" expression="^vmain$|^4000$|^\*98$">
        <action application="answer"/>
        <action application="sleep" data="1000"/>
        <action application="voicemail" data="check default ${domain_name}"/>
      </condition>
    </extension>

Notice the highlighted line with the voicemail application. Let's modify the arguments to the voicemail application so that it assumes the caller ID number is the voicemail box to which the caller wants access. Change the argument to this:

data="check default ${domain_name} ${caller_id_number}"

Notice that we added ${caller_id_number} to the arguments. This tells the voicemail application to assume that the caller ID number (that is, 2000 or 2001) is the voicemail box to which the caller wants access.

Save the file and then issue the reloadxml command (or press F6) from fs_cli. Dial 4000 and now the system only asks for the password.

Note

FreeSWITCH global voicemail settings are found in /usr/local/freeswitch/conf/autoload_configs/voicemail.conf.xml.