Friday, 23 March 2012

Call groups

One of the things to consider in the SIP design is simple ring groups.

I have set up the basics now - a set of extensions that ring at once, and an alternative out-of-hours set that are controlled on a profile. Of course that meant testing the multiple ringing phones scenario carefully and I had a few bugs with that.

The fun one in SIP is the race condition of cancelling a call and answering it at the same time. We have that rarely on our VoIP service where two people answer a call "at the same time". It is a small window and at present we are broken in that one call gets no audio, or worse one way is to one phone and the other way is from the other phone. Messy, but thankfully almost impossible to reproduce.

Well, the FireBrick code handles this, and I even managed to create the race condition in testing. It correctly picks one phone (the first to answer) and cancels the other calls, or sends a BYE if one of them has in fact managed to answer at the same time.

All good fun. However, I have to ponder other types of ring group and how they work. So far I have this list, only point 1 of which is implemented:-
  1. Simple ring a set of phones at once.
  2. Choosing one phone to ring - based on some logic such as round robin, or longest not to have a call
  3. Cascade ring - ringing one, and then add more every few seconds (and picking the order in some sensible way)
  4. Holding off if one of the phones is busy - i.e. when it hangs up, if still ringing the group, ring that phone. Setting a number of calls per phone is part of this, as is a "wrap-up-time"
  5. Queuing, so if multiple callers to the ring group, present in order. A maximum queue size needed and some sort of queuing tone.
  6. Fallback option where all phones are busy
Did I miss any?

9 comments:

  1. One thing that often gets missed with ring groups is handling diversion properly - in particular I'd suggest making it configurable whether the ring group will honour a SIP redirect a member of the group sends back, as in some cases this is probably wanted, however in others it isn't, as if e.g. one member of a support team diverts all their calls to voicemail on their phone, you don't want all your support ring group calls going there...

    ReplyDelete
  2. 7. Pickup groups?

    The ability to dial a feature code on a phone that's part of the pickup group and answer the call even if that phone wasn't actually ringing at the time.

    It's particularly useful if someone's phone is ringing but you can see they're not at their desk at the moment

    ReplyDelete
    Replies
    1. Different - I am planning a pick-up and stream feature, yes.

      Delete
  3. Allow for the situation where a member of a ring group is allowed to divert his calls to that same ring group as a way of shrinking the group by taking himself out of the group when he is away.

    ReplyDelete
    Replies
    1. Surely the right answer there is just for the person to put their phone on Do Not Disturb (DND), which in pretty much all SIP phones I've seen causes it to return a busy message, which should be handled anyway?

      Delete
  4. Something fairly overly specialised, but that I've had a use for - ring all extensions, but don't regard an answer as a pickup for the group. Instead required some further step like pressing # to do the pickup. +1 point for the first person to figure out why I use this (I have it hacked up in asterisk) ;)

    ReplyDelete
    Replies
    1. Some of your extensions were forwards to traditional mobiles, and you didn't want the caller being put through to the mobile's voicemail if the phone was out of range?

      Delete
    2. @Alex - I'd agree, but that's a standard feature in Asterisk, no need for a hack.

      Delete