<html>
<head>
    <base href="https://wiki.asterisk.org/wiki">
            <link rel="stylesheet" href="/wiki/s/en/2171/18/9/_/styles/combined.css?spaceKey=AST&amp;forWysiwyg=true" type="text/css">
    </head>
<body style="background: white;" bgcolor="white" class="email-body">
<div id="pageContent">
<div id="notificationFormat">
<div class="wiki-content">
<div class="email">
    <h2><a href="https://wiki.asterisk.org/wiki/display/AST/app_macro+Deprecation">app_macro Deprecation</a></h2>
    <h4>Page  <b>added</b> by             <a href="https://wiki.asterisk.org/wiki/display/~kmoore">Kinsey Moore</a>
    </h4>
         <br/>
    <div class="notificationGreySide">
         <h1><a name="app_macroDeprecation-CCSS"></a>CCSS</h1>

<p>Starting with Asterisk 11, CCSS callback macro functionality has been deprecated in favor of an app_stack-based approach.  Usage in channel driver configurations is nearly identical to that of the existing app_macro-based option.</p>

<h2><a name="app_macroDeprecation-DifferencesinUsage"></a>Differences in Usage</h2>

<p>In channel configurations, 'cc_callback_sub' should be used instead of 'cc_callback_macro' and a complete location in the dialplan such as 'local,1234,1' should be provided instead of a macro context.  Arguments and argument order have been preserved to make the change as smooth as possible.</p>

<h2><a name="app_macroDeprecation-Example"></a>Example</h2>

<p>Assuming a SIP configuration of the following:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="theme: Confluence; brush: java; gutter: false">[general]
limitonpeers=yes
udpbindaddr = 127.0.0.2

[alice]
type = friend
context = to-bob
host = 127.0.0.1
qualify = no
insecure = invite
cc_agent_policy=generic
cc_monitor_policy=generic
cc_callback_sub=cc_test,s,1
callcounter=yes

[bob]
type = friend
fromuser = bob
context = bob-in
host = 127.0.0.1
qualify = no
insecure = invite
cc_agent_policy=generic
cc_monitor_policy=generic
cc_callback_sub=cc_test,s,1
callcounter=yes</pre>
</div></div>

<p>And dialplan:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="theme: Confluence; brush: java; gutter: false">[to-bob]
exten =&gt; 1234,1,noop
exten =&gt; 1234,n,dial(SIP/bob)

exten =&gt; 1235,1,answer
exten =&gt; 1235,n,CallCompletionRequest

[cc_test]
exten =&gt; s,1,NoOp(CCSS callback run for CCBS)
exten =&gt; s,n,Return</pre>
</div></div>

<h3><a name="app_macroDeprecation-Events"></a>Events</h3>

<p>A call is made to bob.  While this call is active, Alice attempts a call to Bob by dialing 1234, fails, and then requests CCBS by dialing 1235.  Once Bob ends his call, Asterisk runs the callback (cc_test), calls Bob, and then calls Alice to complete the CCBS request.</p>

<h1><a name="app_macroDeprecation-ConnectedLineInformation"></a>Connected Line Information</h1>

<p>Starting with Asterisk 11, the use of a connected line information (CLI) callback macro for CLI interception and modification has been deprecated in favor of an app_stack-based approach.  If both app_macro-based and app_stack-based callbacks have been defined, the app_stack-based callback will be run instead of the app_macro-based callbacks.  To accomplish this deprecation, two new dialplan variables have been introduced: CONNECTED_LINE_SEND_SUB and CONNECTED_LINE_SEND_SUB_ARGS.</p>

<h2><a name="app_macroDeprecation-DifferencesinUsage"></a>Differences in Usage</h2>

<p>The primary difference between the app_macro-based callbacks and the new app_stack-based callback is that there is only one variant of the app_stack-based callback where there were previously callee and caller variants of the macro callback.  CLI interception callbacks do not make sense from both caller and callee viewpoints so it was prudent to combine them into a single callback.  CONNECTED_LINE_SEND_SUB must be provided with a full dialplan location such as 'local,1234,1'.  Otherwise, usage is identical to the deprecated app_macro-based callback.</p>

<h2><a name="app_macroDeprecation-Example"></a>Example</h2>

<p>Starting dialplan execution at 'test,100,1', the following is a working example of the app_stack-based CLI callback using local channels.</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="theme: Confluence; brush: java; gutter: false">[test]
exten =&gt; 100,1,NoOp
exten =&gt; 100,n,Set(__CONNECTED_LINE_SEND_SUB=callback,s,1)
exten =&gt; 100,n,Set(__CONNECTED_LINE_SEND_SUB_ARGS=45,4)
exten =&gt; 100,n,Dial(local/101@test)
exten =&gt; 100,n,Hangup

exten =&gt; 101,1,NoOp
exten =&gt; 101,n,Set(CONNECTEDLINE(name,i)="Company Name")
exten =&gt; 101,n,Set(CONNECTEDLINE(name-pres,i)=allowed)
exten =&gt; 101,n,Set(CONNECTEDLINE(num,i)=5551212)
exten =&gt; 101,n,Set(CONNECTEDLINE(num-pres)=allowed)
exten =&gt; 101,n,Answer
exten =&gt; 101,n,Echo()

[callback]
; ARG1 is the prefix to add.
; ARG2 is the number of digits at the end to add the prefix to.
; When the subroutine ends the CONNECTEDLINE data is passed to the
; channel driver.
exten =&gt; s,1,NoOp()
exten =&gt; s,n,GotoIf($[${CONNECTEDLINE(number)} != 5551212]?end)
exten =&gt; s,n,NoOp(Running connected line subroutine with arg1: ${ARG1} and arg2: ${ARG2})
exten =&gt; s,n,Set(NOPREFIX=${CONNECTEDLINE(number):-${ARG2}})
exten =&gt; s,n,Set(CONNECTEDLINE(num,i)=${ARG1}${NOPREFIX})
exten =&gt; s,(end),Return</pre>
</div></div>

<h1><a name="app_macroDeprecation-RedirectingInformation"></a>Redirecting Information</h1>

<p>Starting with Asterisk 11, the use of a redirecting information (RI) callback macro for RI interception and modification has been deprecated in favor of an app_stack-based approach.  If both app_macro-based and app_stack-based callbacks have been defined, the app_stack-based callback will be run instead of the app_macro-based callbacks.  To accomplish this deprecation, two new dialplan variables have been introduced: REDIRECTING_SEND_SUB and REDIRECTING_SEND_SUB_ARGS.</p>

<h2><a name="app_macroDeprecation-DifferencesinUsage"></a>Differences in Usage</h2>

<p>The primary difference between the app_macro-based callbacks and the new app_stack-based callback is that there is only one variant of the app_stack-based callback where there were previously callee and caller variants of the macro callback.  RI interception callbacks do not make sense from both caller and callee viewpoints so it was prudent to combine them into a single callback.  REDIRECTING_SEND_SUB must be provided with a full dialplan location such as 'local,1234,1'.  Otherwise, usage is identical to the deprecated app_macro-based callback.</p>


<h2><a name="app_macroDeprecation-Example"></a>Example</h2>

<p>Starting dialplan execution at 'test,100,1', the following is a working example of the app_stack-based RI callback using local channels.</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="theme: Confluence; brush: java; gutter: false">[test]
exten =&gt; 100,1,NoOp
exten =&gt; 100,n,Set(__REDIRECTING_SEND_SUB=callback,s,1)
exten =&gt; 100,n,Set(__REDIRECTING_SEND_SUB_ARGS=45,4)
exten =&gt; 100,n,Dial(local/101@test)
exten =&gt; 100,n,Hangup

exten =&gt; 101,1,NoOp
exten =&gt; 101,n,Set(REDIRECTING(to-num,i)=2000)
exten =&gt; 101,n,Set(REDIRECTING(to-num-pres)=allowed)
exten =&gt; 101,n,Set(REDIRECTING(from-num,i)=1000)
exten =&gt; 101,n,Set(REDIRECTING(from-num-pres,i)=allowed)
exten =&gt; 101,n,Set(REDIRECTING(count,i)=$[${REDIRECTING(count)} + 1])
exten =&gt; 101,n,Set(REDIRECTING(reason,i)=cfu)
exten =&gt; 101,n,Answer
exten =&gt; 101,n,Echo()

[callback]
; ARG1 is the prefix to add.
; ARG2 is the number of digits at the end to add the prefix to.
; When the subroutine ends the REDIRECTING data is passed to the
; channel driver.
exten =&gt; s,1,NoOp()
exten =&gt; s,n,GotoIf($[${REDIRECTING(to-num)} != 2000]?end)
exten =&gt; s,n,NoOp(Running caller redirecting subroutine with arg1: ${ARG1} and arg2: ${ARG2})
exten =&gt; s,n,Set(NOPREFIX=${REDIRECTING(to-num):-${ARG2}})
exten =&gt; s,n,Set(REDIRECTING(to-num,i)=${ARG1}${NOPREFIX})
exten =&gt; s,(end),Return</pre>
</div></div>
    </div>
    <div id="commentsSection" class="wiki-content pageSection">
       <div style="float: right;" class="grey">
                        <a href="https://wiki.asterisk.org/wiki/users/removespacenotification.action?spaceKey=AST">Stop watching space</a>
            <span style="padding: 0px 5px;">|</span>
                <a href="https://wiki.asterisk.org/wiki/users/editmyemailsettings.action">Change email notification preferences</a>
</div>
       <a href="https://wiki.asterisk.org/wiki/display/AST/app_macro+Deprecation">View Online</a>
              |
       <a href="https://wiki.asterisk.org/wiki/display/AST/app_macro+Deprecation?showComments=true&amp;showCommentArea=true#addcomment">Add Comment</a>
           </div>
</div>
</div>
</div>
</div>
</body>
</html>