Asterisk
Asterisk Asterisk
Contents

Asterisk - The Open Source VoIP PBX

Previous Page Next Page
 
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
Previous Page
Next Page

D.1. modules.conf

The modules.conf file controls which modules are loaded or not loaded at Asterisk startup. This is done through the use of the load => or noload => constructs.

This file is a key component to building a secure Asterisk installation: best practice suggests that only required modules be loaded.


The modules.conf file always starts with the [modules] header. The autoload statement tells Asterisk whether to automatically load all modules contained within the modules directory or to load only those modules specifically defined by load => statements. We recommend you manually load only those modules you need, but many people find it easier to let Asterisk attempt to autoload whatever it finds in /usr/lib/asterisk/modules. You can then exclude certain modules with noload => statements.

Here's a sample modules.conf file:

    [modules]
    autoload=no                ; set this to yes and Asterisk will load any
                               ; modules it finds in /usr/lib/asterisk/modules

    load => res_adsi.so
    load => pbx_config.so      ; Requires: N/A
    load => chan_iax2.so       ; Requires: res_crypto.so, res_features.so
    load => chan_sip.so        ; Requires: res_features.so
    load => codec_alaw.so      ; Requires: N/A
    load => codec_gsm.so       ; Requires: N/A
    load => codec_ulaw.so      ; Requires: N/A
    load => format_gsm.so      ; Requires: N/A
    load => app_dial.so        ; Requires: res_features.so, res_musiconhold.so

Since we assume Asterisk is built on Linux, all the module names we use end in a .so extension. However, this may not be the case if you have built Asterisk on a different operating system.

As of this writing, there are eight module types: resources , applications, Call Detail Record database connectors, channels, codecs, formats, pbx modules, and standalone functions. Let's take a look at each of them.

D.1.1. Resources

A resource provides a connection to a static repository of a particular type of information, such as a unique regional requirement or a library of constant elements. This information must be configurable for each system, but once loaded it doesn't need to change in the course of normal operations.

For each resource below, we have outlined the applications and features it provides to other Asterisk modules We've indicated the .conf file used to define the resource, where needed; if no file is listed, then a configuration file isn't required. The resource modules are:



res_adsi.so

Configuration file: adsi.conf

Provides: ADSI functions to ADSIProg( ) and Voicemail( )



res_agi.so

Provides: DeadAGI( ), EAGI( ), AGI( )



res_crypto.so

Provides: Loads public and private keys located in /var/lib/asterisk/keys/



res_features.so

Configuration file: features.conf

Provides: ParkedCall( ), Park( )



res_indications.so

Configuration file: indications.conf

Provides: Playtones( ), StopPlaytones( )



res_monitor.so

Provides: Monitor( ), StopMonitor( ), ChangeMonitor( ), action Monitor, action StopMonitor, action ChangeMonitor



res_musiconhold.so

Configuration file: musiconhold.conf

Provides: MusicOnHold( ), WaitMusicOnHold( ), SetMusicOnHold( ), StartMusicOnHold( ), StopMusicOnHold( )



res_odbc.so

Configuration file: res_odbc.conf

Provides: Connectivity information to the ODBC[*] driverthe purpose is to store configuration file information in a database and retrieve that information from the database; however, a reload is required to make changes take effect

[*] Open DataBase Connectivity (ODBC) is a standard by which access to a database can be provided.

D.1.2. Applications

If you build an Asterisk dialplan of any size, you are going to use at least oneand more likely dozensof applications.[] If an application is never going to be used, it is not strictly required that it be loaded. For performance-challenged systems (or if you just like to keep it lean), you may elect to load only those applications that are referenced in your dialplan.

[] To be of any use, a self-contained dialplan will always require several applications. Some folks, however, use the dialplan for no other purpose than to pass control to an external application. In this case, it would be possible to have the dialplan use no application other than AGI( ). We're not recommending that you do this, but again, it demonstrates Asterisk's enormous flexibility.

For each application module, we will define any resource requirements and name the applications that the module provides. Unless we have stated otherwise, the application does not require a configuration file or any other modules. The available application modules are:



app_adsiprog.so

Requires: res_adsi.so

Provides: ADSIProg( )



app_alarmreceiver.so

Provides: AlarmReceiver( )



app_authenticate.so

Provides: Authenticate( )



app_cdr.so

Provides: NoCDR( )



app_chanisavail.so

Provides: ChanIsAvail( )



app_chanspy.so

Provides: ChanSpy( )



app_controlplayback.so

Provides: ControlPlayback( )



app_curl.so

Provides: Curl( )



app_cut.so

Provides: Cut( )



app_db.so

Provides: DBget( ), DBput( ), DBdel( ), DBdeltree( )



app_dial.so

Requires: res_features.so, res_musiconhold.so

Provides: Dial( ), RetryDial( )



app_dictate.so

Provides: Dictate( )



app_directory.so

Provides: Directory( )



app_disa.so

Provides: DISA( )



app_dumpchan.so

Provides: DumpChan( )



app_echo.so

Provides: Echo( )



app_enumlookup.so

Configuration file: enum.conf

Provides: EnumLookup( )



app_eval.so

Provides: Eval( )



app_exec.so

Provides: Exec( )



app_festival.so

Provides: Festival( )



app_forkcdr.so

Provides: ForkCDR( )



app_getcpeid.so

Requires: res_adsi.so

Provides: GetCPEID( )



app_groupcount.so

Provides: GetGroupCount( ), SetGroup( ), CheckGroup( ), GetGroupMatchCount( )



app_hasnewvoicemail.so

Provides: HasVoicemail( ), HasNewVoicemail( )



app_ices.so

Provides: ICES( )



app_image.so

Provides: SendImage( )



app_lookupblacklist.so

Provides: LookupBlacklist( )



app_lookupcidname.so

Provides: LookupCIDName( )



app_macro.so

Provides: Macro( ), MacroExit( ), MacroIf( )



app_math.so

Provides: Math( )



app_md5.so

Provides: MD5( ), MD5Check( )



app_milliwatt.so

Provides: Milliwatt( )



app_mp3.so

Provides: MP3Player( )



app_nbscat.so

Provides: NBScat( )



app_parkandannounce.so

Requires: res_features.so

Provides: ParkAndAnnounce( )



app_playback.so

Provides: Playback( )



app_privacy.so

Provides: PrivacyManager( )



app_queue.so

Requires: res_features.so, res_monitor.so, res_musiconhold.so

Provides: Queue( ), AddQueueMember( ), RemoveQueueMember( ), PauseQueueMember( ), UnpauseQueueMember( ), action Queues, action QueueStatus, action QueueAdd, action QueueRemove, action QueuePause



app_random.so

Provides: Random( )



app_read.so

Provides: Read( )



app_readfile.so

Provides: ReadFile( )



app_realtime.so

Provides: RealTime( ), RealTimeUpdate( )



app_record.so

Provides: Record( )



app_sayunixtime.so

Provides: SayUnixTime( ), DateTime( )



app_senddtmf.so

Provides: SendDTMF( )



app_sendtext.so

Provides: SendText( )



app_setcallerid.so

Provides: SetCallerPres( ), SetCallerID( )



app_setcdruserfield.so

Provides: SetCDRUserField( ), AppendCDRUserField( ), action SetCDRUserField



app_setcidname.so

Provides: SetCIDName( )



app_setcidnum.so

Provides: SetCIDNum( )



app_setrdnis.so

Provides: SetRDNIS( )



app_settransfercapability.so

Provides: SetTransferCapability( )



app_sms.so

Provides: SMS( )



app_softhangup.so

Provides: SoftHangup( )



app_striplsd.so

Provides: StripLSD( )



app_substring.so (deprecated)

Provides: SubString( )



app_system.so

Provides: System( ), TRySystem( )



app_talkdetect.so

Provides: BackgroundDetect( )



app_test.so

Provides: TestClient( ), TestServer( )



app_transfer.so

Provides: transfer( )



app_txtcidname.so

Configuration file: enum.conf

Provides: TXTCIDName( )



app_url.so

Provides: SendURL( )



app_userevent.so

Provides: UserEvent( )



app_verbose.so

Provides: Verbose( )



app_voicemail.so

Configuration file: voicemail.conf

Requires: res_adsi.so

Provides: VoiceMail( ), VoiceMailMain( ), MailboxExists( ), VMAuthenticate( )



app_waitforring.so

Provides: WaitForRing( )



app_waitforsilence.so

Provides: WaitForSilence( )



app_while.so

Provides: While( ), ExecIf( ), EndWhile( )



app_zapateller.so

Provides: Zapateller( )

D.1.3. Database-Stored Call Detail Records

Asterisk normally stores Call Detail Records (CDRs) in a Comma-Separated Values (CSV) file.[*] If you want CDRs to be stored in a database, you'll need to load the appropriate module and define the relevant .conf file.

[*] Information stored in a text file as Comma-Separated Values can be imported into pretty much any spreadsheet or database (yes, even stuff from Microsoft). This makes the CSV format extremely portable.

For each module below, we state the database type it supports, and specify the configuration file, if required. The CDR database connector modules are:



cdr_csv.so

Provides: CSV CDR backend



cdr_custom.so

Configuration file: cdr_custom.conf

Provides: Customizable CSV CDR backend



cdr_manager.so

Configuration file: cdr_manager.conf

Provides: Asterisk Call Manager CDR backend



cdr_odbc.so[]

Configuration file: cdr_odbc.conf

Provides: ODBC CDR backend



cdr_pgsql.so

Configuration file: cdr_pgsql.conf

Provides: PostgreSQL CDR backend

D.1.4. Channels

Next, let's take a look at the channel modules. For each channel module, we identify dependencies and list the capabilities the module provides. We show the configuratin file, if one is required. The available modules are:



chan_agent.so

Configuration file: agents.conf

Requires: res_features.so, res_monitor.so, res_musiconhold.so

Provides: channel Agent, AgentLogin( ), AgentCallbackLogin( ), AgentMonitorOutgoing( ), action Agents



chan_features.so

Provides: channel Feature



chan_iax2.so

Configuration file: iax.conf, iaxprov.conf

Requires: res_crypto.so, res_features.so, res_musiconhold.so

Provides: channel IAX2, IAX2Provision( ), function IAXPEER, action IAXPEERS, action IAXnetstats



chan_local.so

Provides: channel Local



chan_mgcp.so

Configuration file: mgcp.conf

Requires: res_features.so

Provides: channel MGCP



chan_modem.so

Configuration file: modem.conf

Provides: channel Modem



chan_modem_aopen.so

Requires: chan_modem.so

Provides: A/Open (Rockwell Chipset) ITU-2 VoiceModem Driver



chan_modem_bestdata.so

Requires: chan_modem.so

Provides: BestData (Conexant V.90 Chipset) VoiceModem Driver



chan_modem_i4l.so

Requires: chan_modem.so

Provides: ISDN4Linux Emulated Modem Driver



chan_oss.so

Provides: channel Console (soundcard required)



chan_phone.so

Configuration file: phone.conf

Provides: channel Phone



chan_sip.so

Configuration file: sip.conf, sip_notify.conf

Requires: res_features.so

Provides: channel SIP, SIPDtmfMode( ), SIPAddHeader( ), SIPGetHeader( ), action SIPpeers, action SIPshowpeer, function SIP_HEADER



chan_skinny.so

Configuration file: skinny.conf

Requires: res_features.so

Provides: channel Skinny

D.1.5. Codecs

There are several acceptable ways to pass audio information in digital form. The formulas used to encode and decode (or compress and decompress) this information are collectively referred to as codecs. Most of Asterisk's codecs are provided free of license requirements; however, some (such as G.729) are encumbered by patents and thus must be licensed before they can be used.

Asterisk will load these codecs without complaint, but if you attempt to transcode a channel using an unlicensed codec, your calls will be dropped as soon as they connect.

Here, then, are the codec modulesif there are parameters that can be defined, they will be configurable in the codecs.conf file:



codec_a_mu.so

Provides: translator alawtoulaw, translator ulawtoalaw



codec_adpcm.so

Configuration file: codecs.conf

Provides: translator adpcmtolin, TRanslator lintoadpcm



codec_alaw.so

Configuration file: codecs.conf

Provides: translator alawtolin, translator lintoalaw



codec_g726.so

Configuration file: codecs.conf

Provides: translator g726tolin, TRanslator lintog726



codec_gsm.so

Configuration file: codecs.conf

Provides: translator gsmtolin, translator lintogsm



codec_ilbc.so

Configuration file: not required

Provides: translator ilbctolin, translator lintoilbc



codec_lpc10.so

Configuration file: codecs.conf

Provides: translator lpc10tolin, translator lintolpc10



codec_ulaw.so

Configuration file: codecs.conf

Provides: translator ulawtolin, translator lintoulaw

D.1.6. Formats

Formats are essentially the same as codecs, except that they relate to handling files instead of live media streams. If you are talking to someone, a codec (or two) will be employed. If you are leaving a voicemail or listening to Music on Hold, a format will be involved.

Here are the current Asterisk formats. Formats do not have associated configuration files:



format_g723.so

Provides: format g723sf



format_g726.so

Provides: format g726-40, format g726-32, format g726-24, format g726-16



format_g729.so

Provides: format g729



format_gsm.so

Provides: format gsm



format_h263.so

Provides: format H263



format_ilbc.so

Provides: format ilbc



format_jpeg.so

Provides: format jpg



format_pcm.so

Provides: format pcm



format_pcm_alaw.so

Provides: format alaw



format_sln.so

Provides: format sln



format_vox.so

Provides: format vox



format_wav.so

Provides: format wav



format_wav_gsm.so

Provides: format wav49

D.1.7. PBX Core Modules

The PBX modules deliver the core functionality of the system. For each module, we show the services it provides, and list the configuration file, if one is required. At minimum, config, functions, and spool are required. dundi, loopback, and realtime are needed only if you are going to make use of their capabilities. The PBX core modules are:



pbx_config.so

Configuration file: extensions.conf

Provides: Loads dialplan into memory



pbx_dundi.so

Configuration file: dundi.conf

Requires: res_crypto.so

Provides: DUNDiLookup( )



pbx_functions.so

Configuration file: not required

Provides: function CDR, function CHECK_MD5, function DB, function DB_EXISTS, function ENV, function EVAL, function EXISTS, function FIELDQTY, function GROUP_COUNT, function GROUP_MATCH_COUNT, function GROUP, function GROUP_LIST, function IF, function ISNULL, function LANGUAGE, function LEN, function MD5, function REGEX, function STRFTIME, function SET, function TIMEOUT



pbx_loopback.so

Provides: Loopback switch



pbx_realtime.so

Provides: Realtime switch



pbx_spool.so

Provides: Outgoing spool support

D.1.8. Standalone Functions

There is currently only one standalone function available. This function operates identically to those in pbx_functions.so, but because it is standalone, it can be loaded (or not) completely independently of the pbx functions. The function is:



func_callerid.so

Configuration file: not required

Provides: function CALLERID


Previous Page
Next Page
Asterisk