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
]
s (start) extension
safe_asterisk script
2nd
remote console on TTY9
sampling analog waveform for digital encoding
increasing resolution and rate
quality effects of sampling rate
sampling frequency for digitally encoding analog signal
Sangoma cards
Sangoma Technologies, SS7 support
save dialplan command
SAY ALPHA command
SAY DATE command
SAY DATETIME command
SAY DIGITS command
SAY NUMBER command
2nd
3rd
SAY PHONETIC command
SAY TIME command
SayAlpha( ) application
SayDigits( ) application
2nd
sayit function
saynumber function
SayNumber( ) application
SayPhonetic( ) application
SayUnixTime( ) application
scalability of Asterisk
SCCP (Skinny Client Control Protocol)
scripts, AGI
writing in Perl
writing in PHP
writing in Python
SCTP (Stream Control Transmission Protocol)
secret (SIP authentication password)
security
enforcement with dialplan contexts
H.323 protocol
IAX protocol
remote console on TTY9, disabling
SIP
system environment
SECURITY file
SEND IMAGE command
2nd
SEND TEXT command
2nd
SendDTMF( ) application
SendImage( ) application
SendText( ) application
SendURL( ) application
server-class motherboards, PCI slots
servers
electrical circuits
hardware selection
choosing a motherboard
choosing a processor
performance issues
power supply requirements
large Asterisk systems
SET AUTOHANGUP command
SET CALLERID command
set command
SET CONTEXT command
SET EXTENSION command
SET MUSIC ON command
SET PRIORITY command
SET VARIABLE command
Set( ) application
2nd
retrieving data from AstDB
storing data in AstDB
SetAccount( ) application
SetAMAFlags( ) application
SetCallerID( ) application
SetCallerPres( ) application
SetCDRUserField( ) application
SetCIDName( ) application
SetCIDNum( ) application
SetGlobalVar( ) application
2nd
SetGroup( ) application
sethdlc utility
SetLanguage( ) application
SetMusicOnHold( ) application
SetRDNIS( ) application
SetVar( ) application
shortcomings of traditional telephone systems
show functions command
show subcommands
sidetone
2nd
signaling information (D-channels)
signaling methods
for analog circuits
hardware channels
kewlstart, on FXS channel
signaling protocols
digital
Channel Associated Signaling (CAS)
ISDN
SS7
Signaling System 7 (SS7)
sinusoidal (sine) wave
SIP (Session Initiation Protocol)
2nd
channel configuration
channel definitions
configuring
client
dialplan
sip.conf file (example)
conversion of proprietary digital signals to
future of
general parameters
NAT and
security
sip commands
SIP Interoperability Test (SIPIT)
sip show registry command
sip.conf file
2nd
context name
enabling DNS SRV record lookups
example
sip_notify.conf file
SIPAddHeader( ) application
SIPDtmfMode( ) application
SIPGetHeader( ) application
Skinny Client Control Protocol (SCCP)
skinny.conf file
small systems
choosing CPU
system requirement guidelines
Smith, Allison
soft hangup command
soft phones
connecting to Asterisk
X-Lite SIP client
SoftHangup( ) application
SOHO systems, system requirement guidelines
SONET (Synchronous Optical Network)
sound files (pre-recorded)
playing for unanswered or busy destinations
playing over a channel
playing with Background( )
sound prompts (asterisk-sounds package)
sound recordings, creating from the dialplan
sound waves, translation to electrical signals
sounds (phone system), for particular countries
sounds directory
sounds-extra.txt file
sounds.txt file
sounds/ directory
source code (Asterisk)
obtaining
extracting source code
from CVS
updating
sox application
spam
speech processing
speech recognition
Speex codec
Spencer, Mark, ix
spool directory
SRV records, DNS
SS7 (Signaling System 7)
stable Asterisk releases
staging directory
start (s) extension
stations
STDERR
ensuring open file handles in AGI PHP script
summary of AGI script tests
using fflush function after writing to
writing to with fwrite function
STDIN
ensuring open file handles in AGI PHP script
reading variables from using the fgets function
STDOUT
AGI script sending commands to Asterisk
ensuring open file handles in AGI PHP script
using fflush command after writing to
using fflush function after writing to
writing to with fwrite function
steps
stop commands
StopMonitor( ) application
StopPlaytones( ) application
STREAM FILE command
2nd
3rd
4th
strict language checking, AGI scripts in Perl
2nd
string length of a variable, calculating
StripLSD( ) application
StripMSD( ) application
STS-1 circuit
SubString( ) application
Suffix( ) application
switch hook
symbolic link to Linux kernel sources
depmod errors during compilation
Linux 2.4 kernel
sys.stdin.readline command
sys.stdout.flush command
sys.stdout.write command
system prompts, customizing
system requirement guidelines
System( ) application
Asterisk