FOURTH EDITION
Asterisk:
The
Definitive
Guide
Russell
Bryant,
LeifMadsen,
and
Jim
Van
Meggelen
O'REILLY8
Beijing
•Table of Contents
Foreword
xixPreface
xxv1. A
Telephony
Revolution 1Asterisk and VoIP:
Bridging
theGap
Between Traditional and NetworkTelephony
2The
Zapata Telephony Project
2Massive
Change Requires
FlexibleTechnology
3Asterisk: The Hackers PBX 4
Asterisk: TheProfessional's PBX 5
The
Asterisk
Community
5The Asterisk
Mailing
Lists 6AsteriskWikiSites 7
The IRC Channels 7
AsteriskUser
Groups
7 The Asterisk DocumentationProject
8TheBusiness Case 8
Conclusion 8
2. Asterisk Architecture
9
Modules 10
Applications
12Bridging
Modules 15Call Detail
Recording
Modules 16Channel Event
Logging
Modules 17Channel Drivers 17
Codec Translators 18
Format
Interpreters
19Dialplan
Functions 20PBX Modules 22 Resource
Modules
22 Add-on Modules 26 Test Modules 27 FileStructure 27Configuration
Files 27 Modules 27TheResource
Library
28The
Spool
28Logging
28The
Dialplan
28Hardware 29
Asterisk
Versioning
29 Previous ReleaseMethodologies
30 The Current ReleaseMethodology
31Simplifying
the VersionNumbers 32Conclusion 33
3.
Installing
Asterisk
35Installation Cheat Sheet 37 Distribution Installation 41
RHEL Server 41
UbuntuServer 45
Software
Dependencies
49Downloading
WhatYouNeed 50Getting
theSource viaSubversion 51Getting
theSource viawget
51Howto InstallIt 52
DAHDI 52
LibPRI 54
Asterisk 55
Setting
File Permissions 56Base
Configuration
56Initial
Configuration
56make menuselect 64
Updating
Asterisk 70Common Issues 72
-bash:
wget:
commandnotfound 73configure:
error: noacceptable
Ccompiler
foundin $PATH 73 make: gcc: commandnot found 73configure:
error: C++preprocessor"/lib/cpp"
failssanity
check 73configure:
error: *** Pleaseinstall GNUmake. It isrequired
tobuildAsterisk! 73
configure:
***XML documentation willnot beavailable becausethe
'libxml2'
development package
ismissing.
74configure:
error: ***termcap support
notfound 74 Youdo notappearto have thesourcesfor the 2.6.18-164.6.1.el5 kernelinstalled. 74
E: Unabletolock the administration
directory (/var/lib/dpkg/),
areyouroot? 74
Upgrading
Asterisk 74Conclusion 76
4.
InitialConfiguration
Tasks
77asterisk.conf 77
The
[directories]
Section 77The
[options]
Section 78The
[files]
Section 82The
[compat]
Section 82modules.conf 83
The
[modules]
Section 84indications.conf 84 musiconhold.conf 86
Converting
Musictoa Format ThatWorks BestwithAsterisk 87Default musiconhold.conf file 89
Additional
Configuration
Files 91Conclusion 91
5.
User
DeviceConfiguration
93Telephone Naming Concepts
94Hardphones, Softphones,
and ATAs 96Configuring
Asterisk 98HowChannel
Configuration
Files Work with theDialplan
99sip.conf
101iax.conf
107Modifying
YourChannelConfiguration
Files for Your Environment 112Digium
Phones withAsterisk 113Loading
YourNewChannel
Configurations
113The Asterisk CLI 113
Testing
toEnsure Your Devices HaveRegistered
114Analog
Phones 115A Basic
Dialplan
toTest YourDevices 118 Under the Hood: Your First Call 119Conclusion 120 6.
Dialplan
Basics
121Dialplan Syntax
121 Contexts 122 Extensions 124 Priorities 125Applications
127The
Answer(),
Playback^),
andHangupQ Applications
128A
Simple Dialplan
129Hello World 129
Building
anInteractiveDialplan
131The
Goto(),
Background(),
andWaitExten() Applications
131Handling
Invalid Entries and Timeouts 133Using
theDial()
Application
134Using
Variables 137Pattern
Matching
140Includes 145
Conclusion 145
7.
Outside
Connectivity
147
The Basics of
Trunking
147Fundamental
Dialplan
for OutsideConnectivity
148PSTNCircuits 150
TraditionalPSTNTrunks 150
Installing
PSTN Trunks 152VoIP 161
Coping
with
Network Address Translation 161PSTN Termination 170
PSTN
Origination
171VoIPtoVoIP 173
Configuring
VoIPTrunks 173Emergency Dialing
181Conclusion 183
8.
Voicemail
185Comedian Mail 185
The
[general]
Section 186The
[zonemessages]
Section 195The ContextsSection 196
An Initial
voicemail.conf
File 200Standard Voicemail
KeyMap
201Dialplan Integration
201 TheVoiceMail()
Dialplan Application
201 TheVoiceMailMain()
Dialplan
Application
204Creating
aDial-by-Name Directory
205Using
aJitterbuffer
205Storage
Backends
206Linux
Filesystem
206ODBC 207
IMAP 207
Using
Asteriskas aStandalone Voicemail Server 208Integrating
Asterisk intoaSIPEnvironmentas aStandaloneVoicemailServer 208
SMDI
(Simplified Message
DeskInterface)
212Database
Integration
213Conclusion 213
9. Internationalization
215
DevicesExternaltothe AsteriskServer 217
PSTN
Connectivity,
DAHDI,Digium
Cards,andAnalog
Phones 219DAHDIDrivers 221
Asterisk 224
Caller ID 224
Language
and/or
AccentofPrompts
225Time/Date
Stamps
andPronunciation 226Conclusion—Easy
Reference CheatSheet 22810.
Deeper
intothe
Dialplan
231
Expressions
and VariableManipulation
231Basic
Expressions
231Operators
232Dialplan
Functions 234Syntax
235Examples
ofDialplan
Functions 235Conditional
Branching
236The
GotoIf() Application
236Time-Based Conditional
Branching
withGotoIfTime()
240Macros 242
Defining
Macros 243Calling
Macros from theDialplan
244Using Arguments
in Macros 245GoSub 246
Defining
Subroutines 246Calling
Subroutines fromtheDialplan
247Using Arguments
in Subroutines 248Returning
from aSubroutine 249Local Channels 250
Using
the Asterisk Database(AstDB)
253Storing
Data in the AstDB 254Retrieving
Data fromthe AstDB 254Deleting
Data from the AstDB 254Using
the AstDB in theDialplan
255Creating
aHot-Desking Application
with AstDB 256Handy
AsteriskFeatures 261Zapateller()
261Call
Parking
261Conferencing
withMeetMe()
263Conferencing
withConfBridge()
264Conclusion 266
11.
Parking, Paging,
and
Conferencing
267features.conf 267
The
[general]
section 268The
[featuremap]
Section 271The
[applicationmap]
Section 272Application Map Grouping
275Parking
Lots 276Overheadand"Underchin"
Paging (a.k.a.
PublicAddress)
277PlacestoSendYour
Pages
278Zone
Paging
284Advanced
Conferencing
284The
[general]
Section 285Options
forUserProfiles 285Options
forBridge
Profiles 287ConfBridge
MenuOptions
289Enabling
aPIN 290Waiting
for the Marked UsertoJoin
292Using ConfBridge()
Menus 293Enabling
Videoconferencing
296Conclusion 298
12. Internet
Call
Routing
299
DNS and SIP URIs 300
The SIP URI 300
SRV Records 301
Accepting
CallstoYourSystem
302Dialing
SIP URIsfromAsterisk 309ENUMandE.164 310
E. 164and theITU 310
ENUM 311
Asterisk and ENUM 312
ISN, ITAD,
andfreenum.org
313GotlSN? 314
ITAD Subscriber Numbers
(ISNs)
315Management
of InternetNumbering
315IP
Telephony
Administrative Domains(ITADs)
316CreateaDNS
Entry
for Your ITAD 317Testing
Your ITAD 318Using
ISNsinYour AsteriskSystem
318Security
andIdentity
320Toll Fraud 321
Spam
overInternetTelephony
(SPIT)
322Distributed Denial
of
Service Attacks 323Phishing
323Security
IsanOngoing
Process 323Conclusion 323
13. Automatic
Call Distribution
(ACD)
Queues
325Creating
aSimple
ACDQueue
326Queue
Members 331Controlling
Queue
Membersviathe CLI 331Defining
Queue
Members in thequeues.conf
File 333Controlling
Queue
Members withDialplan Logic
333Automatically Logging
Into and Out ofMultiple
Queues
335 AnIntroduction
toDevice State 339The
queues.conf
File 341The
agents.conf
File 349Advanced
Queues
3 51Priority
Queue (Queue
Weighting)
351Queue
MemberPriority
353Changing
PenaltiesDynamically (queuerules.conf)
354Announcement Control 356
Overflow 361
Using
LocalChannels
363Queue
Statistics:Thequeue_log
File 367Conclusion 370
14. Device States 371
Device States 371
Checking
Device States 372Extension States 373
Hints 374
Checking
Extension States 375SIP Presence .
376
Asterisk
Configuration
376Using
Custom Device States 378An
Example
378Distributed DeviceStates 380
Using Corosync
380Using
XMPP 385Shared Line
Appearances
389Installing
theSLAApplications
389Configuration
Overview 390Key System Example
withAnalog
Trunks 390Key System Example
with SIPTrunks 394Alternate
Key System
Example
with SIP Trunks 396SharedExtension
Example
399Additional
Configuration
401Limitations 402
Creating
aCallbackService 403Conclusion 405
15.
The Automated Attendant
407An Auto AttendantIs NotanIVR 407
Designing
Your AutoAttendant 408The
Greeting
409TheMain Menu 410
Timeout 411
Invalid 411
Dial
by
Extension 412Building
YourAutoAttendant 412Recording
Prompts
412The
Dialplan
414Delivering
Incoming
Callsto theAuto Attendant 416IVR 416
Conclusion 416
16.
Relational Database
Integration
417Installing
andConfiguring
PostgreSQL
andMySQL
418Installing
PostgreSQL
forRHEL 418Installing
PostgreSQL
for Ubuntu 418Installing MySQL
forRHEL 419Installing MySQL
for Ubuntu 419Configuring PostgreSQL
419Configuring MySQL
421Installing
andConfiguring
ODBC 422Configuring
ODBC forPostgreSQL
424Configuring
ODBC forMySQL
425Configuring
ODBC for MicrosoftSQL
426Validating
theODBC Connector 427Compiling
theODBC Modules for Asterisk 428Configuring
res_odbc
toAllow AsterisktoConnectThrough
ODBC 428Managing
Databases 429Troubleshooting
Database Issues 430SQL
Injection
430Powering
YourDialplan
withfunc_odbc
431A Gentle Introductionto
func_odbc
432Getting
Funky
withfunc_odbc: Hot-Desking
433Using
Realtime 449Static Realtime 450
Dynamic
Realtime 453Storing
Call DetailRecords(CDR)
458ODBC Voicemail
Message Storage
463Compiling
theapp_voicemail
ModuletoSupport
ODBCStorage
464Creating
theLarge Object Type
forPostgreSQL
465ODBC Voicemail
Storage
TableLayout
467Configuring
voicemail.conf for ODBCStorage
468Testing
ODBC VoiceMessage
Storage
469Database
Integration
of ACDQueues
473Storing queues.conf
ina Database 473Storing Dialplan
Parameters foraQueue
in aDatabase 476Writing queue_log
toDatabase 477Conclusion 478
17.
Interactive
VoiceResponse
479WhatIs IVR? 479
Components
ofanIVR 480IVR
Design
Considerations 482 AsteriskModulesforBuilding
IVRs 483CURL 483
func_odbc
483AGI 483
AMI 483
A
Simple
IVRUsing
CURL 483Installing
thecURLModule 484The
Dialplan
484A
Prompt-Recording Application
484Speech Recognition
andText-to-Speech
486Text-to-Speech
486Speech Recognition
486Conclusion 487
18.
External
Services 489Calendar
Integration
490Compiling
Calendaring Support
intoAsterisk 490Configuring
CalendarSupport
for Asterisk 492Triggering
Calendar ReminderstoYourPhone 494Controlling
Calls BasedonCalendar Information 499Writing
Call Information to aCalendar 501Additional Features 503
Voicemail IMAP
Integration
503Compiling
IMAP VoicemailSupport
intoAsterisk 504Using
XMPP(Jabber)
with Asterisk 511Compiling
XMPPSupport
into Asterisk 512Jabber
Dialplan
Commands 512chan_motif
518Out-of-Band
Messaging (Messaging Infrastructure)
522xmpp.conf Configuration
522sip.conf
Configuration
523Dialplan Configuration
524LDAP
Integration
525Configuring
OpenLDAP
526Compiling
LDAPSupport
into Asterisk 528Configuring
AsteriskforLDAPSupport
529Text-to-Speech
Utilities 531Festival 531
Cepstral
534Conclusion 534
19.
Fax
535WhatIsaFax? 535
Ways
toHandleFaxes in Asterisk 535spandsp
536Obtaining spandsp
536Compiling
andInstalling
spandsp
537Adding
thespandsp Library
toYourlibpath
537Recompiling
Asterisk withspandsp Support
537Disabling spandsp
(Should
You WanttoTestDigium
Fax)
538Digium
Fax ForAsterisk 538Obtaining Digium
FFA 538Disabling
Digium
FFA(Should
You WanttoTestspandsp)
539Incoming
FaxHandling
539FaxtoTIFF 540
FaxtoEmail 541
FaxDetection 542
Using
T.38 543Outgoing
FaxHandling
544Transmitting
aFax from Asterisk 544File Format for
Faxing
545An
Experiment
in Emailto Fax 546Fax
Pass-Through
549Using
Fax Buffers inchan_dahdi.conf
549T.38
Gateway
550Conclusion
55120. Asterisk
Manager
Interface (AMI)
553
Quick
Start 553 AMI overTCP 554 AMI overHTTP 555Configuration
556manager.conf
556http.conf
561 ProtocolOverview 562Message Encoding
563 AMIoverHTTP 564 CallFiles 569Example Usage
571Originating
aCall 571Redirecting
aCall 573Originating
aCallUsing
Python
andStarPy
574Development
Frameworks 579CSTA 580
Interesting
Applications
580Flash
Operator
Panel 580Conclusion 581
21.
Asterisk
Gateway
Interface(AGI)
583
Quick
Start 583AGI Variants 585
Process-Based AGI 585
DeadAGI Is Dead 586
FastAGI—AGIoverTCP 586
Async
AGI—AMI-Controlled AGI 587AGI CommunicationOverview 588
Setting Up
anAGI Session 588Commands
andResponses
590Ending
anAGI Session 594Example:
AccountDatabaseAccess 596Development
Frameworks 599Conclusion 599
22.
Clustering
601
TraditionalPBXs 602
Hybrid
Systems
603Pure
Asterisk,
Nondistributed 605Asterisk and Database
Integration
606Single
Database 606Replicated
Databases 608Asterisk
and Distributed Device States 609Distributing
Device Statesover aLAN 610Distributing
Device Statesover aWAN 611Multiple
Queues,
Multiple
Sites 613Conclusion 614
23.
Distributed Universal Number
Discovery
(DUNDi)
617
How Does DUNDiWork? 617
Thedundi.conf File 619
Configuring
Asterisk forUsewith DUNDi 621General
Configuration
622InitialDUNDi PeerDefinition 623
Creating Mapping
Contexts 625Using
Mapping
Contexts withPeers 627Allowing
Remote Connections 629Controlling
Responses
630Performing
Lookups
from theDialplan
634Conclusion
637
24.
System
Monitoring
andLogging.
639
logger.conf
639Reviewing
AsteriskLogs
641
Logging
to the Linuxsyslog
Daemon642
Verifying Logging
643Log
Rotation643
Call Detail Records
643 CDRContents 644
Dialplan Applications
645cdr.conf
645Backends
646Example
CallDetail Records 653Caveats
653
CEL
(Channel
EventLogging)
654
Channel
EventTypes
654
Channel
Event Contents 655Dialplan
Applications
656cel.conf
657
Backends
657
Example
Channel Events 663SNMP
668
Installing
theSNMP Module for Asterisk668
Configuring
SNMP for AsteriskUsing
OpenNMS
669
Monitoring
AsteriskwithOpenNMS
672Conclusion
673
25.
Web
Interfaces
675
Flash
Operator
Panel676
Queue
Status andReporting
676
Queue
StatusDisplay
677
Queue
Reporting
677Call Detail
Records
677A2Billing
678Conclusion
67826.
Security
679 Table of Contents|
xvScanning
for Valid Accounts 679 Authentication Weaknesses 681 Fail2ban 681 Installation 682Configuration
683Encrypted
Media 687Dialplan
Vulnerabilities 687Securing
Asterisk Network APIs 689IAX2 Denial of Service 689
Other Risk
Mitigation
691CLI Permissions 693
Resources 694
Conclusion—A BetterIdiot 694
27. Asterisk: A Future
for
Telephony
695TheProblemswith Traditional
Telephony
695Closed
Thinking
696Limited Standards
Compliance
697SlowRelease
Cycles
697Refusing
to Let Goof thePastand Embrace theFuture 698Paradigm
Shift 698The Promise of
Open
SourceTelephony
698The Itch that Asterisk Scratches 698
Open
Architecture 699Standards
Compliance
700Lightning-Fast
Response
to NewTechnologies
700Passionate
Community
700Some
Things
that Are Now Possible 701TheFutureofAsterisk 705
Speech Processing
705High-Fidelity
Voice 706 Video 707 WebRTC 709 Wireless 709 UnifiedMessaging
710Peering
710Challenges
712Opportunities
714 A.Understanding Telephony
717
B.
Protocols for VoIP
737
C.
Preparing
aSystem
for Asterisk
761