Full phonebooks on desk phones and DECT – is “mobile number only” still intended?

t.quitsch

Silver Partner
Joined
Apr 21, 2025
Messages
22
Reaction score
10
Hello 3CX team,

We use 3CX with Yealink desk phones (including the T85W) and a Yealink W80 DM. Like many people here in the forum, we keep running into the well-known behavior: only the mobile number of each contact is sent to provisioned phones. Contacts that only have a business number are missing on the phone entirely, and business and home numbers never arrive at all.

Your support team described it in the community like this: “For all the hardware phones supported, only the Mobile field from 3CX is sent to the phonebooks.” Elsewhere it was said that this was the original design, because phones used to be able to store only one number per entry.

Our question: Is this behavior still intended today? Or could it be changed in an upcoming update, for example as an option in the management console?

We think the effort is small, because all the building blocks already exist:
  1. The data is already there. All five number fields (Mobile, Mobile 2, Home, Business, Business 2) are stored in the phonebook table. The 3CX apps and the web client already display them.
  2. The files are already generated. 3CX already writes a phonebook per vendor today (yealink_phonebook.xml, fanvil_phonebook.xml, snom_phonebook.xml, gigaset_phonebook.xml, as well as the new dynamic shared_<MAC>.xml files). Only the loop that outputs one number per contact would need to iterate over all populated number fields.
  3. All current phones understand multiple numbers per entry. The vendors’ official formats already provide for this:

Yealink
(official remote phonebook format, also used by W70B/W80 DM):
XML:
<DirectoryEntry>
<Name>Peter Müller</Name>
<Telephone label="Business">+493012345</Telephone>
<Telephone label="Mobile">+491711234567</Telephone>
<Telephone label="Home">+4930777</Telephone>
</DirectoryEntry>

Gigaset N670/N870
(the fields already exist in the format):
XML:
<entry surname="Müller" name="Peter" office1="+493012345" office2=""
mobile1="+491711234567" mobile2="" home1="+4930777" home2="" />

Snom D series
(MASTER/member as described in the Snom wiki):
XML:
<item context="" type="MASTER" fav="false" mod="false" index="0">
<first_name>Peter</first_name><last_name>Müller</last_name>
<number>+493012345</number>
</item>
<item context="" type="none" fav="false" mod="false" index="1">
<first_name>Member_Alias</first_name><last_name>+493012345</last_name>
<number>+491711234567</number><number_type>mobile</number_type>
</item>

Snom DECT M300/M400/M900:
XML:
<item>
<first_name>Peter</first_name><last_name>Müller</last_name>
<number idx="1">+493012345</number><number_type idx="1">work</number_type>
<number idx="2">+491711234567</number><number_type idx="2">mobile</number_type>
</item>

Suggested implementation: an option “Send all phone numbers to phones”, off by default so nothing changes on existing systems. Where the format allows it, the number type could be added as a label. The logic is the same for every vendor: go through the populated fields in a fixed order, skip empty fields, and strip spaces and special characters from the numbers. Only the output differs per vendor.

Our workaround: Until then we use a script that builds on the bash scripts from the German thread Telefonbücher für Gigaset und Snom – Workaround. There is a PowerShell version for 3CX on Windows and a bash version for 3CX on Debian, and both produce identical output. The script reads the company phonebook and creates complete phonebooks for Yealink, Fanvil and Snom (desk phones and DECT). We then point the templates to these files. I have attached both scripts, and you are welcome to use them as a starting point. (Attachments: Make-3CXPhonebooks.ps1, make_3cx_phonebooks.sh)

We are aware that direct database access is not supported by you, and that template changes can be lost during updates. That is exactly why an official solution would be the cleanest one for everyone.

Thank you for looking into this, and best regards
 

Attachments

Is there an update on this yet?
Could a 3CX developer take a look at this?
 
I feel like this is a request for the Ideas section
 
Same problem here with Yealink T-series phones. We got tired of waiting for a fix, so we build our own phonebook outside 3CX.

Our property management system (our own Laravel build) holds our tenants, contractors and a general phonebook. Every 10 minutes a scheduled job turns that into a Yealink remote phonebook XML file containing:

- tenants with an active or upcoming lease, as "Name (Company)"
- contractors, with their company name
- everyone else in our own phonebook
- names picked up from recent call recordings for numbers we don't hold anywhere else, marked with ** so staff know the name came from a recording, not our records

Numbers are cleaned first (spaces and punctuation stripped, +44 changed to 0) so they match the incoming caller ID.

The file sits on our own web server, restricted to our office IPs and behind basic auth. The phones load it as a second remote phonebook: 3CX keeps slot 1, ours goes in slot 2, so the two don't fight over provisioning. The phones refresh it hourly.

The result: landline-only contacts show up properly, incoming calls show the caller's name and company instead of a bare number, and anyone new added to our system appears on the handsets within the hour without touching 3CX.

The catch is that it's one more thing to maintain, and it only works because we already had our own database. Most 3CX users need this built in, so +1 for a "send all phone numbers to phones" option. Yealink's format already allows several Telephone entries per contact, so it should be a fairly small change on 3CX's side.

Full write-up with the XML format, phone settings and testing steps: https://www.technologyforsmallbusiness.co.uk/yealink-remote-phonebook-company-phonebook.html