<div dir="auto"><br></div>
<div dir="auto">Hi,<br><br></div>
<div dir="auto">I'm currently trying to add call pickup feature using event_routing module. It seems to work fine when I have only ONE inbound call to a given call group but when I have two calls to the same call group at the same, It's not working properly<br><br></div>
<div dir="auto">Here is my scenario:<br><br></div>
<div dir="auto">--> Opensips1 (usr_loc) --> Bob<br></div>
<div dir="auto">Alice --> Opensips1 --> Freeswitch (fork)<br></div>
<div dir="auto">--> Opensips1 (usr_loc) --> Charlie<br><br></div>
<div dir="auto">David tries to pickup the phone ringing on Bob and Call (which is the same call because it's a fork but different A leg call_id)<br></div>
<div dir="auto">Bob, Charlie and David are in the same pickup group.<br><br></div>
<div dir="auto">When Bob and Charlies ring, David dials *0 to pick the call:<br></div>
<div dir="auto">* Opensips immediately send an Invite to David for one of the incoming call (randomly choosen). Let's say for Bob<br></div>
<div dir="auto">* Opensips send a Cancel to Bob<br></div>
<div dir="auto">* Opensips send again the previous Invite to David (for the same A leg)<br></div>
<div dir="auto">* Opensips send a Cancel to David<br><br><br></div>
<div dir="auto">Here is my opensips code:<br><br></div>
<div dir="auto">dp_translate("DP_FEATURE", "$rU/$rU", "$var(attrs)");<br></div>
<div dir="auto">#Is it a callpickup?<br></div>
<div dir="auto">if($var(attrs) =~ "call_pickup" && $avp(caller_pickup_grp) != "") {<br></div>
<div dir="auto">t_newtran(); # 100 Trying is fired here<br></div>
<div dir="auto">send_reply("480","Gone");<br><br></div>
<div dir="auto">#extension can belong to multiple group so let's raise an event for each group<br></div>
<div dir="auto">$var(p) = 0;<br></div>
<div dir="auto">$var(caller_pickup_grp_len) = 0;<br></div>
<div dir="auto">$var(caller_pickup_grp_len) = $(avp(caller_pickup_grp){csv.count});<br></div>
<div dir="auto">while ($var(p) < $var(caller_pickup_grp_len)) {<br></div>
<div dir="auto">$avp(attr-name) = "group";<br></div>
<div dir="auto">$avp(attr-val) = $(avp(caller_pickup_grp){csv.value,$var(p)});<br></div>
<div dir="auto">xlog("L_NOTICE","$rm $ci hunting2: Caller pickup group [$avp(attr-val)] for [$fu]");<br></div>
<div dir="auto">$avp(attr-name) = "picker";<br></div>
<div dir="auto">$avp(attr-val) = $fu;<br></div>
<div dir="auto">raise_event("E_CALL_PICKUP", $avp(attr-name), $avp(attr-val));<br></div>
<div dir="auto">$var(p) = $var(p) + 1;<br></div>
<div dir="auto">}<br></div>
<div dir="auto">exit;<br></div>
<div dir="auto">}<br><br><br></div>
<div dir="auto">if (isbflagset(USRLOC_FOUND) && $avp(callee_pickup_grp) != ""){<br></div>
<div dir="auto">t_newtran();<br></div>
<div dir="auto">$var(p) = 0;<br></div>
<div dir="auto">$var(callee_pickup_grp_len) = 0;<br></div>
<div dir="auto">$var(callee_pickup_grp_len) = $(avp(callee_pickup_grp){csv.count});<br></div>
<div dir="auto">while ($var(p) < $var(callee_pickup_grp_len)) {<br></div>
<div dir="auto">#$avp(filter) = "group=1";<br></div>
<div dir="auto">$var(group)=$(avp(callee_pickup_grp){csv.value,$var(p)});<br></div>
<div dir="auto">$avp(filter) = "group="+$var(group);<br></div>
<div dir="auto">xlog("L_NOTICE","$rm $ci relay: Callee pickup group [$var(group)]. Raise event");<br></div>
<div dir="auto">notify_on_event("E_CALL_PICKUP","$avp(filter)","handle_pickup", "20");<br></div>
<div dir="auto">$var(p) = $var(p) + 1;<br></div>
<div dir="auto">}<br></div>
<div dir="auto">}<br><br></div>
<div dir="auto">if (!t_relay()) {<br></div>
<div dir="auto">xlog("L_WARN","$rm $ci relay: 500 Internal Server Error (t_relay failure)");<br></div>
<div dir="auto">t_reply("500","Internal Server Error");<br></div>
<div dir="auto">$avp(reason) = "SIP;cause=500;text=INTERNAL SERVER ERROR";<br></div>
<div dir="auto">route(REASON);<br></div>
<div dir="auto">}<br></div>
<div dir="auto">exit;<br><br><br></div>
<div dir="auto">Any idea, what I missed here?<br><br></div>
<div dir="auto">Thanks in advance for your help<br></div>
<div dir="auto">SSrig</div>