[OpenSIPS-Users] Hunt Group with Opensips

Brad Bendy brad.bendy at benganetworks.com
Wed Aug 25 09:11:51 CEST 2010


Deon,

It's kind of sloppy as was thrown together for testing, but it works.

The IAD we were sending calls to sends a 486 if the line is in use, we
then route advance on the 486 until all destinations have been tried.

We made the hunt_list static for testing, but avp_db_load or memcached
it was will be used in production.


route[hunt] {

  $avp(s:hunt_timeout) = 20;
 #hunt list is number_to_hunt,dest1,dest2,dest3

  $avp(s:hunt_list) = "3,5000,5001,5002";
  $avp(s:total_hunts) = $(avp(s:hunt_list){s.select,0,,});
#Are we starting the hunt or picking up?
  if(!is_avp_set("$avp(s:hunt_pos)")){
    #Set to 1 as its first try
    $avp(s:hunt_pos) = 1;
    $avp(s:hunt_num) = $(avp(s:hunt_list){s.select,$avp(s:hunt_pos),,});
    xlog("L_NOTICE","***Initial hunting***: Starting to hunt for Call
ID: $ci with Source ANI of: $fU");
    xlog("L_NOTICE","***Initial hunting***: Number to hunt to:
$avp(s:hunt_num) with hunt pos: $avp(s:hunt_pos) with timeout of
$avp(s:hunt_timeout) seconds and hunt list: $avp(s:hunt_list)");

  } else {
    #Not the 1st time, let's pull the next in order
    $avp(s:hunt_num) = $(avp(s:hunt_list){s.select,$avp(s:hunt_pos),,});
    xlog("L_NOTICE","***Trying #$avp(s:hunt_pos) of $avp(s:total_hunts)
in seq*** Number to hunt to: $avp(s:hunt_num) Call ID: $ci with Source
ANI of: $fU");
    #pull the next number to call from the set 
    $avp(s:hunt_num) = $(avp(s:hunt_list){s.select,$avp(s:hunt_pos),,});
  }
  #send the call
  $rU = $avp(s:hunt_num);
  
  $rd = '1.1.1.1;

  t_on_branch("hunt");
  t_on_reply("hunt");
  t_on_failure("hunt");

  if (!t_relay()) {
    sl_reply_error();
  };
  exit();

}

failure_route[hunt] {
  xlog("L_NOTICE","hit failure");
  if (t_was_cancelled()) {
    xlog("L_NOTICE","Call 487'ed");
    exit();
  }

  xlog("L_NOTICE","Hit failure route, num of hunts: $avp(s:total_hunts)
hunt pos: $avp(s:hunt_pos)");
  #route advance on certain codes
  if($avp(s:total_hunts) == $avp(s:hunt_pos)){
    xlog("L_NOTICE","All hunting members tried, forwarding to final
destination");
    seturi("sip:$rU at 2.2.2.2");
    t_relay();
    exit();
  }
  if(t_check_status("480")){
    t_reply("480","Request timeout");
    exit();
  }
  if(t_check_status("404")) {
    t_reply("404","Not found");
    exit();
  }

  if(t_check_status("400|408|483|486|503|500|603|403")) {
    #Adtran will either send a 480 or 408 or 486 depending on the status
of extension being called
    $avp(s:hunt_pos) = $(avp(s:hunt_pos){s.int}) + 1;
    xlog("L_NOTICE","hunt pos in failure route after add:
$avp(s:hunt_pos)");    
  route(hunt);
    exit();
  }

}


On Wed, 2010-08-25 at 07:54 +0200, Deon Vermeulen wrote:

> Brad
> 
> 
> 
> would you be so kind and show a sample config for how you setup the
> serial fork?
> 
> 
> I have to set this up but have no idea where to start.
> 
> 
> Some sort of template would be great just to give an idea of how this
> is done.
> 
> 
> I should be able to figure out the rest as I go along.
> 
> 
> Thanks
> 
> 
> Kind Regards
> 
> 
> 
> 
> 
> On Aug 25, 2010, at 5:20 AM, Brad Bendy wrote:
> 
> 
> 
> > I just setup serial hunting and it was pretty easy.
> > 
> > We stored the list of users to be called in memcached, counted how
> > many total users need to be called and advanced to the next one in
> > failure_route as needed, set a ring timeout and then have it go to a
> > voicemail server or wherever it needed to go.
> > 
> > I think you could do the same thing by just tracking the last user
> > rang and use that as your starting point for the next call to take
> > place, then after that is called update memcached or your avp and
> > start all over again on the next call.
> > 
> > I saw a post that said there was a module to do hunting, but ive yet
> > to find it, as I don't think it does exist.
> > 
> > On Tue, 2010-08-24 at 20:13 -0700, osiris123d wrote: 
> > 
> > > I saw a post saying it was possible to do hunt groups with col, but i wasn't
> > > sure how one would keep up with calls to each group user so that one could
> > > do "least called user" or even the user that was next in line to be called. 
> > > I am guessing avps and contact array could help, but i was just wondering
> > > what solutions some people might have used.  I was even thinking that i
> > > might be able to relay the calls to a hunt group number to asterisk and let
> > > asterisk handle the hunt group logic, but i am not sure if that would work.
> > 
> > 
> > 
> > 
> > _______________________________________________
> > Users mailing list
> > Users at lists.opensips.org
> > http://lists.opensips.org/cgi-bin/mailman/listinfo/users
> 
> 
> 
> 
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users

-- 
Brad Bendy
Chief Technical Officer
brad.bendy at benganetworks.com

Benga Networks, LLC.
10115 E. Bell Rd, Ste. 107-451
Scottsdale, AZ 85260-2189

Toll Free:    877-44-BENGA
Local:          480-970-5200
Cell:             602-550-4004
Fax:             866-852-4468
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.opensips.org/pipermail/users/attachments/20100825/8c809d66/attachment.htm 


More information about the Users mailing list