Asterisk - The Open Source VoIP PBX
Asterisk: The Future of Telephony
Table of Contents
Copyright
Foreword
Preface
Audience
Organization
Software
Conventions Used in This Book
Using Code Examples
Safari® Enabled
How to Contact Us
Acknowledgments
Chapter 1. A Telephony Revolution
Section 1.1. VoIP: Bridging the Gap Between Traditional Telephony and Network Telephony
Section 1.2. Massive Change Requires Flexible Technology
Section 1.3. Asterisk: The Hacker's PBX
Section 1.4. Asterisk: The Professional's PBX
Section 1.5. The Asterisk Community
Section 1.6. The Business Case
Section 1.7. This Book
Chapter 2. Preparing a System for Asterisk
Section 2.1. Server Hardware Selection
Section 2.2. Environment
Section 2.3. Telephony Hardware
Section 2.4. Types of Phone
Section 2.5. Linux Considerations
Section 2.6. Conclusion
Chapter 3. Installing Asterisk
Section 3.1. What Packages Do I Need?
Section 3.2. Obtaining the Source Code
Section 3.3. Compiling Zaptel
Section 3.4. Compiling libpri
Section 3.5. Compiling Asterisk
Section 3.6. Installing Additional Prompts
Section 3.7. Updating Your Source Code
Section 3.8. Common Compiling Issues
Section 3.9. Loading Zaptel Modules
Section 3.10. Loading libpri
Section 3.11. Loading Asterisk
Section 3.12. Directories Used by Asterisk
Section 3.13. Conclusion
Chapter 4. Initial Configuration of Asterisk
Section 4.1. What Do I Really Need?
Section 4.2. Working with Interface Configuration Files
Section 4.3. FXO and FXS Channels
Section 4.4. Configuring an FXO Channel
Section 4.5. Configuring an FXS Channel
Section 4.6. Configuring SIP
Section 4.7. Configuring Inbound IAX Connections
Section 4.8. Configuring Outbound IAX Connections
Section 4.9. Debugging
Section 4.10. Conclusion
Chapter 5. Dialplan Basics
Section 5.1. Dialplan Syntax
Section 5.2. A Simple Dialplan
Section 5.3. Adding Logic to the Dialplan
Section 5.4. Conclusion
Chapter 6. More Dialplan Concepts
Section 6.1. Expressions and Variable Manipulation
Section 6.2. Dialplan Functions
Section 6.3. Conditional Branching
Section 6.4. Voicemail
Section 6.5. Macros
Section 6.6. Using the Asterisk Database (AstDB)
Section 6.7. Handy Asterisk Features
Section 6.8. Conclusion
Chapter 7. Understanding Telephony
Section 7.1. Analog Telephony
Section 7.2. Digital Telephony
Section 7.3. The Digital Circuit-Switched Telephone Network
Section 7.4. Packet-Switched Networks
Section 7.5. Conclusion
Chapter 8. Protocols for VoIP
Section 8.1. The Need for VoIP Protocols
Section 8.2. VoIP Protocols
Section 8.3. Codecs
Section 8.4. Quality of Service
Section 8.5. Echo
Section 8.6. Asterisk and VoIP
Section 8.7. Conclusion
Chapter 9. The Asterisk Gateway Interface (AGI)
Section 9.1. Fundamentals of AGI Communication
Section 9.2. Writing AGI Scripts in Perl
Section 9.3. Creating AGI Scripts in PHP
Section 9.4. Writing AGI Scripts in Python
Section 9.5. Debugging in AGI
Section 9.6. Conclusion
Chapter 10. Asterisk for the Über-Geek
Section 10.1. Festival
Section 10.2. Call Detail Recording
Section 10.3. Customizing System Prompts
Section 10.4. Manager
Section 10.5. Call Files
Section 10.6. DUNDi
Section 10.7. Conclusion
Chapter 11. Asterisk: The Future of Telephony
Section 11.1. The Problems with Traditional Telephony
Section 11.2. Paradigm Shift
Section 11.3. The Promise of Open Source Telephony
Section 11.4. The Future of Asterisk
Appendix A. VoIP Channels
Section A.1. IAX
Section A.2. SIP
Appendix B. Application Reference
AbsoluteTimeout( )
AddQueueMember( )
ADSIProg( )
AgentCallbackLogin( )
AgentLogin( )
AgentMonitorOutgoing( )
AGI( )
AlarmReceiver( )
Answer( )
AppendCDRUserField( )
Authenticate( )
Background( )
BackgroundDetect( )
Busy( )
CallingPres( )
ChangeMonitor( )
ChanIsAvail( )
CheckGroup( )
Congestion( )
ControlPlayback( )
Curl( )
Cut( )
DateTime( )
DBdel( )
DBdeltree( )
DBget( )
DBput( )
DeadAGI( )
Dial( )
DigitTimeout( )
Directory( )
DISA( )
DumpChan( )
DUNDiLookup( )
EAGI( )
Echo( )
EndWhile( )
ENUMLookup( )
Eval( )
Exec( )
ExecIf( )
FastAGI( )
Festival( )
Flash( )
ForkCDR( )
GetCPEID( )
GetGroupCount( )
GetGroupMatchCount( )
Goto( )
GotoIf( )
GotoIfTime( )
Hangup( )
HasNewVoicemail( )
HasVoicemail( )
IAX2Provision( )
ImportVar( )
LookupBlacklist( )
LookupCIDName( )
Macro( )
MailboxExists( )
Math( )
MeetMe( )
MeetMeAdmin( )
MeetMeCount( )
Milliwatt( )
Monitor( )
MP3Player( )
MusicOnHold( )
NBScat( )
NoCDR( )
NoOp( )
Park( )
ParkAndAnnounce( )
ParkedCall( )
PauseQueueMember( )
Playback( )
Playtones( )
Prefix( )
PrivacyManager( )
Progress( )
Queue( )
Random( )
Read( )
RealTime
RealTimeUpdate( )
Record( )
RemoveQueueMember( )
ResetCDR( )
ResponseTimeout( )
RetryDial( )
Ringing( )
SayAlpha( )
SayDigits( )
SayNumber( )
SayPhonetic( )
SayUnixTime( )
SendDTMF( )
SendImage( )
SendText( )
SendURL( )
Set( )
SetAccount( )
SetAMAFlags( )
SetCallerID( )
SetCallerPres( )
SetCDRUserField( )
SetCIDName( )
SetCIDNum( )
SetGlobalVar( )
SetGroup( )
SetLanguage( )
SetMusicOnHold( )
SetRDNIS( )
SetVar( )
SIPAddHeader( )
SIPDtmfMode( )
SIPGetHeader( )
SoftHangup( )
StopMonitor( )
StopPlaytones( )
StripLSD( )
StripMSD( )
SubString( )
Suffix( )
System( )
Transfer( )
TrySystem( )
TXTCIDName( )
UnpauseQueueMember( )
UserEvent( )
Verbose( )
VMAuthenticate( )
VoiceMail( )
VoiceMailMain( )
Wait( )
WaitExten( )
WaitForRing( )
WaitForSilence( )
WaitMusicOnHold( )
While( )
Zapateller( )
ZapBarge( )
ZapRAS( )
ZapScan( )
Appendix C. AGI Reference
ANSWER
CHANNEL STATUS
DATABASE DEL
DATABASE DELTREE
DATABASE GET
DATABASE PUT
EXEC
GET DATA
GET FULL VARIABLE
GET OPTION
GET VARIABLE
HANGUP
NOOP
RECEIVE CHAR
RECORD FILE
SAY ALPHA
SAY DATE
SAY DATETIME
SAY DIGITS
SAY NUMBER
SAY PHONETIC
SAY TIME
SEND IMAGE
SEND TEXT
SET AUTOHANGUP
SET CALLERID
SET CONTEXT
SET EXTENSION
SET MUSIC ON
SET PRIORITY
SET VARIABLE
STREAM FILE
TDD MODE
VERBOSE
WAIT FOR DIGIT
Appendix D. Configuration Files
Section D.1. modules.conf
Section D.2. adsi.conf
Section D.3. adtranvofr.conf
Section D.4. agents.conf
Section D.5. alarmreceiver.conf
Section D.6. alsa.conf
Section D.7. asterisk.conf
Section D.8. cdr.conf
Section D.9. cdr_manager.conf
Section D.10. cdr_odbc.conf
Section D.11. cdr_pgsql.conf
Section D.12. cdr_tds.conf
Section D.13. codecs.conf
Section D.14. dnsmgr.conf
Section D.15. dundi.conf
Section D.16. enum.conf
Section D.17. extconfig.conf
Section D.18. extensions.conf
Section D.19. features.conf
Section D.20. festival.conf
Section D.21. iax.conf
Section D.22. iaxprov.conf
Section D.23. indications.conf
Section D.24. logger.conf
Section D.25. manager.conf
Section D.26. meetme.conf
Section D.27. mgcp.conf
Section D.28. modem.conf
Section D.29. musiconhold.conf
Section D.30. osp.conf
Section D.31. oss.conf
Section D.32. phone.conf
Section D.33. privacy.conf
Section D.34. queues.conf
Section D.35. res_odbc.conf
Section D.36. rpt.conf
Section D.37. rtp.conf
Section D.38. sip.conf
Section D.39. sip_notify.conf
Section D.40. skinny.conf
Section D.41. voicemail.conf
Section D.42. vpb.conf
Section D.43. zapata.conf
Section D.44. zaptel.conf
Appendix E. Asterisk Command-Line Interface Reference
!
abort halt
Section E.1. add
Section E.2. agi
Section E.3. database
Section E.4. iax2
Section E.5. indication
Section E.6. logger
Section E.7. meetme
Section E.8. pri
Section E.9. remove
Section E.10. restart
Section E.11. set
Section E.12. show
Section E.13. sip
Section E.14. stop
Section E.15. zap
Colophon
About the Authors
Colophon
Index
SYMBOL
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
Index
[
SYMBOL
] [
A
] [
B
] [
C
] [
D
] [
E
] [
F
] [
G
] [
H
] [
I
] [
J
] [
K
] [
L
] [
M
] [
N
] [
O
] [
P
] [
Q
] [
R
] [
S
] [
T
] [
U
] [
V
] [
W
] [
X
] [
Y
] [
Z
]
CAC (Carrier Access Corporation) ground start signaling
call files
call parking
call transfer, configuring on FXO channel
call waiting
configuring for FXO channel
on analog line
Caller ID
configuring for FXO channel
LookupCIDName( )
SetCallerID( ) application
CALLERIDNUM channel variable
CallingPres( ) application
Carrier Access Corporation (CAC) ground start signaling
CAS (Channel Associated Signaling)
CBR (constant bitrate) encoding (MP3 files)
cdr.conf file
cdr_manager.conf file
cdr_odbc.conf file
cdr_pgsql.conf file
cdr_tds.conf file
CDRs (Call Detail Records)
challenges to obtaining
recording
storage directory
storing in a database
Celeron processors, Asterisk lab systems on
cellular telephone networks, end of
central office (CO), signaling incoming call on analog phone
Cepstral text-to-speech engine
chan_h323.so module
chan_iax2.so module
chan_mgcp.so module
chan_oh323.so module
chan_sip.so module
chan_zap (channel module)
ChangeMonitor( ) application
ChanIsAvail( ) application
Channel Associated Signaling (CAS)
channel banks
CAC, FXS ground start signaling
CHANNEL STATUS command
channel variables
${EXTEN}
CALLERIDNUM
channels
configuration
FXO and FXS
configuring FXS
FXO configuration
hardware, signaling methods and options
separation of B- and D- channels in ISDN
SIP, configuring
STDIN, STDOUT, and STDERR
timeouts, setting
VoIP (Voice over IP) channels
CheckGroup( ) application
checkresult function
2nd
checkresult subroutine
chkconfig --add asterisk command
chkconfig command
circuit-switched telephone networks
2nd
BRI ISDN
circuits
OC (optical carrier)
types in PSTN
DS-0
T-carrier
Cisco VoIP proprietary protocol (SCCP)
CLI (command-line interface)
reference
client, configuration in SIP
clocking mechanism (ztdummy)
closed thinking in telecommunications industry
codecs
2nd
compressed, DSP load on system
configuring for IAX
G.711
G.723.1
G.726
G.729 codec
G.729A
GSM
IAX outbound connections
iLBC (Internet Low Bitrate Codec)
MP3
quick reference
Speex
VoIP
codecs.conf file
command line, storing values from in AstDB
comment tags (/* */) in zconfig.h file
commoditization of telephony hardware and software
communications terminals
companding
A-law, in E-1 circuits
G.711 codec
m-law algorithm, on T-1 circuits
compiler, GCC
compiling
Asterisk
alternative make arguments
common issues
Makefile options
precompiled binaries, using
libpri
Zapata drivers, telephony
Zaptel drivers
zconfig.h file
ztdummy
Zaptel, common problems
complexity of open systems
computer power supplies
concatenating destinations for Dial( )
conditional branching
GotoIf( ) application
time-based, with GotoIfTime( )
conference rooms
conferencing
MeetMe( ) application
MeetMeCount( ) application
system requirements and
timing source
video-conferencing
CONFIG_CALC_XLAW
configuration
initial, of Asterisk
debugging
FXO and FXS channels
IAX connections, inbound
IAX connections, outbound
interface configuration files
SIP channel
configuration files
/etc/asterisk/ directory
Asterisk, disabling overwrites
default, installing for Asterisk
voicemail.conf
Congestion( ) application
2nd
Conjugate-Structure Algebraic-Code-Excited Linear Prediction (CS-ACELP)
connections, maximum number to be supported by the system
console
connecting to Asterisk console
Linux, specifying for Asterisk CLI output
remote console on TTY9
constant bitrate (CBR) encoding (MP3 files)
contexts
[globals]
adding to dialplan for internal calls
adding to dialplan for long-distance calls
calls entering without specific destination extension
dialplan
[general]
defining extensions
DUNDi, creating and mapping to dialplan contexts
FXS channel
IAX FWD incoming calls
incoming calls on FXO interface
internal, FXS channel
outbound dialing, adding to dialplan
peer connections and
SIP channel
using within another context, via includes
voicemail
2nd
ControlPlayback( ) application
cords
core file, dumping after Asterisk crash
safe_asterisk script
countries, phone system sounds for
CPUs
choosing for Asterisk system
performance effects on Asterisk system
performance information, web sites
crash notifications
CRLF, terminating lines in commands to Manager
cryptographic library, Asterisk, requirement of OpenSSL
CSV (Comma Separated Values) file, CDR details
CSV format (CDRs)
Curl( ) application
Cut( ) application
CVS
obtaining Asterisk source code from
stable CVS branch vs. releases
Asterisk