Names not updating on phones

We have a client with over 60 extensions using Polycom VVX300’s, a few VVX500’s and 2 Yealink T46’s.
The Polycom Phones configure via TFTP, while the Yealinks configure via HTTP.
We are using FreePBX 14.0.3.19
We had 5 name changes on the VVX300’s
When the rest of the polycom phones dial an extension that had a name change, the old name shows as caller ID as opposed to the new name.
The yealink phones display properly, as does a VVX500 phone I have set up remotely in our office (which configures via FTP).
I had a support technician tell me that all these phones will need to be factory reset and reconfigured.
I tested this on one phone, and this indeed worked for the reset extension which now properly displays the correct name.
My concern is that I will have this issue again when a new employee is hired and the name changes on their extension.
Is this a bug or am I missing something?

I don’t believe it’s a bug, rather a function of how the phones work. I have the same issue with Cisco SPA sets. It seems the phone uses the information stored in the call history instead of the new data from the PBX. Just clear the call history from the phones and all should be well. Still a pain in the butt but better that factory resetting

How did you change the names? Are you updating a profile config the phone pulls from? Are you using the EPM in the PBX? Did you actually change the Display Name in the actual extensions themselves?!

Unless you are running the EPM and are keeping your profiles insync, the Display Name in the Extension and the Display Name on the phone are two different things. If you are just updating the phones via your own configs then you’ve just updated the Display Name on the phone, that’s it.

Internal CallerID is based on the Display Name on the extension in FreePBX, not what is on the phone.

Again, we need to know how you actually made these name changes and from where? The phones shouldn’t need a factory default at all. I use Polycom VVX’s as my primary phones for customer deployments, this is not an issue I’ve ever had with them.

I changed the names via EPM. I also checked the names in the extensions module and it reflected the correct changes.

Did you rebuild all the templates? Do other things in the phone change when they pull the template?

So you’re saying you took Ext 100 - Bob and change it to Ext 100 - Alice and then rebuilt the phone’s template and then rebooted the phone to make it pull the new template? Now when Alice calls Jim, Jim still sees Bob as the CallerID?

Have you go in and saved one of the extensions that was modified this way? Because this information is stored and pulled from the AstDB, did that get updated properly? I’d try to save the extension again to make sure it does it right.

I change EXT 100 from Bob to 100 Alice. I Save this, and then rebuild the templates and reboot the phones. Now when anyone dials 100, they still see Bob’s name and not Alice.
I did rebuild the templates and reboot the phones. I have also saved the Extension in the Extension module multiple times.
Is there a way for me to view the AstDB?

Thanks rpcomm, I had one of the extensions clear out their call history and this did not resolve the issue.

OK, so this isn’t CallerID it’s CONNECTEDLINE because this happens when you are calling them not being called from them. Which means this is basically the dialplan handling that:

exten => s,n,GotoIf($[“${DB(AMPUSER/${EXTTOCALL}/cidname)}” = “” || “${DB(AMPUSER/${AMPUSER}/cidname)}” = “”]?godial)
exten => s,n,Gosub(sub-presencestate-display,s,1(${EXTTOCALL}))
exten => s,n,Set(CONNECTEDLINE(name,i)=${DB(AMPUSER/${EXTTOCALL}/cidname)}${PRESENCESTATE_DISPLAY})
exten => s,n,Set(CONNECTEDLINE(num)=${EXTTOCALL})

So you need to see if that has been properly updated in the AstDB by doing this:

database show AMPUSER/100 ← This will show what 100 has stored for it. You’ll want to look at these two lines:

/AMPUSER/100/cidname : Alice
/AMPUSER/100/cidnum : 100

That is what is being pulled for the CONNECTEDLINE data when you call an extension.

Thanks blaze, I get a database command not found when I type

database show AMPUSER/117

You have to be in the Asterisk Console.

asterisk -r
database show /AMPUSER/117

You forgot the first / as well.

I typed:
asterisk -r
database show /AMPUSER/117

Now it says 0 results found

OK it works with this command
database show AMPUSER/117
And the name is correct here.

OK, well the name change on the phone itself has no impact for incoming calls. So if a Yealink is calling Alice’s VVX 300, it doesn’t matter what is on the screen of the VVX 300 that doesn’t impact the Yealink’s CONNECTEDLINE details.

Time to show a call where this is happening. Make a call to 117 from one of the phones showing the wrong name and post the output.

asterisk -rvvvvvvvvvv
Make call
Post output from start of call to end.

Hopefully I did this right. EXT 120 called EXT 117 (117 had the name change that is not being shown to 120)

[2018-10-04 10:55:07] ERROR[6228][C-00000ed0]: res_pjsip_header_funcs.c:454 func_read_header: This function requires a PJSIP channel.
– Executing [s@macro-exten-vm:18] Gosub(“SIP/120-0000089a”, “sub-record-check,s,1(exten,117,dontcare)”) in new stack
– Executing [s@sub-record-check:1] GotoIf(“SIP/120-0000089a”, “0?initialized”) in new stack
– Executing [s@sub-record-check:2] Set(“SIP/120-0000089a”, “__REC_STATUS=INITIALIZED”) in new stack
– Executing [s@sub-record-check:3] Set(“SIP/120-0000089a”, “NOW=1538664907”) in new stack
– Executing [s@sub-record-check:4] Set(“SIP/120-0000089a”, “__DAY=04”) in new stack
– Executing [s@sub-record-check:5] Set(“SIP/120-0000089a”, “__MONTH=10”) in new stack
– Executing [s@sub-record-check:6] Set(“SIP/120-0000089a”, “__YEAR=2018”) in new stack
– Executing [s@sub-record-check:7] Set(“SIP/120-0000089a”, “__TIMESTR=20181004-105507”) in new stack
– Executing [s@sub-record-check:8] Set(“SIP/120-0000089a”, “__FROMEXTEN=120”) in new stack
– Executing [s@sub-record-check:9] Set(“SIP/120-0000089a”, “__MON_FMT=wav”) in new stack
– Executing [s@sub-record-check:10] NoOp(“SIP/120-0000089a”, “Recordings initialized”) in new stack
– Executing [s@sub-record-check:11] ExecIf(“SIP/120-0000089a”, “0?Set(ARG3=dontcare)”) in new stack
– Executing [s@sub-record-check:12] Set(“SIP/120-0000089a”, “REC_POLICY_MODE_SAVE=”) in new stack
– Executing [s@sub-record-check:13] ExecIf(“SIP/120-0000089a”, “0?Set(REC_STATUS=NO)”) in new stack
– Executing [s@sub-record-check:14] GotoIf(“SIP/120-0000089a”, “5?checkaction”) in new stack
– Goto (sub-record-check,s,17)
– Executing [s@sub-record-check:17] GotoIf(“SIP/120-0000089a”, “1?sub-record-check,exten,1”) in new stack
– Goto (sub-record-check,exten,1)
– Executing [exten@sub-record-check:1] NoOp(“SIP/120-0000089a”, “Exten Recording Check between 120 and 117”) in new stack
– Executing [exten@sub-record-check:2] Set(“SIP/120-0000089a”, “CALLTYPE=internal”) in new stack
– Executing [exten@sub-record-check:3] ExecIf(“SIP/120-0000089a”, “0?Set(CALLTYPE=)”) in new stack
– Executing [exten@sub-record-check:4] Set(“SIP/120-0000089a”, “CALLEE=dontcare”) in new stack
– Executing [exten@sub-record-check:5] ExecIf(“SIP/120-0000089a”, “0?Set(CALLEE=dontcare)”) in new stack
– Executing [exten@sub-record-check:6] GotoIf(“SIP/120-0000089a”, “0?callee”) in new stack
– Executing [exten@sub-record-check:7] GotoIf(“SIP/120-0000089a”, “1?caller”) in new stack
– Goto (sub-record-check,exten,13)
– Executing [exten@sub-record-check:13] Set(“SIP/120-0000089a”, “RECMODE=dontcare”) in new stack
– Executing [exten@sub-record-check:14] ExecIf(“SIP/120-0000089a”, “0?Set(RECMODE=dontcare)”) in new stack
– Executing [exten@sub-record-check:15] ExecIf(“SIP/120-0000089a”, “1?Set(RECMODE=dontcare)”) in new stack
– Executing [exten@sub-record-check:16] Gosub(“SIP/120-0000089a”, “recordcheck,1(dontcare,internal,117)”) in new stack
– Executing [recordcheck@sub-record-check:1] NoOp(“SIP/120-0000089a”, “Starting recording check against dontcare”) in new stack
– Executing [recordcheck@sub-record-check:2] Goto(“SIP/120-0000089a”, “dontcare”) in new stack
– Goto (sub-record-check,recordcheck,3)
– Executing [recordcheck@sub-record-check:3] Return(“SIP/120-0000089a”, “”) in new stack
– Executing [exten@sub-record-check:17] Return(“SIP/120-0000089a”, “”) in new stack
– Executing [s@macro-exten-vm:19] GotoIf(“SIP/120-0000089a”, “1?macrodial”) in new stack
– Goto (macro-exten-vm,s,25)
– Executing [s@macro-exten-vm:25] GosubIf(“SIP/120-0000089a”, “0?clrheader,1()”) in new stack
– Executing [s@macro-exten-vm:26] Macro(“SIP/120-0000089a”, “dial-one,15,HhTtr,117”) in new stack
– Executing [s@macro-dial-one:1] Set(“SIP/120-0000089a”, “DEXTEN=117”) in new stack
– Executing [s@macro-dial-one:2] Set(“SIP/120-0000089a”, “__CRM_SOURCE=120”) in new stack
– Executing [s@macro-dial-one:3] ExecIf(“SIP/120-0000089a”, “0?Set(__EXTTOCALL=117)”) in new stack
– Executing [s@macro-dial-one:4] Set(“SIP/120-0000089a”, “DIALSTATUS_CW=”) in new stack
– Executing [s@macro-dial-one:5] GosubIf(“SIP/120-0000089a”, “0?screen,1()”) in new stack
– Executing [s@macro-dial-one:6] GosubIf(“SIP/120-0000089a”, “0?cf,1()”) in new stack
– Executing [s@macro-dial-one:7] GotoIf(“SIP/120-0000089a”, “1?skip1”) in new stack
– Goto (macro-dial-one,s,10)
– Executing [s@macro-dial-one:10] GotoIf(“SIP/120-0000089a”, “0?nodial”) in new stack
– Executing [s@macro-dial-one:11] GotoIf(“SIP/120-0000089a”, “0?continue”) in new stack
– Executing [s@macro-dial-one:12] Set(“SIP/120-0000089a”, “EXTHASCW=ENABLED”) in new stack
– Executing [s@macro-dial-one:13] GotoIf(“SIP/120-0000089a”, “0?next1:cwinusebusy”) in new stack
– Goto (macro-dial-one,s,25)
– Executing [s@macro-dial-one:25] GotoIf(“SIP/120-0000089a”, “0?next3:continue”) in new stack
– Goto (macro-dial-one,s,27)
– Executing [s@macro-dial-one:27] GotoIf(“SIP/120-0000089a”, “0?nodial”) in new stack
– Executing [s@macro-dial-one:28] GosubIf(“SIP/120-0000089a”, “1?dstring,1():dlocal,1()”) in new stack
– Executing [dstring@macro-dial-one:1] Set(“SIP/120-0000089a”, “DSTRING=”) in new stack
– Executing [dstring@macro-dial-one:2] Set(“SIP/120-0000089a”, “DEVICES=117”) in new stack
– Executing [dstring@macro-dial-one:3] ExecIf(“SIP/120-0000089a”, “0?Return()”) in new stack
– Executing [dstring@macro-dial-one:4] ExecIf(“SIP/120-0000089a”, “0?Set(DEVICES=17)”) in new stack
– Executing [dstring@macro-dial-one:5] Set(“SIP/120-0000089a”, “LOOPCNT=1”) in new stack
– Executing [dstring@macro-dial-one:6] Set(“SIP/120-0000089a”, “ITER=1”) in new stack
– Executing [dstring@macro-dial-one:7] Set(“SIP/120-0000089a”, “THISDIAL=SIP/117”) in new stack
– Executing [dstring@macro-dial-one:8] GosubIf(“SIP/120-0000089a”, “1?zap2dahdi,1()”) in new stack
– Executing [zap2dahdi@macro-dial-one:1] ExecIf(“SIP/120-0000089a”, “0?Return()”) in new stack
– Executing [zap2dahdi@macro-dial-one:2] Set(“SIP/120-0000089a”, “NEWDIAL=”) in new stack
– Executing [zap2dahdi@macro-dial-one:3] Set(“SIP/120-0000089a”, “LOOPCNT2=1”) in new stack
– Executing [zap2dahdi@macro-dial-one:4] Set(“SIP/120-0000089a”, “ITER2=1”) in new stack
– Executing [zap2dahdi@macro-dial-one:5] Set(“SIP/120-0000089a”, “THISPART2=SIP/117”) in new stack
– Executing [zap2dahdi@macro-dial-one:6] ExecIf(“SIP/120-0000089a”, “0?Set(THISPART2=DAHDI/117)”) in new stack
– Executing [zap2dahdi@macro-dial-one:7] Set(“SIP/120-0000089a”, “NEWDIAL=SIP/117&”) in new stack
– Executing [zap2dahdi@macro-dial-one:8] Set(“SIP/120-0000089a”, “ITER2=2”) in new stack
– Executing [zap2dahdi@macro-dial-one:9] GotoIf(“SIP/120-0000089a”, “0?begin2”) in new stack
– Executing [zap2dahdi@macro-dial-one:10] Set(“SIP/120-0000089a”, “THISDIAL=SIP/117”) in new stack
– Executing [zap2dahdi@macro-dial-one:11] Return(“SIP/120-0000089a”, “”) in new stack
– Executing [dstring@macro-dial-one:9] GotoIf(“SIP/120-0000089a”, “1?docheck”) in new stack
– Goto (macro-dial-one,dstring,15)
– Executing [dstring@macro-dial-one:15] GotoIf(“SIP/120-0000089a”, “0?skipset”) in new stack
– Executing [dstring@macro-dial-one:16] Set(“SIP/120-0000089a”, “DSTRING=SIP/117&”) in new stack
– Executing [dstring@macro-dial-one:17] Set(“SIP/120-0000089a”, “ITER=2”) in new stack
– Executing [dstring@macro-dial-one:18] GotoIf(“SIP/120-0000089a”, “0?begin”) in new stack
– Executing [dstring@macro-dial-one:19] ExecIf(“SIP/120-0000089a”, “0?Return()”) in new stack
– Executing [dstring@macro-dial-one:20] Set(“SIP/120-0000089a”, “DSTRING=SIP/117”) in new stack
– Executing [dstring@macro-dial-one:21] Return(“SIP/120-0000089a”, “”) in new stack
– Executing [s@macro-dial-one:29] GotoIf(“SIP/120-0000089a”, “0?nodial”) in new stack
– Executing [s@macro-dial-one:30] GotoIf(“SIP/120-0000089a”, “0?skiptrace”) in new stack
– Executing [s@macro-dial-one:31] GosubIf(“SIP/120-0000089a”, “1?ctset,1():ctclear,1()”) in new stack
– Executing [ctset@macro-dial-one:1] Set(“SIP/120-0000089a”, “DB(CALLTRACE/117)=120”) in new stack
– Executing [ctset@macro-dial-one:2] Return(“SIP/120-0000089a”, “”) in new stack
– Executing [s@macro-dial-one:32] Set(“SIP/120-0000089a”, “D_OPTIONS=HhTtr”) in new stack
– Executing [s@macro-dial-one:33] GosubIf(“SIP/120-0000089a”, “0?func-set-sipheader,s,1(Alert-Info,)”) in new stack
– Executing [s@macro-dial-one:34] NoOp(“SIP/120-0000089a”, "Blind Transfer: , Attended Transfer: , User: 120, Alert Info: ") in new stack
– Executing [s@macro-dial-one:35] ExecIf(“SIP/120-0000089a”, “1?Set(ALERT_INFO=)”) in new stack
– Executing [s@macro-dial-one:36] ExecIf(“SIP/120-0000089a”, “0?Set(ALERT_INFO=)”) in new stack
– Executing [s@macro-dial-one:37] ExecIf(“SIP/120-0000089a”, “0?Set(ALERT_INFO=)”) in new stack
– Executing [s@macro-dial-one:38] ExecIf(“SIP/120-0000089a”, “0?Set(ALERT_INFO=Normal;volume=)”) in new stack
– Executing [s@macro-dial-one:39] ExecIf(“SIP/120-0000089a”, “0?Set(ALERT_INFO=Normal;volume=)”) in new stack
– Executing [s@macro-dial-one:40] GosubIf(“SIP/120-0000089a”, “0?func-set-sipheader,s,1(Alert-Info,)”) in new stack
– Executing [s@macro-dial-one:41] ExecIf(“SIP/120-0000089a”, “0?Set(CHANNEL(musicclass)=)”) in new stack
– Executing [s@macro-dial-one:42] GosubIf(“SIP/120-0000089a”, “0?qwait,1()”) in new stack
– Executing [s@macro-dial-one:43] Set(“SIP/120-0000089a”, “__CWIGNORE=”) in new stack
– Executing [s@macro-dial-one:44] Set(“SIP/120-0000089a”, “__KEEPCID=TRUE”) in new stack
– Executing [s@macro-dial-one:45] GotoIf(“SIP/120-0000089a”, “0?usegoto,1”) in new stack
– Executing [s@macro-dial-one:46] GotoIf(“SIP/120-0000089a”, “0?godial”) in new stack
– Executing [s@macro-dial-one:47] Gosub(“SIP/120-0000089a”, “sub-presencestate-display,s,1(117)”) in new stack
– Executing [s@sub-presencestate-display:1] Goto(“SIP/120-0000089a”, “state-not_set,1”) in new stack
– Goto (sub-presencestate-display,state-not_set,1)
– Executing [state-not_set@sub-presencestate-display:1] Set(“SIP/120-0000089a”, “PRESENCESTATE_DISPLAY=”) in new stack
– Executing [state-not_set@sub-presencestate-display:2] Return(“SIP/120-0000089a”, “”) in new stack
– Executing [s@macro-dial-one:48] Set(“SIP/120-0000089a”, “CONNECTEDLINE(name,i)=Danielle Santucci-Gracchi”) in new stack
– Executing [s@macro-dial-one:49] Set(“SIP/120-0000089a”, “CONNECTEDLINE(num)=117”) in new stack
– Executing [s@macro-dial-one:50] Set(“SIP/120-0000089a”, “D_OPTIONS=HhTtrI”) in new stack
– Executing [s@macro-dial-one:51] Macro(“SIP/120-0000089a”, “dialout-one-predial-hook,”) in new stack
– Executing [s@macro-dialout-one-predial-hook:1] MacroExit(“SIP/120-0000089a”, “”) in new stack
– Executing [s@macro-dial-one:52] ExecIf(“SIP/120-0000089a”, “0?Set(D_OPTIONS=HhtrII)”) in new stack
– Executing [s@macro-dial-one:53] NoOp(“SIP/120-0000089a”, “”) in new stack
– Executing [s@macro-dial-one:54] ExecIf(“SIP/120-0000089a”, “0?Set(D_OPTIONS=HhTtrIg)”) in new stack
– Executing [s@macro-dial-one:55] Dial(“SIP/120-0000089a”, “SIP/117,15,HhTtrIb(func-apply-sipheaders^s^1)”) in new stack
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
– SIP/117-0000089b Internal Gosub(func-apply-sipheaders,s,1) start
– Executing [s@func-apply-sipheaders:1] ExecIf(“SIP/117-0000089b”, “0?Set(CHANNEL(hangup_handler_push)=crm-hangup,s,1)”) in new stack
– Executing [s@func-apply-sipheaders:2] NoOp(“SIP/117-0000089b”, “Applying SIP Headers to channel”) in new stack
– Executing [s@func-apply-sipheaders:3] Set(“SIP/117-0000089b”, “SIPHEADERKEYS=”) in new stack
– Executing [s@func-apply-sipheaders:4] ExecIf(“SIP/117-0000089b”, “0?Set(Rheader=1)”) in new stack
– Executing [s@func-apply-sipheaders:5] While(“SIP/117-0000089b”, “0”) in new stack
– Jumping to priority 10
– Executing [s@func-apply-sipheaders:11] ExecIf(“SIP/117-0000089b”, “0?SIPRemoveHeader(Alert-Info:)”) in new stack
– Executing [s@func-apply-sipheaders:12] ExecIf(“SIP/117-0000089b”, “0?Set(PJSIP_HEADER(remove,Alert-Info)=)”) in new stack
– Executing [s@func-apply-sipheaders:13] Return(“SIP/117-0000089b”, “”) in new stack
== Spawn extension (from-internal, 117, 1) exited non-zero on ‘SIP/117-0000089b’
– SIP/117-0000089b Internal Gosub(func-apply-sipheaders,s,1) complete GOSUB_RETVAL=
– Called SIP/117
– Connected line update to SIP/120-0000089a prevented.
== Extension Changed 117[ext-local] new state Ringing for Notify User 115
– SIP/117-0000089b is ringing
== Extension Changed 117[ext-local] new state Ringing for Notify User 115
> 0x7f9e48798370 – Strict RTP learning after remote address set to: 192.168.200.11:2228
– Connected line update to SIP/120-0000089a prevented.
– SIP/117-0000089b answered SIP/120-0000089a
– Channel SIP/117-0000089b joined ‘simple_bridge’ basic-bridge <341ba1ce-16ca-4a89-bb97-b64fb12174e7>
– Channel SIP/120-0000089a joined ‘simple_bridge’ basic-bridge <341ba1ce-16ca-4a89-bb97-b64fb12174e7>
== Extension Changed 117[ext-local] new state InUse for Notify User 115
> 0x7f9e18664d30 – Strict RTP switching to RTP target address 192.168.200.147:2266 as source
> 0x7f9e18664d30 – Strict RTP learning complete - Locking on source address 192.168.200.147:2266
> 0x7f9e48798370 – Strict RTP switching to RTP target address 192.168.200.11:2228 as source
> 0x7f9e48798370 – Strict RTP learning complete - Locking on source address 192.168.200.11:2228

So is Danielle the new name or the old name? A reference point would help.

Danielle is the new name. In that very call EXT 120 saw the old name Mary Stensin

OK, so the PBX is sending the proper information to the phone. Does the phone for ext 120 have 117 saved as a contact on the phone or is it pulling from an address book some where?

The phone is overriding what the PBX is sending.

They do not use any directory, nor do they pull for an address book.
I had 120 clear out all their call history and they do not have any BLF’s configured.

But do they have any entries in the local phonebook on the phone? The Yealinks are not using Phone-Apps?

Thank you THANK YOU…
The contact directory of the phones did have the EXT saved with the old name.
Once we deleted the entry, and dialed the EXT, the proper name was displayed.

Thank you so very much Tom for taking time out of your busy schedule to help a complete stranger. Is is so very much appreciated.