Skip to end of metadata
Go to start of metadata


Asterisk 14 is the next Standard release of the Asterisk project, following the previous Long Term Support release of Asterisk 13. As a Standard release, improvements made in Asterisk 14 have focused both on extending and enhancing existing functionality, as well as making long term investments in major new features. Some highlights include:

  • A complete overhaul of the core DNS support in Asterisk, including implementing full NAPTR and SRV support in the PJSIP stack via the libunbound  library.
  • The ability to publish extension state to a SIP Subscription server, such as Kamailio. This includes the ability to automatically generate a hint in the dialplan based on device state changes using the new autohint setting.
  • Playback of media from a remote HTTP server via a URI is now supported by all dialplan applications and AGI. Media retrieved using a URI is cached in a media cache and re-used when possible.
  • When using ARI to manipulate media on a resource, a list of media resources can now be supplied. The media resources will be played back sequentially in the order that they are provided.
  • Channels created via ARI can now be created and handed off to Stasis for external control prior to performing the outbound dial. This enables applications to set additional state on the channel prior to dialing, as well as enabling certain early media scenarios.

And much more!

As Asterisk 14 continues the architecture that was first released in Asterisk 12 and enhanced in Asterisk 13, users upgrading to Asterisk 14 from older versions of Asterisk should be aware of the architectural changes that were made in the previous Standard releases. It is recommended that you read the following:



  • A new event, DialState has been added. This is similar to DialBegin and DialEnd 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".


  • 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 attribute next_media_uri, which specifies the next media URI in the list to be played back to the resource. The PlaybackFinished 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".



  • A new application in Asterisk, this will join the calling channel to an existing bridge containing the named channel prefix.


  • 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.


  • 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.


  • Remote files can now be retrieved and played back. See the Playback dialplan application for more details.


  • It is now possible to disable the prompt from a callee by setting enable_callee_prompt = no in followme.conf.


  • 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(

     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.


  • 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'.


  • 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


  • 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).


  • The iax.conf forcejitterbuffer option has been removed. It is now always forced if you set iax.conf jitterbuffer=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:
    • Where <destination-addr> is something like

    • 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: 
    • Where <type> can be either 'basic' or 'linksys'.
    • Where <destination-addr> is something like ''.
    • Where <control-addr> is something like ''.
    • 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.


  • 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 ( but rtpengine to eth1 (
  • 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.


  • New user_eq_phone endpoint setting. This adds a user=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.


  • 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 file
    • media cache refresh <item> - force a refresh of a particular media file in the cache
    • media cache delete <item> - remove an item from the cache
    • media 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 placing autohints=yes in the context. If enabled then a hint will be automatically created with the name of the device.


  • The func_odbc global option single_db_connection default value has been changed to no.


  • New module format_ogg_speex added which supports Speex codec inside Ogg containers (filename extension .spx).


  • Added CHANNEL(onhold) item that returns 1 (onhold) and 0 (not-onhold) for the hold status of a channel.


  • 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(}} will save 'foo.wav' to /tmp.

DTMF Features

  • The transferdialattempts default value has been changed from 1 to 3.
  • The transferinvalidsound has been changed from pbx-invalid to privacy-incorrect. These were changed to make DTMF transfers be more user-friendly by default.



  • 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.


  • 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.


  •  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.


  • 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.


  • 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.


  • 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 to max_retries.


  • Added a new multi_user option that when set to yes allows a given configuration to be used for multiple users.

CEL Backends


  • 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


  • 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.


  • Added a new configuration option, newcdrcolumns, which enables use of the post-1.8 CDR columns peeraccount, linkedid, and sequence.


  • Added a new configuration option, newcdrcolumns, which enables use of the post-1.8 CDR columns peeraccount, linkedid, and sequence.


  • No labels