Skip to main content

Extension Mobility

Posted by cbbs70a on Fri, 01/30/2009

One feature that I get asked about a lot and is something that would be extremely useful is true extension mobility. That is, consider a scenario where a user has to "log into" their extension when they get to their desk in the morning, say extension 111. The next day they decide to work from their home office where they sit down and log into their IP phone at home. The process of logging into their home IP phone "logs out" their office phone so their home IP phone now becomes extension 111. The process of logging into and out of a phone also means that local configurations also convey to whatever phone is active.

I've tried this in the past using the concept of agents to log in and out, and it worked for the most part but it seemed to me to be a poor mans way of doing it. There must be a better way to accomplish this. This has been one of those projects that has bugged me for quite a long time.

Regards;
FSD


Submitted by eeman on Fri, 01/30/2009 Permalink

as long as phone A and phone B are both online, they re-register every set interval. When phone B registers their address will get the call. When phone A comes back and does its periodic re-register it will bounce back to that address. You will have 2 phones fighting for the same registration. Perhaps you'd fare better with a soft-phone or perhaps you should create a 2nd sip registration under 'Special Lines' and have the softphone and home register as that registration and alter the extension to use tl-multidevice-exten and select the second registration as other devices to ring. Then at home you could just either unplug the phone or load/unload a softphone when you want it to ring.

Submitted by olekaas on Sun, 02/01/2009 Permalink

I've worked with another system, which btw. is a true sip proxy and can handle multiple devices registered to the same extension. One of the really nice features is that the phone profile isn't mapped to the mac address. Instead you log in on the phone and the phone downloads your profile with your button mappings, your call history, etc. If your phone dies - grab a new one and log in. No need to log in to webinterface and fumble with mac-adresses.

Thinking of it. When provisioning polycom phones from thirdlane, you could name the overrides file based on extension rather on mac. However, the local directory file is hardwired to be based on mac - but maybe some day it will be configurable. And still - with asterisk you need to remember to log out before you can use anther phone.

/Ole

Submitted by cbbs70a on Sun, 02/01/2009 Permalink

In my mind, logging into a different phone will, as part of the process, log you out of the original one. That way, there can be only one active phone at a time for a given extension. One of the keys to what I call "true" extension mobility is that for phone B to truly become phone A, phone A must give up its identity (extension number).

As an example, say all extensions are in the 1XX range. The user logs into their home IP phone, and they become extension 111. Phone A can then as part of the log out process take say a temporary extension number in the 9XX range which is not ever used. This essentially becomes a parking lot of sorts for phones that are temporarily inactive. That would prevent registration and other conflicts.

Another situation that would benefit from this is the case where mobile employees/salespeople who are not always in the office can come into the office and share a desk. Say there are 10 salespeople but only 5 will ever be in the office at the same time. The salesperson can log into any available desk and log into the phone and that phone becomes their extension for that day.

Submitted by eeman on Sun, 02/01/2009 Permalink

olekaas: I've worked with another system, which btw. is a true sip proxy and can handle multiple devices registered to the same extension

Asterisk is not a sip proxy nor is it trying to be a sip proxy. Asterisk is a back-to-back user agent. Only a B2BUA can allow two different technologies to communicate such as: IAX2 to SIP, MGCP to IAX2, SCCP to SIP, Skype to SIP (coming soon).

cbbs70a: In my mind, logging into a different phone will, as part of the process, log you out of the original one

This is exactly what is happening. When phone A registers it registers as SIP/100 with those credentials. When you go home and register softphone B as SIP/100, asterisk now stores the registration IP and useragent information sent from device B.

cbbs70a: One of the keys to what I call "true" extension mobility is that for phone B to truly become phone A, phone A must give up its identity

Unplug phone A before leaving. As long as Phone A is plugged in, it will continue to refuse to give up its identity of SIP/100 . Two devices cannot share the exact same registration and Asterisk will always send to the device on record(the last one to register). As long as there is a periodic re-registration process this will continue to cause you problems. even your chan_agent workaround has been killed by the asterisk development team as AgentCallbackLogin was removed in 1.6.

Instead of trying to fight gravity, try using momentum. In the end, how is using multidevice-exten not a viable option? You send the calls to 2 devices at the same time. Dont want phone B to ring when you are away from that phone? Set DND on the phone as you leave the office(though most people don't care if the phone rings in their empty office). Temporarily sitting at Jane Doe's desk for the day? Try setting the call forwarding or find-me/follow-me feature of your userportal so the calls arrive at your desk (stacked up with call screening you can even press a digit to accept or reject the call to your voicemail).

Easy solutions aside: Trying to get chan_sip to do something its incapable of doing will just frustrate you. Its only a matter of symantics that the channel ID and the extension # match. You could write some elaborate new extension handler (make sure you read macro-tl-userexten, macro-tl-userexten-base, and macro-tl-userexten-rg-base to make sure you dont leave anything out) that does its own channel-to-extension mapping. You could have all the phones register as 3 digit IDs but run your phone system as 4 digit extensions and use the astdb as a lookup for registration. Just understand that your users might forget to move their location and complain that they aren't getting calls. In this scenario you call extension 1217, which does a lookup in the astdb for 1217 and finds that its last login was from SIP/205 (notice how I chose the 2XX pattern to pair with the 12XX extensions? I'll get to that in a second). It then places a call to SIP/205 and continues though the dialplan for the extension number called (voicemail, forwarding, etc). If there is no astdb value (like just got setup) you could have it try stripping the first digit ${EXTEN:1}, which would work if you used a convention like extensions are sip ID's with a 1 in front of it etc. An experienced coder could probably do this in 5 to 15 hrs depending on complexity. A feature-code menu would also have to be written where one logged in to set their current phone mapping to their extension, perhaps a playback of the current settings.