Asterisk™: The Definitive Guide

Leif Madsen

Jim Van Meggelen

Russell Bryant

Printed in the United States of America.


Table of Contents

Foreword
Preface
Audience
Organization
Software
Conventions Used in This Book
Using Code Examples
Safari Books Online
How to Contact Us
Acknowledgments
Leif Madsen
Jim Van Meggelen
Russell Bryant
1. A Telephony Revolution
Asterisk and VoIP: Bridging the Gap Between Traditional and Network Telephony
The Zapata Telephony Project
Massive Change Requires Flexible Technology
Asterisk: The Hacker’s PBX
Asterisk: The Professional’s PBX
The Asterisk Community
The Asterisk Mailing Lists
Asterisk Wiki Sites
The IRC Channels
Asterisk User Groups
The Asterisk Documentation Project
The Business Case
Conclusion
2. Asterisk Architecture
Modules
Applications
Bridging Modules
Call Detail Recording Modules
Channel Event Logging Modules
Channel Drivers
Codec Translators
Format Interpreters
Dialplan Functions
PBX Modules
Resource Modules
Addon Modules
Test Modules
File Structure
Configuration Files
Modules
The Resource Library
The Spool
Logging
The Dialplan
Hardware
Asterisk Versioning
Previous Release Methodologies
The New Release Methodology
Conclusion
3. Installing Asterisk
Installation Cheat Sheet
Distribution Installation
CentOS Server
Base system installation
Base system update
Enabling NTP for accurate system time
Adding a system user
Ubuntu Server
Base system installation
Base system update
Enable NTP for accurate system time
Software Dependencies
Downloading What You Need
Getting the Source via Subversion
Getting the Source via wget
How to Install It
LibPRI
DAHDI
Asterisk
Setting File Permissions
Base Configuration
Disable SELinux
Initial Configuration
indications.conf and asterisk.conf
modules.conf
musiconhold.conf
make menuselect
Uses for menuselect
menuselect interfaces
Using menuselect
Scripting menuselect
Updating Asterisk
Common Issues
-bash: wget: command not found
configure: error: no acceptable C compiler found in $PATH
make: gcc: command not found
configure: error: C++ preprocessor “/lib/cpp” fails sanity check
configure: error: *** Please install GNU make. It is required to build Asterisk!
configure: *** XML documentation will not be available because the ‘libxml2’ development package is missing.
configure: error: *** termcap support not found
You do not appear to have the sources for the 2.6.18-164.6.1.el5 kernel installed.
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
Upgrading Asterisk
Conclusion
4. Initial Configuration Tasks
asterisk.conf
The [directories] Section
The [options] Section
The [files] Section
The [compat] Section
modules.conf
The [modules] Section
indications.conf
musiconhold.conf
Converting Music to a Format That Works Best with Asterisk
CentOS
Ubuntu
Completing file conversion
Conclusion
5. User Device Configuration
Telephone Naming Concepts
Hardphones, Softphones, and ATAs
Configuring Asterisk
How Channel Configuration Files Work with the Dialplan
sip.conf
iax.conf
Modifying Your Channel Configuration Files for Your Environment
Loading Your New Channel Configurations
The Asterisk CLI
Testing to Ensure Your Devices Have Registered
Analog Phones
A Basic Dialplan to Test Your Devices
Under the Hood: Your First Call
Conclusion
6. Dialplan Basics
Dialplan Syntax
Contexts
Extensions
Priorities
Unnumbered priorities
The 'same =>' operator
Priority labels
Applications
The Answer(), Playback(), and Hangup() Applications
A Simple Dialplan
Hello World
Building an Interactive Dialplan
The Goto(), Background(), and WaitExten() Applications
Handling Invalid Entries and Timeouts
Using the Dial() Application
Argument 1: Destination
Argument 2: Timeout
Argument 3: Option
Argument 4: URI
Updating the dialplan
Blank arguments
Using Variables
Global variables
Channel variables
Environment variables
Adding variables to our dialplan
Pattern Matching
Pattern-matching syntax
Pattern-matching examples
Using the ${EXTEN} channel variable
Includes
Conclusion
7. Outside Connectivity
The Basics of Trunking
Fundamental Dialplan for Outside Connectivity
PSTN Circuits
Traditional PSTN Trunks
Analog telephony
Digital telephony
Installing PSTN Trunks
Downloading and installing DAHDI
Configuring digital circuits
Configuring analog circuits
VoIP
PSTN Termination
PSTN Origination
VoIP to VoIP
Configuring VoIP Trunks
Configuring SIP trunks between Asterisk systems
Configuring IAX trunks between Asterisk systems
Emergency Dialing
Conclusion
8. Voicemail
Comedian Mail
The [general] Section
The [zonemessages] Section
The Contexts Section
An Initial voicemail.conf File
Dialplan Integration
The VoiceMail() Dialplan Application
The VoiceMailMain() Dialplan Application
Creating a Dial-by-Name Directory
Using a Jitterbuffer
Storage Backends
Linux Filesystem
ODBC
IMAP
Using Asterisk As a Standalone Voicemail Server
Integrating Asterisk into a SIP Environment As a Standalone Voicemail Server
Dialplan requirements
sip.conf requirements
SMDI (Simplified Message Desk Interface)
Conclusion
9. Internationalization
Devices External to the Asterisk Server
PSTN Connectivity, DAHDI, Digium Cards, and Analog Phones
DAHDI Drivers
Asterisk
Caller ID
Language and/or Accent of Prompts
Time/Date Stamps and Pronunciation
Conclusion—Easy Reference Cheat Sheet
10. Deeper into the Dialplan
Expressions and Variable Manipulation
Basic Expressions
Operators
Dialplan Functions
Syntax
Examples of Dialplan Functions
Conditional Branching
The GotoIf() Application
Time-Based Conditional Branching with GotoIfTime()
Macros
Defining Macros
Calling Macros from the Dialplan
Using Arguments in Macros
GoSub()
Defining Subroutines
Calling Subroutines from the Dialplan
Using Arguments in Subroutines
Returning from a Subroutine
Local Channels
Using the Asterisk Database (AstDB)
Storing Data in the AstDB
Retrieving Data from the AstDB
Deleting Data from the AstDB
Using the AstDB in the Dialplan
Handy Asterisk Features
Zapateller()
Call Parking
Conferencing with MeetMe()
Conclusion
11. Parking and Paging
features.conf
The [general] section
The [featuremap] Section
The [applicationmap] Section
Application Map Grouping
Parking Lots
Overhead and “Underchin” Paging (a.k.a. Public Address)
Places to Send Your Pages
External paging
Set paging
Multicast paging via the MulticastRTP channel
VoIP paging adaptors
Combination paging
Bringing it all together
Zone Paging
Conclusion
12. Internet Call Routing
DNS and SIP URIs
The SIP URI
SRV Records
Accepting Calls to Your System
Modifying sip.conf
Standard dialplan
File parsing
Database lookup
Dialing SIP URIs from Asterisk
ENUM and E.164
E.164 and the ITU
ENUM
Asterisk and ENUM
ISN, ITAD, and freenum.org
Got ISN?
ITAD Subscriber Numbers (ISNs)
Management of Internet Numbering
IP Telephony Administrative Domains (ITADs)
Create a DNS Entry for Your ITAD
Testing Your ITAD
Using ISNs in Your Asterisk System
Receiving calls to your ITAD
Security and Identity
Toll Fraud
Spam over Internet Telephony (SPIT)
Distributed Denial of Service Attacks
Phishing
Security Is an Ongoing Process
Conclusion
13. Automatic Call Distribution (ACD) Queues
Creating a Simple ACD Queue
Queue Members
Controlling Queue Members via the CLI
Controlling Queue Members with Dialplan Logic
Automatically Logging Into and Out of Multiple Queues
An Introduction to Device State
The queues.conf File
The agents.conf File
Advanced Queues
Priority Queue (Queue Weighting)
Queue Member Priority
Changing Penalties Dynamically (queuerules.conf)
Announcement Control
Overflow
Controlling timeouts
Controlling when to join and leave a queue
Using Local Channels
Queue Statistics: The queue_log File
Conclusion
14. Device States
Device States
Checking Device States
Extension States
Hints
Checking Extension States
SIP Presence
Asterisk Configuration
Using Custom Device States
An Example
Distributed Device States
Using OpenAIS
Installation
OpenAIS configuration
Asterisk configuration
Testing device state changes
Using XMPP
Installation
Creating XMPP accounts
Asterisk configuration
Testing
Shared Line Appearances
Installing the SLA Applications
Configuration Overview
Key System Example with Analog Trunks
sla.conf
extensions.conf
Additional phone configuration tasks
Key System Example with SIP Trunks
sla.conf
extensions.conf
Shared Extension Example
sla.conf
extensions.conf
Additional Configuration
Limitations
Conclusion
15. The Automated Attendant
An Auto Attendant Is Not an IVR
Designing Your Auto Attendant
The Greeting
The Main Menu
Selection 1
Selection 2
Selection #
Selection 3
Selection 9
Selection 0
Timeout
Invalid
Dial by Extension
Building Your Auto Attendant
Recording Prompts
Using the dialplan to create recordings
The Dialplan
Delivering Incoming Calls to the Auto Attendant
IVR
Conclusion
16. Relational Database Integration
Installing and Configuring PostgreSQL and MySQL
Installing PostgreSQL for CentOS
Installing PostgreSQL for Ubuntu
Installing MySQL for CentOS
Installing MySQL for Ubuntu
Configuring PostgreSQL
Configuring MySQL
Installing and Configuring ODBC
Configuring ODBC for PostgreSQL
Configuring ODBC for MySQL
Configuring ODBC for Microsoft SQL
Validating the ODBC Connector
Configuring res_odbc to Allow Asterisk to Connect Through ODBC
Managing Databases
Troubleshooting Database Issues
A Gentle Introduction to func_odbc
Getting Funky with func_odbc: Hot-Desking
Using Realtime
Static Realtime
Dynamic Realtime
Storing Call Detail Records (CDRs)
ODBC Voicemail
Creating the Large Object Type for PostgreSQL
ODBC Voicemail Storage Table Layout
Configuring voicemail.conf for ODBC Storage
Testing ODBC Voicemail
Verifying binary data stored in PostgreSQL
Verifying binary data stored in MySQL
Conclusion
17. Interactive Voice Response
What Is IVR?
Components of an IVR
IVR Design Considerations
Do
Don’t
Asterisk Modules for Building IVRs
CURL
func_odbc
AGI
AMI
A Simple IVR Using CURL
Installing the cURL Module
The Dialplan
A Prompt-Recording Application
Speech Recognition and Text-to-Speech
Text-to-Speech
Speech Recognition
Conclusion
18. External Services
Calendar Integration
Compiling Calendaring Support into Asterisk
CentOS dependencies
Ubuntu dependencies
Configuring Calendar Support for Asterisk
Triggering Calendar Reminders to Your Phone
Triggering a wakeup call
Scheduling calls between two participants
Calling meeting participants and placing them into a conference
Controlling Calls Based on Calendar Information
Writing Call Information to a Calendar
Conclusion
VoiceMail IMAP Integration
Compiling IMAP VoiceMail Support into Asterisk
CentOS dependencies
Ubuntu dependencies
Compiling the IMAP library
Compiling Asterisk
Configuring Asterisk
Using XMPP (Jabber) with Asterisk
Compiling Jabber Support into Asterisk
CentOS dependencies
Ubuntu dependencies
Jabber Dialplan Commands
Connecting to an XMPP server
Sending messages with JabberSend()
Receiving messages with JABBER_RECEIVE()
chan_gtalk
Configuring gtalk.conf
Accepting calls from Google Talk
Accepting calls from Google Voice
Outgoing calls via Google Talk
Outgoing calls via Google Voice
Skype Integration
Installation of Skype for Asterisk
Using Skype for Asterisk
Configuring chan_skype.conf
Placing and receiving calls via Skype
Sending and receiving messages via Skype
Calling your Skype buddies without assigning extension numbers
LDAP Integration
Configuring OpenLDAP
Compiling LDAP Support into Asterisk
Ubuntu dependencies
CentOS dependencies
Configuring Asterisk for LDAP Support
Configuring res_ldap.conf
Configuring extconfig.conf
Configuring sip.conf for realtime
Text-to-Speech Utilities
Festival
Installing Festival on CentOS
Installing Festival on Ubuntu
Using Festival with Asterisk
Cepstral
Conclusion
19. Fax
What Is a Fax?
Ways to Handle Faxes in Asterisk
spandsp
Obtaining spandsp
Compiling and Installing spandsp
Adding the spandsp Library to Your libpath
Recompiling Asterisk with spandsp Support
Disabling spandsp (Should You Want to Test Digium Fax)
Digium Fax For Asterisk
Obtaining Digium FFA
Disabling Digium FFA (Should You Want to Test spandsp)
Incoming Fax Handling
Fax to TIFF
Fax to Email
Fax Detection
Outgoing Fax Handling
Transmitting a Fax from Asterisk
File Format for Faxing
An Experiment in Email to Fax
Fax Pass-Through
Using Fax Buffers in chan_dahdi.conf
Conclusion
20. Asterisk Manager Interface (AMI)
Quick Start
AMI over TCP
AMI over HTTP
Configuration
manager.conf
http.conf
Protocol Overview
Message Encoding
Events
Actions
AMI over HTTP
Authentication and session handling
/rawman encoding
/manager encoding
/mxml encoding
Manager events
Development Frameworks
CSTA
Interesting Applications
AsteriskGUI
Flash Operator Panel
Conclusion
21. Asterisk Gateway Interface (AGI)
Quick Start
AGI Variants
Process-Based AGI
EAGI
DeadAGI Is Dead
FastAGI—AGI over TCP
Async AGI—AMI-Controlled AGI
AGI Communication Overview
Setting Up an AGI Session
Process-based AGI/FastAGI
Async AGI
Commands and Responses
Process-based AGI/FastAGI
Async AGI
Ending an AGI Session
Process-based AGI/FastAGI
Async AGI
Development Frameworks
Conclusion
22. Clustering
Traditional Call Centers
Hybrid Systems
Pure Asterisk, Nondistributed
Asterisk and Database Integration
Single Database
Replicated Databases
Asterisk and Distributed Device States
Distributing Device States over a LAN
Distributing Device States over a WAN
Multiple Queues, Multiple Sites
Conclusion
23. Distributed Universal Number Discovery (DUNDi)
How Does DUNDi Work?
The dundi.conf File
Configuring Asterisk for Use with DUNDi
General Configuration
Initial DUNDi Peer Definition
Creating Mapping Contexts
Using Mapping Contexts with Peers
Allowing Remote Connections
Controlling Responses
Manually adding responses
Using pattern matches
Dynamically adding extension numbers
Using dialplan functions in mappings
Performing Lookups from the Dialplan
Conclusion
24. System Monitoring and Logging
logger.conf
Reviewing Asterisk Logs
Logging to the Linux syslog Daemon
Verifying Logging
Call Detail Records
CDR Contents
Dialplan Applications
cdr.conf
Backends
cdr_adaptive_odbc
cdr_csv
cdr_custom
cdr_manager
cdr_mysql
cdr_odbc
cdr_pgsql
cdr_radius
cdr_sqlite
cdr_sqlite3_custom
cdr_syslog
cdr_tds
Example Call Detail Records
Single-party call
Two-party call
Caveats
CEL (Channel Event Logging)
Channel Event Types
Channel Event Contents
Dialplan Applications
cel.conf
Backends
cel_odbc
cel_custom
cel_manager
cel_pgsql
cel_radius
cel_sqlite3_custom
cel_tds
Example Channel Events
Single-party call
Two-party call
Blind transfer
SNMP
Installing the SNMP Module for Asterisk
CentOS dependency
Ubuntu dependency
Recompiling Asterisk with the res_snmp module
Configuring SNMP for Asterisk Using OpenNMS
Installing OpenNMS
Editing /etc/asterisk/res_snmp.conf to work with your OpenNMS server
Editing /etc/snmp/snmpd.conf to work with your OpenNMS server
Enabling SNMPv3
Monitoring Asterisk with OpenNMS
Conclusion
25. Web Interfaces
Flash Operator Panel
Queue Status and Reporting
Queue Status Display
Queue Reporting
Call Detail Records
A2Billing
Conclusion
26. Security
Scanning for Valid Accounts
Authentication Weaknesses
Fail2ban
Installation
iptables
Sending email
Configuration
Encrypted Media
Dialplan Vulnerabilities
Securing Asterisk Network APIs
IAX2 Denial of Service
Other Risk Mitigation
Resources
Conclusion—A Better Idiot
27. Asterisk: A Future for Telephony
The Problems with Traditional Telephony
Closed Thinking
Limited Standards Compliancy
Slow Release Cycles
Refusing to Let Go of the Past and Embrace the Future
Paradigm Shift
The Promise of Open Source Telephony
The Itch That Asterisk Scratches
Open Architecture
Standards Compliance
Lightning-Fast Response to New Technologies
Passionate Community
Some Things That Are Now Possible
Legacy PBX migration gateway
Low-barrier IVR
Conference rooms
Home automation
The Future of Asterisk
Speech Processing
Festival
Speech recognition
High-Fidelity Voice
Video
The challenge of videoconferencing
Why we love videoconferencing
Why videoconferencing may never totally replace voice
Wireless
WiFi
WiMAX
Unified Messaging
Peering
E.164
ENUM
e164.org
Challenges
Too much change, too few standards
Toll fraud
VoIP spam
Fear, uncertainty, and doubt
Bottleneck engineering
Regulatory wars
Quality of service
Complexity
Opportunities
Tailor-made private telecommunications networks
Low barrier to entry
Hosted solutions of similar complexity to corporate websites
Proper integration of communications technologies
A. Understanding Telephony
Analog Telephony
Parts of an Analog Telephone
Ringer
Dialpad
Hybrid (or network)
Tip and Ring
Digital Telephony
Pulse-Code Modulation
Digitally encoding an analog waveform
Increasing the sampling resolution and rate
Nyquist’s Theorem
Logarithmic companding
Aliasing
The Digital Circuit-Switched Telephone Network
Circuit Types
The humble DS-0―The foundation of it all
T-carrier circuits
SONET and OC circuits
Digital Signaling Protocols
Channel Associated Signaling (CAS)
ISDN
Signaling System 7
Packet-Switched Networks
Conclusion
B. Protocols for VoIP
The Need for VoIP Protocols
VoIP Protocols
IAX (The “Inter-Asterisk eXchange” Protocol)
History
Future
Security considerations
IAX and NAT
SIP
History
Future
Security considerations
SIP and NAT
H.323
History
Future
Security considerations
H.323 and NAT
MGCP
Proprietary Protocols
Skinny/SCCP
UNISTIM
Codecs
G.711
G.726
G.729A
GSM
iLBC
Speex
G.722
MP3
Quality of Service
TCP, UDP, and SCTP
Transmission Control Protocol
User Datagram Protocol
Stream Control Transmission Protocol
Differentiated Service
Guaranteed Service
MPLS
RSVP
Best Effort
Echo
Why Echo Occurs
Managing Echo on DAHDI Channels
Hardware Echo Cancellation
Asterisk and VoIP
Users and Peers and Friends—Oh My!
Users
Peers
Friends
register Statements
VoIP Security
Spam over Internet Telephony (SPIT)
Encrypting Audio with Secure RTP
Spoofing
What Can Be Done?
Basic network security
Encryption
Physical security
Conclusion
C. Preparing a System for Asterisk
Server Hardware Selection
Performance Issues
Choosing a Processor
Small systems
Medium systems
Large systems
Choosing a Motherboard
Power Supply Requirements
Computer power supplies
Redundant power supplies
Environment
Power Conditioning and Uninterruptible Power Supplies
Power-conditioned UPSs
Grounding
Electrical Circuits
The Equipment Room
Humidity
Temperature
Dust
Security
Telephony Hardware
Connecting to the PSTN
Analog interface cards
Digital interface cards
Channel banks
Other types of PSTN interfaces
Connecting Exclusively to a Packet-Based Telephone Network
Echo Cancellation
Types of Phones
Physical Telephones
Analog telephones
Proprietary digital telephones
ISDN telephones
IP telephones
Softphones
Telephony Adaptors
Communications Terminals
Linux Considerations
Conclusion
Index

List of Figures

2.1. Asterisk vs. PBX architecture
2.2. The Asterisk 1.6.x release process
3.1. menuselect using the newt interface
3.2. menuselect using the curses interface
5.1. Relationship of sip.conf to extensions.conf
5.2. SIP dialogs
6.1. Relation between channel configuration files and contexts in the dialplan
8.1. Simplified SIP enterprise environment
9.1. The old days: dumb devices connect to a smart network
9.2. The situation today: smart devices connect through a dumb network
9.3. A balun
9.4. The BT plug used for analog PSTN connections in the UK (note only pins 2–5 are present)
9.5. The relationship between Linux, DAHDI, and Asterisk
10.1. Time delayed dialing with local channels
12.1. Request for Assignments form
14.1. Device state mappings
14.2. Extension state mappings
16.1. Relationships between func_odbc.conf, res_odbc.conf, /etc/odbc.ini (unixODBC), and the database connection
18.1. Enabling Gmail IMAP
19.1. Typical fax pass-through
20.1. Manager events
20.2. Manager actions
20.3. Manager actions that return a list of data
20.4. AsteriskGUI
20.5. Flash Operator Panel
22.1. Traditional call center
22.2. Remote hybrid system
22.3. Nondistributed Asterisk
22.4. Asterisk database integration, single server
22.5. Asterisk database integration, distributed database
22.6. Device state distribution with OpenAIS
22.7. Device state distribution with XMPP
22.8. Distributed queue infrastructure
23.1. DUNDi peer-to-peer request system
24.1. Graph of active Asterisk channels
24.2. Graph of active DAHDI channels
24.3. Graph of traffic on a network interface
25.1. FOP2
27.1. Asterisk as a PBX gateway
27.2. Find-me-follow-me
27.3. VoIP-enabling a legacy PBX
A.1. Tip and Ring
A.2. A simple sinusoidal (sine) wave
A.3. Sampling our sine wave using four bits
A.4. PCM encoded waveform
A.5. Plotted PCM signal
A.6. Delineated signal
A.7. The same waveform, on a higher-resolution overlay
A.8. The same waveform at double the resolution
A.9. Five-bit plotted PCM signal
A.10. Waveform delineated from five-bit PCM
A.11. Five-bit companding
A.12. Quantized and companded at 5-bit resolution
B.1. The SIP trapezoid
B.2. Call origination relationships of users, peers, and friends to Asterisk
C.1. Visual identification of PCI slots
C.2. One way you might connect a channel bank

List of Tables

2.1. Dialplan applications
2.2. Bridging modules
2.3. Call detail recording modules
2.4. Channel event logging modules
2.5. Channel drivers
2.6. Codec translators
2.7. Format interpreters
2.8. Dialplan functions
2.9. PBX modules
2.10. Resource modules
2.11. Addon modules
3.1. Software dependencies for Asterisk on Ubuntu Server and CentOS Server
4.1. asterisk.conf [directories] section
4.2. asterisk.conf [options] section
4.3. asterisk.conf [files] section
4.4. asterisk.conf [compat] section
4.5. modules.conf [modules] section
8.1. [general] section options for voicemail.conf
8.2. Advanced options for voicemail.conf
8.3. [zonemessages] section options for voicemail.conf
8.4. VoiceMail() optional arguments
8.5. VoiceMailMain() optional arguments
9.1. Internationalization cheat sheet
10.1. Delayed dialing using Local channels
11.1. features.conf [general] section
11.2. features.conf [featuremap] section
11.3. Page() options
12.1. Components of a SIP SRV record
12.2. NameMapping table
13.1. Available options for [general] section of queues.conf
13.2. Available options for defined queues in queues.conf
13.3. Options available under the [general] header in agents.conf
13.4. Options available under the [agents] header in agents.conf
13.5. Options related to prompt control timing within a queue
13.6. Options for controlling the playback of prompts within a queue
13.7. Options that can be set for joinempty or leavewhenempty
13.8. Mapping between old and new values for controlling when callers join and leave queues
13.9. Events in the Asterisk queue log
14.1. Virtual devices in Asterisk
15.1. A basic automated attendant
16.1. Summary of ast_hotdesk table
16.2. Table layout and description of ast_config
16.3. Minimal sippeers/sipusers realtime table
16.4. Example information used to populate the ast_sipfriends table
16.5. Realtime options in sip.conf
16.6. ODBC voicemail storage table layout
17.1. The Read() application
18.1. IMAP library compile time options
18.2. Additional IMAP voicemail options
18.3. jabber.conf options
19.1. Possible values for the faxdetect option in chan_dahdi.conf
19.2. Possible values for the faxdetect option in sip.conf
20.1. Options in the manager.conf [general] section
20.2. Options for [username] sections
20.3. Available values for AMI user account read/write options
20.4. Options in the http.conf [general] section
20.5. AMI development frameworks
21.1. AGI environment variables
21.2. AGI commands
21.3. AGI development frameworks
23.1. Options available in the [general] section
23.2. Options available in the [mappings] section
23.3. Options available for peer definitions in dundi.conf
24.1. logger.conf types
24.2. Default CDR fields
24.3. cdr.conf [general] section
24.4. cdr_adaptive_odbc.conf table configuration options
24.5. cdr.conf [csv] section options
24.6. cdr.conf [radius] section options
24.7. CEL event types
24.8. Defined but unused CEL event types
24.9. CEL event fields
24.10. cel.conf [general] section options
24.11. Event type to integer value mappings for the eventtype column
24.12. cel_odbc.conf table configuration
24.13. CEL variables available for use in [mappings]
24.14. Available options in the cel.conf [radius] section
A.1. DTMF digits
A.2. T-carrier circuits
A.3. OC circuits
B.1. Codec quick reference
C.1. System requirement guidelines

List of Examples

14.1. Custom “do not disturb” functionality using custom device states
14.2. jabber.conf for server1
14.3. jabber.conf for server2
19.1. Proof of concept email to fax gateway, fax.py
21.1. A sample AGI script, hello-world.sh
26.1. Log excerpts from account scanning