I had a licensing overage I couldn’t explain, so I asked AI to investigate.

I was looking at licensing numbers on a CUCM cluster last week and something didn't add up.

More device licenses consumed than users who should have them. Not a huge gap — but enough to make me dig.

So I asked Claude Code to check every phone's Owner User ID field against who actually controls the device — the controlled-device association in CUCM.

A minute later it came back with 13 mismatches.

10 phones had a blank Owner User ID. A real user still had the device listed as their controlled device, but the owner field was just… empty.

3 more had their previous owners still listed — people who'd left the company. The phones had been reassigned, someone updated the controlled device list, but nobody went back and changed the Owner User ID.

video preview

Here's why this matters beyond licensing.

CUCM uses Owner User ID for things like Extension Mobility login behavior, phone personalization, and — depending on your setup — which calling search space gets applied. When the owner field is blank or stale, you might not notice day to day. Phones ring, calls connect, life goes on. But licensing counts silently drift, reports stop making sense, and if you're running any kind of compliance audit, you've got a gap you can't easily explain.

The real problem is that this kind of drift is almost invisible. There is no downtime — it happens one phone reassignment at a time, over months or years. It's the kind of thing you'd never audit manually because who's going to open 200 phone configs and cross-reference the owner field against the device association table?

That's what made this feel different.

Claude Code found all 13 by running a single AXL SQL query — comparing the device owner against the controlled-device association for every phone on the cluster. Took 57 seconds.

Then it offered to fix them. I tested one first before committing to the batch. Confirmed the owner field updated correctly, confirmed nothing else changed. Then let it do the rest.

Finding the problem was useful. Fixing it in the same conversation — without opening a BAT file or going through devices one by one — that's the part I keep thinking about.

How long has it been since you checked Owner User ID on your cluster?

let me know what you find. I read every reply.

P.S. — Here's the SQL query if you want to check your own cluster right now but don't have an AI agent connected.
Run this from the CUCM CLI:

run sql select d.name as device_name, own.userid as owner_userid, eu.userid as controlling_userid from device d left join enduser own on d.fkenduser=own.pkid join enduserdevicemap m on m.fkdevice=d.pkid join enduser eu on m.fkenduser=eu.pkid where own.userid is null or not (own.userid = eu.userid)

If it returns zero rows, your cluster is clean. If it doesn't — well, now you know.

SIP 100 Trying Response Code for SIP Troubleshooting

SIP 100 Trying response code is part of the 1XX SIP Response Codes and one of the most commonly used SIP response codes in the SIP stack.

SIP works on a request-response model and 1xx SIP response codes are there to provide information on the status of network-related processes, SIP 100 Trying is one of them.

Continue reading SIP 100 Trying Response Code for SIP Troubleshooting

SIP 404 Not Found – Understanding SIP 404 Response Code

SIP 404 Not Found response belongs to the 4xx SIP code group.
A group of SIP codes that indicate a request failure and constitutes a number of codes used by SIP for communicating errors and failures.

In this blog post we will explore the SIP 404 Not Found response code and touch the different available SIP Response Codes.

But, first what is SIP?

Continue reading SIP 404 Not Found – Understanding SIP 404 Response Code

SIP Response Codes Explained

Why don’t we start with some trivia?
Did you know that SIP response codes are based on HTTP/1.1 response 404-not-foundcodes?

Actually, SIP response codes are the extent of the original HTTP ones and even define a new class with more response codes. I’ll let you know which one when we get to it.

That said, not all of the HTTP codes are relevant and mapped to SIP response codes, so if you know some HTTP, don’t expect to find them all in this list.
Continue reading SIP Response Codes Explained

Cisco SIP Gateway configuration: The Ultimate Guide

Connecting the Cisco IOS Voice Gateway to CUCM via SIP has been the preferred way to do it in the past couple of years.

The slowly dying H323 protocol (ISDN based) is not being developed anymore while SIP (HTTP based) became the industry standard for VoIP. So whenever PSTN connection is implemented via an IOS Voice Gateway, the choice should be really between SIP & MGCP.

This is how it’s done, step by step, using SIP.

Continue reading Cisco SIP Gateway configuration: The Ultimate Guide