<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>edited</b> by             <a href="https://wiki.asterisk.org/wiki/display/~kmoore">Kinsey Moore</a>
    </h4>
        <br/>
                         <h4>Changes (2)</h4>
                                 
    
<div id="page-diffs">
                    <table class="diff" cellpadding="0" cellspacing="0">
    
            <tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">h1. CCSS <br></td></tr>
            <tr><td class="diff-unchanged" > <br></td></tr>
            <tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">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. <br> <br>h2. Differences in Usage <br> <br>In channel configurations, &#39;cc_callback_sub&#39; should be used instead of &#39;cc_callback_macro&#39; and a complete location in the dialplan such as &#39;local,1234,1&#39; should be provided instead of a macro context.  Arguments and argument order have been preserved to make the change as smooth as possible. <br> <br>h2. Example <br> <br>Assuming a SIP configuration of the following: <br>{code} <br>[general] <br>limitonpeers=yes <br>udpbindaddr = 127.0.0.2 <br> <br>[alice] <br>type = friend <br>context = to-bob <br>host = 127.0.0.1 <br>qualify = no <br>insecure = invite <br>cc_agent_policy=generic <br>cc_monitor_policy=generic <br>cc_callback_sub=cc_test,s,1 <br>callcounter=yes <br> <br>[bob] <br>type = friend <br>fromuser = bob <br>context = bob-in <br>host = 127.0.0.1 <br>qualify = no <br>insecure = invite <br>cc_agent_policy=generic <br>cc_monitor_policy=generic <br>cc_callback_sub=cc_test,s,1 <br>callcounter=yes <br>{code} <br> <br>And dialplan: <br>{code} <br>[to-bob] <br>exten =&gt; 1234,1,noop <br>exten =&gt; 1234,n,dial(SIP/bob) <br> <br>exten =&gt; 1235,1,answer <br>exten =&gt; 1235,n,CallCompletionRequest <br> <br>[cc_test] <br>exten =&gt; s,1,NoOp(CCSS callback run for CCBS) <br>exten =&gt; s,n,Return <br>{code} <br> <br>h3. Events <br> <br>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. <br> <br>h1. Connected Line Information <br> <br>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. <br> <br>h2. Differences in Usage <br> <br>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 &#39;local,1234,1&#39;.  Otherwise, usage is identical to the deprecated app_macro-based callback. <br> <br>h2. Example <br> <br>Starting dialplan execution at &#39;test,100,1&#39;, the following is a working example of the app_stack-based CLI callback using local channels. <br>{code} <br>[test] <br>exten =&gt; 100,1,NoOp <br>exten =&gt; 100,n,Set(__CONNECTED_LINE_SEND_SUB=callback,s,1) <br>exten =&gt; 100,n,Set(__CONNECTED_LINE_SEND_SUB_ARGS=45,4) <br>exten =&gt; 100,n,Dial(local/101@test) <br>exten =&gt; 100,n,Hangup <br> <br>exten =&gt; 101,1,NoOp <br>exten =&gt; 101,n,Set(CONNECTEDLINE(name,i)=&quot;Company Name&quot;) <br>exten =&gt; 101,n,Set(CONNECTEDLINE(name-pres,i)=allowed) <br>exten =&gt; 101,n,Set(CONNECTEDLINE(num,i)=5551212) <br>exten =&gt; 101,n,Set(CONNECTEDLINE(num-pres)=allowed) <br>exten =&gt; 101,n,Answer <br>exten =&gt; 101,n,Echo() <br> <br>[callback] <br>; ARG1 is the prefix to add. <br>; ARG2 is the number of digits at the end to add the prefix to. <br>; When the subroutine ends the CONNECTEDLINE data is passed to the <br>; channel driver. <br>exten =&gt; s,1,NoOp() <br>exten =&gt; s,n,GotoIf($[${CONNECTEDLINE(number)} != 5551212]?end) <br>exten =&gt; s,n,NoOp(Running connected line subroutine with arg1: ${ARG1} and arg2: ${ARG2}) <br>exten =&gt; s,n,Set(NOPREFIX=${CONNECTEDLINE(number):-${ARG2}}) <br>exten =&gt; s,n,Set(CONNECTEDLINE(num,i)=${ARG1}${NOPREFIX}) <br>exten =&gt; s,(end),Return <br>{code} <br> <br>h1. Redirecting Information <br> <br>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. <br> <br>h2. Differences in Usage <br> <br>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 &#39;local,1234,1&#39;.  Otherwise, usage is identical to the deprecated app_macro-based callback. <br> <br> <br>h2. Example <br> <br>Starting dialplan execution at &#39;test,100,1&#39;, the following is a working example of the app_stack-based RI callback using local channels. <br>{code} <br>[test] <br>exten =&gt; 100,1,NoOp <br>exten =&gt; 100,n,Set(__REDIRECTING_SEND_SUB=callback,s,1) <br>exten =&gt; 100,n,Set(__REDIRECTING_SEND_SUB_ARGS=45,4) <br>exten =&gt; 100,n,Dial(local/101@test) <br>exten =&gt; 100,n,Hangup <br> <br>exten =&gt; 101,1,NoOp <br>exten =&gt; 101,n,Set(REDIRECTING(to-num,i)=2000) <br>exten =&gt; 101,n,Set(REDIRECTING(to-num-pres)=allowed) <br>exten =&gt; 101,n,Set(REDIRECTING(from-num,i)=1000) <br>exten =&gt; 101,n,Set(REDIRECTING(from-num-pres,i)=allowed) <br>exten =&gt; 101,n,Set(REDIRECTING(count,i)=$[${REDIRECTING(count)} + 1]) <br>exten =&gt; 101,n,Set(REDIRECTING(reason,i)=cfu) <br>exten =&gt; 101,n,Answer <br>exten =&gt; 101,n,Echo() <br> <br>[callback] <br>; ARG1 is the prefix to add. <br>; ARG2 is the number of digits at the end to add the prefix to. <br>; When the subroutine ends the REDIRECTING data is passed to the <br>; channel driver. <br>exten =&gt; s,1,NoOp() <br>exten =&gt; s,n,GotoIf($[${REDIRECTING(to-num)} != 2000]?end) <br>exten =&gt; s,n,NoOp(Running caller redirecting subroutine with arg1: ${ARG1} and arg2: ${ARG2}) <br>exten =&gt; s,n,Set(NOPREFIX=${REDIRECTING(to-num):-${ARG2}}) <br>exten =&gt; s,n,Set(REDIRECTING(to-num,i)=${ARG1}${NOPREFIX}) <br>exten =&gt; s,(end),Return <br>{code} <br></td></tr>
    
            </table>
    </div>                            <h4>Full Content</h4>
                    <div class="notificationGreySide">
        
    </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/pages/diffpagesbyversion.action?pageId=19008210&revisedVersion=2&originalVersion=1">View Changes</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>