Hi
This is how I handle them on the registrar:
[...] # Record original destination before performing call forwarding $avp(pre_redir_destination) = $rU; [...]
Somewhere in the config we start reacting to replies from the customer like when busy...
if (t_check_status("(486)|(600)")) { $avp(cf_reason) = "user-busy"; route(CFB); # Check if Call Forward on Busy is active and if so, handle this route(CFVM); # Check if Call Forward to Voicemail is active and if so, handle this $avp(announcecode) = "BUSY"; # No Call Forward setting found to handle 'busy' so just send to media server and play BUSY tone. t_send_reply("$avp(rstatus)", "$avp(rtext)"); exit; }
Or the one you are looking for, when customer replies with 301 or 302:
if (t_check_status("(301)|(302)")) { $avp(destination) = $(T_rpl($ct){tobody.user}); if ($avp(debug) > 0) { xlog("L_INFO", "$cfg(route): Got REDIRECTION: $avp(rstatus) $avp(rtext) towards $T_rpl($ct) => $avp(destination) RU: $rU"); } $avp(cf_reason) = "deflection"; t_on_branch("BR_REDIR_TO_CORE"); route(ROUTE_TO_CORE); exit; }
branch_route[BR_REDIR_TO_CORE] { if ($avp(debug) > 0) { xlog("L_INFO", "$cfg(route): BR_idx: $T_branch_idx $avp(pre_redir_destination) NEW: $avp(destination) FROM: $avp(from_in) setting TO\n"); } if (is_present_hf("X-OrigFrom")) { # Restore From we had before possible translation to customer $fU = $(hdr(X-OrigFrom)); } remove_hf("Diversion"); $avp(pai_in) = $avp(pre_redir_destination); $var(newdi) = "<sip:" + $avp(pre_redir_destination) + "@" + $(fu{uri.host}) + ">;reason=" + $avp(cf_reason); if ($avp(debug) > 0) { xlog("L_INFO", "$cfg(route): Adding HEADER: $var(newdi)\n"); } append_hf("Diversion: $var(newdi)\r\n"); $tU = $avp(destination); $rU = $avp(destination); }
Mit freundlichen Grüssen
-Benoît Panizzon-