<html>
<head>
<meta name="viewport" content="width=device-width" />
<base href="https://wiki.asterisk.org/wiki" />
<style type="text/css">
body, #email-content, #email-content-inner { font-family: Arial,FreeSans,Helvetica,sans-serif; }
body, p, blockquote, pre, code, td, th, li, dt, dd { font-size: 13px; }
small { font-size: 11px; }
body { width:100% !important; -webkit-font-smoothing: antialiased; }
body,
#email-wrapper { background-color: #f0f0f0; }
#email-wrapper-inner { padding: 20px; text-align: center; }
#email-content-inner { background-color: #fff; border: 1px solid #bbb; color: $menuTxtColour; padding:20px; text-align:left; }
#email-wrapper-inner > table { width: 100%; }
#email-wrapper-inner.thin > table { margin: 0 auto; width: 50%; }
#email-footer { padding: 0 16px 32px 16px; margin: 0; }
.email-indent { margin: 8px 0 16px 0; }
.email-comment { margin: 0 0 0 56px; }
.email-comment.removed { background-color: #ffe7e7; border: 1px solid #df9898; padding: 0 8px;}
#email-title-avatar { text-align: left; vertical-align: top; width: 48px; padding-right: 8px; }
#email-title-flavor { margin: 0; padding: 0 0 4px 0; }
#email-title-heading { font-size: 16px; line-height: 20px; min-height: 20px; margin: 0; padding: 0; }
#email-title .icon { border: 0; padding: 0 5px 0 0; text-align: left; vertical-align: middle; }
#email-actions { border-top: 1px solid #bbb; color: #505050; margin: 8px 0 0 0; padding: 0; }
#email-actions td { padding-top: 8px; }
#email-actions .left { max-width: 45%; text-align: left; }
#email-actions .right { text-align: right; }
.email-reply-divider { border-top: 1px solid #bbb; color: #505050; margin: 32px 0 8px 0; padding: 8px 0; }
.email-section-title { border-bottom: 1px solid #bbb; margin: 8px 0; padding: 8px 0 0 0; }
.email-metadata { color: #505050; }
a { color: #326ca6; text-decoration: none; }
a:hover { color: #336ca6; text-decoration: underline; }
a:active {color: #326ca6; }
a.email-footer-link { color: #505050; font-size: 11px; }
.email-item-list { list-style: none; margin: 4px 0; padding-left: 0; }
.email-item-list li { list-style: none; margin: 0; padding: 4px 0; }
.email-list-divider { color: #505050; padding: 0 0.35em; }
.email-operation-icon { padding-right: 5px; }
.avatar { -ms-interpolation-mode: bicubic; border-radius: 3px;}
.avatar-link { margin: 2px; }
.tableview th { border-bottom: 1px solid #69C; font-weight: bold; text-align: left; }
.tableview td { border-bottom: 1px solid #bbbbbb; text-align: left; padding: 4px 16px 4px 0; }
.aui-message { margin: 1em 0; padding: 8px; }
.aui-message.info { background-color: #e0f0ff; border: 1px solid #9eb6d4; }
.aui-message.success { background-color: #ddfade; border: 1px solid #93c49f; }
.aui-message.error,
.aui-message.removed { background-color: #ffe7e7; border: 1px solid #df9898; color: #000; }
.call-to-action-table { margin: 10px 1px 1px 1px;}
.call-to-cancel-container, .call-to-action-container { padding: 5px 20px; }
.call-to-cancel-container { border: 1px solid #aaa; background-color: #eee; border-radius: 3px; }
.call-to-cancel-container a.call-to-cancel-button { background-color: #eee; font-size: 14px; line-height: 1; padding: 0; margin: 0; color: #666; font-family: sans-serif;}
.call-to-action-container { border: 1px solid #486582; background-color: #3068A2; border-radius: 3px; padding: 4px 10px; }
.call-to-action-container a.call-to-action-button { background-color: #3068A2; font-size: 14px; line-height: 1; padding: 0; margin: 0; color: #fff; font-weight: bold; font-family: sans-serif; }
/** The span around the inline task checkbox image */
.diff-inline-task-overlay {
display: inline-block;
text-align: center;
height: 1.5em;
padding: 5px 0px 1px 5px;
margin-right: 5px;
/** Unfortunately, the negative margin-left is stripped out in gmail */
margin-left: -5px;
}
@media handheld, only screen and (max-device-width: 480px) {
div, a, p, td, th, li, dt, dd { -webkit-text-size-adjust: auto; }
small, small a { -webkit-text-size-adjust: 90%; }
td[id=email-wrapper-inner] { padding: 2px !important; }
td[id=email-content-inner] { padding: 8px !important; }
td[id="email-wrapper-inner"][class="thin"] > table { text-align: left !important; width: 100% !important; }
td[id=email-footer] { padding: 8px 12px !important; }
div[class=email-indent] { margin: 8px 0px !important; }
div[class=email-comment] { margin: 0 !important; }
p[id=email-title-flavor] a { display: block; } /* puts the username and the action on separate lines */
p[id=email-permalink] { padding: 4px 0 0 0 !important; }
table[id=email-actions] td { padding-top: 0 !important; }
table[id=email-actions] td.right { text-align: right !important; }
table[id=email-actions] .email-list-item { display: block; margin: 1em 0 !important; word-wrap: normal !important; }
span[class=email-list-divider] { display: none; }
}
</style>
</head>
<body style="font-family: Arial, FreeSans, Helvetica, sans-serif; font-size: 13px; width: 100%; -webkit-font-smoothing: antialiased; background-color: #f0f0f0">
<table id="email-wrapper" width="100%" cellspacing="0" cellpadding="0" border="0" style="background-color: #f0f0f0">
<tbody>
<tr valign="middle">
<td id="email-wrapper-inner" style="font-size: 13px; padding: 20px; text-align: center">
<table id="email-content" cellspacing="0" cellpadding="0" border="0" style="font-family: Arial, FreeSans, Helvetica, sans-serif; width: 100%">
<tbody>
<tr valign="top">
<td id="email-content-inner" align="left" style="font-family: Arial, FreeSans, Helvetica, sans-serif; font-size: 13px; background-color: #fff; border: 1px solid #bbb; padding: 20px; text-align: left">
<table id="email-title" cellpadding="0" cellspacing="0" border="0" width="100%">
<tbody>
<tr>
<td id="email-title-avatar" rowspan="2" style="font-size: 13px; text-align: left; vertical-align: top; width: 48px; padding-right: 8px"> <img class="avatar" src="cid:avatar_ce51dcf276530e4a4b00548e2a6d0905" border="0" height="48" width="48" style="-ms-interpolation-mode: bicubic; border-radius: 3px" /> </td>
<td valign="top" style="font-size: 13px">
<div id="email-title-flavor" class="email-metadata" style="margin: 0; padding: 0 0 4px 0; color: #505050">
<a href=" https://wiki.asterisk.org/wiki/display/~mjordan " style="color:#326ca6;text-decoration:none;; color: #326ca6; text-decoration: none">Matt Jordan</a> created a page:
</div> </td>
</tr>
<tr>
<td valign="top" style="font-size: 13px"> <h2 id="email-title-heading" style="font-size: 16px; line-height: 20px; min-height: 20px; margin: 0; padding: 0"> <a href="https://wiki.asterisk.org/wiki/display/AST/New+in+12" style="color: #326ca6; text-decoration: none"> <img class="icon" src="cid:page-icon" alt="" style="border: 0; padding: 0 5px 0 0; text-align: left; vertical-align: middle" /> <strong style="font-size:16px;line-height:20px;vertical-align:top;">New in 12</strong> </a> </h2> </td>
</tr>
</tbody>
</table>
<div class="email-indent" style="margin: 8px 0 16px 0">
<div class="email-page">
<h1 id="Newin12-Overview">Overview</h1>
<p style="font-size: 13px">Asterisk 12 is a standard release of the Asterisk project. As such, the focus of development for this release was on core architectural changes and major new features. This includes:</p>
<ul>
<li style="font-size: 13px">A more flexible bridging core based on the Bridging API</li>
<li style="font-size: 13px">A new internal message bus, Stasis</li>
<li style="font-size: 13px">Major standardization and consistency improvements to AMI</li>
<li style="font-size: 13px">Addition of the Asterisk RESTful Interface (ARI)</li>
<li style="font-size: 13px">A new SIP channel driver, chan_pjsip</li>
</ul>
<p style="font-size: 13px">In addition, as the vast majority of bridging in Asterisk was migrated to the Bridging API used by ConfBridge, major changes were made to most of the interfaces in Asterisk. This includes not only AMI, but also CDRs and CEL.</p>
<p style="font-size: 13px">Specifications have been written for the affected interfaces. These specifications are available on the Asterisk wiki:<br /> * AMI - <a href="https://wiki.asterisk.org/wiki/x/dAFRAQ" rel="nofollow" style="color: #326ca6; text-decoration: none">https://wiki.asterisk.org/wiki/x/dAFRAQ</a> <br /> * CEL - <a href="https://wiki.asterisk.org/wiki/x/4ICLAQ" rel="nofollow" style="color: #326ca6; text-decoration: none">https://wiki.asterisk.org/wiki/x/4ICLAQ</a> <br /> * CDRs - <a href="https://wiki.asterisk.org/wiki/x/pwpRAQ" rel="nofollow" style="color: #326ca6; text-decoration: none">https://wiki.asterisk.org/wiki/x/pwpRAQ</a> </p>
<p style="font-size: 13px">It is <strong>highly</strong> recommended that anyone migrating to Asterisk 12 read the information regarding its release both in this file and in the accompanying UPGRADE.txt file. More detailed information on the major changes can be found on the Asterisk wiki at <a href="https://wiki.asterisk.org/wiki/x/0YCLAQ" rel="nofollow" style="color: #326ca6; text-decoration: none">https://wiki.asterisk.org/wiki/x/0YCLAQ</a>.</p>
<p style="font-size: 13px">
<style type="text/css">/**/
div.rbtoc1377746885793 {padding: 0px;}
div.rbtoc1377746885793 ul {list-style: disc;margin-left: 0px;}
div.rbtoc1377746885793 li {margin-left: 0px;padding-left: 0px;}
/**/
</style> </p>
<div class="toc-macro rbtoc1377746885793" style="padding: 0px">
<ul class="toc-indentation" style="list-style: disc; margin-left: 0px">
<li style="font-size: 13px; margin-left: 0px; padding-left: 0px"> <a href="#Newin12-Overview" style="color: #326ca6; text-decoration: none">Overview</a> </li>
<li style="font-size: 13px; margin-left: 0px; padding-left: 0px"> <a href="#Newin12-BuildSystem" style="color: #326ca6; text-decoration: none"><span style="line-height: 1.25;">Build System</span></a> </li>
<li style="font-size: 13px; margin-left: 0px; padding-left: 0px"> <a href="#Newin12-Applications" style="color: #326ca6; text-decoration: none"> <br />Applications</a> </li>
</ul>
</div>
<p style="font-size: 13px"></p>
<h1 id="Newin12-BuildSystem"> <span style="line-height: 1.25;">Build System</span> </h1>
<ul>
<li style="font-size: 13px">Added build option <code style="font-size: 13px">DISABLE_INLINE</code>. This option can be used to work around a bug in gcc. For more information, see <a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47816" class="external-link" rel="nofollow" style="color: #326ca6; text-decoration: none">http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47816</a> </li>
<li style="font-size: 13px">Removed the <code style="font-size: 13px">CHANNEL_TRACE</code> development mode build option. Certain aspects of the <code style="font-size: 13px">CHANNEL_TRACE</code> build option were incompatible with the new bridging architecture.</li>
<li style="font-size: 13px">Asterisk now optionally uses <code style="font-size: 13px">libxslt</code> to improve XML documentation generation and maintainability. If libxslt is not available on the system, some XML documentation will be incomplete.</li>
<li style="font-size: 13px">Asterisk now depends on <code style="font-size: 13px">libjansson</code>. If a package of <code style="font-size: 13px">libjansson</code> is not available on your distro, please see <a href="http://www.digip.org/jansson/" class="external-link" rel="nofollow" style="color: #326ca6; text-decoration: none">http://www.digip.org/jansson/</a>.</li>
<li style="font-size: 13px">Asterisk now depends on <code style="font-size: 13px">libuuid</code> and, optionally, <code style="font-size: 13px">uriparser</code>. It is recommended that you install <code style="font-size: 13px">uriparser</code>, even if it is optional.</li>
<li style="font-size: 13px">The new SIP stack and channel driver currently use a particular version of PJSIP. Please see <a href="https://wiki.asterisk.org/wiki/x/J4GLAQ" rel="nofollow" style="color: #326ca6; text-decoration: none">https://wiki.asterisk.org/wiki/x/J4GLAQ</a> for more information on configuring and installing PJSIP for usage with Asterisk.</li>
</ul>
<h1 id="Newin12-Applications"> <br />Applications</h1>
<h2 id="Newin12-AgentLogin">AgentLogin</h2>
<ul>
<li style="font-size: 13px"> <span style="line-height: 1.5;">Along with AgentRequest, this application has been modified to be a </span>replacement for <code style="font-size: 13px">chan_agent</code>. The act of a channel calling the AgentLogin application places the channel into a pool of agents that can be requested by the AgentRequest application. Note that this application, as well as all other agent related functionality, is now provided by the <code style="font-size: 13px">app_agent_pool</code> module. See <a href="#Newin12-channels_chan_agent" style="color: #326ca6; text-decoration: none">chan_agent</a> and <a href="https://wiki.asterisk.org/wiki/display/AST/New+in+12" style="color: #326ca6; text-decoration: none">AgentRequest</a> for more information.</li>
<li style="font-size: 13px">This application no longer performs agent authentication. If authentication is desired, the dialplan needs to perform this function using the Authenticate or VMAuthenticate application or through an AGI script before running AgentLogin.</li>
<li style="font-size: 13px">If this application is called and the agent is already logged in, the dialplan will continue exection with the AGENT_STATUS channel variable set to ALREADY_LOGGED_IN.</li>
<li style="font-size: 13px">The <em>agents.conf</em> schema has changed. Rather than specifying agents on a single line in comma delineated fashion, each agent is defined in a separate context. This allows agents to use the power of context templates in their definition.</li>
<li style="font-size: 13px">A number of parameters from <em>agents.conf</em> have been removed. This includes:
<ul>
<li style="font-size: 13px"> <code style="font-size: 13px">maxloginretries</code> </li>
<li style="font-size: 13px"> <code style="font-size: 13px">autologoffunavail</code> </li>
<li style="font-size: 13px"> <code style="font-size: 13px">updatecdr</code> </li>
<li style="font-size: 13px"> <code style="font-size: 13px">goodbye</code> </li>
<li style="font-size: 13px"> <code style="font-size: 13px">group</code> </li>
<li style="font-size: 13px"> <code style="font-size: 13px">recordformat</code> </li>
<li style="font-size: 13px"> <code style="font-size: 13px">urlprefix</code> </li>
<li style="font-size: 13px"> <code style="font-size: 13px">savecallsin</code> </li>
</ul>These options were obsoleted by the move from a channel driver model to the bridging/application model provided by <code style="font-size: 13px">app_agent_pool</code>.</li>
</ul>
<p style="font-size: 13px"> <span class="confluence-anchor-link" id="Newin12-app_AgentRequest"></span> </p>
<h2 id="Newin12-AgentRequest">AgentRequest</h2>
<ul>
<li style="font-size: 13px">A new application, this will request a logged in agent from the pool and <span style="line-height: 1.4285715;">bridge the requested channel with the channel calling this application. </span><span style="line-height: 1.4285715;">Logged in agents are those channels that called the AgentLogin application. </span><span style="line-height: 1.4285715;">If an agent cannot be requested from the pool, the <code style="font-size: 13px">AGENT_STATUS</code> dialplan </span><span style="line-height: 1.4285715;">application will be set with an appropriate error value.</span> </li>
</ul>
<h2 id="Newin12-AgentMonitorOutgoing">AgentMonitorOutgoing</h2>
<ul>
<li style="font-size: 13px">This application has been removed. It was a holdover from when AgentCallbackLogin was removed in Asterisk 1.6.0.</li>
</ul>
<h2 id="Newin12-AlarmReceiver">AlarmReceiver</h2>
<ul>
<li style="font-size: 13px"> <h2 id="Newin12-AddedsupportforadditionalAdemcoDTMFsignallingformats%2CincludingExpress4%2B1%2CExpress4%2B2%2CHighSpeedandSuperFast."> <span style="color: rgb(51,51,51);font-family: "Helvetica Neue" , Helvetica , Arial , sans-serif;font-size: 14.0px;line-height: 1.4285715;">Added support for additional Ademco DTMF signalling formats, including</span> <span style="color: rgb(51,51,51);font-family: "Helvetica Neue" , Helvetica , Arial , sans-serif;font-size: 14.0px;line-height: 1.4285715;">Express 4+1, Express 4+2, High Speed and Super Fast.</span> </h2> </li>
<li style="font-size: 13px">Added channel variable <code style="font-size: 13px">ALARMRECEIVER_CALL_LIMIT</code>. This sets the maximum <span style="line-height: 1.4285715;">call time, in milliseconds, to run the application.</span> </li>
<li style="font-size: 13px">Added channel variable <code style="font-size: 13px">ALARMRECEIVER_RETRIES_LIMIT</code>. This sets the <span style="line-height: 1.4285715;">maximum number of times to retry the call.</span> </li>
<li style="font-size: 13px">Added a new configuration option <code style="font-size: 13px">answait</code>. If set, the AlarmReceiver <span style="line-height: 1.4285715;">application will wait the number of milliseconds specified by <code style="font-size: 13px">answait</code> </span><span style="line-height: 1.4285715;">after the channel has answered. Valid values range between 500 </span><span style="line-height: 1.4285715;">milliseconds and 10000 milliseconds.</span> </li>
<li style="font-size: 13px">Added configuration option <code style="font-size: 13px">no_group_meta</code>. If enabled, grouping of metadata <span style="line-height: 1.4285715;">information in the AlarmReceiver log file will be skipped.</span> </li>
</ul>
<h2 id="Newin12-BridgeWait">BridgeWait</h2>
<ul>
<li style="font-size: 13px"> <span style="line-height: 1.4285715;">A new application in Asterisk, this will place the calling channel </span>into a holding bridge, optionally entertaining them with some form of media. Channels participating in a holding bridge do not interact with <span style="line-height: 1.4285715;">other channels in the same holding bridge. Optionally, however, a channel </span><span style="line-height: 1.4285715;">may join as an announcer. Any media passed from an announcer channel is </span><span style="line-height: 1.4285715;">played to all channels in the holding bridge. Channels leave a holding </span><span style="line-height: 1.4285715;">bridge either when an optional timer expires, or via the ChannelRedirect </span><span style="line-height: 1.4285715;">application or AMI Redirect action.</span> </li>
</ul>
<h2 id="Newin12-ConfBridge">ConfBridge</h2>
<ul>
<li style="font-size: 13px"> <span style="line-height: 1.5;">All participants in a bridge can now be kicked out of a conference room </span>by specifying the channel parameter as 'all' in the ConfBridge kick CLI command, i.e., <code style="font-size: 13px">confbridge kick <conference> all</code> </li>
<li style="font-size: 13px">CLI output for the <code style="font-size: 13px">confbridge list</code> command has been improved. When displaying information about a particular bridge, flags will now be shown for the participating users indicating properties of that user.</li>
<li style="font-size: 13px">The ConfbridgeList event now contains the following fields: <code style="font-size: 13px">WaitMarked</code>, <code style="font-size: 13px">EndMarked</code>, and <code style="font-size: 13px">Waiting</code>. This displays additional properties about the user's profile, as well as whether or not the user is waiting for a Marked user to enter the conference.</li>
<li style="font-size: 13px">Added a new option for conference recording, <code style="font-size: 13px">record_file_append</code>. If enabled, when the recording is stopped and then re-started, the existing recording will be used and appended to.</li>
</ul>
<h2 id="Newin12-ControlPlayback"> <span style="line-height: 1.4285715;">ControlPlayback</span> </h2>
<ul>
<li style="font-size: 13px">The channel variable <code style="font-size: 13px">CPLAYBACKSTATUS</code> may now return the value <code style="font-size: 13px">REMOTESTOPPED</code>. This occurs when playback is stopped by a remote interface, such as AMI. See the AMI action ControlPlayback for more information.</li>
</ul>
<h2 id="Newin12-Directory"> <span style="line-height: 1.4285715;">Directory</span> </h2>
<ul>
<li style="font-size: 13px"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">Added the <code style="font-size: 13px">a</code> option, which allows the caller to enter in an additional </span><span style="line-height: 1.4285715;">alias for the user in the directory. This option must be used in conjunction </span><span style="line-height: 1.4285715;">with the <code style="font-size: 13px">f</code>, <code style="font-size: 13px">l</code>, or <code style="font-size: 13px">b</code> options. Note that the alias for a user can be </span><span style="line-height: 1.4285715;">specified in <em>voicemail.conf</em>.</span> </li>
</ul>
<h2 id="Newin12-DumpChan"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">DumpChan</span> </h2>
<ul>
<li style="font-size: 13px"> <span style="line-height: 1.4285715;">The output of DumpChan no longer includes the <code style="font-size: 13px">DirectBridge</code> or <code style="font-size: 13px">IndirectBridge</code> </span><span style="line-height: 1.4285715;">fields. Instead, if a channel is in a bridge, it includes a <code style="font-size: 13px">BridgeID</code> field </span><span style="line-height: 1.4285715;">containing the unique ID of the bridge that the channel happens to be in.</span> </li>
</ul>
<h2 id="Newin12-ForkCDR"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">ForkCDR</span> </h2>
<ul>
<li style="font-size: 13px">ForkCDR no longer automatically resets the forked CDR. See the <code style="font-size: 13px">r</code> option for more information.</li>
<li style="font-size: 13px"> <span style="line-height: 1.4285715;">Variables are no longer purged from the original CDR. See the <code style="font-size: 13px">v</code> option for </span><span style="line-height: 1.4285715;">more information.</span> </li>
<li style="font-size: 13px">The <code style="font-size: 13px">A</code> option has been removed. The Answer time on a CDR is never updated once set.</li>
<li style="font-size: 13px">The <code style="font-size: 13px">d</code> option has been removed. The disposition on a CDR is a function of the state of the channel and cannot be altered.</li>
<li style="font-size: 13px">The <code style="font-size: 13px">D</code> option has been removed. Who the Party B is on a CDR is a function of the state of the respective channels involved in the CDR and cannot be altered.</li>
<li style="font-size: 13px">The <code style="font-size: 13px">r</code> option has been changed. Previously, ForkCDR always reset the CDR such that the start time and, if applicable, the answer time was updated. Now, by default, ForkCDR simply forks the CDR, maintaining any times. The <code style="font-size: 13px">r</code> option now triggers the Reset, setting the start time (and answer time if applicable) to the current time. Note that the <code style="font-size: 13px">a</code> option still sets the answer time to the current time if the channel was already answered.</li>
<li style="font-size: 13px">The <code style="font-size: 13px">s</code> option has been removed. A variable can be set on the original CDR if desired using the CDR function, and removed from a forked CDR using the same function.</li>
<li style="font-size: 13px">The <code style="font-size: 13px">T</code> option has been removed. The concept of <code style="font-size: 13px">DONT_TOUCH</code> and <code style="font-size: 13px">LOCKED</code> no longer applies in the CDR engine.</li>
<li style="font-size: 13px">The <code style="font-size: 13px">v</code> option now prevents the copy of the variables from the original CDR to the forked CDR. Previously the variables were always copied but were removed from the original. This was changed as removing variables from a CDR can have unintended side effects - this option allows the user to prevent propagation of variables from the original to the forked without modifying the original.</li>
</ul>
<h2 id="Newin12-MeetMe"> <span style="line-height: 1.4285715;">MeetMe</span> </h2>
<p style="font-size: 13px"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">* Added the <code style="font-size: 13px">n</code> option to MeetMe to prevent application of the DENOISE </span><span style="line-height: 1.4285715;">function to a channel joining a conference. Some channel drivers that vary </span><span style="line-height: 1.4285715;">the number of audio samples in a voice frame will experience significant </span><span style="line-height: 1.4285715;">quality problems if a denoiser is attached to the channel; this option gives </span><span style="line-height: 1.4285715;">them the ability to remove the denoiser without having to unload <code style="font-size: 13px">func_speex</code>.</span> </p>
<h2 id="Newin12-MixMonitor"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">MixMonitor</span> </h2>
<p style="font-size: 13px"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">* The 'b' option now includes conferences as well as sounds played to the </span><span style="line-height: 1.4285715;">participants.</span> </p>
<p style="font-size: 13px"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">* The AUDIOHOOK_INHERIT function is no longer needed to keep a MixMonitor </span><span style="line-height: 1.4285715;">running during a transfer. If a MixMonitor is started on a channel, </span><span style="line-height: 1.4285715;">the MixMonitor will continue to record the audio passing through the </span><span style="line-height: 1.4285715;">channel even in the presence of transfers.</span> </p>
<h2 id="Newin12-NoCDR"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">NoCDR</span> </h2>
<p style="font-size: 13px"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">* The NoCDR application is deprecated. Please use the CDR_PROP function to </span><span style="line-height: 1.4285715;">disable CDRs.</span> </p>
<p style="font-size: 13px"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">* While the NoCDR application will prevent CDRs for a channel from being propagated to registered CDR backends, it will not prevent that data from being collected. Hence, a subsequent call to ResetCDR or the CDR_PROP function that enables CDRs on a channel will restore those records that have not yet been finalized.</span> </p>
<h2 id="Newin12-ParkAndAnnounce"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">ParkAndAnnounce</span> </h2>
<p style="font-size: 13px"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">* The app_parkandannounce module has been removed. The application </span><span style="line-height: 1.4285715;">ParkAndAnnounce is now provided by the res_parking module. See the </span><span style="line-height: 1.4285715;">res_parking changes for more information.</span> </p>
<h2 id="Newin12-Queue"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">Queue</span> </h2>
<p style="font-size: 13px"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">* Added queue available hint. The hint can be added to the dialplan using the </span><span style="line-height: 1.4285715;">following syntax: exten,hint,Queue:{queue_name}_avail </span><span style="line-height: 1.4285715;">For example, if the name of the queue is 'markq': </span><span style="line-height: 1.4285715;">exten => 8501,hint,Queue:markq_avail </span><span style="line-height: 1.4285715;">This will report 'InUse' if there are no logged in agents or no free agents. </span><span style="line-height: 1.4285715;">It will report 'Idle' when an agent is free.</span> </p>
<p style="font-size: 13px">* Queues now support a hint for member paused state. The hint uses the form 'Queue:{queue_name}_pause_{member_name}', where {queue_name} and {member_name} are the name of the queue and the name of the member to subscribe to, respectively. For example: exten => 8501,hint,Queue:sales_pause_mark. Members will show as In Use when paused.</p>
<p style="font-size: 13px">* The configuration options eventwhencalled and eventmemberstatus have been removed. As a result, the AMI events QueueMemberStatus, AgentCalled, AgentConnect, AgentComplete, AgentDump, and AgentRingNoAnswer will always be sent. The "Variable" fields will also no longer exist on the Agent* events. These events can be filtered out from a connected AMI client using the eventfilter setting in manager.conf.</p>
<p style="font-size: 13px">* The queue log now differentiates between blind and attended transfers. A blind transfer will result in a BLINDTRANSFER message with the destination context and extension. An attended transfer will result in an ATTENDEDTRANSFER message. This message will indicate the method by which the attended transfer was completed: "BRIDGE" for a bridge merge, "APP" for running an application on a bridge or channel, or "LINK" for linking two bridges together with local channels. The queue log will also now detect externally initiated blind and attended transfers and record the transfer status accordingly.</p>
<p style="font-size: 13px">* When performing queue pause/unpause on an interface without specifying an individual queue, the PAUSEALL/UNPAUSEALL event will only be logged if at least one member of any queue exists for that interface.</p>
<p style="font-size: 13px">* Added the 'queue_log_realtime_use_gmt' option to have timestamps in GMT for realtime queue log entries.</p>
<h2 id="Newin12-ResetCDR"> <span style="line-height: 1.4285715;">ResetCDR</span> </h2>
<p style="font-size: 13px"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">* The 'e' option has been deprecated. Use the CDR_PROP function to re-enable </span><span style="line-height: 1.4285715;">CDRs when they were previously disabled on a channel.</span> </p>
<p style="font-size: 13px">* The 'w' and 'a' options have been removed. Dispatching CDRs to registered backends occurs on an as-needed basis in order to preserve linkedid propagation and other needed behavior.</p>
<h2 id="Newin12-SayAlphaCase"> <span style="line-height: 1.4285715;">SayAlphaCase</span> </h2>
<p style="font-size: 13px"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">* A new application, this is similar to SayAlpha except that it supports </span><span style="line-height: 1.4285715;">case sensitive playback of the specified characters. For example, </span><span style="line-height: 1.4285715;">SayAlphaCase(u,aBc) will result in 'a uppercase b c'.</span> </p>
<h2 id="Newin12-SetAMAFlags"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">SetAMAFlags</span> </h2>
<p style="font-size: 13px"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">* This application is deprecated in favor of CHANNEL(amaflags).</span> </p>
<h2 id="Newin12-SendDTMF"> <span style="line-height: 1.4285715;">S</span><span style="line-height: 1.4285715;">endDTMF</span> </h2>
<p style="font-size: 13px"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">* The SendDTMF application will now accept 'W' as valid input. This will cause </span><span style="line-height: 1.4285715;">the application to delay one second while streaming DTMF.</span> </p>
<h2 id="Newin12-Stasis"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">Stasis</span> </h2>
<p style="font-size: 13px"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">* A new application in Asterisk 12, this hands control of the channel calling </span><span style="line-height: 1.4285715;">the application over to an external system. Currently, external systems </span><span style="line-height: 1.4285715;">manipulate channels in Stasis through the Asterisk RESTful Interface (ARI).</span> </p>
<h2 id="Newin12-UserEvent"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">UserEvent</span> </h2>
<p style="font-size: 13px"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">* UserEvent will now handle duplicate keys by overwriting the previous value </span><span style="line-height: 1.4285715;">assigned to the key.</span> </p>
<p style="font-size: 13px"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">* In addition to AMI, UserEvent invocations will now be distributed to any </span><span style="line-height: 1.4285715;">interested Stasis applications.</span> </p>
<h2 id="Newin12-VoiceMail"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">VoiceMail</span> </h2>
<p style="font-size: 13px"> <span style="line-height: 1.4285715;"> </span><span style="line-height: 1.4285715;">* The voicemail.conf configuration file now has an 'alias' configuration </span><span style="line-height: 1.4285715;">parameter for use with the Directory application. The voicemail realtime </span><span style="line-height: 1.4285715;">database table schema has also been updated with an 'alias' column.</span> </p>
<p style="font-size: 13px"> <span style="line-height: 1.4285715;"> <br /> </span> </p>
<p style="font-size: 13px"> <span style="line-height: 1.4285715;">Codecs</span> </p>
<p style="font-size: 13px">------------------<br /> * Pass through support has been added for both VP8 and Opus.</p>
<p style="font-size: 13px">* Added format attribute negotiation for the Opus codec. Format attribute<br /> negotiation is provided by the res_format_attr_opus module.</p>
<p style="font-size: 13px"> <br />Core<br />------------------<br /> * Masquerades as an operation inside Asterisk have been effectively hidden<br /> by the migration to the Bridging API. As such, many 'quirks' of Asterisk<br /> no longer occur. This includes renaming of channels, "<ZOMBIE>" channels,<br /> dropping of frame/audio hooks, and other internal implementation details<br /> that users had to deal with. This fundamental change has large implications<br /> throughout the changes documented for this version. For more information<br /> about the new core architecture of Asterisk, please see the Asterisk wiki.</p>
<p style="font-size: 13px">* Multiple parties in a bridge may now be transferred. If a participant in a<br /> multi-party bridge initiates a blind transfer, a Local channel will be used<br /> to execute the dialplan location that the transferer sent the parties to. If<br /> a participant in a multi-party bridge initiates an attended transfer,<br /> several options are possible. If the attended transfer results in a transfer<br /> to an application, a Local channel is used. If the attended transfer results<br /> in a transfer to another channel, the resulting channels will be merged into<br /> a single bridge.</p>
<p style="font-size: 13px">* The channel variable ATTENDED_TRANSFER_COMPLETE_SOUND is no longer channel<br /> driver specific. If the channel variable is set on the transferrer channel,<br /> the sound will be played to the target of an attended transfer.</p>
<p style="font-size: 13px">* The channel variable BRIDGEPEER becomes a comma separated list of peers in<br /> a multi-party bridge. The BRIDGEPEER value can have a maximum of 10 peers<br /> listed. Any more peers in the bridge will not be included in the list.<br /> BRIDGEPEER is not valid in holding bridges like parking since those channels<br /> do not talk to each other even though they are in a bridge.</p>
<p style="font-size: 13px">* The channel variable BRIDGEPVTCALLID is only valid for two party bridges<br /> and will contain a value if the BRIDGEPEER's channel driver supports it.</p>
<p style="font-size: 13px">* A channel variable ATTENDEDTRANSFER is now set which indicates which channel<br /> was responsible for an attended transfer in a similar fashion to<br /> BLINDTRANSFER.</p>
<p style="font-size: 13px">* Modules using the Configuration Framework or Sorcery must have XML<br /> configuration documentation. This configuration documentation is included<br /> with the rest of Asterisk's XML documentation, and is accessible via CLI<br /> commands. See the CLI changes for more information.</p>
<p style="font-size: 13px">AMI (Asterisk Manager Interface)<br />------------------<br /> * Major changes were made to both the syntax as well as the semantics of the<br /> AMI protocol. In particular, AMI events have been substantially improved<br /> in this version of Asterisk. For more information, please see the AMI<br /> specification at <a href="https://wiki.asterisk.org/wiki/x/dAFRAQ" rel="nofollow" style="color: #326ca6; text-decoration: none">https://wiki.asterisk.org/wiki/x/dAFRAQ</a> </p>
<p style="font-size: 13px">* AMI events that reference a particular channel or bridge will now always<br /> contain a standard set of fields. When multiple channels or bridges are<br /> referenced in an event, fields for at least some subset of the channels<br /> and bridges in the event will be prefixed with a descriptive name to avoid<br /> name collisions. See the AMI event documentation on the Asterisk wiki for<br /> more information.</p>
<p style="font-size: 13px">* The CLI command 'manager show commands' no longer truncates command names<br /> longer than 15 characters and no longer shows authorization requirement<br /> for commands. 'manager show command' now displays the privileges needed<br /> for using a given manager command instead.</p>
<p style="font-size: 13px">* The SIPshowpeer action will now include a 'SubscribeContext' field for a<br /> peer in its response if the peer has a subscribe context set.</p>
<p style="font-size: 13px">* The SIPqualifypeer action now acknowledges the request once it has<br /> established that the request is against a known peer. It also issues a new<br /> event, 'SIPQualifyPeerDone', once the qualify action has been completed.</p>
<p style="font-size: 13px">* The PlayDTMF action now supports an optional 'Duration' parameter. This<br /> specifies the duration of the digit to be played, in milliseconds.</p>
<p style="font-size: 13px">* Added VoicemailRefresh action to allow an external entity to trigger mailbox<br /> updates when changes occur instead of requiring the use of pollmailboxes.</p>
<p style="font-size: 13px">* Added a new action 'ControlPlayback'. The ControlPlayback action allows an<br /> AMI client to manipulate audio currently being played back on a channel. The<br /> supported operations depend on the application being used to send audio to<br /> the channel. When the audio playback was initiated using the ControlPlayback<br /> application or CONTROL STREAM FILE AGI command, the audio can be paused,<br /> stopped, restarted, reversed, or skipped forward. When initiated by other<br /> mechanisms (such as the Playback application), the audio can be stopped,<br /> reversed, or skipped forward.</p>
<p style="font-size: 13px">* Channel related events now contain a snapshot of channel state, adding new<br /> fields to many of these events.</p>
<p style="font-size: 13px">* The AMI event 'Newexten' field 'Extension' is deprecated, and may be removed<br /> in a future release. Please use the common 'Exten' field instead.</p>
<p style="font-size: 13px">* The AMI event 'UserEvent' from app_userevent now contains the channel state<br /> fields. The channel state fields will come before the body fields.</p>
<p style="font-size: 13px">* The AMI events 'ParkedCall', 'ParkedCallTimeOut', 'ParkedCallGiveUp', and<br /> 'UnParkedCall' have changed significantly in the new res_parking module.</p>
<p style="font-size: 13px">The 'Channel' and 'From' headers are gone. For the channel that was parked<br /> or is coming out of parking, a 'Parkee' channel snapshot is issued and it<br /> has a number of fields associated with it. The old 'Channel' header relayed<br /> the same data as the new 'ParkeeChannel' header.</p>
<p style="font-size: 13px">The 'From' field was ambiguous and changed meaning depending on the event.<br /> for most of these, it was the name of the channel that parked the call<br /> (the 'Parker'). There is no longer a header that provides this channel name,<br /> however the 'ParkerDialString' will contain a dialstring to redial the<br /> device that parked the call.</p>
<p style="font-size: 13px">On UnParkedCall events, the 'From' header would instead represent the<br /> channel responsible for retrieving the parkee. It receives a channel<br /> snapshot labeled 'Retriever'. The 'from' field is is replaced with<br /> 'RetrieverChannel'.</p>
<p style="font-size: 13px">Lastly, the 'Exten' field has been replaced with 'ParkingSpace'.</p>
<p style="font-size: 13px">* The AMI event 'Parkinglot' (response to 'Parkinglots' command) in a similar<br /> fashion has changed the field names 'StartExten' and 'StopExten' to<br /> 'StartSpace' and 'StopSpace' respectively.</p>
<p style="font-size: 13px">* The deprecated use of | (pipe) as a separator in the channelvars setting in<br /> manager.conf has been removed.</p>
<p style="font-size: 13px">* Channel Variables conveyed with a channel no longer contain the name of the<br /> channel as part of the key field, i.e., ChanVariable(SIP/foo): bar=baz is now<br /> ChanVariable: bar=baz. When multiple channels are present in a single AMI<br /> event, the various ChanVariable fields will contain a suffix that specifies<br /> which channel they correspond to.</p>
<p style="font-size: 13px">* The NewPeerAccount AMI event is no longer raised. The NewAccountCode AMI<br /> event always conveys the AMI event for a particular channel.</p>
<p style="font-size: 13px">* All 'Reload' events have been consolidated into a single event type. This<br /> event will always contain a Module field specifying the name of the module<br /> and a Status field denoting the result of the reload. All modules now issue<br /> this event when being reloaded.</p>
<p style="font-size: 13px">* The 'ModuleLoadReport' event has been removed. Most AMI connections would<br /> fail to receive this event due to being connected after modules have loaded.<br /> AMI connections that want to know when Asterisk is ready should listen for<br /> the 'FullyBooted' event.</p>
<p style="font-size: 13px">* app_fax now sends the same send fax/receive fax events as res_fax. The<br /> 'FaxSent' event is now the 'SendFAX' event, and the 'FaxReceived' event is<br /> now the 'ReceiveFAX' event.</p>
<p style="font-size: 13px">* The 'MusicOnHold' event is now two events: 'MusicOnHoldStart' and<br /> 'MusicOnHoldStop'. The sub type field has been removed.</p>
<p style="font-size: 13px">* The 'JabberEvent' event has been removed. It is not AMI's purpose to be a<br /> carrier for another protocol.</p>
<p style="font-size: 13px">* The Bridge Manager action's 'Playtone' header now accepts more fine-grained<br /> options. 'Channel1' and 'Channel2' may be specified in order to play a tone<br /> to the specific channel. 'Both' may be specified to play a tone to both<br /> channels. The old 'yes' option is still accepted as a way of playing the<br /> tone to Channel2 only.</p>
<p style="font-size: 13px">* The AMI 'Status' response event to the AMI Status action replaces the<br /> 'BridgedChannel' and 'BridgedUniqueid' headers with the 'BridgeID' header to<br /> indicate what bridge the channel is currently in.</p>
<p style="font-size: 13px">* The AMI 'Hold' event has been moved out of individual channel drivers, into<br /> core, and is now two events: 'Hold' and 'Unhold'. The status field has been<br /> removed.</p>
<p style="font-size: 13px">* The AMI events in app_queue have been made more consistent with each other.<br /> Events that reference channels (QueueCaller* and Agent*) will show<br /> information about each channel. The (infamous) 'Join' and 'Leave' AMI<br /> events have been changed to 'QueueCallerJoin' and 'QueueCallerLeave'.</p>
<p style="font-size: 13px">* The 'MCID' AMI event now publishes a channel snapshot when available and<br /> its non-channel-snapshot parameters now use either the "MCallerID" or<br /> 'MConnectedID' prefixes with Subaddr*, Name*, and Num* suffixes instead<br /> of 'CallerID' and 'ConnectedID' to avoid confusion with similarly named<br /> parameters in the channel snapshot.</p>
<p style="font-size: 13px">* The AMI events 'Agentlogin' and 'Agentlogoff' have been renamed<br /> 'AgentLogin' and 'AgentLogoff' respectively.</p>
<p style="font-size: 13px">* The 'Channel' key used in the 'AlarmClear', 'Alarm', and 'DNDState' has been<br /> renamed "DAHDIChannel" since it does not convey an Asterisk channel name.</p>
<p style="font-size: 13px">* 'ChannelUpdate' events have been removed.</p>
<p style="font-size: 13px">* All AMI events now contain a 'SystemName' field, if available.</p>
<p style="font-size: 13px">* Local channel optimization is now conveyed in two events:<br /> 'LocalOptimizationBegin' and 'LocalOptimizationEnd'. The Begin event is sent<br /> when the Local channel driver begins attempting to optimize itself out of<br /> the media path; the End event is sent after the channel halves have<br /> successfully optimized themselves out of the media path.</p>
<p style="font-size: 13px">* Local channel information in events is now prefixed with 'LocalOne' and<br /> 'LocalTwo'. This replaces the suffix of '1' and '2' for the two halves of<br /> the Local channel. This affects the 'LocalBridge', 'LocalOptimizationBegin',<br /> and 'LocalOptimizationEnd' events.</p>
<p style="font-size: 13px">* The option 'allowmultiplelogin' can now be set or overriden in a particular<br /> account. When set in the general context, it will act as the default<br /> setting for defined accounts.</p>
<p style="font-size: 13px">* The 'BridgeAction' event was removed. It technically added no value, as the<br /> Bridge Action already receives confirmation of the bridge through a<br /> successful completion Event.</p>
<p style="font-size: 13px">* The 'BridgeExec' events were removed. These events duplicated the events that<br /> occur in the Briding API, and are conveyed now through BridgeCreate,<br /> BridgeEnter, and BridgeLeave events.</p>
<p style="font-size: 13px">* The 'RTCPSent'/'RTCPReceived' events have been significantly modified from<br /> previous versions. They now report all SR/RR packets sent/received, and<br /> have been restructured to better reflect the data sent in a SR/RR. In<br /> particular, the event structure now supports multiple report blocks.</p>
<p style="font-size: 13px">* Added 'BlindTransfer' and 'AttendedTransfer' events. These events are<br /> raised when a blind transfer/attended transfer completes successfully.<br /> They contain information about the transfer that just completed, including<br /> the location of the transfered channel.</p>
<p style="font-size: 13px">CDR (Call Detail Records)<br />------------------<br /> * Significant changes have been made to the behavior of CDRs. The CDR engine<br /> was effectively rewritten and built on the Stasis message bus. For a full<br /> definition of CDR behavior in Asterisk 12, please read the specification<br /> on the Asterisk wiki (wiki.asterisk.org).</p>
<p style="font-size: 13px">* CDRs will now be created between all participants in a bridge. For each<br /> pair of channels in a bridge, a CDR is created to represent the path of<br /> communication between those two endpoints. This lets an end user choose who<br /> to bill for what during bridge operations with multiple parties.</p>
<p style="font-size: 13px">* The duration, billsec, start, answer, and end times now reflect the times<br /> associated with the current CDR for the channel, as opposed to a cumulative<br /> measurement of all CDRs for that channel.</p>
<p style="font-size: 13px">* When a CDR is dispatched, user defined CDR variables from both parties are<br /> included in the resulting CDR. If both parties have the same variable, only<br /> the Party A value is provided.</p>
<p style="font-size: 13px">* Added a new option to cdr.conf, 'debug'. When enabled, significantly more<br /> information regarding the CDR engine is logged as verbose messages. This<br /> option should only be used if the behavior of the CDR engine needs to be<br /> debugged.</p>
<p style="font-size: 13px">* Added CLI command 'cdr set debug {on|off}'. This toggles the 'debug' setting<br /> normally configured in cdr.conf.</p>
<p style="font-size: 13px">* Added CLI command 'cdr show active {channel}'. When {channel} is not<br /> specified, this command provides a summary of the channels with CDR<br /> information and their statistics. When {channel} is specified, it shows<br /> detailed information about all records associated with {channel}.</p>
<p style="font-size: 13px">CEL (Channel Event Logging)<br />------------------<br /> * CEL has undergone significant rework in Asterisk 12, and is now built on the<br /> Stasis message bus. Please see the specification for CEL on the Asterisk<br /> wiki at <a href="https://wiki.asterisk.org/wiki/x/4ICLAQ" rel="nofollow" style="color: #326ca6; text-decoration: none">https://wiki.asterisk.org/wiki/x/4ICLAQ</a> for more detailed<br /> information.</p>
<p style="font-size: 13px">* The 'extra' field of all CEL events that use it now consists of a JSON blob<br /> with key/value pairs which are defined in the Asterisk 12 CEL documentation.</p>
<p style="font-size: 13px">* BLINDTRANSFER events now report the transferee bridge unique<br /> identifier, extension, and context in a JSON blob as the extra string<br /> instead of the transferee channel name as the peer.</p>
<p style="font-size: 13px">* ATTENDEDTRANSFER events now report the peer as NULL and additional<br /> information in the 'extra' string as a JSON blob. For transfers that occur<br /> between two bridged channels, the 'extra' JSON blob contains the primary<br /> bridge unique identifier, the secondary channel name, and the secondary<br /> bridge unique identifier. For transfers that occur between a bridged channel<br /> and a channel running an app, the 'extra' JSON blob contains the primary<br /> bridge unique identifier, the secondary channel name, and the app name.</p>
<p style="font-size: 13px">* LOCAL_OPTIMIZE events have been added to convey local channel<br /> optimizations with the record occurring for the semi-one channel and<br /> the semi-two channel name in the peer field.</p>
<p style="font-size: 13px">* BRIDGE_START, BRIDGE_END, BRIDGE_UPDATE, 3WAY_START, 3WAY_END, CONF_ENTER,<br /> CONF_EXIT, CONF_START, and CONF_END events have all been removed. These<br /> events have been replaced by BRIDGE_ENTER/BRIDGE_EXIT. The BRIDGE_ENTER<br /> and BRIDGE_EXIT events are raised when a channel enters/exits any bridge,<br /> regardless of whether or not that bridge happens to contain multiple<br /> parties.</p>
<p style="font-size: 13px">CLI<br />-------------------<br /> * When compiled with '--enable-dev-mode', the astobj2 library will now add<br /> several CLI commands that allow for inspection of ao2 containers that<br /> register themselves with astobj2. The CLI commands are 'astobj2 container<br /> dump', 'astobj2 container stats', and 'astobj2 container check'.</p>
<p style="font-size: 13px">* Added specific CLI commands for bridge inspection. This includes 'bridge<br /> show all', which lists all bridges in the system, and 'bridge show {id}',<br /> which provides specific information about a bridge.</p>
<p style="font-size: 13px">* Added CLI command 'bridge destroy'. This will destroy the specified bridge,<br /> ejecting the channels currently in the bridge. If the channels cannot<br /> continue in the dialplan or application that put them in the bridge, they<br /> will be hung up.</p>
<p style="font-size: 13px">* Added command 'bridge kick'. This will eject a single channel from a bridge.</p>
<p style="font-size: 13px">* Added commands to inspect and manipulate the registered bridge technologies.<br /> This include 'bridge technology show', which lists the registered bridge<br /> technologies, as well as 'bridge technology {suspend|unsuspend} {tech}',<br /> which controls whether or not a registered bridge technology can be used<br /> during smart bridge operations. If a technology is suspended, it will not<br /> be used when a bridge technology is picked for channels; when unsuspended,<br /> it can be used again.</p>
<p style="font-size: 13px">* The command 'config show help {module} {type} {option}' will show<br /> configuration documentation for modules with XML configuration<br /> documentation. When {module}, {type}, and {option} are omitted, a listing<br /> of all modules with registered documentation is displayed. When {module}<br /> is specified, a listing of all configuration types for that module is<br /> displayed, along with their synopsis. When {module} and {type} are<br /> specified, a listing of all configuration options for that type are<br /> displayed along with their synopsis. When {module}, {type}, and {option}<br /> are specified, detailed information for that configuration option is<br /> displayed.</p>
<p style="font-size: 13px">* Added 'core show sounds' and 'core show sound' CLI commands. These display<br /> a listing of all installed media sounds available on the system and<br /> detailed information about a sound, respectively.</p>
<p style="font-size: 13px">* 'xmldoc dump' has been added. This CLI command will dump the XML<br /> documentation DOM as a string to the specified file. The Asterisk core<br /> will populate certain XML elements pulled from the source files with<br /> additional run-time information; this command lets a user produce the<br /> XML documentation with all information.</p>
<p style="font-size: 13px">Features<br />-------------------<br /> * Parking has been pulled from core and placed into a separate module called<br /> res_parking. See Parking changes below for more details. Configuration for<br /> parking should now be performed in res_parking.conf. Configuration for<br /> parking in features.conf is now unsupported.</p>
<p style="font-size: 13px">* Core attended transfers now have several new options. While performing an<br /> attended transfer, the transferer now has the following options:<br /> - *1 - cancel the attended transfer (configurable via atxferabort)<br /> - *2 - complete the attended transfer, dropping out of the call<br /> (configurable via atxfercomplete)<br /> - *3 - complete the attended transfer, but stay in the call. This will turn<br /> the call into a multi-party bridge (configurable via atxferthreeway)<br /> - *4 - swap to the other party. Once an attended transfer has begun, this<br /> options may be used multiple times (configurable via atxferswap)</p>
<p style="font-size: 13px">* For DTMF blind and attended transfers, the channel variable TRANSFER_CONTEXT<br /> must be on the channel initiating the transfer to have any effect.</p>
<p style="font-size: 13px">* The BRIDGE_FEATURES channel variable would previously only set features for<br /> the calling party and would set this feature regardless of whether the<br /> feature was in caps or in lowercase. Use of a caps feature for a letter<br /> will now apply the feature to the calling party while use of a lowercase<br /> letter will apply that feature to the called party.</p>
<p style="font-size: 13px">* Add support for automixmon to the BRIDGE_FEATURES channel variable.</p>
<p style="font-size: 13px">* The channel variable DYNAMIC_PEERNAME is redundant with BRIDGEPEER and is<br /> removed. The more useful DYNAMIC_WHO_ACTIVATED gives the channel name that<br /> activated the dynamic feature.</p>
<p style="font-size: 13px">* The channel variables DYNAMIC_FEATURENAME and DYNAMIC_WHO_ACTIVATED are set<br /> only on the channel executing the dynamic feature. Executing a dynamic<br /> feature on the bridge peer in a multi-party bridge will execute it on all<br /> peers of the activating channel.</p>
<p style="font-size: 13px">* You can now have the settings for a channel updated using the FEATURE()<br /> and FEATUREMAP() functions inherited to child channels by setting<br /> FEATURE(inherit)=yes.</p>
<p style="font-size: 13px">* automixmon now supports additional channel variables from automon including:<br /> TOUCH_MIXMONITOR_PREFIX, TOUCH_MIXMONITOR_MESSAGE_START,<br /> and TOUCH_MIXMONITOR_MESSAGE_STOP</p>
<p style="font-size: 13px">* A new general features.conf option 'recordingfailsound' has been added which<br /> allowssetting a failure sound for a user tries to invoke a recording feature<br /> such as automon or automixmon and it fails.</p>
<p style="font-size: 13px">* It is no longer necessary (or possible) to define the ATXFER_NULL_TECH in<br /> features.c for atxferdropcall=no to work properly. This option now just<br /> works.</p>
<p style="font-size: 13px">Logging<br />-------------------<br /> * Added log rotation strategy 'none'. If set, no log rotation strategy will<br /> be used. Given that this can cause the Asterisk log files to grow quickly,<br /> this option should only be used if an external mechanism for log management<br /> is preferred.</p>
<p style="font-size: 13px">Realtime<br />------------------<br /> * Dynamic realtime tables for SIP Users can now include a 'path' field. This<br /> will store the path information for that peer when it registers. Realtime<br /> tables can also use the 'supportpath' field to enable Path header support.</p>
<p style="font-size: 13px">* LDAP realtime configurations for SIP Users now have the AstAccountPathSupport<br /> objectIdentifier. This maps to the supportpath option in sip.conf.</p>
<p style="font-size: 13px">Sorcery<br />------------------<br /> * Sorcery is a new data abstraction and object persistence API in Asterisk. It<br /> provides modules a useful abstraction on top of the many storage mechanisms<br /> in Asterisk, including the Asterisk Database, static configuration files,<br /> static Realtime, and dynamic Realtime. It also provides a caching service.<br /> Users can configure a hierarchy of data storage layers for specific modules<br /> in sorcery.conf.</p>
<p style="font-size: 13px">* All future modules which utilize Sorcery for object persistence must have a<br /> column named "id" within their schema when using the Sorcery realtime module.<br /> This column must be able to contain a string of up to 128 characters in length.</p>
<p style="font-size: 13px">Security Events Framework<br />------------------<br /> * Security Event timestamps now use ISO 8601 formatted date/time instead of<br /> the "seconds-microseconds" format that it was using previously.</p>
<p style="font-size: 13px">Stasis Message Bus<br />------------------<br /> * The Stasis message bus is a publish/subscribe message bus internal to<br /> Asterisk. Many services in Asterisk are built on the Stasis message bus,<br /> including AMI, ARI, CDRs, and CEL. Parameters controlling the operation of<br /> Stasis can be configured in stasis.conf. Note that these parameters operate<br /> at a very low level in Asterisk, and generally will not require changes.</p>
<p style="font-size: 13px"> <br />Channel Drivers<br />------------------<br /> * When a channel driver is configured to enable jiterbuffers, they are now<br /> applied unconditionally when a channel joins a bridge. If a jitterbuffer<br /> is already set for that channel when it enters, such as by the JITTERBUFFER<br /> function, then the existing jitterbuffer will be used and the one set by<br /> the channel driver will not be applied.</p>
<p style="font-size: 13px"> <span class="confluence-anchor-link" id="Newin12-channels_chan_agent"></span> </p>
<p style="font-size: 13px">chan_agent<br />------------------<br /> * chan_agent has been removed and replaced with AgentLogin and AgentRequest<br /> dialplan applications provided by the app_agent_pool module. Agents are<br /> connected with callers using the new AgentRequest dialplan application.<br /> The Agents:<agent-id> device state is available to monitor the status of an<br /> agent. See agents.conf.sample for valid configuration options.</p>
<p style="font-size: 13px">* The updatecdr option has been removed. Altering the names of channels on a<br /> CDR is not supported - the name of the channel is the name of the channel,<br /> and pretending otherwise helps no one. The AGENTUPDATECDR channel variable<br /> has also been removed, for the same reason.</p>
<p style="font-size: 13px">* The endcall and enddtmf configuration options are removed. Use the<br /> dialplan function CHANNEL(dtmf-features) to set DTMF features on the agent<br /> channel before calling AgentLogin.</p>
<p style="font-size: 13px">chan_bridge<br />------------------<br /> * chan_bridge has been removed. Its functionality has been incorporated<br /> directly into the ConfBridge application itself.</p>
<p style="font-size: 13px">chan_dahdi<br />------------------<br /> * Added the CLI command 'pri destroy span'. This will destroy the D-channel<br /> of the specified span and its B-channels. Note that this command should<br /> only be used if you understand the risks it entails.</p>
<p style="font-size: 13px">* The CLI command 'dahdi destroy channel' is now 'dahdi destroy channels'.<br /> A range of channels can be specified to be destroyed. Note that this command<br /> should only be used if you understand the risks it entails.</p>
<p style="font-size: 13px">* Added the CLI command 'dahdi create channels'. A range of channels can be<br /> specified to be created, or the keyword 'new' can be used to add channels<br /> not yet created.</p>
<p style="font-size: 13px">chan_local<br />------------------<br /> * The /b option has been removed.</p>
<p style="font-size: 13px">* chan_local moved into the system core and is no longer a loadable module.</p>
<p style="font-size: 13px">chan_mobile<br />------------------<br /> * Added general support for busy detection.</p>
<p style="font-size: 13px">* Added ECAM command support for Sony Ericsson phones.</p>
<p style="font-size: 13px">chan_pjsip<br />------------------<br /> * A new SIP channel driver for Asterisk, chan_pjsip is built on the PJSIP<br /> SIP stack. A collection of resource modules provides the bulk of the SIP<br /> functionality. For more information on the new SIP channel driver, see<br /> <a href="https://wiki.asterisk.org/wiki/x/JYGLAQ" rel="nofollow" style="color: #326ca6; text-decoration: none">https://wiki.asterisk.org/wiki/x/JYGLAQ</a> </p>
<p style="font-size: 13px">chan_sip<br />------------------<br /> * Added support for RFC 3327 "Path" headers. This can be enabled in sip.conf<br /> using the 'supportpath' setting, either on a global basis or on a peer basis.<br /> This setting enables Asterisk to route outgoing out-of-dialog requests via a<br /> set of proxies by using a pre-loaded route-set defined by the Path headers in<br /> the REGISTER request. See Realtime updates for more configuration information.</p>
<p style="font-size: 13px">* The SIP_CODEC family of variables may now specify more than one codec. Each<br /> codec must be separated by a comma. The first codec specified is the<br /> preferred codec for the offer. This allows a dialplan writer to specify both<br /> audio and video codecs, e.g., Set(SIP_CODEC=ulaw,h264)</p>
<p style="font-size: 13px">* The 'callevents' parameter has been removed. Hold AMI events are now raised<br /> in the core, and can be filtered out using the 'eventfilter' parameter<br /> in manager.conf.</p>
<p style="font-size: 13px">* Added 'ignore_requested_pref'. When enabled, this will use the preferred<br /> codecs configured for a peer instead of the requested codec.</p>
<p style="font-size: 13px">chan_skinny<br />------------------<br /> * Added the 'immeddialkey' parameter. If set, when the user presses the<br /> configured key the already entered number will be immediately dialed. This<br /> is useful when the dialplan allows for variable length pattern matching.<br /> Valid options are '*' and '#'.</p>
<p style="font-size: 13px">* Added the 'callfwdtimeout' parameter. This configures the amount of time (in<br /> milliseconds) before a call forward is considered to not be answered.</p>
<p style="font-size: 13px">* The 'serviceurl' parameter allows Service URLs to be attached to line<br /> buttons.</p>
<p style="font-size: 13px"> <br />Functions<br />------------------</p>
<p style="font-size: 13px">AGENT<br />------------------<br /> * The password option has been disabled, as the AgentLogin application no<br /> longer provides authentication.</p>
<p style="font-size: 13px">AUDIOHOOK_INHERIT<br />------------------<br /> * Due to changes in the Asterisk core, this function is no longer needed to<br /> preserve a MixMonitor on a channel during transfer operations and dialplan<br /> execution. It is effectively obsolete.</p>
<p style="font-size: 13px">CDR (function)<br />------------------<br /> * The 'amaflags' and 'accountcode' attributes for the CDR function are<br /> deprecated. Use the CHANNEL function instead to access these attributes.</p>
<p style="font-size: 13px">* The 'l' option has been removed. When reading a CDR attribute, the most<br /> recent record is always used. When writing a CDR attribute, all non-finalized<br /> CDRs are updated.</p>
<p style="font-size: 13px">* The 'r' option has been removed, for the same reason as the 'l' option.</p>
<p style="font-size: 13px">* The 's' option has been removed, as LOCKED semantics no longer exist in the<br /> CDR engine.</p>
<p style="font-size: 13px">CDR_PROP<br />------------------<br /> * A new function CDR_PROP has been added. This function lets you set properties<br /> on a channel's active CDRs. This function is write-only. Properties accept<br /> boolean values to set/clear them on the channel's CDRs. Valid properties<br /> include:<br /> - 'party_a' - make this channel the preferred Party A in any CDR between two<br /> channels. If two channels have this property set, the creation time of the<br /> channel is used to determine who is Party A. Note that dialed channels are<br /> never Party A in a CDR.<br /> - 'disable' - disable CDRs on this channel. This is analogous to the NoCDR<br /> application when set to True, and analogous to the 'e' option in ResetCDR<br /> when set to False.</p>
<p style="font-size: 13px">CHANNEL<br />------------------<br /> * Added the argument 'dtmf_features'. This sets the DTMF features that will be<br /> enabled on a channel when it enters a bridge. Allowed values are 'T', 'K',<br /> 'H', 'W', and 'X', and are analogous to the parameters passed to the Dial<br /> application.</p>
<p style="font-size: 13px">* Added the argument 'after_bridge_goto'. This can be set to a parseable Goto<br /> string, i.e., [[context],extension],priority. If set on a channel, if a<br /> channel leaves a bridge but is not hung up it will resume dialplan execution<br /> at that location.</p>
<p style="font-size: 13px">JITTERBUFFER<br />------------------<br /> * JITTERBUFFER now accepts an argument of 'disabled' which can be used<br /> to remove jitterbuffers previously set on a channel with JITTERBUFFER.<br /> The value of this setting is ignored when disabled is used for the argument.</p>
<p style="font-size: 13px">PJSIP_DIAL_CONTACTS<br />------------------<br /> * A new function provided by chan_pjsip, this function can be used in<br /> conjunction with the Dial application to construct a dial string that will<br /> dial all contacts on an Address of Record associated with a chan_pjsip<br /> endpoint.</p>
<p style="font-size: 13px">PJSIP_MEDIA_OFFER<br />------------------<br /> * Provided by chan_pjsip, this function sets the codecs to be offerred on the<br /> outbound channel prior to dialing.</p>
<p style="font-size: 13px">REDIRECTING<br />------------------<br /> * Redirecting reasons can now be set to arbitrary strings. This means<br /> that the REDIRECTING dialplan function can be used to set the redirecting<br /> reason to any string. It also allows for custom strings to be read as the<br /> redirecting reason from SIP Diversion headers.</p>
<p style="font-size: 13px">SPEECH_ENGINE<br />------------------<br /> * The SPEECH_ENGINE function now supports read operations. When read from, it<br /> will return the current value of the requested attribute.</p>
<p style="font-size: 13px"> <br />Resources<br />------------------</p>
<p style="font-size: 13px">res_agi (Asterisk Gateway Interface)<br />------------------<br /> * The manager event AGIExec has been split into AGIExecStart and AGIExecEnd.</p>
<p style="font-size: 13px">* The manager event AsyncAGI has been split into AsyncAGIStart, AsyncAGIExec,<br /> and AsyncAGIEnd.</p>
<p style="font-size: 13px">* The CONTROL STREAM FILE command now accepts an offsetms parameter. This<br /> will start the playback of the audio at the position specified. It will<br /> also return the final position of the file in 'endpos'.</p>
<p style="font-size: 13px">* The CONTROL STREAM FILE command will now populate the CPLAYBACKSTATUS<br /> channel variable if the user stopped the file playback or if a remote<br /> entity stopped the playback. If neither stopped the playback, it will<br /> indicate the overall success/failure of the playback. If stopped early,<br /> the final offset of the file will be set in the CPLAYBACKOFFSET channel<br /> variable.</p>
<p style="font-size: 13px">* The SAY ALPHA command now accepts an additional parameter to control<br /> whether it specifies the case of uppercase, lowercase, or all letters to<br /> provide functionality similar to SayAlphaCase.</p>
<p style="font-size: 13px">res_ari (Asterisk RESTful Interface) (and others)<br />------------------<br /> * The Asterisk RESTful Interface (ARI) provides a mechanism to expose and<br /> control telephony primitives in Asterisk by remote client. This includes<br /> channels, bridges, endpoints, media, and other fundamental concepts. Users<br /> of ARI can develop their own communications applications, controlling<br /> multiple channels using an HTTP RESTful interface and receiving JSON events<br /> about the objects via a WebSocket connection. ARI can be configured in<br /> Asterisk via ari.conf. For more information on ARI, see<br /> <a href="https://wiki.asterisk.org/wiki/x/0YCLAQ" rel="nofollow" style="color: #326ca6; text-decoration: none">https://wiki.asterisk.org/wiki/x/0YCLAQ</a> </p>
<p style="font-size: 13px">res_parking<br />-------------------<br /> * Parking has been extracted from the Asterisk core as a loadable module,<br /> res_parking. Configuration for parking is now provided by res_parking.conf.<br /> Configuration through features.conf is no longer supported.</p>
<p style="font-size: 13px">* res_parking uses the configuration framework. If an invalid configuration is<br /> supplied, res_parking will fail to load or fail to reload. Previously,<br /> invalid configurations would generally be accepted, with certain errors<br /> resulting in individually disabled parking lots.</p>
<p style="font-size: 13px">* Parked calls are now placed in bridges. While this is largely an<br /> architectural change, it does have implications on how channels in a parking<br /> lot are viewed. For example, commands that display channels in bridges will<br /> now also display the channels in a parking lot.</p>
<p style="font-size: 13px">* The order of arguments for the new parking applications have been modified.<br /> Timeout and return context/exten/priority are now implemented as options,<br /> while the name of the parking lot is now the first parameter. See the<br /> application documentation for Park, ParkedCall, and ParkAndAnnounce for more<br /> in-depth information as well as syntax.</p>
<p style="font-size: 13px">* Extensions are by default no longer automatically created in the dialplan to<br /> park calls or pickup parked calls. Generation of dialplan extensions can be<br /> enabled using the 'parkext' configuration option.</p>
<p style="font-size: 13px">* ADSI functionality for parking is no longer supported. The 'adsipark'<br /> configuration option has been removed as a result.</p>
<p style="font-size: 13px">* The PARKINGSLOT channel variable has been deprecated in favor of<br /> PARKING_SPACE to match the naming scheme of the new system.</p>
<p style="font-size: 13px">* PARKING_SPACE and PARKEDLOT channel variables will now be set for a parked<br /> channel even when the configuration option 'comebactoorigin' is enabled.</p>
<p style="font-size: 13px">* A new CLI command 'parking show' has been added. This allows a user to<br /> inspect the parking lots that are currently in use.<br /> 'parking show <parkinglot>' will also show the parked calls in a specific<br /> parking lot.</p>
<p style="font-size: 13px">* The CLI command 'parkedcalls' is now deprecated in favor of<br /> 'parking show <parkinglot>'.</p>
<p style="font-size: 13px">* The AMI command 'ParkedCalls' will now accept a 'ParkingLot' argument which<br /> can be used to get a list of parked calls for a specific parking lot.</p>
<p style="font-size: 13px">* The AMI command 'Park' field 'Channel2' has been deprecated and replaced<br /> with 'TimeoutChannel'. If both 'Channel2' and 'TimeoutChannel' are<br /> specified, 'TimeoutChannel' will be used. The field 'TimeoutChannel' is no<br /> longer a required argument.</p>
<p style="font-size: 13px">* The ParkAndAnnounce application is now provided through res_parking instead<br /> of through the separate app_parkandannounce module.</p>
<p style="font-size: 13px">* ParkAndAnnounce will no longer go to the next position in dialplan on timeout<br /> by default. Instead, it will follow the timeout rules of the parking lot. The<br /> old behavior can be reproduced by using the 'c' option.</p>
<p style="font-size: 13px">* Dynamic parking lots will now fail to be created under the following<br /> conditions:<br /> - if the parking lot specified by PARKINGDYNAMIC does not exist<br /> - if they require exclusive park and parkedcall extensions which overlap<br /> with existing parking lots.</p>
<p style="font-size: 13px">* Dynamic parking lots will be cleared on reload for dynamic parking lots that<br /> currently contain no calls. Dynamic parking lots containing parked calls<br /> will persist through the reloads without alteration.</p>
<p style="font-size: 13px">* If 'parkext_exclusive' is set for a parking lot and that extension is<br /> already in use when that parking lot tries to register it, this is now<br /> considered a parking system configuration error. Configurations which do<br /> this will be rejected.</p>
<p style="font-size: 13px">* Added channel variable PARKER_FLAT. This contains the name of the extension<br /> that would be used if 'comebacktoorigin' is enabled. This can be useful when<br /> comebacktoorigin is disabled, but the dialplan or an external control<br /> mechanism wants to use the extension in the park-dial context that was<br /> generated to re-dial the parker on timeout.</p>
<p style="font-size: 13px">res_pjsip (and many others)<br />------------------<br /> * A large number of resource modules make up the SIP stack based on pjsip.<br /> The chan_pjsip channel driver users these resource modules to provide<br /> various SIP functionality in Asterisk. The majority of configuration for<br /> these modules is performed in pjsip.conf. Other modules may use their<br /> own configuration files.</p>
<p style="font-size: 13px">res_rtp_asterisk<br />------------------<br /> * ICE/STUN/TURN support in res_rtp_asterisk has been made optional. To enable<br /> them, an Asterisk-specific version of PJSIP needs to be installed.<br /> Tarballs are available from <a href="https://github.com/asterisk/pjproject/tags/" class="external-link" rel="nofollow" style="color: #326ca6; text-decoration: none">https://github.com/asterisk/pjproject/tags/</a>.</p>
<p style="font-size: 13px">res_statsd/res_chan_stats<br />------------------<br /> * A new resource module, res_statsd, has been added, which acts as a statsd<br /> client. This module allows Asterisk to publish statistics to a statsd<br /> server. In conjunction with res_chan_stats, it will publish statistics about<br /> channels to the statsd server. It can be configured via res_statsd.conf.</p>
<p style="font-size: 13px">res_xmpp<br />------------------<br /> * Device state for XMPP buddies is now available using the following format:<br /> XMPP/<client name>/<buddy address><br /> If any resource is available the device state is considered to be not in use.<br /> If no resources exist or all are unavailable the device state is considered<br /> to be unavailable.</p>
<p style="font-size: 13px"> <br />Scripts<br />------------------</p>
<p style="font-size: 13px">Realtime/Database Scripts<br />------------------<br /> * Asterisk previously included example db schemas in the contrib/realtime/<br /> directory of the source tree. This has been replaced by a set of database<br /> migrations using the Alembic framework. This allows you to use alembic to <br /> initialize the database for you. It will also serve as a database migration<br /> tool when upgrading Asterisk in the future.</p>
<p style="font-size: 13px">See contrib/ast-db-manage/README.md for more details.</p>
<p style="font-size: 13px">safe_asterisk<br />------------------<br /> * The safe_asterisk script will now install over previously installations.<br /> In previous versions of Asterisk, once installed a 'make install' would<br /> skip over safe_asterisk if it was already installed.</p>
<p style="font-size: 13px">* Certain options in safe_asterisk can now be configured from the<br /> safe_asterisk.conf file. A sample version of this is located in the<br /> configs/ folder.</p>
<p style="font-size: 13px">sip_to_res_pjsip.py<br />-------------------<br /> * A new script has been added in the contrib/scripts/sip_to_res_pjsip folder.<br /> This python script will convert an existing sip.conf file to a<br /> pjsip.conf file, for use with the chan_pjsip channel driver. This script<br /> is meant to be an aid in converting an existing chan_sip configuration to<br /> a chan_pjsip configuration, but it is expected that configuration beyond<br /> what the script provides will be needed.</p>
<p style="font-size: 13px"> </p>
</div>
</div>
<table id="email-actions" class="email-metadata" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-top: 1px solid #bbb; color: #505050; margin: 8px 0 0 0; padding: 0; color: #505050">
<tbody>
<tr>
<td class="left" valign="top" style="font-size: 13px; padding-top: 8px; max-width: 45%; text-align: left"> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/display/AST/New+in+12" style="color: #326ca6; text-decoration: none">View Online</a> </span> <span class="email-list-divider" style="color: #505050; padding: 0 0.350em">·</span> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/plugins/likes/like.action?contentId=26476750" style="color: #326ca6; text-decoration: none">Like</a> </span> <span class="email-list-divider" style="color: #505050; padding: 0 0.350em">·</span> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/display/AST/New+in+12?showComments=true&showCommentArea=true#addcomment" style="color: #326ca6; text-decoration: none">Add Comment</a> </span> </td>
<td class="right" width="50%" valign="top" style="font-size: 13px; padding-top: 8px; text-align: right"> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/users/removespacenotification.action?spaceKey=AST" style="color: #326ca6; text-decoration: none">Stop watching space</a> </span> <span class="email-list-divider" style="color: #505050; padding: 0 0.350em">·</span> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/users/editmyemailsettings.action" style="color: #326ca6; text-decoration: none">Manage Notifications</a> </span> </td>
</tr>
</tbody>
</table> </td>
</tr>
</tbody>
</table> </td>
</tr>
<tr>
<td id="email-footer" align="center" style="font-size: 13px; padding: 0 16px 32px 16px; margin: 0"> <small style="font-size: 11px"> This message was sent by <a class="email-footer-link" style="color:#505050;font-size:11px;text-decoration:none;; color: #326ca6; text-decoration: none; color: #505050; font-size: 11px" href="http://www.atlassian.com/software/confluence">Atlassian Confluence</a> 5.1.5, <a class="email-footer-link" style="color:#505050;font-size:11px;text-decoration:none;; color: #326ca6; text-decoration: none; color: #505050; font-size: 11px" href="http://www.atlassian.com/software/confluence/overview/team-collaboration-software?utm_source=email-footer">Team Collaboration Software</a> </small> </td>
</tr>
</tbody>
</table>
</body>
</html>