FreeSWITCH 1.0.6
eBook: $23.99
Formats: PDF, PacktLib, ePub and Mobi formats
$19.19
save 20%!
Print + free eBook + free PacktLib access to the book: $63.98    Print cover: $39.99
$39.99
save 37%!
Free Shipping!
UK, US, Europe and selected countries in Asia.
Also available on:
Overview
Table of Contents
Author
Support
Sample Chapters
  • Install and configure a complete telephony system of your own even if you are using FreeSWITCH for the first time
  • In-depth discussions of important concepts like the dialplan, user directory, and the powerful FreeSWITCH Event Socket
  • The first ever book on FreeSWITCH, packed with real-world examples for Linux/Unix systems, Mac OSX, and Windows, along with useful screenshots and diagrams
  • Best practices and expert tips from the FreeSWITCH experts, including the creator of FreeSWITCH, Anthony Minessale

Book Details

Language : English
Paperback : 320 pages [ 235mm x 191mm ]
Release Date : July 2010
ISBN : 1847199968
ISBN 13 : 9781847199966
Author(s) : Anthony Minessale, Darren Schreiber, Michael S. Collins
Topics and Technologies : All Books, Networking and Servers, Networking & Telephony, Open Source


Table of Contents

Preface
Chapter 1: Architecture of FreeSWITCH
Chapter 2: Building and Installation
Chapter 3: Test Driving the Default Configuration
Chapter 4: SIP and the User Directory
Chapter 5: Understanding the XML Dialplan
Chapter 6: Using the Built-in XML IVR Engine
Chapter 7: Building IVR Applications with Lua
Chapter 8: Advanced Dialplan Concepts
Chapter 9: Controlling FreeSWITCH Externally
Chapter 10: Advanced Features and Further Reading
Appendix A: The FreeSWITCH Online Community
Appendix B: The History of FreeSWITCH
Index
  • Chapter 1: Architecture of FreeSWITCH
    • A revolution has begun and secrets have been revealed
    • The FreeSWITCH design: modular, scalable, and stable
    • Important modules: Endpoint and Dialplan
    • Complex applications made simple
      • Voicemail
      • Multi-party conferencing
      • The FreeSWITCH API (FSAPI)
      • The XML registry
      • Language modules
      • The default configuration
    • Summary
  • Chapter 2: Building and Installation
    • Setting up the FreeSWITCH environment
      • Operating system
      • Operating system prerequisites
        • Linux/Unix
      • Mac OS X
        • Windows
        • Text editors and XML
    • Downloading the source
      • Building from the latest code
    • Compiling FreeSWITCH for Linux/Unix/Mac OS X
      • Compiling FreeSWITCH
        • Step 1: Edit modules.conf
        • Step 2: Run configure script
        • Step 3: Run make and make install
        • Step 4: Edit modules.conf.xml
        • Step 5: Install sound and music files
    • Compiling FreeSWITCH for Windows
      • Building the solution with MSVC/MSVCEE
    • Starting FreeSWITCH
      • Running FreeSWITCH in the background
    • Summary
  • Chapter 3: Test Driving the Default Configuration
    • Important concepts to understand
    • Putting FreeSWITCH to work
      • Controlling FreeSWITCH with the CLI
      • Configuring a SIP phone to work with FreeSWITCH
        • SIP settings
      • Testing the default Dialplan
        • Test calls for a single phone
        • Test calls for two or more phones
    • Summary
  • Chapter 4: SIP and the User Directory
    • Understanding the FreeSWITCH user directory
    • Working with the FreeSWITCH user directory
      • User features
      • Adding a user
      • Testing voicemail
      • Groups of users
    • Connecting to the world with gateways
      • Setting up a new gateway
        • Making calls
        • Receiving calls
      • Making calls without a gateway
    • SIP profiles and user agents
    • Summary
  • Chapter 5: Understanding the XML Dialplan
    • FreeSWITCH XML Dialplan elements
      • Call legs and channel variables
        • Accessing channel variables
      • Regular expressions
      • Contexts
        • Default
        • Public
        • Features
      • Extensions
      • Conditions
      • Actions and anti-actions
    • How Dialplan processing works
    • Creating a new extension
    • Important Dialplan applications
      • bridge
      • playback
      • say
      • play_and_get_digits
      • ivr
      • sleep
      • answer
      • hangup
      • set
    • Dialstring formats
    • Summary
  • Chapter 6: Using the Built-in XML IVR Engine
    • IVR engine overview
    • IVR XML configuration file
    • IVR menu definitions
      • greet-long
      • greet-short
      • invalid-sound
      • exit-sound
      • timeout
      • inter-digit-timeout
      • max-failures
      • max-timeouts
      • digit-len
      • tts-voice
      • tts-engine
      • confirm-key
    • IVR menu destinations
      • menu-exec-app
      • menu-exec-api
      • menu-play-sound
      • menu-back
      • menu-top
    • Routing calls to your IVR
    • Nesting IVRs
    • Using phrases with IVRs
      • Calling Phrase Macros
      • Phrase Macro examples: voicemail
    • Advanced routing
    • Summary
  • Chapter 7: Building IVR Applications with Lua
    • Getting started with Lua
      • Running Lua scripts from the Dialplan
      • Basic Lua syntax
    • Building voice applications
      • Simple IVR—interacting with the caller
      • Conditions and looping
      • Advanced IVR concepts
        • Connecting to a database with LuaSQL
        • Making a web call with curl
        • Lua patterns versus regular expressions
      • Scripting tips
    • Summary
  • Chapter 8: Advanced Dialplan Concepts
    • Dialplan overview
    • General Dialplan concepts
      • Contexts
      • Conditions
      • Actions
      • Putting it all together
    • XML Dialplan module review
      • Extensions
      • Conditions
      • Special condition variables
      • Inline execution
      • Actions and anti-actions
      • Pitfalls to avoid
    • XML Dialplan commands
    • Hunting versus executing
    • Utilizing variables
      • Testing variables with regular expressions
      • Caller profile fields
      • Channel variables
        • Channel variables and call setup
      • Global variables
    • Dialplan functions
      • Real-time condition evaluation
      • String conditioning
      • Database queries
      • SIP contact parameters
    • Set, export, and legs
      • Set versus export
      • Passing variables via call headers
    • XML Dialplan cookbook
      • Match by IP address and call a number
      • Match IP address and Caller ID
      • Match number and strip digits
      • Match number, strip digits, and add prefix
      • Call registered device
      • Try party A, then party B
      • Check for authenticated user
      • Route DIDs to extensions
      • Try a local extension, failback to voicemail
      • Alternate outbound gateways
    • Alternatives to XML
      • YAML
      • Asterisk Dialplan
    • Summary
  • Chapter 9: Controlling FreeSWITCH Externally
    • General overview
    • Event system architecture
    • Event-based modules
      • mod_event_socket
        • Configuring event socket settings
        • Reading events
        • Sending events
        • Events from the Dialplan
      • mod_event_multicast
        • Port/address
        • Bindings
        • TTL
      • mod_erlang_event
    • FreeSWITCH event system commands
      • auth <password>
      • api
      • bgapi
      • event
      • divert_events
      • filter
      • filter delete
      • sendevent
      • sendmsg <uuid>
        • execute
        • hangup
      • nomedia
      • log <level>
      • nolog
      • noevents
    • Event-based applications
      • FreeSWITCH Console application
      • PHP Socket connections
      • Perl Socket connections
    • Event Socket Library
      • Supported libraries
      • ESLObject
        • eslSetLogLevel($loglevel)
      • ESLevent object
        • serialize([$format])
        • setPriority([$number])
        • getHeader($header_name)
        • getBody()
        • getType()
        • addBody($value)
        • addHeader($header_name, $value)
        • delHeader($header_name)
        • firstHeader()
        • nextHeader()
      • ESLconnection object
        • new($host, $port, $password)
        • new($fd)
        • socketDescriptor()
        • connected()
        • getInfo()
        • send($command)
        • sendRecv($command)
        • api($command[, $arguments])
        • bgapi($command[, $arguments])
        • sendEvent($send_me)
        • recvEvent()
        • recvEventTimed($milliseconds)
        • filter($header, $value)
        • events($event_type,$value)
        • execute($app[, $arg][, $uuid])
        • executeAsync($app[, $arg][, $uuid])
        • setAsyncExecute($value)
        • setEventLock($value)
        • disconnect()
    • Events in practice
      • Event Socket Library example: running a command
      • Examples of sending events to FreeSWITCH
        • Setting phone lights
        • Rebooting a phone
        • Requesting phone reconfiguration
        • Custom notify messages
    • Summary
  • Chapter 10: Advanced Features and Further Reading
    • Multi-user conferencing
      • Configuration
        • Conference profiles
        • Caller controls
        • Advertise
        • Sending and receiving XMPP events
      • Connecting callers to the conference
      • Controlling active conferences
    • Nibblebill
      • Use cases
        • Billing (pre-pay)
        • Billing (post-pay)
        • Pay-per-call service billing
        • Maximum credit and/or fraud prevention
      • Design goals
      • Installation and configuration
        • Database tables
      • Creating the database table for PostgreSQL
      • Creating the database table for MySQL
      • Billing a call
        • Nibble method (default)
        • Alternative to nibble billings
      • Examples
        • Different rates per user
        • Single rate for all users
        • Different rates per area code
        • Different rates per service delivery
        • Hang up the call when the balance is depleted
      • Application/CLI/API commands
        • Check
        • Flush
        • Pause
        • Resume
        • Reset
        • Adding and deducting funds
        • Enabling session heartbeat
        • Bill based on B leg only
    • XML/Curl
      • Installation
      • Configuration
        • Bindings
        • HTTP requests
        • HTTP response
        • Optimization
        • Order of requests
        • Request/response examples
      • Dialplan bindings
        • Request
        • Reply
      • Other bindings
      • General "Not found" reply
      • Debugging
      • Failing back
    • Alternative endpoints
      • Skype and GSM endpoints
      • Skype with mod_skypopen
      • GSM with mod_gsmopen
      • TDM with OpenZAP and FreeTDM
    • Configuration tools and related projects
      • Web GUIs
        • WikiPBX
        • FreePBX v3
        • FusionPBX
        • 2600hz
      • Supporting libraries
        • Liverpie (Ruby)
        • FreeSWITCHeR (Ruby)
        • Librevox (Ruby)
        • EventSocket (Python/Twisted)
        • FSSocket (Perl)
    • Summary
  • Appendix A: The FreeSWITCH Online Community
    • The FreeSWITCH mailing lists
    • Talking in real-time via IRC
    • The FreeSWITCH main website and wiki
      • The main FreeSWITCH page—www.freeswitch.org
      • The FreeSWITCH Wiki page—wiki.freeswitch.org
    • The annual ClueCon open source developer conference

Anthony Minessale

Anthony Minessale has been working with computers for nearly 30 years. He is the primary author of FreeSWITCH and Director of Engineering for CudaTEL at Barracuda Networks. He created and continues to run the ClueCon Telephony Developers Conference, held every August in Chicago. He has extensive experience in the Internet industry and VoIP. Before creating FreeSWITCH, he contributed heavily to the Asterisk open source project, producing many features that are still in use today. At Barracuda Networks, Anthony oversees the production and development of the CudaTEL PBX appliance that uses FreeSWITCH as its core telephony engine.

Darren Schreiber

Darren Schreiber is the CEO and Co-founder of 2600 Hz. He began working heavily in open source voice with the FreeSWITCH project, where he engaged with Brian, Mike, and Anthony. His projects have since evolved into two enterprise VoIP platforms that allow a multitude of development of voice, SMS, and video applications to be delivered to customers.

He has 15 years of voice and IT experience including developing multiple enterprise SaaS infrastructures for hosting and remotely managing IT, voice, and e-commerce services. He is a guest lecturer at major universities on VoIP technology and leads paid international VoIP trainings. As a serious telephony enthusiast since a young age, he has worked extensively with VoIP technologies. He graduated from Rensselaer Polytechnic Institute with a degree in Computer Science and Business Management.

He is also a co-author of FreeSWITCH Cookbook, Packt Publishing.


Michael S. Collins

Michael Collins is a 15-year veteran of telecommunications and PBX systems. A relative newcomer to VoIP, he discovered FreeSWITCH in its very early stages and has been an enthusiastic community member ever since. He works with the core FreeSWITCH development team, assisting with documentation and community development. Michael currently works for a technology company that makes extensive use of FreeSWITCH.

Sorry, we don't have any reviews for this title yet.

Code Downloads

Download the code and support files for this book.


Submit Errata

Please let us know if you have found any errors not listed on this list by completing our errata submission form. Our editors will check them and add them to this list. Thank you.


Errata

- 23 submitted: last submission 17 Apr 2014

Errata type: Code | Page number: 75

gateway name="iptel" has been changed to "custom"

 

Errata type: Typo | Page number: 13

There is an extra /> after the variable has been set.

 

Errata type: Layout | Page number: 16

Unnecessary paragraph break in middle of page splits a sentence

 

Errata type: Code | Page number: 198

<extension name="officeA_outbound">
<condition field="caller_id_number" expression="^2\d{3}$">
should be
<extension name="officeA_outbound">
<condition field="caller_id_number" expression="^2\d{3}$"/>
AND
<extension name="officeB_outbound">
<condition field="caller_id_number" expression="^2\d{3}$">
should be
<extension name="officeB_outbound">
<condition field="caller_id_number" expression="^2\d{3}$"/>

 

Errata type: Others | Page number: 91

Last paragraph, last sentence: "In our example, call the debug output..",here,"call the debug" should be normal text and not italicised.

 

Errata type: Technical | Page number: 91

Under "How Dialplan processing works" section, 3rd paragraph,"Launch fs_cli, make a test call to 9196 (music on hold).."
should be
"Launch fs_cli, make a test call to 9196 (echo test).."

 

Errata type: Technical | Page number: 92

2nd paragraph: In "Had the call been made between 9 AM and 6 PM then both conditions would have been met, and the set application...", here,"set" should be formated in 'Code in Text' style.

 

Errata type: Code | Page number: 78

Under "Receiving Calls", bullet point 2, in code snippet: <action application="bridge" data="1000 XML default"/>
should be
<action application="transfer" data="1000 XML default"/>

 

Errata type: Typo | Page number: 167

In the first paragraph, the sentence, "The default behavior for the break fl ag is "on-false",
meaning that we break out of, or stop processing conditions and extensions
as soon as we encounter a false or negative result during evaluation."

should be

"The default behavior for the break fl ag is "on-false",
meaning that we break out of, or stop processing conditions and
as soon as we encounter a false or negative result during evaluation."

Errata type: Technical | Page number: 16

2nd paragraph, line no.9,"mypp_ask_for_digits" should be "myapp_ask_for_digits"

 

Errata type: Typo | Page number: 9

In the figure,"XML Inteface" should be "XML Interface" and "SHINX" should be "SPHINX"

 

Errata type: Others | Page number: 110

Under 'max-failures', the example should be: max-failures="3" and
Under tts-voice, the line which reads "Argument syntax: Any valid text-to0speech voice." should read "...text-to-speech...".

 

Errata type: Technical | Page number: 118

"A classic example of this is the IVR menu." should read "A classic example of this is the voicemail menu."

 

Errata type: Others | Page number: 104

Last sentence: "In the next chapter, we will see how to use a programming language called Lua.." should read "In the next chapter, we will see how to use a Built-in XML IVR engine."

 

Errata type: Typo | Page number: 78

<action application="set" data="domain_name==$${domain}"/> SHOULD read <action application="set" data="domain_name=$${domain}"/>

 

Errata type: Code | Page number: 106

2nd paragraph under 'IVR XML configuration file' should read Open conf/ivr_menus/demo_ivr.xml...

 

Errata type: Technical | Throughout the book

1.0.6 has 91xx for default extension numbers instead of 99xx. Music on hold is 9999 in 1.0.6.

 

Errata type: Typo | Page number: 13 | Errata date: 12 July 11

data="foo=bar"/> should actually be

 

Errata type: Code | Page number: 13

<action application="set" data="foo=bar">data="foo=bar"/>
should be: <action application="set" data="foo=bar">

 

Errata type: Typo | Page number: 218 | Errata date: 30 December

Under "nolog", the text should read:

"... previously enabled by the log command."

 

Errata type: Typo | Page number: 49 | Errata date: 30 Dec 11

"A call is defined as two calls bridged together." should read something like: "A call is defined as two call legs (or two channels) bridged together."

 

Errata type: Code | Page number: 102 | Errata date: 7 July 11

The following line of code:

<action application="bridge" data="sofia/internal/ user@1.2.3.4"></action>

should have been:

 

<action application="bridge" data="sofia/internal/user@1.2.3.4"></action>

 

Errata Type: Typo | Page Number167 | Errata Date: 29 May, 2013

The sentence in the first paragraph:

"The default behavior for the break flag is "on-false",
meaning that we break out of, or stop processing conditions and extensions
as soon as we encounter a false or negative result during evaluation."

should be:

"The default behavior for the break fl ag is "on-false",
meaning that we break out of, or stop processing conditions
as soon as we encounter a false or negative result during evaluation."

Sample chapters

You can view our sample chapters and prefaces of this title on PacktLib or download sample chapters in PDF format.

Frequently bought together

FreeSWITCH 1.0.6 +    Apache OfBiz Cookbook =
50% Off
the second eBook
Price for both: $34.95

Buy both these recommended eBooks together and get 50% off the cheapest eBook.

What you will learn from this book

  • Set up a basic system to make and receive phone calls, make calls between extensions, and utilize basic PBX functionality
  • Avoid common implementation mistakes and deploy various features of this telephony system with best practices and expert tips
  • Perform routine maintenance for smooth running and troubleshoot the system when things are not going right
  • Apply regular expressions to unlock unique and powerful call routing scenarios
  • Call your own application(s) when particular events occur and control FreeSWITCH using the powerful Event Socket
  • Set up multi-party conferencing facilities for your system
  • Interact with callers, gather information, and route calls to the appropriate recipient using the automated, built-in XML IVR (Interactive Voice Response) engine
  • Create a flexible dialplan, and allow third-party tools to be quickly and easily created using dialplan parsers other than the default XML Dialplan
  • Park multiple calls in a FIFO queue and unpark them in the order in which they were received, using the mod_fifo module
  • Record an entire phone call or session using the call recording feature
  • Create advanced call control applications with the Lua scripting language
  • Take a peek into the vibrant online community and history of FreeSWITCH

In Detail

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 skills.

This book comes to your rescue, helping you to set up a telephony system fast and easily using FreeSWITCH. It will take you from being a novice to creating a fully-functional telephony system of your own. It is rich with practical examples and will give you all of the information and skills needed to implement your own PBX system.

The book begins by introducing the architecture and working of FreeSWITCH before detailing how to plan a telephone system and moving 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.

A step-by-step guide to building, managing, and maintaining an efficient FreeSWITCH telephony system

Approach

This book is a step-by-step tutorial with clear instructions and screenshots to guide you through the creation of a complete, cost-effective telephony system. You will start with installation, walk through the different features, and see how to manage and maintain the system.

Who this book is for

If you are an IT professional or enthusiast who is interested in quickly getting a powerful telephony system up and running using the free and open source application FreeSWITCH, this book is for you. Telephony experience will be helpful, but is not required.

Code Download and Errata
Packt Anytime, Anywhere
Register Books
Print Upgrades
eBook Downloads
Video Support
Contact Us
Awards Voting Nominations Previous Winners
Judges Open Source CMS Hall Of Fame CMS Most Promising Open Source Project Open Source E-Commerce Applications Open Source JavaScript Library Open Source Graphics Software
Resources
Open Source CMS Hall Of Fame CMS Most Promising Open Source Project Open Source E-Commerce Applications Open Source JavaScript Library Open Source Graphics Software