Hi,
I was having some problems with calls to what I call "group" locations entries. These are entries where users enter their own SIP address for a particular location entry. The desired behavior is that when someone calls this "group" user, multiple other users phones will ring, and if not answered, voice mail will be called for the original "group" callee user. This doesn't seem difficult, but turns out to be a little tricky if the users enter the more logical, flexible, and user friendly "sip:user@samedomain" style addresses instead of "sip:user@ip:port". Obviously, requiring possibly non technical end users to enter the IP:port of all their phones for these group users is unacceptable. Using these domain style "indirect" entries is far nicer, since SER ultimately simply looks up all the users' registered phones in the locations table transparently.
Using "sip:user@samedomain" style locations destinations causes these calls to fork back through SER a second time (spiraling back through SER) for each destination. This is where I ran into a problem as far as voice mail was concerned. When each branch of this call (each separate destination in the destination set) was forked back through SER, if the particular user in any given branch was a member of the voice mail group, a voice mail timeout would be set for each, ultimately resulting in a separate call to the voice mail system for each user, for the same call! This caused mass confusion in SER and the voice mail system, resulting in a failed voice mail call, for obvious reasons.
The solution was to make sure that in this special case, that only the original "group" user gets queued for a voice mail timeout, and any other branches spiraling back through SER did not cause voice mail to be set up. Unfortunately, there's no easy way that I could figure out to test for this condition in ser.cfg, since these forked branches look just like normal calls to these users (which would be proper to set up a voice mail timeout for). The solution I came up with was to require users to use a special prefix, "g+", when entering their SIP URIs into the group locations entries, marking them for special treatment. The ser.cfg then simply looks for URIs that have the prefix "g+", and if present, makes sure that no voice mail failure_route is set up for these branches. Right before the locations lookup is done, the "g+" prefix is stripped off, and the branch proceeds to call the users phone(s) normally. Pretty simple, user friendly, and requires no special external script, etc, to be called. Viola! It worked. But with some misgivings.
This solution actually worked in all my testing. However, I'm troubled by some of the SIP dumps of these calls I've examined. Particularly, I noted how for whatever reason, there seems to be multiple repeated/redundant "408 time out" messages sent back and forth between SER and the phones. Also, for whatever reason, the caller's phone sends repeated ACKs, which get routed to the voice mail system, even after it has answered and is already talking to the VM system.
Do these traces look right ? Am I just being paranoid ? Please advise! (ser.cfg and traces attached as ZIP file. Sorry! It would be too big for the list otherwise!)
- Jim