<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Hi,</p>
    <p>this approach unfortunately doesn't work. Does somebody else know
      of a solution to neaten up big reply routes?</p>
    <p>My code and the following error:</p>
    <p>
      <blockquote type="cite">
        <span style="font-family:monospace"><span
            style="color:#000000;background-color:#ffffff;">   367</span><span
            style="color:#000000;background-color:#ffffff;">  </span><span
            style="color:#000000;background-color:#ffffff;">route[test]
            {</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   368</span><span
            style="color:#000000;background-color:#ffffff;">          </span><span
            style="color:#000000;background-color:#ffffff;">xlog("now in
            test route");</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   369</span><span
            style="color:#000000;background-color:#ffffff;">          </span><span
            style="color:#000000;background-color:#ffffff;">change_reply_status(181,
            "test");</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   370</span><span
            style="color:#000000;background-color:#ffffff;">  </span><span
            style="color:#000000;background-color:#ffffff;">}</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   371</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   372</span><span
            style="color:#000000;background-color:#ffffff;">  </span><span
            style="color:#000000;background-color:#ffffff;">onreply_route[MAIN]
            {</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   373</span><span
            style="color:#000000;background-color:#ffffff;">          </span><span
            style="color:#000000;background-color:#ffffff;"># For
            fr_inv_timeout handling</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   374</span><span
            style="color:#000000;background-color:#ffffff;">          </span><span
            style="color:#000000;background-color:#ffffff;">if
            (t_check_status("180")) {</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   375</span><span
            style="color:#000000;background-color:#ffffff;">
                             </span><span
            style="color:#000000;background-color:#ffffff;">$var(180_in_trans)=1;</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   376</span><span
            style="color:#000000;background-color:#ffffff;">
                             </span><span
            style="color:#000000;background-color:#ffffff;">route(test);</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   377</span><span
            style="color:#000000;background-color:#ffffff;">
                             </span><span
            style="color:#000000;background-color:#ffffff;">xlog("back
            to reply route");</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   378</span><span
            style="color:#000000;background-color:#ffffff;">          </span><span
            style="color:#000000;background-color:#ffffff;">}</span><br>
          <span style="color:#000000;background-color:#ffffff;">
          </span><br>
        </span></blockquote>
    </p>
    <p>
      <blockquote type="cite">
        <span style="font-family:monospace"><span
style="font-weight:bold;color:#ff5454;background-color:#ffffff;">CRITICAL:core:yyerror:
            parse error in /etc/opensips/opensips.cfg:369:29-30: Command
            <change_reply_status> cannot be used in the block</span><br>
        </span></blockquote>
    </p>
    <p>Doing it in a reply route:</p>
    <p>
      <blockquote type="cite">
        <span style="font-family:monospace"><span
            style="color:#000000;background-color:#ffffff;">   367</span><span
            style="color:#000000;background-color:#ffffff;">  </span><span
            style="color:#000000;background-color:#ffffff;">onreply_route[test]
            {</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   368</span><span
            style="color:#000000;background-color:#ffffff;">          </span><span
            style="color:#000000;background-color:#ffffff;">xlog("now in
            test route");</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   369</span><span
            style="color:#000000;background-color:#ffffff;">          </span><span
            style="color:#000000;background-color:#ffffff;">change_reply_status(181,
            "test");</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   370</span><span
            style="color:#000000;background-color:#ffffff;">  </span><span
            style="color:#000000;background-color:#ffffff;">}</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   371</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   372</span><span
            style="color:#000000;background-color:#ffffff;">  </span><span
            style="color:#000000;background-color:#ffffff;">onreply_route[MAIN]
            {</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   373</span><span
            style="color:#000000;background-color:#ffffff;">          </span><span
            style="color:#000000;background-color:#ffffff;"># For
            fr_inv_timeout handling</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   374</span><span
            style="color:#000000;background-color:#ffffff;">          </span><span
            style="color:#000000;background-color:#ffffff;">if
            (t_check_status("180")) {</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   375</span><span
            style="color:#000000;background-color:#ffffff;">
                             </span><span
            style="color:#000000;background-color:#ffffff;">$var(180_in_trans)=1;</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   376</span><span
            style="color:#000000;background-color:#ffffff;">
                             </span><span
            style="color:#000000;background-color:#ffffff;">t_on_reply("test");</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   377</span><span
            style="color:#000000;background-color:#ffffff;">
                             </span><span
            style="color:#000000;background-color:#ffffff;">xlog("back
            to MAIN reply route");</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   378</span><span
            style="color:#000000;background-color:#ffffff;">          </span><span
            style="color:#000000;background-color:#ffffff;">}</span><br>
          <span style="color:#000000;background-color:#ffffff;">
          </span><br>
        </span>
      </blockquote>
      <blockquote type="cite">
        <span style="font-family:monospace"><span
style="font-weight:bold;color:#ff5454;background-color:#ffffff;">ERROR:sipmsgops:change_reply_status_f:
            the class of provisional or positive final replies cannot be
            changed</span><br>
        </span>
      </blockquote>
      <br>
    </p>
    <p>Jump to secondary reply route via proxy route:</p>
    <p>
      <blockquote type="cite">
        <span style="font-family:monospace"><span
            style="color:#000000;background-color:#ffffff;">   367</span><span
            style="color:#000000;background-color:#ffffff;">  </span><span
            style="color:#000000;background-color:#ffffff;">route[test]
            {</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   368</span><span
            style="color:#000000;background-color:#ffffff;">          </span><span
            style="color:#000000;background-color:#ffffff;">xlog("now in
            test route");</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   369</span><span
            style="color:#000000;background-color:#ffffff;">          </span><span
            style="color:#000000;background-color:#ffffff;">t_on_reply("test");</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   370</span><span
            style="color:#000000;background-color:#ffffff;">  </span><span
            style="color:#000000;background-color:#ffffff;">}</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   371</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   372</span><span
            style="color:#000000;background-color:#ffffff;">  </span><span
            style="color:#000000;background-color:#ffffff;">onreply_route[test]
            {</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   373</span><span
            style="color:#000000;background-color:#ffffff;">          </span><span
            style="color:#000000;background-color:#ffffff;">xlog("now in
            test reply route");</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   374</span><span
            style="color:#000000;background-color:#ffffff;">          </span><span
            style="color:#000000;background-color:#ffffff;">change_reply_status(181,
            "test");</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   375</span><span
            style="color:#000000;background-color:#ffffff;">  </span><span
            style="color:#000000;background-color:#ffffff;">}</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   376</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   377</span><span
            style="color:#000000;background-color:#ffffff;">  </span><span
            style="color:#000000;background-color:#ffffff;">onreply_route[MAIN]
            {</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   378</span><span
            style="color:#000000;background-color:#ffffff;">          </span><span
            style="color:#000000;background-color:#ffffff;"># For
            fr_inv_timeout handling</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   379</span><span
            style="color:#000000;background-color:#ffffff;">          </span><span
            style="color:#000000;background-color:#ffffff;">if
            (t_check_status("180")) {</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   380</span><span
            style="color:#000000;background-color:#ffffff;">
                             </span><span
            style="color:#000000;background-color:#ffffff;">$var(180_in_trans)=1;</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   381</span><span
            style="color:#000000;background-color:#ffffff;">
                             </span><span
            style="color:#000000;background-color:#ffffff;">route(test);</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   382</span><span
            style="color:#000000;background-color:#ffffff;">
                             </span><span
            style="color:#000000;background-color:#ffffff;">xlog("back
            to MAIN reply route");</span><span
            style="color:#000000;background-color:#ffffff;">
          </span><br>
          <span style="color:#000000;background-color:#ffffff;">   383</span><span
            style="color:#000000;background-color:#ffffff;">          </span><span
            style="color:#000000;background-color:#ffffff;">}</span><br>
          <span style="color:#000000;background-color:#ffffff;">
          </span><br>
        </span>
      </blockquote>
      <blockquote type="cite">
        <span style="font-family:monospace"><span
style="font-weight:bold;color:#ff5454;background-color:#ffffff;">ERROR:sipmsgops:change_reply_status_f:
            the class of provisional or positive final replies cannot be
            changed</span><br>
        </span></blockquote>
    </p>
    <p>I must note that change_reply_status works flawlessly when
      executing directly in MAIN reply route.</p>
    <p><br>
    </p>
    <p>Thanks,</p>
    <p>Malte</p>
    <p>On 10/04/2026 01:03, Richard Robson wrote:</p>
    <blockquote type="cite"
      cite="mid:4b9b91d7-2286-464e-87af-64616f8e92e0@rikrobson.co.uk">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <p>No. Once in the reply_route you can call routes as a function.
        I think that is what you are after.</p>
      <p>onreply_route{route_a]</p>
      <p>{stuff()..</p>
      <p>if x route(route_z)<br>
        else route(_x)</p>
      <p>..}</p>
      <p>route[route_z]</p>
      <p>{stuff()..</p>
      <p>..}</p>
      <p><br>
      </p>
      <p>route[route_z]</p>
      <p>{stuff()..</p>
      <p>..}</p>
      <p>Richard</p>
      <p><br>
      </p>
      <div class="moz-cite-prefix">On 09/04/2026 10:13, <a
          class="moz-txt-link-abbreviated moz-txt-link-freetext"
          href="mailto:spce@lard.at" moz-do-not-send="true">spce@lard.at</a>
        wrote:<br>
      </div>
      <blockquote type="cite"
        cite="mid:639116f3-6a2f-4c7a-b2b2-9229f1ccd3b4@lard.at">
        <meta http-equiv="Content-Type"
          content="text/html; charset=UTF-8">
        <p>Hi,:</p>
        <p>thanks. In my case theres a quite big onreply route, which
          totally works, but is a hassle to read. Therefore I would like
          to segment some stuff into custom "functions", so I can have
          an easy to understand main onreply route and the more
          complicated logic in special blocks.</p>
        <p>A possibility for that would be to call secondary onreply
          routes from the parent route. Is that possible or not?</p>
        <pre class="moz-signature" cols="72">Liebe Grüße / Kind regards,
Malte</pre>
        <div class="moz-cite-prefix">On 08/04/2026 17.23, Richard Robson
          wrote:<br>
        </div>
        <blockquote type="cite"
cite="mid:b02e03fc172c8744eea47f32a681ac3d3fa58628.camel@rikrobson.co.uk">
          <meta http-equiv="content-type"
            content="text/html; charset=UTF-8">
          <style>pre,code,address {
  margin: 0px;
}h1,h2,h3,h4,h5,h6 {
  margin-top: 0.2em;
  margin-bottom: 0.2em;
}ol,ul {
  margin-top: 0em;
  margin-bottom: 0em;
}blockquote {
  margin-top: 0em;
  margin-bottom: 0em;
}</style>
          <div>you call a reply route to handle the relpy. i.e. a
            positive outcome 200OK or a 183 etc. This reply should be
            relayed back to the originator and there should be no need
            to call another reply route. it won't expect a reply just an
            ack and that should be handled as an ACK and relayed or an
            error sent back. (see the default script)</div>
          <div>if you want the reply route to do something else then add
            a route to do that or a branch route if needed. and call
            that from the reply route (not nested)</div>
          <div><br>
          </div>
          <div>Richard<br>
            <br>
          </div>
          <div><br>
          </div>
          <div>On Wed, 2026-04-08 at 15:38 +0200, <a
              class="moz-txt-link-abbreviated moz-txt-link-freetext"
              href="mailto:spce@lard.at" moz-do-not-send="true">spce@lard.at</a>
            wrote:</div>
          <blockquote type="cite"
style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex">
            <div> Hi,<br>
              <br>
              is it possible to use nested reply routes in opensips?<br>
              <br>
              I want to clean up my script and thinking of something
              like this:<br>
            </div>
            <p><font size="2">> onreply_route[MAIN] {<br>
                >  [...]<br>
                >  is_from_gw(1) = t_on_reply("ADD_ISUP");> }<br>
                >  [...] }<br>
                >  onreply_route[ADD_ISUP] {<br>
                >  add_isup_part() }</font></p>
            <div> </div>
            <p>The nested onreply route then should return to the parent
              onreply route. In my tests I specifically had issues with
              the rtpengine module: when using rtpengine_answer in the
              parent onreply route and then calling another onreply
              route from parent route, opensips wasn't able to see the
              SDP body in the reply and the rtpengine_answer thus
              failed.</p>
            <div> </div>
            <p><br>
            </p>
            <div> -- <br>
              Liebe Grüße / Kind regards,<br>
              Malte<br>
              <br>
            </div>
            <div>_______________________________________________<br>
            </div>
            <div>Users mailing list<br>
            </div>
            <div><a href="mailto:Users@lists.opensips.org"
                moz-do-not-send="true" class="moz-txt-link-freetext">Users@lists.opensips.org</a><br>
            </div>
            <div><a
href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users"
                moz-do-not-send="true" class="moz-txt-link-freetext">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><br>
            </div>
          </blockquote>
          <div><br>
          </div>
          <div><span></span></div>
          <br>
          <fieldset class="moz-mime-attachment-header"></fieldset>
          <pre wrap="" class="moz-quote-pre">_______________________________________________
Users mailing list
<a class="moz-txt-link-abbreviated moz-txt-link-freetext"
          href="mailto:Users@lists.opensips.org" moz-do-not-send="true">Users@lists.opensips.org</a>
<a class="moz-txt-link-freetext"
href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users"
          moz-do-not-send="true">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a>
</pre>
        </blockquote>
        <br>
        <fieldset class="moz-mime-attachment-header"></fieldset>
        <pre wrap="" class="moz-quote-pre">_______________________________________________
Users mailing list
<a class="moz-txt-link-abbreviated moz-txt-link-freetext"
        href="mailto:Users@lists.opensips.org" moz-do-not-send="true">Users@lists.opensips.org</a>
<a class="moz-txt-link-freetext"
        href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users"
        moz-do-not-send="true">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a>
</pre>
      </blockquote>
      <br>
      <fieldset class="moz-mime-attachment-header"></fieldset>
      <pre wrap="" class="moz-quote-pre">_______________________________________________
Users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Users@lists.opensips.org">Users@lists.opensips.org</a>
<a class="moz-txt-link-freetext" href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a>
</pre>
    </blockquote>
  </body>
</html>