APIs
AMI
A new event,
DialState
has been added. This is similar toDialBegin
andDialEnd
in that it tracks the state of a dialed call. The difference is that this indicates some intermediate state change in the dial attempt, such as "RINGING", "PROGRESS", or "PROCEEDING".
ARI
- A new ARI method has been added to the channels resource. "create" allows for you to create a new channel and place that channel into a Stasis application. This is similar to origination except that the specified channel is not dialed. This allows for an application writer to create a channel, perform manipulations on it, and then delay dialing the channel until later.
- To complement the "create" method, a "dial" method has been added to the channels resource in order to place a call to a created channel.
- All operations that initiate playback of media on a resource now support a list of media URIs. The list of URIs are played in the order they are presented to the resource. A new event,
PlaybackContinuing
, is raised when a media URI finishes but before the next media URI starts. When a list is played, the "Playback" model will contain the optional attributenext_media_uri
, which specifies the next media URI in the list to be played back to the resource. ThePlaybackFinished
event is raised when all media URIs are done. Stored recordings now allow for the media associated with a stored recording to be retrieved. The new route, {{ GET /recordings/stored/{name}/file }}, will transmit the raw media file to the requester as binary.
Dial
events have been modified to not only be sent when dialing begins and ends. They now are also sent for intermediate states, such as "RINGING", "PROGRESS", and "PROCEEDING".
Applications
BridgeAdd
- A new application in Asterisk, this will join the calling channel to an existing bridge containing the named channel prefix.
ChanSpy
- Added the
l
option, which forces ChanSpy's audiohook to use a long queue to store the audio frames. This option is useful if audio loss is experienced when using ChanSpy, but may introduce some delay in the audio feed on the listening channel.
ConfBridge
- Added the ability to pass options to MixMonitor when recording is used with ConfBridge. This includes the addition of the following configuration parameters for the 'bridge' object:
- record_file_timestamp: whether or not to append the start time to the recorded file name
- record_options: the options to pass to the MixMonitor application
- record_command: a command to execute when recording is finished
Note that these options may also be with the CONFBRIDGE function.
ControlPlayback
- Remote files can now be retrieved and played back. See the Playback dialplan application for more details.
FollowMe
- It is now possible to disable the prompt from a callee by setting
enable_callee_prompt = no
in followme.conf.
Playback
Remote files can now be retrieved and played back via the Playback and other media playback dialplan applications. This is done by directly providing the URL to play to the dialplan application:
same => n,Playback(http://1.1.1.1/howler-monkeys-fl.wav)
Note that unlike 'normal' media files, the entire URI to the file must be provided, including the file extension. Currently, only HTTP and HTTPS URI schemes are supported.
Queue
- Added field ReasonPause on QueueMemberStatus if set when paused, the reason the queue member was paused.
- Added field LastPause on QueueMemberStatus for time when started the last pause for a queue member.
- Show the time when started the last pause for queue member on CLI for command 'queue show'.
SMS
- Added the 'n' option, which prevents the SMS from being written to the log file. This is needed for those countries with privacy laws that require providers to not log SMS content.
Channel Drivers
chan_dahdi
- The CALLERID(ani2) value for incoming calls is now populated in
featdmf
signaling mode. The information was previously discarded. - Added the
force_restart_unavailable_chans
compatibility option. When enabled it causes Asterisk to restart the ISDN B channel if an outgoing call receives cause 44 (Requested channel not available).
chan_iax2
- The iax.conf
forcejitterbuffer
option has been removed. It is now always forced if you set iax.confjitterbuffer=yes
. If you put a jitter buffer on a channel it will be on the channel. - A new configuration parameters,
calltokenexpiration
, has been added that controls the duration before a call token expires. Default duration is 10 seconds. Setting this to a higher value may help in lagged networks or those experiencing high packet loss.
chan_rtp (was chan_multicast_rtp)
- Added unicast RTP support and renamed chan_multicast_rtp to chan_rtp. The format for dialing a unicast RTP channel is:
UnicastRTP/<destination-addr>[/[<options>]]
Where
<destination-addr>
is something like127.0.0.1:5060
Where
<options>
are in standard Asterisk flag options format:c(<codec>)
- Specify which codec/format to use such as 'ulaw'.e(<engine>)
- Specify which RTP engine to use such as 'asterisk'.
- New options were added for a multicast RTP channel. The format for dialing a multicast RTP channel is:
MulticastRTP/<type>/<destination-addr>[/[<control-addr>][/[<options>]]]
- Where
<type>
can be either'basic'
or'linksys'
. - Where
<destination-addr>
is something like'224.0.0.3:5060'
. - Where
<control-addr>
is something like'127.0.0.1:5060'
. - Where
<options>
are in standard Asterisk flag options format:c(<codec>)
- Specify which codec/format to use such as 'ulaw'.i(<address>)
- Specify the interface address from which multicast RTP is sent.l(<enable>)
- Set whether packets are looped back to the sender. The enable value can be 0 to set looping to off and non-zero to set looping on.t(<ttl>)
- Set the time-to-live (TTL) value for multicast packets.
- Where
chan_sip
- New
rtpbindaddr
global setting. This allows a user to define which ip address to bind the rtpengine to. For example, chan_sip might bind to eth0 (10.0.0.2) but rtpengine to eth1 (192.168.1.10). - DTLS related configuration options can now be set at a general level. Enabling DTLS support, though, requires enabling it at the user or peer level.
- Added the possibility to set the From: header through the the SIP dial string (populating the fromuser/fromdomain fields), complementing the [!dnid] option for the To: header that has existed since 1.6.0 (1d6b192).
NOTE: This is again separated by an exclamation mark, so the To: header may not contain one of those.
chan_pjsip
- New
user_eq_phone
endpoint setting. This adds auser=phone
parameter to the request URI and From URI if the user is determined to be a phone number. - New
moh_passthrough
endpoint setting. This will pass hold and unhold requests through using SIP re-invites with sendonly and sendrecv accordingly. - Added the pjsip.conf system type
disable_tcp_switch
option. The option allows the user to disable switching from UDP to TCP transports described by RFC 3261 section 18.1.1.
Core
- The core of Asterisk uses a message bus called "Stasis" to distribute information to internal components. For performance reasons, the message distribution was modified to make use of a thread pool instead of a dedicated thread per consumer in certain cases. The initial settings for the thread pool can now be configured in 'stasis.conf'.
- A new core DNS API has been implemented which provides a common interface for DNS functionality. Modules that use this functionality will require that a DNS resolver module is loaded and available.
- Modified processing of command-line options to first parse only what is necessary to read asterisk.conf. Once asterisk.conf is fully loaded, the remaining options are processed. The -X option now applies to asterisk.conf only. To enable #exec for other config files you must set execincludes=yes in asterisk.conf. Any other option set on the command-line will now override the equivalent setting from asterisk.conf.
- The TLS core in Asterisk now supports X.509 certificate subject alternative names. This way one X.509 certificate can be used for hosts that can be reached under multiple DNS names or for multiple hosts.
- The Asterisk logging system now supports JSON structured logging. Log channels specified in logger.conf or added dynamically via CLI commands now support an optional specifier prior to their levels that determines their formatting. To set a log channel to format its entries as JSON, a formatter of
[json]
can be set, e.g.,full => [json]debug,verbose,notice,warning,error
- The core now supports a 'media cache', which stores temporary media files retrieved from external sources. CLI commands have been added to manipulate and display the cached files, including:
media cache show <all>
- show all cached media files, or details about one particular cached media filemedia cache refresh <item>
- force a refresh of a particular media file in the cachemedia cache delete <item>
- remove an item from the cachemedia cache create <uri>
- retrieve a URI and store it in the cache
- The ability for hints to be automatically created as a result of device state changes now exists in the PBX. This functionality is referred to as
autohints
and is configurable in extensions.conf by placingautohints=yes
in the context. If enabled then a hint will be automatically created with the name of the device.
Functions
- The func_odbc global option
single_db_connection
default value has been changed tono
.
Formats
- New module format_ogg_speex added which supports Speex codec inside Ogg containers (filename extension .spx).
CHANNEL
Added
CHANNEL(onhold)
item that returns 1 (onhold) and 0 (not-onhold) for the hold status of a channel.
CURL
- The CURL function now supports a write option, which will save the retrieved file to a location on disk. As an example:
{{same => n,Set(CURL(https://1.1.1.1/foo.wav)=/tmp/foo.wav)}} will save 'foo.wav' to /tmp.
DTMF Features
- The
transferdialattempts
default value has been changed from 1 to 3. - The
transferinvalidsound
has been changed frompbx-invalid
toprivacy-incorrect
. These were changed to make DTMF transfers be more user-friendly by default.
Resources
res_http_media_cache
- A backend for the core media cache, this module retrieves media files from a remote HTTP(S) server and stores them in the core media cache for later playback.
res_musiconhold
- Added
sort=randstart
to the sort options. It sorts the files by name and then chooses the first file to play at random. - Added
preferchannelclass=no
option to prefer the application-passed class over the channel-set musicclass. This allows separate hold-music from application (e.g. Queue or Dial) specified music.
res_resolver_unbound
- Added a res_resolver_unbound module which uses the libunbound resolver library to perform DNS resolution. This module requires the libunbound library to be installed in order to be used.
res_pjsip
- A new SIP resolver using the core DNS API has been implemented. This relies on external SIP resolver support in PJSIP which is only available as of PJSIP 2.4. If this support is unavailable the existing built-in PJSIP SIP resolver will be used instead. The new SIP resolver provides NAPTR support, improved SRV support, and AAAA record support.
res_pjsip_info_empty
A new module that can respond to empty Content-Type INFO packets during call. Some SBCs will terminate a call if their empty INFO packets are not responded to within a predefined time.
res_pjsip_outbound_registration
- A new
fatal_retry_interval option
has been added to outbound registration. When set (default is zero), and upon receiving a failure response to an outbound registration, registration is retried at the given interval up tomax_retries
.
res_pjsip_outbound_publish
- Added a new multi_user option that when set to
yes
allows a given configuration to be used for multiple users.
CEL Backends
cel_pgsql
- Added a new option,
usegmtime
, which causes timestamps in CEL events to be logged in GMT. - Added support to set schema where located the table cel. This settings is configurable for cel_pgsql via the 'schema' in configuration file cel_pgsql.conf.
CDR Backends
cdr_adaptive_odbc
- Added the ability to set the character to quote identifiers. This allows adding the character at the start and end of table and column names. This setting is configurable for cdr_adaptive_odbc via the quoted_identifiers in configuration file cdr_adaptive_odbc.conf.
cdr_odbc
- Added a new configuration option,
newcdrcolumns
, which enables use of the post-1.8 CDR columnspeeraccount
,linkedid
, andsequence
.
cdr_csv
- Added a new configuration option,
newcdrcolumns
, which enables use of the post-1.8 CDR columnspeeraccount
,linkedid
, andsequence
.