<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> 
<base href="https://wiki.asterisk.org/wiki" /> 
<title>Message Title</title>  
<style type="text/css">@media only screen and (max-device-width: 480px) {.mobile-only {
        width: auto !important;
        height: auto !important;
        overflow: visible !important;
        line-height: normal !important;
        font-size: inherit !important;
        mso-hide: all;
}

.desktop-only {
        display: none !important;
}

/* iPhone 3GS fix for unwanted 20px right margin */
body { min-width: 100% !important; padding: 0; margin: 0; }

#center-content-table { max-width: none; !important; }
#header-pattern-container { padding: 10px 10px 10px 10px !important; line-height: 20px !important; }
#header-avatar-image-container { padding-right: 8px !important; }
#email-content-container { padding: 0 !important; }
.mobile-expand { border-radius: 0 !important; border-left: 0 !important; border-right: 0 !important; padding-left: 26px !important;}
.mobile-resize-text { font-size: 16px !important; line-height: 22px !important; }
#page-title-pattern-header { font-size: 20px !important; line-height: 28px !important; }
#page-title-pattern-icon-image-container-cell { padding-top: 7px !important; }
#inline-user-pattern { display: block !important; }
#inline-user-pattern-avatar { padding-top: 3px !important; }
.contextual-area-pattern { border-bottom: 1px solid #ccc !important; padding: 15px 10px 0 10px !important;}
.users-involved-pattern-column-table { width: 100% !important;  }
.users-involved-pattern-avatar-table-cell { padding: 3px 5px 5px 0 !important; }
.users-involved-pattern-column-container { padding-right: 0 !important; }
.contextual-excerpt-pattern, #users-involved-pattern { border: 0 !important; }

/** Aui Typography upsized for mobile **/
#content-excerpt-pattern-container, #contextual-excerpt-pattern-text-container { font-size: 16px !important; line-height: 22px !important; }
#content-excerpt-pattern-container h1, #contextual-excerpt-pattern-text-container h1 { font-size: 24px !important; line-height: 28px !important; }
#content-excerpt-pattern-container h2, #contextual-excerpt-pattern-text-container h2 { font-size: 20px !important; line-height: 28px !important; }
#content-excerpt-pattern-container h3, #contextual-excerpt-pattern-text-container h3 { font-size: 18px !important; line-height: 24px !important; }
#content-excerpt-pattern-container h4, #contextual-excerpt-pattern-text-container h4 { font-size: 16px !important; line-height: 22px !important; }
#content-excerpt-pattern-container h5, #contextual-excerpt-pattern-text-container h5 { font-size: 14px !important; line-height: 20px !important; }
#content-excerpt-pattern-container h6, #contextual-excerpt-pattern-text-container h6 { font-size: 14px !important; line-height: 20px !important; }
.user-mention { line-height: 18px !important; }
/** Aui Typography end **/

/* Show appropriate footer logo on mobile, display links vertically */
#footer-pattern { padding: 15px 10px !important; }
#footer-pattern-logo-desktop-container { padding: 0 !important; }
#footer-pattern-logo-desktop { width: 0 !important; height: 0 !important; }
#footer-pattern-logo-mobile {
    padding-top: 10px !important;
    width: 30px !important;
    height: 27px !important;
    display: inline !important;
}
#footer-pattern-text {
    display: block !important;
}
#footer-pattern-links-container { line-height: 0 !important;}
.footer-pattern-links.mobile-resize-text,
.footer-pattern-links.mobile-resize-text,
#footer-pattern-text.mobile-resize-text,
#footer-pattern-links-container.no-footer-links {
    font-size: 14px !important;
    line-height: 20px !important;
}
.footer-link { display: block !important; }
#footer-pattern-links-container table { display: inline-block !important; float: none !important; }
#footer-pattern-links-container, #footer-pattern-text { text-align: center !important; }
#footer-pattern-links { padding-bottom: 5px !important; }

/** Team Calendar overrides, these should be removed when notifications are updated in Team Calendars. For now CSS
    overrides are being used because the structure of the content can't change without rereleasing the plugin */
.mail-calendar-container .day-header + table tr td:first-child {
    vertical-align: top !important;
    padding-top: 5px !important;
}}
@media (min-width: 900px) {#center-content-table { width: 900px; }}
@media all {#outlook a {padding:0;} /* Force Outlook to provide a "view in browser" menu link. */
/* Prevent Webkit and Windows Mobile platforms from changing default font sizes.*/
body{-webkit-text-size-adjust:100%; -ms-text-size-adjust:100%;}
.ExternalClass {width:100%;} /* Force Hotmail to display emails at full width */
#background-table {margin:0; padding:0; width:100% !important; }
/* Needed to override highlighting on date and time links in iOS */
.grey a {color: #707070; text-decoration: none; }/* These styles are appended to the head element of a notification in order to prevent Apple Mail and similar
   clients from underlining the due dates with a blue hyperlink */
/* a lozenge outside an inline task should always be #333, lozenges inside an inline task should be
   colored according to their upcoming due dates, a completed task date lozenge or deleted task date
   lozenge should always be #707070 */
.date-time-lozenge a {color: #333333; text-decoration: none; }
.inline-task-text-container .date-time-lozenge.date-upcoming a {color: #DF6F00; text-decoration: none; }
.inline-task-text-container .date-time-lozenge.date-past a {color: #D04437; text-decoration: none; }
.inline-task-text-container.content-deleted-color .date-time-lozenge a,
.inline-task-text-container.checked .date-time-lozenge a {
    color: #707070; text-decoration: none;
}}
</style> 
</head>
<body>
<table id="background-table" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; color: #333; background-color: #f5f5f5"> 
<tbody> 
<tr> 
<td id="header-pattern-container" style="padding: 0px; border-collapse: collapse; padding: 10px 20px"> 
<table id="header-pattern" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; color: #333"> 
<tbody> 
<tr> 
<td id="header-avatar-image-container" valign="top" style="padding: 0px; border-collapse: collapse; vertical-align: top; width: 32px; padding-right: 9px"><a href="https://wiki.asterisk.org/wiki/display/~asanders?src=email" style="color: #3b73af; text-decoration: none"><img id="header-avatar-image" class="image_fix" src="cid:avatar_a16050ccf6859ce8cd3c1e774bb9d590" height="32" width="32" border="0" style="border-radius: 3px; vertical-align: top" /></a></td>
<td id="header-text-container" valign="middle" style="padding: 0px; border-collapse: collapse; vertical-align: middle; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px">Ashley Sanders <strong>created</strong> a page</td> 
</tr> 
</tbody> 
</table> </td> 
</tr> 
<!-- End Header pattern --> 
<tr> 
<td id="email-content-container" style="padding: 0px; border-collapse: collapse; padding: 0 20px"> 
<table id="email-content-table" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; color: #333; border-spacing: 0; border-collapse: separate"> 
<tbody> 
<tr> 
<td class="email-content-rounded-top mobile-expand" style="padding: 0px; border-collapse: collapse; color: #fff; padding: 0 15px 0 16px; height: 15px; background-color: #fff; border-left: 1px solid #ccc; border-top: 1px solid #ccc; border-right: 1px solid #ccc; border-bottom: 0; border-top-right-radius: 5px; border-top-left-radius: 5px"> </td> 
</tr> 
<tr> 
<td class="email-content-main mobile-expand" style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 15px 16px; background-color: #fff"> 
<table id="page-title-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; color: #333"> 
<tbody> 
<tr> 
<td id="page-title-pattern-icon-image-container" valign="top" style="padding: 0px; border-collapse: collapse; width: 16px; vertical-align: top"> 
<table cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; color: #333"> 
<tbody> 
<tr> 
<td id="page-title-pattern-icon-image-container-cell" style="padding: 0px; border-collapse: collapse; width: 16px; padding: 9px 8px 0px 0px; mso-text-raise: 5px; mso-line-height-rule: exactly"><a href="https://wiki.asterisk.org/wiki/display/AST/Call+Parking?src=email" title="page icon" style="vertical-align: top;; color: #3b73af; text-decoration: none"><img style="vertical-align: top; display: block;" src="cid:page-icon" alt="page icon" title="page icon" height="16" width="16" border="0" /></a></td> 
</tr> 
</tbody> 
</table> </td>
<td style="vertical-align: top;; padding: 0px; border-collapse: collapse; padding-right: 5px; font-size: 20px; line-height: 30px; mso-line-height-rule: exactly" id="page-title-pattern-header-container"><span id="page-title-pattern-header" style="font-family: Arial, sans-serif; padding: 0; font-size: 20px; line-height: 30px; mso-text-raise: 2px; mso-line-height-rule: exactly; vertical-align: middle"><a href="https://wiki.asterisk.org/wiki/display/AST/Call+Parking?src=email" title="Call Parking" style="color: #3b73af; text-decoration: none">Call Parking</a></span></td> 
</tr> 
</tbody> 
</table> </td> 
</tr> 
<tr> 
<td class="email-content-main mobile-expand" style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 15px 16px; background-color: #fff"> 
<table class="content-excerpt-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; color: #333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> 
<tbody> 
<tr> 
<td class="content-excerpt-pattern-container mobile-resize-text " style="padding: 0px; border-collapse: collapse; padding: 0 0 0 24px"> <h1 id="CallParking-TableofContents" style="margin: 10px 0 0 0; margin-top: 0; font-size: 24px; font-weight: normal; line-height: 30px; margin: 40px 0 0 0; margin-top: 0">Table of Contents</h1> 
<div style="margin-top: 12.0px;"> 
<style type="text/css">/**/
div.rbtoc1447342597346 {padding: 0px;}
div.rbtoc1447342597346 ul {list-style: disc;margin-left: 0px;}
div.rbtoc1447342597346 li {margin-left: 0px;padding-left: 0px;}

/**/</style> 
<div class="toc-macro rbtoc1447342597346" style="padding: 0px; padding: 0px"> 
<ul class="toc-indentation" style="margin: 10px 0 0 0; margin-top: 0; list-style: disc; margin-left: 0px; list-style: disc; margin-left: 0px"> 
<li style="margin-left: 0px; padding-left: 0px; margin-left: 0px; padding-left: 0px"> <a href="#CallParking-TableofContents" style="color: #3b73af; text-decoration: none">Table of Contents</a> </li> 
<li style="margin-left: 0px; padding-left: 0px; margin-left: 0px; padding-left: 0px"> <a href="#CallParking-Overview" style="color: #3b73af; text-decoration: none">Overview</a> </li> 
<li style="margin-left: 0px; padding-left: 0px; margin-left: 0px; padding-left: 0px"> <a href="#CallParking-CallParkingConfigurationFilesandModule" style="color: #3b73af; text-decoration: none">Call Parking Configuration Files and Module</a> </li> 
<li style="margin-left: 0px; padding-left: 0px; margin-left: 0px; padding-left: 0px"> <a href="#CallParking-ExampleConfigurations" style="color: #3b73af; text-decoration: none">Example Configurations</a> 
<ul class="toc-indentation" style="margin: 10px 0 0 0; list-style: disc; margin-left: 0px; list-style: disc; margin-left: 0px"> 
<li style="margin-left: 0px; padding-left: 0px; margin-left: 0px; padding-left: 0px"> <a href="#CallParking-BasicCallParking/RetrievalScenario" style="color: #3b73af; text-decoration: none">Basic Call Parking/Retrieval Scenario</a> </li> 
<li style="margin-left: 0px; padding-left: 0px; margin-left: 0px; padding-left: 0px"> <a href="#CallParking-BasicHandlingforCallParkingTimeouts" style="color: #3b73af; text-decoration: none">Basic Handling for Call Parking Timeouts</a> </li> 
<li style="margin-left: 0px; padding-left: 0px; margin-left: 0px; padding-left: 0px"> <a href="#CallParking-CustomHandlingforCallParkingTimeouts" style="color: #3b73af; text-decoration: none">Custom Handling for Call Parking Timeouts</a> </li> 
</ul> </li> 
</ul> 
</div> 
</div> <h1 id="CallParking-Overview" style="margin: 10px 0 0 0; font-size: 24px; font-weight: normal; line-height: 30px; margin: 40px 0 0 0">Overview</h1> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0">Some organizations have the need to facilitate calls to employees who move around the office a lot or who don't necessarily sit at a desk all day. In Asterisk, it is possible to allow a call to be put on hold at one location and then picked up from a different location such that the conversation can be continued from a device other than the one from which call was originally answered. This concept is known as <span style="font-weight: bold;font-style: italic;">call parking</span>.</p> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0">Call parking is a feature that allows a participant in a call to put the other participants on hold while they themselves hang up. When parking, the party that initiates the park will be told a parking space, which under standard configuration doubles as an extension. This extension, or parking space, serves as the conduit for accessing the parked call. At this point, as long as the parking space is known, the parked call can be retrieved from a different location/device from where it was originally answered.</p> <h1 id="CallParking-CallParkingConfigurationFilesandModule" style="margin: 10px 0 0 0; font-size: 24px; font-weight: normal; line-height: 30px; margin: 40px 0 0 0">Call Parking Configuration Files and Module</h1> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0">In versions of Asterisk prior to Asterisk 12, call parking was considered an Asterisk core feature and was configured using <code style="font-family: monospace"><span style="font-weight: bold;">features.conf</span></code>. However, Asterisk 12 underwent vast architectural changes, several of which were directed at call parking support. Because the amount of changes introduced in Asterisk 12 was quite extensive, they have been omitted from this document. For reference, you can find a comprehensive list of these changes here: <span style="font-weight: bold;"><a href="https://wiki.asterisk.org/wiki/display/AST/New+in+12" style="color: #3b73af; text-decoration: none">New in 12</a></span>.</p> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0">In a nutshell, Asterisk 12 relocated its support for call parking from the Asterisk core into a separate, loadable module, <code style="font-family: monospace"><span style="font-weight: bold;">res_parking</span></code>. As a result, configuration for call parking was also moved to <code style="font-family: monospace"><span style="font-weight: bold;"><a href="https://wiki.asterisk.org/wiki/display/AST/Asterisk+12+Configuration_res_parking" rel="nofollow" style="color: #3b73af; text-decoration: none">res_parking.conf</a></span></code>. Configuration for call parking through <code style="font-family: monospace"><span style="font-weight: bold;"><a href="https://wiki.asterisk.org/wiki/display/AST/Asterisk+12+Configuration_features" rel="nofollow" style="color: #3b73af; text-decoration: none">features.conf</a></span></code> for versions of Asterisk 12 and beyond, <span style="font-weight: bold;font-style: italic;">is no longer supported</span>. Additionally, support for the <code style="font-family: monospace"><span style="font-weight: bold;"><a href="https://wiki.asterisk.org/wiki/display/AST/Asterisk+12+Application_ParkAndAnnounce" rel="nofollow" style="color: #3b73af; text-decoration: none">ParkAndAnnounce</a></span></code> application was relocated to the <code style="font-family: monospace"><span style="font-weight: bold;">res_parking</span></code> module and the <code style="font-family: monospace"><span style="font-weight: bold;">app_parkandannounce</span></code> module was removed.</p> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0">Before we move any further, there is one more rather important detail to address regarding configuration for <code style="font-family: monospace"><span style="font-weight: bold;">res_parking</span></code>:</p> 
<div class="aui-message warning shadowed information-macro"> 
<span class="aui-icon icon-warning">Icon</span> 
<div class="message-content"> 
<p style="color: rgb(35,31,32);; margin: 10px 0 0 0; margin-top: 0"> <span> <code style="font-family: monospace">res_parking</code> uses the configuration framework. If an invalid configuration is </span> <span>supplied, <code style="font-family: monospace">res_parking</code> will fail to load or fail to reload. Previously, </span> <span>invalid configurations would generally be accepted, with certain errors </span> <span>resulting in individually disabled parking lots.</span> </p> 
</div> 
</div> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0">Now that we've covered all of that, let's look at some examples of how all this works.</p> <h1 id="CallParking-ExampleConfigurations" style="margin: 10px 0 0 0; font-size: 24px; font-weight: normal; line-height: 30px; margin: 40px 0 0 0">Example Configurations</h1> <h2 id="CallParking-BasicCallParking/RetrievalScenario" style="margin: 10px 0 0 0; font-size: 20px; font-weight: normal; line-height: 30px; margin: 40px 0 0 0; margin-top: 10px">Basic Call Parking/Retrieval Scenario</h2> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0">This is a basic scenario that only requires minimal adjustments to the following configuration files: <code style="font-family: monospace"><span style="font-weight: bold;">res_parking.conf</span></code>, <code style="font-family: monospace"><span style="font-weight: bold;">features.conf</span></code>, and <code style="font-family: monospace"><span style="font-weight: bold;">extensions.conf</span></code>.</p> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0">In this scenario, our dialplan contains an extension to accept calls from the outside. Let's assume that the extension the caller dialed was: <code style="font-family: monospace"><span style="font-weight: bold;">5555001</span></code>. The handler will then attempt to dial the <code style="font-family: monospace"><span style="font-weight: bold;">alice</span></code> extension, using the <code style="font-family: monospace"><span style="font-weight: bold;">k</span></code> option.</p> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0">Sadly for our caller, the <code style="font-family: monospace"><span style="font-weight: bold;">alice</span></code> extension answers the call and immediately after saying, "Hello world!", sends the DTMF digits to invoke the call parking feature without giving the caller a chance to speak. The <code style="font-family: monospace"><span style="font-weight: bold;">alice</span></code> extension quickly redeems itself by using the <code style="font-family: monospace"><span style="font-weight: bold;">GoTo</span></code> application to navigate to the <code style="font-family: monospace"><span style="font-weight: bold;">701</span></code> extension in the <code style="font-family: monospace"><span style="font-weight: bold;">parkedcalls</span></code> context to retrieve the parked call. But, since the next thing the <code style="font-family: monospace"><span style="font-weight: bold;">alice</span></code> extension does is hangup on our caller, I am beginning to think the <code style="font-family: monospace"><span style="font-weight: bold;">alice</span></code> extension doesn't want to be bothered.</p> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0"> <span style="font-weight: bold;">In summary:</span> </p> 
<ul style="margin: 10px 0 0 0"> 
<li>Outside caller dials <code style="font-family: monospace"><span style="font-weight: bold;">5555001</span></code> </li> 
<li>Alice picks up the device and says "Hello World!"</li> 
<li>Alice presses the one touch parking DTMF combination</li> 
<li>Alice then dials the extension that the call was parked to (<code style="font-family: monospace"><span style="font-weight: bold;">701</span></code>) to retrieve the call</li> 
<li>Alice says, "Goodbye", and disconnects the caller</li> 
</ul> 
<div class="code panel pdl" style="border-width: 1px;"> 
<div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"> 
<b>res_parking.conf</b> 
</div> 
<div class="codeContent panelContent pdl"> 
<pre class="first-line: 1; theme: Confluence; brush: text; gutter: true" style="font-size:12px;; margin: 10px 0 0 0; margin-top: 0">[general]
parkext => 700                           ; Sets the default extension used to park calls. Note: This option
                                         ; can take any alphanumeric string.

parkpos => 701-709                       ; Sets the range of extensions used as the parking lot. Parked calls
                                         ; may be retrieved by dialing the numbers in this range. Note: These
                                         ; need to be numeric, as Asterisk starts from the start position and
                                         ; increments with one for the next parked call.

context => parkedcalls                   ; Sets the default dialplan context where the parking extension and
                                         ; the parking lot extensions are created. These will be automatically
                                         ; generated since we have specified a value for the 'parkext' option
                                         ; above. If you need to use this in your dialplan (extensions.conf),
                                         ; just include it like: include => parkedcalls.

parkingtime => 300                       ; Specifies the number of seconds a call will wait in the parking
                                         ; lot before timing out. In this example, a parked call will time out
                                         ; if it is not un-parked before 300 seconds (5 minutes) elapses.

findslot => next                         ; Configures the parking slot selection behavior. For this example,
                                         ; the next free slot will be selected when a call is parked.
</pre> 
</div> 
</div> 
<div class="code panel pdl" style="border-width: 1px;"> 
<div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"> 
<b>features.conf</b> 
</div> 
<div class="codeContent panelContent pdl"> 
<pre class="first-line: 1; theme: Confluence; brush: text; gutter: true" style="font-size:12px;; margin: 10px 0 0 0; margin-top: 0">[featuremap]
parkcall => #72                          ; Parks the call (one-step parking). For this example, a call will be
                                         ; automatically parked when an allowed party presses the DTMF digits,
                                         ; #·7·2. A party is able to make use of this when the the K/k options
                                         ; are used when invoking the Dial() application. For convenience, the
                                         ; values of this option are defined below:
                                         ; K - Allow the calling party to enable parking of the call.
                                         ; k - Allow the called party to enable parking of the call.
</pre> 
</div> 
</div> 
<div class="code panel pdl" style="border-width: 1px;"> 
<div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"> 
<b>extensions.conf</b> 
</div> 
<div class="codeContent panelContent pdl"> 
<pre class="first-line: 1; theme: Confluence; brush: text; gutter: true" style="font-size:12px;; margin: 10px 0 0 0; margin-top: 0">[globals]
; Extension Maps
5001=alice                               ; Maps 5001 to a local extension that will emulate
                                         ; a party pressing DTMF digits from a device.
;5001=PJSIP/sip:alice@127.0.0.1:5060     ; What a realistc mapping for the alice device would look like.

; Realistically, 'alice' would map to a channel for a local device that would receive the call, therefore
; rendering this extension unnecessary. However, for the purposes of this demonstration, the extension is
; presented to you to show that sending the sequence of DTMF digits defined in the 'parkcall' option in
; 'features.conf' is the trigger that invokes the one-step parking feature.

[parking-example]
include => parkedcalls

exten => alice,1,NoOp(Handles calls to alice.)
  same => n,Answer()
  same => n,Playback(hello-world)
  same => n,SendDTMF(#72w)
  same => n,Goto(parkedcalls,701,1)
  same => n,Playback(vm-goodbye)
  same => n,Hangup()

[from-outside]
exten => 5555001,1,NoOp(Route to a local extension.)
  ; Dials the device that is mapped to the local resource, alice, giving the recipient of the call the ability
  ; to park it. Assuming the value of LocalExtension is 5001, the Dial() command will look like: Dial(alice,,k)
  same => n,Dial(PJSIP/alice)
  same => n,Hangup()
</pre> 
</div> 
</div> <h2 id="CallParking-BasicHandlingforCallParkingTimeouts" style="margin: 10px 0 0 0; font-size: 20px; font-weight: normal; line-height: 30px; margin: 40px 0 0 0">Basic Handling for Call Parking Timeouts</h2> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0">Next we will move on to explain how to handle situations where a call is parked but is not retrieved before the value specified as the <code style="font-family: monospace"><span style="font-weight: bold;">parkingtime</span></code> option elapses. Just like the scenario above, this is a basic scenario that only requires minimal adjustments to the following configuration files: <code style="font-family: monospace"><span style="font-weight: bold;">res_parking.conf</span></code>, <code style="font-family: monospace"><span style="font-weight: bold;">features.conf</span></code>, and <code style="font-family: monospace"><span style="font-weight: bold;">extensions.conf</span></code>.</p> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0">Like before, our dialplan contains an extension to accept calls from the outside. Again, let's assume that the extension the caller dialed was: <code style="font-family: monospace"><span style="font-weight: bold;">5555001</span></code>. The handler will then attempt to dial the <code style="font-family: monospace"><span style="font-weight: bold;">alice</span></code> extension, using the <code style="font-family: monospace"><span style="font-weight: bold;">k</span></code> option.</p> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0">Sadly for our caller, the <code style="font-family: monospace"><span style="font-weight: bold;">alice</span></code> extension answers the call and immediately sends the DTMF digits to invoke the call parking feature without giving the caller a chance to speak. Unlike in the previous scenario, however, the <code style="font-family: monospace"><span style="font-weight: bold;">alice</span></code> extension does not retrieve the parked call. Our sad caller is now even more sad.</p> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0">After a period of <code style="font-family: monospace"><span style="font-weight: bold;">300 seconds</span></code>, or <code style="font-family: monospace"><span style="font-weight: bold;">5 minutes</span></code> (as defined in the <code style="font-family: monospace"><span style="font-weight: bold;">parkingtime</span></code> option in <code style="font-family: monospace"><span style="font-weight: bold;">res_parking.conf</span></code>), the call will time out. Because we told Asterisk to return a timed-out parked call to the party that originally parked the call (<code style="font-family: monospace"><span style="font-weight: bold;">comebacktoorigin=yes</span></code>), Asterisk will attempt to call <code style="font-family: monospace"><span style="font-weight: bold;">alice</span></code> using an extension automagically created in the special context, <code style="font-family: monospace"><span style="font-weight: bold;">park-dial</span></code>.</p> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0">Unfortunately, the <code style="font-family: monospace"><span style="font-weight: bold;">alice</span></code> extension has no time to be bothered with us at this moment, so the call is not answered. After a period of <code style="font-family: monospace"><span style="font-weight: bold;">20 seconds</span></code> elapses (the value specified for the <code style="font-family: monospace"><span style="font-weight: bold;">comebackdialtime</span></code> option in <code style="font-family: monospace"><span style="font-weight: bold;">res_parking.conf</span></code>), Asterisk finally gives up and the <code style="font-family: monospace"><span style="font-weight: bold;">t</span></code> extension in the <code style="font-family: monospace"><span style="font-weight: bold;">park-dial</span></code> context is executed. Our caller is then told "Goodbye" before being disconnected.</p> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0"> <span style="font-weight: bold;">In summary:</span> </p> 
<ul style="margin: 10px 0 0 0"> 
<li>Outside caller dials <code style="font-family: monospace"><span style="font-weight: bold;">5555001</span></code> </li> 
<li>Alice picks up the device and says "Hello World!"</li> 
<li>Alice presses the one touch parking DTMF combination</li> 
<li>The parked call times out after 300 seconds</li> 
<li>Asterisk sends the call to the origin, or the <code style="font-family: monospace"><span style="font-weight: bold;">alice</span></code> extension</li> 
<li>A period of <code style="font-family: monospace"><span style="font-weight: bold;">20 seconds</span></code> elapses without an answer</li> 
<li>Asterisk sends the call to <code style="font-family: monospace"><span style="font-weight: bold;">t</span></code> extension in the <code style="font-family: monospace"><span style="font-weight: bold;">park-dial</span></code> context</li> 
<li>Our caller hears, "Goodbye", before being disconnected</li> 
</ul> 
<div class="code panel pdl" style="border-width: 1px;"> 
<div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"> 
<b>res_parking.conf</b> 
</div> 
<div class="codeContent panelContent pdl"> 
<pre class="first-line: 1; theme: Confluence; brush: text; gutter: true" style="font-size:12px;; margin: 10px 0 0 0; margin-top: 0">[general]
parkext => 700                           ; Sets the default extension used to park calls. Note: This option
                                         ; can take any alphanumeric string.

parkpos => 701-709                       ; Sets the range of extensions used as the parking lot. Parked calls
                                         ; may be retrieved by dialing the numbers in this range. Note: These
                                         ; need to be numeric, as Asterisk starts from the start position and
                                         ; increments with one for the next parked call.

context => parkedcalls                   ; Sets the default dialplan context where the parking extension and
                                         ; the parking lot extensions are created. These will be automatically
                                         ; generated since we have specified a value for the 'parkext' option
                                         ; above. If you need to use this in your dialplan (extensions.conf),
                                         ; just include it like: include => parkedcalls.

parkingtime => 300                       ; Specifies the number of seconds a call will wait in the parking
                                         ; lot before timing out. In this example, a parked call will time out
                                         ; if it is not un-parked before 300 seconds (5 minutes) elapses.

findslot => next                         ; Configures the parking slot selection behavior. For this example,
                                         ; the next free slot will be selected when a call is parked.

comebackdialtime=20                      ; When a parked call times out, this is the number of seconds to dial
                                         ; the device that originally parked the call, or the PARKER
                                         ; channel variable. The value of 'comebackdialtime' is available as
                                         ; the channel variable 'COMEBACKDIALTIME' after a parked call has
                                         ; timed out. For this example, when a parked call times out, Asterisk
                                         ; will attempt to call the PARKER for 20 seconds, using an extension
                                         ; it will automatically create in the 'park-dial' context. If the
                                         ; party does not answer the call during this period, Asterisk will
                                         ; continue executing any remaining priorities in the dialplan.

comebacktoorigin=yes                     ; Determines what should be done with a parked call if it is not
                                         ; retrieved before the time specified in the 'parkingtime' option
                                         ; elapses. In the case of this example where 'comebacktoorigin=yes',
                                         ; Asterisk will attempt to return the parked call to the party that
                                         ; originally parked the call, or the PARKER channel variable, using
                                         ; an extension it will automatically create in the 'park-dial'
                                         ; context.
</pre> 
</div> 
</div> 
<div class="code panel pdl" style="border-width: 1px;"> 
<div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"> 
<b>features.conf</b> 
</div> 
<div class="codeContent panelContent pdl"> 
<pre class="first-line: 1; theme: Confluence; brush: text; gutter: true" style="font-size:12px;; margin: 10px 0 0 0; margin-top: 0">[featuremap]
parkcall => #72                          ; Parks the call (one-step parking). For this example, a call will be
                                         ; automatically parked when an allowed party presses the DTMF digits,
                                         ; #·7·2. A party is able to make use of this when the the K/k options
                                         ; are used when invoking the Dial() application. For convenience, the
                                         ; values of this option are defined below:
                                         ; K - Allow the calling party to enable parking of the call.
                                         ; k - Allow the called party to enable parking of the call.
</pre> 
</div> 
</div> 
<div class="code panel pdl" style="border-width: 1px;"> 
<div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"> 
<b>extensions.conf</b> 
</div> 
<div class="codeContent panelContent pdl"> 
<pre class="first-line: 1; theme: Confluence; brush: text; gutter: true" style="font-size:12px;; margin: 10px 0 0 0; margin-top: 0">[globals]
; Extension Maps
5001=alice                               ; Maps 5001 to a local extension that will emulate
                                         ; a party pressing DTMF digits from a device.
;5001=PJSIP/sip:alice@127.0.0.1:5060     ; What a realistc mapping for the alice device would look like.

; Realistically, 'alice' would map to a channel for a local device that would receive the call, therefore
; rendering this extension unnecessary. However, for the purposes of this demonstration, the extension is
; presented to you to show that sending the sequence of DTMF digits defined in the 'parkcall' option in
; 'features.conf' is the trigger that invokes the one-step parking feature.

[parking-example]
include => parkedcalls

exten => alice,1,NoOp(Handles calls to alice.)
  same => n,Answer()
  same => n,Playback(hello-world)
  same => n,SendDTMF(#72w)
  same => n,Wait(300)
  same => n,Hangup()

[from-outside]
exten => 5555001,1,NoOp(Route to a local extension.)
  ; Dials the device that is mapped to the local resource, alice, giving the recipient of the call the ability
  ; to park it. Assuming the value of LocalExtension is 5001, the Dial() command will look like: Dial(alice,,k)
  same => n,Dial(PJSIP/alice)
  same => n,Hangup()

[park-dial]
; Route here if the party that initiated the call parking cannot be reached after a period of time equaling the
; value specified in the 'comebackdialtime' option elapses.
exten => t,1,NoOp(End of the line for a timed-out parked call.)
  same => n,Playback(vm-goodbye)
  same => n,Hangup()
</pre> 
</div> 
</div> <h2 id="CallParking-CustomHandlingforCallParkingTimeouts" style="margin: 10px 0 0 0; font-size: 20px; font-weight: normal; line-height: 30px; margin: 40px 0 0 0">Custom Handling for Call Parking Timeouts</h2> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0">Finally, we will move on to explain how to handle situations where upon a parked call session timing out, it is not desired to return to the parked call to the device from where the call was originally parked. (This might be handy for situations where you have a dedicated receptionist or service desk extension to handle incoming call traffic.) Just like the previous two examples, this is a basic scenario that only requires minimal adjustments to the following configuration files: <code style="font-family: monospace"><span style="font-weight: bold;">res_parking.conf</span></code>, <code style="font-family: monospace"><span style="font-weight: bold;">features.conf</span></code>, and <code style="font-family: monospace"><span style="font-weight: bold;">extensions.conf</span></code>.</p> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0">Like before, our dialplan contains an extension to accept calls from the outside. Again, let's assume that the extension the caller dialed was: <code style="font-family: monospace"><span style="font-weight: bold;">5555001</span></code>. The handler will then attempt to dial the <code style="font-family: monospace"><span style="font-weight: bold;">alice</span></code> extension, using the <code style="font-family: monospace"><span style="font-weight: bold;">k</span></code> option.</p> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0">Sadly for our caller, the <code style="font-family: monospace"><span style="font-weight: bold;">alice</span></code> extension answers the call and immediately sends the DTMF digits to invoke the call parking feature without giving the caller a chance to speak. Just like in the previous scenario, the <code style="font-family: monospace"><span style="font-weight: bold;">alice</span></code> extension does not retrieve the parked call. Maybe the <code style="font-family: monospace"><span style="font-weight: bold;">alice</span></code> extension is having a bad day.</p> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0">After a period of <code style="font-family: monospace"><span style="font-weight: bold;">300 seconds</span></code>, or <code style="font-family: monospace"><span style="font-weight: bold;">5 minutes</span></code> (as defined in the <code style="font-family: monospace"><span style="font-weight: bold;">parkingtime</span></code> option in <code style="font-family: monospace"><span style="font-weight: bold;">res_parking.conf</span></code>), the call will time out. Because we told Asterisk to send a timed-out parked call to the <code style="font-family: monospace"><span style="font-weight: bold;">parkedcallstimeout</span></code> context (<code style="font-family: monospace"><span style="font-weight: bold;">comebacktoorigin=no</span></code>), we are able to bypass the default logic that directs Asterisk to returning the call to the person who initiated the park. In our example, when a parked call enters our <code style="font-family: monospace"><span style="font-weight: bold;">s</span></code> extension in our <code style="font-family: monospace"><span style="font-weight: bold;">parkedcallstimeout</span></code> context, we only play a sound file to the caller and hangup the call, but this is where you could do any custom logic like returning the call to a different extension, or performing a lookup of some sort.</p> <p style="color: rgb(35,31,32);; margin: 10px 0 0 0"> <span style="font-weight: bold;">In summary:</span> </p> 
<ul style="margin: 10px 0 0 0"> 
<li>Outside caller dials <code style="font-family: monospace"><span style="font-weight: bold;">5555001</span></code> </li> 
<li>Alice picks up the device and says "Hello World!"</li> 
<li>Alice presses the one touch parking DTMF combination</li> 
<li>The parked call times out after 300 seconds</li> 
<li>Asterisk sends the call to the <code style="font-family: monospace"><span style="font-weight: bold;">s</span></code> extension in our <code style="font-family: monospace"><span style="font-weight: bold;">parkedcallstimeout</span></code> </li> 
<li>Our caller hears, "Goodbye", before being disconnected</li> 
</ul> 
<div class="code panel pdl" style="border-width: 1px;"> 
<div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"> 
<b>res_parking.conf</b> 
</div> 
<div class="codeContent panelContent pdl"> 
<pre class="first-line: 1; theme: Confluence; brush: text; gutter: true" style="font-size:12px;; margin: 10px 0 0 0; margin-top: 0">[general]

[default]
parkext => 700                           ; Sets the default extension used to park calls. Note: This option
                                         ; can take any alphanumeric string.

parkpos => 701-709                       ; Sets the range of extensions used as the parking lot. Parked calls
                                         ; may be retrieved by dialing the numbers in this range. Note: These
                                         ; need to be numeric, as Asterisk starts from the start position and
                                         ; increments with one for the next parked call.

context => parkedcalls                   ; Sets the default dialplan context where the parking extension and
                                         ; the parking lot extensions are created. These will be automatically
                                         ; generated since we have specified a value for the 'parkext' option
                                         ; above. If you need to use this in your dialplan (extensions.conf),
                                         ; just include it like: include => parkedcalls.

parkingtime => 300                       ; Specifies the number of seconds a call will wait in the parking
                                         ; lot before timing out. In this example, a parked call will time out
                                         ; if it is not un-parked before 300 seconds (5 minutes) elapses.

findslot => next                         ; Configures the parking slot selection behavior. For this example,
                                         ; the next free slot will be selected when a call is parked.

comebacktoorigin=no                      ; Determines what should be done with a parked call if it is not
                                         ; retrieved before the time specified in the 'parkingtime' option
                                         ; elapses.
                                         ;
                                         ; Setting 'comebacktoorigin=no' (like in this example) is for cases
                                         ; when you want to perform custom dialplan logic to gracefully handle
                                         ; the remainder of the parked call when it times out.

comebackcontext=parkedcallstimeout       ; The context that a parked call will be routed to in the event it
                                         ; times out. Asterisk will first attempt to route the call to an
                                         ; extension in this context that matches the flattened peer name. If
                                         ; no such extension exists, Asterisk will next attempt to route the
                                         ; call to the 's' extension in this context. Note: If you set
                                         ; 'comebacktoorigin=no' in your configuration but do not define this
                                         ; value, Asterisk will route the call to the 's' extension in the
                                         ; default context.
</pre> 
</div> 
</div> 
<div class="code panel pdl" style="border-width: 1px;"> 
<div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"> 
<b>features.conf</b> 
</div> 
<div class="codeContent panelContent pdl"> 
<pre class="first-line: 1; theme: Confluence; brush: text; gutter: true" style="font-size:12px;; margin: 10px 0 0 0; margin-top: 0">[featuremap]
parkcall => #72                          ; Parks the call (one-step parking). For this example, a call will be
                                         ; automatically parked when an allowed party presses the DTMF digits,
                                         ; #·7·2. A party is able to make use of this when the the K/k options
                                         ; are used when invoking the Dial() application. For convenience, the
                                         ; values of this option are defined below:
                                         ; K - Allow the calling party to enable parking of the call.
                                         ; k - Allow the called party to enable parking of the call.
</pre> 
</div> 
</div> 
<div class="code panel pdl" style="border-width: 1px;"> 
<div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"> 
<b>extensions.conf</b> 
</div> 
<div class="codeContent panelContent pdl"> 
<pre class="first-line: 1; theme: Confluence; brush: text; gutter: true" style="font-size:12px;; margin: 10px 0 0 0; margin-top: 0">[globals]
; Extension Maps
5001=alice                               ; Maps 5001 to a local extension that will emulate
                                         ; a party pressing DTMF digits from a device.
;5001=PJSIP/sip:alice@127.0.0.1:5060     ; What a realistc mapping for the alice device would look like.

; Realistically, 'alice' would map to a channel for a local device that would receive the call, therefore
; rendering this extension unnecessary. However, for the purposes of this demonstration, the extension is
; presented to you to show that sending the sequence of DTMF digits defined in the 'parkcall' option in
; 'features.conf' is the trigger that invokes the one-step parking feature.

[parking-example]
include => parkedcalls

exten => alice,1,NoOp(Handles calls to alice.)
  same => n,Answer()
  same => n,Playback(hello-world)
  same => n,SendDTMF(#72w)
  same => n,Wait(300)
  same => n,Hangup()

[from-outside]
exten => 5555001,1,NoOp(Route to a local extension.)
  ; Dials the device that is mapped to the local resource, alice, giving the recipient of the call the ability
  ; to park it. Assuming the value of LocalExtension is 5001, the Dial() command will look like: Dial(alice,,k)
  same => n,Dial(PJSIP/alice)
  same => n,Hangup()

[parkedcallstimeout]
exten => s,1,NoOp(This is all that happens to parked calls if they time out.)
  same => n,Playback(vm-goodbye)
  same => n,Hangup()
</pre> 
</div> 
</div> </td> 
</tr> 
</tbody> 
</table> </td> 
</tr> 
<tr> 
<td class="email-content-main mobile-expand action-padding last-row-padding" style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 15px 16px; background-color: #fff; padding-bottom: 10px; padding-bottom: 10px"> 
<table id="actions-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; color: #333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> 
<tbody> 
<tr> 
<td id="actions-pattern-container" valign="middle" style="padding: 0px; border-collapse: collapse; padding: 15px 0 0 24px; vertical-align: middle"> 
<table align="left" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; color: #333"> 
<tbody> 
<tr> 
<td class="actions-pattern-action-icon-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 0px; vertical-align: middle"><a href="https://wiki.asterisk.org/wiki/display/AST/Call+Parking?src=email" title="View page Icon" style="color: #3b73af; text-decoration: none"><img class="actions-pattern-action-icon-image" height="16" width="16" border="0" title="View page Icon" src="cid:com.atlassian.confluence.plugins.confluence-email-resources%3Aview-page-email-adg-footer-item%3Aicon" alt="View page Icon" style="vertical-align: middle" /></a></td>
<td class="actions-pattern-action-text-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 4px; padding-left: 5px; white-space: nowrap"><a href="https://wiki.asterisk.org/wiki/display/AST/Call+Parking?src=email" title="View page" style="color: #3b73af; text-decoration: none">View page</a></td>
<td class="actions-pattern-action-bull" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 4px; color: #999; padding: 0 5px">•</td> 
</tr> 
</tbody> 
</table> 
<table align="left" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; color: #333"> 
<tbody> 
<tr> 
<td class="actions-pattern-action-icon-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 0px; vertical-align: middle"><a href="https://wiki.asterisk.org/wiki/display/AST/Call+Parking?showComments=true&showCommentArea=true&src=email#addcomment" title="Add comment Icon" style="color: #3b73af; text-decoration: none"><img class="actions-pattern-action-icon-image" height="16" width="16" border="0" title="Add comment Icon" src="cid:com.atlassian.confluence.plugins.confluence-email-resources%3Aadd-comment-to-content-email-adg-footer-item%3Aicon" alt="Add comment Icon" style="vertical-align: middle" /></a></td>
<td class="actions-pattern-action-text-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 4px; padding-left: 5px; white-space: nowrap"><a href="https://wiki.asterisk.org/wiki/display/AST/Call+Parking?showComments=true&showCommentArea=true&src=email#addcomment" title="Add comment" style="color: #3b73af; text-decoration: none">Add comment</a></td>
<td class="actions-pattern-action-bull" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 4px; color: #999; padding: 0 5px">•</td> 
</tr> 
</tbody> 
</table> 
<table style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; color: #333"> 
<tbody> 
<tr> 
<td class="actions-pattern-action-icon-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 0px; vertical-align: middle"><a href="https://wiki.asterisk.org/wiki/plugins/likes/like.action?contentId=32376513&src=email" title="Like Icon" style="color: #3b73af; text-decoration: none"><img class="actions-pattern-action-icon-image" height="16" width="16" border="0" title="Like Icon" src="cid:com.atlassian.confluence.plugins.confluence-like%3Aview-email-adg-content-item%3Aicon" alt="Like Icon" style="vertical-align: middle" /></a></td>
<td class="actions-pattern-action-text-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 4px; padding-left: 5px; white-space: nowrap"><a href="https://wiki.asterisk.org/wiki/plugins/likes/like.action?contentId=32376513&src=email" title="Like" style="color: #3b73af; text-decoration: none">Like</a></td> 
</tr> 
</tbody> 
</table> </td> 
</tr> 
</tbody> 
</table> </td> 
</tr> 
<tr> 
<td class="email-content-rounded-bottom mobile-expand" style="padding: 0px; border-collapse: collapse; color: #fff; height: 5px; line-height: 5px; padding: 0 15px 0 16px; background-color: #fff; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; border-top: 0; border-left: 1px solid #ccc; border-bottom: 1px solid #ccc; border-right: 1px solid #ccc; mso-line-height-rule: exactly"> </td> 
</tr> 
</tbody> 
</table> </td> 
</tr> 
<tr> 
<td id="footer-pattern" style="padding: 0px; border-collapse: collapse; padding: 12px 20px"> 
<table id="footer-pattern-container" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; color: #333"> 
<tbody> 
<tr> 
<td id="footer-pattern-links-container" width="100%" style="padding: 0px; border-collapse: collapse; color: #999; font-size: 12px; line-height: 18px; font-family: Arial, sans-serif; mso-line-height-rule: exactly; mso-text-raise: 2px"> 
<table align="left" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; color: #333; font-size: 12px; line-height: 18px; font-family: Arial, sans-serif; mso-line-height-rule: exactly; mso-text-raise: 2px"> 
<tbody> 
<tr> 
<td class="footer-pattern-links mobile-resize-text" style="padding: 0px; border-collapse: collapse"><a href="https://wiki.asterisk.org/wiki/users/removespacenotification.action?spaceKey=AST&src=email" title="" style="color: #3b73af; text-decoration: none">Stop watching space</a></td>
<td class="footer-pattern-links-bull" style="padding: 0px; border-collapse: collapse; padding: 0 5px; color: #999">•</td> 
</tr> 
</tbody> 
</table> 
<table style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; color: #333; font-size: 12px; line-height: 18px; font-family: Arial, sans-serif; mso-line-height-rule: exactly; mso-text-raise: 2px"> 
<tbody> 
<tr> 
<td class="footer-pattern-links mobile-resize-text" style="padding: 0px; border-collapse: collapse"><a href="https://wiki.asterisk.org/wiki/users/editmyemailsettings.action?src=email" title="" style="color: #3b73af; text-decoration: none">Manage notifications</a></td> 
</tr> 
</tbody> 
</table> </td> 
</tr> 
<tr> 
<td id="footer-pattern-text" class="mobile-resize-text" width="100%" style="padding: 0px; border-collapse: collapse; color: #999; font-size: 12px; line-height: 18px; font-family: Arial, sans-serif; mso-line-height-rule: exactly; mso-text-raise: 2px; display: none">This message was sent by Atlassian Confluence 5.6.6</td> 
</tr> 
</tbody> 
</table> </td> 
</tr> 
</tbody> 
</table> 
<table id="sealed-section" border="0" cellpadding="0" cellspacing="0" width="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; color: #333; display: none"> 
<tbody> 
<tr> 
<td style="padding: 0px; border-collapse: collapse; border: 0; font-size: 0px; line-height: 0; mso-line-height-rule: exactly"></td> 
</tr> 
</tbody> 
</table>
</body>
</html>