[Serusers] SIP to SIP calls & Asterisk

Richard richard at o-matrix.org
Tue Mar 8 21:03:05 CET 2005


If you just want to offload the subscribers from * to ser, you can create
all user accounts in ser. Ser pulls the information for each call and routes
it accordingly. Ser can manipulate most sip headers to whatever you want to.
Lots of ser functions support dynamic database loading. There is no need to
reload ser to make the change effective.

When you send the call to *, e.g. you can map ser domains to the equivalent
* contexts. Most applications in * support multiple contexts, except a few
options, e.g. call park.

This way, ser acts like a sip proxy. That's what it is designed to be. When
some jobs can't be easily done in ser, use * as an application server.

Richard


> -----Original Message-----
> From: serusers-bounces at iptel.org [mailto:serusers-bounces at lists.iptel.org] On
> Behalf Of Patrick Baker
> Sent: Tuesday, March 08, 2005 6:01 AM
> To: serusers at lists.iptel.org
> Subject: Fwd: [Serusers] SIP to SIP calls & Asterisk
> 
> Can anyone give some insight on this?
> 
> 
> ---------- Forwarded message ----------
> From: Patrick Baker <patricksbaker at gmail.com>
> Date: Sat, 5 Mar 2005 19:12:43 -0500
> Subject: Re: [Serusers] SIP to SIP calls & Asterisk
> To: Steve Blair <blairs at isc.upenn.edu>, serusers at lists.iptel.org
> 
> 
> Thanks for the information, but its not set up for multiple domains
> its setup for multiple contexts in asterisk.
> 
> every user is listed in the subscribers database in format
> companyname.user at domain.com domain always stays the same.
> 
> We would like to have a user dial 1000 at domain.com and have ser connect
> to the applicable owner of that extension on the same context as the
> user initiating the call.
> 
> ex:  call from companya.ciscophone at domain.com calls 1000 at domain.com,
> then ser would translate 1000 at domain.com into
> companya.bugetone at domain.com without relaying to asterisk....
> 
> also please note that the extensions are dynamic and are loaded from a
> db,  so if we wanted to add an extension it wouldnt be viable to do a
> ser reload and kick all the users off...
> 
> I imagine the only way to implement this is to grab the context the
> user is calling from (ex companya) and grab the extension being called
> tied to the companya extension and return the sip user name... then
> translate that into the uri form of sip:companya.bugetone at domain.com
> 
> ... if that makes sense
> 
> let me know if this is even possible.. its important the domain will
> always stay the same.
> 
> Thanks!
> Patrick
> 
> 
> On Sat, 26 Feb 2005 07:34:58 -0500, Steve Blair <blairs at isc.upenn.edu>
> wrote:
> >
> > Patrick:
> >
> > Patrick Baker wrote:
> >
> > >Hello all,
> > >
> > >I've ran into a dilemma regarding on the call structure is setup for
> > >my system right now.  As of current everything goes through asterisk
> > >ie
> > >
> > >sip user -> ser -> asterisk -> sip user
> > >
> > >what I want to try and accomplish is sip user -> ser -> sip user.
> > >
> > >I believe this would remove unnecessary load on asterisk servers and
> > >just connect the call directly.
> > >
> > >I'm having a hard time understanding how I will do this thought.  as
> > >of right now I have a forward statement
> > >
> > >if (uri=~"^sip:[0-9]*@.*") {
> > >               forward( 10.0.18.3, 5060 );
> > >               break;
> > >       };
> > >
> > >
> > >
> >  Assuming the phones register to SER one way would be:
> >
> >     if ( (lookup("location") | lookup("aliases") | (src_ip==<pstn gwy
> > ip address>) )
> >     {
> >         xlog("L_INFO", "\n[SER]: Call to local proxy user. \n");
> >         if (!t_relay()) {
> >           sl_reply_error();
> >           xlog("L_INFO", "\n[SER]: Call to local proxy user failed.
\n");
> >         };
> >         break;
> >     };
> >
> > >Say I have multiple companies, how would I setup extensions to call
> > >sip devices and if I wanted to dial into a sales queue how would it
> > >forward to asterisk.  Another thing would be voice mail...how would
> > >the extension know to goto voicemail after a certain amount of seconds
> > >and play a custom greeting that they assigned for their box.
> > >
> > >
> > >
> > Forward from SER to Asterisk based on either RURI value on an INVITE or
> > on a failure
> > as is the case with a call to voicemail.
> >
> > The first situation would require you to define a dialplan such that you
> > can identify which
> > inbound calls to SER need to be forwarded to Asterisk. This is much like
> > what you've already
> > done in the above code.
> >
> > The second situation can be handled using the failure_route in SER. For
> > example if Asterisk
> > voicemail is handled in failure_route[6], assign users the acl value
> > "asterisk", setup the failure
> > route handling in the start of your code, then define the failure route.
> >
> >  if (is_user_in("Request-URI", "asterisk")) {
> >       t_on_failure("6");
> >       setflag(6);
> >       log(1, "[SER]: Flag for Asterisk redirect successful. \n");
> >  };
> >
> > failure_route[6] {
> >
> >  xlog("L_INFO", "\n[SER]: START FAILURE BLOCK #7 Unavailable Asterisk
> user:
> >       Time: [%Tf] Method: <%rm> From uri <%fu> To < %tu> IP source
> > address <%is>
> >       R-uri: <%ru> Contact Header: <%ct> \n\n");
> >
> >  if (t_check_status("486")) {
> >    prefix("b");
> >    xlog("L_INFO", "\n[SER]: FAILURE BLOCK #7 Phone is busy: Time: [%Tf]
> >          Method: <%rm> From uri <%fu> \n\n");
> >  } else if (t_check_status("480")) {
> >    prefix("u");
> >    xlog("L_INFO", "\n[SER]: FAILURE BLOCK #7 Phone is unavailable:
> > Time: [%Tf]
> >          Method: <%rm> From uri <%fu> \n\n");
> >  } else {
> >    prefix("u");
> >    xlog("L_INFO", "\n[SER]: FAILURE BLOCK #7 Phone is unavailable for
> > unknown
> >       reason: Time: [%Tf] Method: <%rm> From uri <%fu> \n\n");
> >  }
> >
> >  rewritehostport("<asterisk server hostname>:<port on server where sip
> > is listening>");
> >  append_branch();
> >  t_relay_to_udp("<asterisk server hostname>", "<port on server where
> > sip is listening>");
> >  break;
> > }
> >
> >  You notice the prefix("b") and prefix("u") statements in the above
> > code. This is so that
> > SER can prefix the users extension with the 'u' or'b' character that
> > Asterisk uses to designate
> > a busy greeting or unavailable greeting should be played. You can add
> > additional status
> > checks like a 302 for call forwarding etc.
> >
> >  In Asterisk you need to setup sip.conf which I'm assuming you've
> > already done. In addition
> > you need to define extension rules. For individual mailboxes I use the
> > following. See where
> > the prefixed  u & b are used in the pattern matching?
> >
> >   exten => _XXXXX,1,VoiceMail2(${EXTEN})
> >   exten => _uXXXXX,1,VoiceMail2(u${EXTEN:1})
> >   exten => _bXXXXX,1,VoiceMail2(b${EXTEN:1})
> >
> >  The same approach works for IVR. I haven't done the agent stuff so
> > your on your own
> > there. If 7700 is your lead number for the IVR then:
> >
> >   exten => 7700,1,Goto(mymainmenu,s,1)
> >   exten => #,2,Hangup                     ; Hang them up.
> >
> >  [mymainmenu]
> >  exten => s,1,Ringing                            ; 2 seconds of ringback
> >  exten => s,2,Answer
> >  .... etc.
> >
> > >and how would they be billed... sip to sip would be billed thru ser,
> > >all zaptel channels thru asterisk??
> > >
> > >
> > >
> > >
> >  Billing seems to be unique to each site and their acconting model.
> > I'll leave that one
> > for you :-)
> >
> > -Steve
> >
> > >Best regards,
> > >
> > >Patrick
> > >
> > >_______________________________________________
> > >Serusers mailing list
> > >serusers at lists.iptel.org
> > >http://lists.iptel.org/mailman/listinfo/serusers
> > >
> > >
> >
> 
> _______________________________________________
> Serusers mailing list
> serusers at lists.iptel.org
> http://lists.iptel.org/mailman/listinfo/serusers




More information about the sr-users mailing list