Extension Mobility

Extension Mobility lets a user log in to any desk phone in the organisation and have it become their phone. Their directory number, speed dials, line appearances and message waiting indicator all follow them.

It’s the feature that makes hot-desking work, and it’s also the feature most likely to generate a support call the morning after you configure it, because a login failure gives the user a numeric error code and nothing else.

This guide covers the configuration and, more usefully, what each of those error codes actually means.

The steps below are based on current Unified CM releases. The menu paths have been stable for several versions, though the exact wording varies slightly between builds.

The configuration checklist

  1. Activate the Cisco Extension Mobility service
  2. Set the phone URL enterprise parameters
  3. Create the Extension Mobility phone service
  4. Create device profiles for users
  5. Associate the device profile to the user
  6. Subscribe phones and device profiles to the service
  7. Enable Extension Mobility on each phone

Step 7 is the one people skip, and it’s the cause of the most common login error.

Step 1: Activate the Extension Mobility service

The service isn’t activated by default.

Cisco Unified Serviceability → Tools → Service Activation

Activate Cisco Extension Mobility, then confirm it’s running:

Tools → Control Center – Feature Services

Activate it on every node that will handle Extension Mobility requests, not just the publisher.

Cisco Extension Mobility showing Started and Activated under Control Center – Feature Services.

While you’re there, confirm Cisco Tomcat is running under Control Center – Network Services. Extension Mobility runs on Tomcat, and if Tomcat is down the phone reports Host not found rather than anything mentioning Extension Mobility.

You don’t need every service in the list activated. Plenty of them will show Not Running and Deactivated on a normal cluster, and that’s expected. The only one this feature needs is Cisco Extension Mobility itself.

Step 2: Set the phone URL parameters

System → Enterprise Parameters → Phone URL Parameters

These define the URLs phones use for services including Extension Mobility.

Phone URL parameters configured with an IP address. This works, but see the note below on why an FQDN is usually the better choice.

Here’s where most guides give advice I’d push back on.

You’ll often see instructions to replace the server name with an IP address. That works, and it’s usually recommended because DNS resolution from the phone VLAN is broken and the IP address sidesteps the problem.

Fix the DNS instead.

Hard-coding an IP address means:

  • Every URL has to be edited if the address changes
  • Phones can only reach the one node you’ve specified, so a node outage takes Extension Mobility down even though the service is running elsewhere
  • You lose the ability to point at a load-balanced name

If the FQDN doesn’t work from the phone subnet, that’s a DNS problem worth solving rather than routing around. Phones need to resolve the Unified CM nodes, and plenty of other things depend on that too.

If you genuinely can’t fix DNS, an IP address is a working compromise. Just know what you’ve traded away.

Step 3: Create the Extension Mobility phone service

Device → Device Settings → Phone Services → Add New

Service Name: something users will recognise, such as Extension Mobility. This is what appears on the phone’s Services menu, so it’s worth being plain rather than clever.

Service Description: optional, but useful for whoever inherits the cluster. Something like Allow mobile users to log into phones.

Service URL:

text

http://cucm-node.example.com:8080/emapp/EMAppServlet?device=#DEVICENAME#

#DEVICENAME# is a variable the phone substitutes with its own device name. Leave it exactly as written.

Secure-Service URL: leave blank unless you’re deploying Extension Mobility over HTTPS, which uses port 8443 and requires the appropriate certificate trust on the phones.

Service Category: XML Service

Service Type: Standard IP Phone Service

Enable: make sure this is ticked.

That last one is easy to overlook. An unticked service doesn’t appear on phones at all, and the symptom is that nothing happens when users press the Services button. There’s no error code, because the phone was never offered the service in the first place.

The Extension Mobility phone service. Note the Update Subscriptions button in the toolbar, and the Enable checkbox.

Don’t add the EMCC suffix unless you need it

If you append the Extension Mobility Cross Cluster suffix:

&EMCC=#EMCC#

login fails with an HTTP 400 error on phones that don’t support EMCC. Users see a blank screen when the service isn’t selected.

Only add it if you’re actually deploying Cross Cluster and every phone model in scope supports it.

If you change the service URL later

This catches people out.

Changing the URL on the phone service doesn’t automatically update the phones already subscribed to it. You need to click Update Subscriptions on the IP Phone Services Configuration page, and resubscribe any phone that was subscribed to the old URL.

The button sits in the toolbar at the top of the page, next to Save and Delete. It’s easy to walk past, because saving the change looks like it should be sufficient.

Skip it and the phones keep calling the old address, usually reporting Host not found. The configuration looks correct in Unified CM while every phone is still pointed somewhere else.

Step 4: Create device profiles

A device profile is a virtual phone. When a user logs in, the physical phone takes on the profile’s characteristics.

Device → Device Settings → Device Profile → Add New

Choose the profile type and device protocol to match the phone models users will log in to, then configure the profile as you would a phone.

Under Association Information, add the user’s directory number.

Save, then reset.

The profile needs to be compatible with the phones it’ll be loaded onto. A profile built for a model with more line keys than the target phone won’t present everything you configured.

Step 5: Associate the device profile to the user

User Management → End User

Find the user, then under Extension Mobility, move the device profile from Available Profiles to Controlled Profiles.

Tick Home Cluster.

That checkbox is easy to miss and it causes login failures that look like something else entirely.

Step 6: Subscribe phones and device profiles to the service

Both the physical phones and the device profiles need to be subscribed.

For a phone:

Device → Phone → select the phone → Related Links → Subscribe/Unsubscribe Services

For a device profile:

Device → Device Settings → Device Profile → select the profile → Related Links → Subscribe/Unsubscribe Services

Subscribing the phone lets a user log in. Subscribing the device profile means the service is still available once they have.

Miss the profile subscription and users log in successfully but then find the Services button no longer offers Extension Mobility, so they can’t log out.

Step 7: Enable Extension Mobility on the phone

Device → Phone → select the phone

Tick Enable Extension Mobility.

This is separate from subscribing to the service, and it’s the single most common configuration miss. A phone subscribed to the service but without this ticked will show the service, accept the login attempt, and return Error 22.

Multiple Login Behaviour

System → Service Parameters → select the server → Cisco Extension Mobility

Multiple Login Behavior has three settings:

SettingBehaviour
Multiple Logins AllowedThe user can be logged in at several phones simultaneously
Multiple Logins Not AllowedLogin at a second phone is rejected with Error 25
Auto LogoutLogging in at a second phone automatically logs the user out of the first

This is a design decision, not a default to accept without thinking.

Multiple logins suit users who want their extension on both a desk phone and a conference room phone. Auto Logout suits genuine hot-desking, where a user moving desks shouldn’t leave their extension behind.

Multiple Logins Not Allowed produces the most support calls, because a user who forgot to log out yesterday can’t log in today and the error tells them very little.

Extension Mobility error codes

This is what the article is really for. The phone shows a number and the user calls you.

Cisco publishes the full list in the Extension Mobility API response codes. These are the ones you’ll actually encounter.

Error 6 – Database Error

The Extension Mobility service can’t communicate with the database.

Check:

  • The service is activated and running on the node in the service URL
  • The service URL points at a node where Extension Mobility is actually running
  • Cisco Tomcat is running on that node

This one usually means the service URL is pointing somewhere the service isn’t.

Error 12 – Device Profile not found

The user is trying to use a device profile that doesn’t exist, or isn’t associated with them.

Check:

  • The device profile exists
  • It’s in the user’s Controlled Profiles, not just Available Profiles
  • Home Cluster is ticked on the end user

Error 18 – Another user logged in

Someone else is already logged in to that phone. They need to log out, or you can remove the login from Unified CM.

Error 19 – No user logged in

A logout was attempted on a phone with nobody logged in. Usually harmless.

Error 22 – Device logon disabled

Extension Mobility is not enabled on the phone.

Go to the phone configuration and tick Enable Extension Mobility. This is Step 7 above and it’s the most common cause of a login failure on an otherwise correct configuration.

Error 23 – User not found

The user ID is invalid. Check the user exists and that the user is typing the correct ID, not their email address or display name.

Error 25 – User logged in elsewhere

The user is already logged in at another phone and Multiple Logins Not Allowed is set.

Either find and log out the other phone, or reconsider whether that service parameter suits how people actually work.

Error 26 – Busy, please try again

The server is processing its maximum number of login and logout requests. Usually transient. If it’s persistent, look at whether something is generating a high volume of requests.

Error 27 – Change Password

The PIN must be changed on first use, or has expired. The user needs to change it through the Self Care Portal.

Error 28 – Untrusted IP Error

Login or logout was attempted from an IP address that isn’t trusted. Check the Extension Mobility service parameters for the trusted IP configuration.

Error 201 – Authentication error

Wrong user ID or PIN.

Before assuming the user has fat-fingered it, confirm the PIN is set in Unified CM and hasn’t expired. A blank or expired PIN produces the same error as a wrong one.

Host not found

Not a numbered error, but common.

  • Cisco Tomcat isn’t running
  • The service URL is wrong
  • DNS isn’t resolving the hostname from the phone VLAN
  • The service URL was changed without clicking Update Subscriptions

Problems that aren’t login errors

Phone services disappear after logout

The user logs out, the phone reverts to its default profile, and the Services button no longer works.

Check that Synchronization Between Auto Device Profile and Phone Configuration is set to True in Enterprise Parameters, and that the phone itself is subscribed to the Extension Mobility service.

Phone services unavailable after login

The user logs in successfully but has no services.

The device profile doesn’t have the Extension Mobility service associated with it. Subscribe the profile, not just the phone.

The phone resets instead of restarting

After login or logout, the phone does a full reset rather than a quick restart.

This is a locale change. If the user locale associated with the profile differs from the phone’s locale, the configuration file has to be rebuilt, which forces a reset.

No action required, but it’s worth knowing so you don’t chase it. If the delay bothers users, aligning the locales on profiles and phones removes it.

A configuration order that avoids most problems

Working through it in this order catches the common misses:

  1. Activate the service on every relevant node, and confirm Tomcat is running
  2. Sort out DNS from the phone VLAN before deciding on the service URL
  3. Create the phone service with the FQDN
  4. Build and test one device profile against one phone before doing the rest
  5. Confirm Home Cluster is ticked on the test user
  6. Subscribe both the phone and the profile
  7. Tick Enable Extension Mobility on the phone
  8. Decide on Multiple Login Behaviour deliberately
  9. Test a login, a logout, and a login at a second phone

Step 4 matters more than it looks. Getting one user working end to end takes ten minutes and tells you whether the service URL, the DNS and the subscriptions are right. Configuring fifty profiles first and then discovering the URL is wrong is a much longer afternoon.

The two things worth remembering

Subscribing a phone to the service and enabling Extension Mobility on the phone are two separate settings. Missing the second gives Error 22 on an otherwise perfect configuration.

The error code tells you exactly what’s wrong, if you know what the number means. Error 22 is the phone, Error 12 is the profile association, Error 201 is the credential, Error 6 is the service URL. That’s four different problems presenting as “Extension Mobility isn’t working”, and the number is the fastest way to tell them apart.

And if there’s no error code at all, because nothing happens when the user presses Services, check that the phone service itself is Enabled and that the phone is subscribed to it. No error means the phone was never offered the service.

References

Leave a Reply

Your email address will not be published. Required fields are marked *