Distinctive ringing on SIP phones
Your own PBX knows how a call arrived and can ring the phone with a different ringtone. Nobody has to run to the screen: a "Delivery" group call is recognisable from across the room, a transfer from a colleague sounds different from a guest's call. The kitchen tablet can ring with a loud bell and the manager's phone with soft chimes.
What it is and how it works#
There are four kinds of calls:
| Kind | When | Example |
|---|---|---|
| Distributed | the call is offered to several people: a group, a queue, "ring all", "one by one", a returning guest | a guest called the delivery number and three couriers' phones ring |
| Direct | the guest is calling this very person | a "to extension" rule, a personal number |
| Internal | a colleague calls from their phone; callbacks and "click to call" count here too | the manager dialled 105 |
| Transfer | a colleague or the AI secretary passed the guest to this phone | blind transfer, consultative transfer, the ## code |
The owner chooses a ringtone for each kind, on several levels. The closer a level is to the phone, the stronger it is:
- a specific phone — "this phone's own ringtone", stronger than everything else;
- a group — only for distributed calls of that group;
- a line (number) — for distributed and direct calls to that number;
- an employee — all of this person's phones;
- the venue — for everyone;
- nothing set — the phone rings with its usual ringtone.
When the PBX sends a call to a phone, it adds a tag to the invitation: an Alert-Info header with a short tag such as
cenaly-ring-marimba (desk phones understand it) and an X-Cenaly-Ring header with the kind of call and the group name
(our apps read it). The phone looks the tag up in its "tag → ringtone" table and plays that ringtone. If the tag is not
in the table, the phone rings as usual — the call is never lost.
The PBX needs no sound files: the phone plays the ringtone itself.
Check first#
- The PBX is up to date. If the "Ring signals" block shows a yellow "the PBX needs an update" notice, your choice is saved but phones ring the old way until the PBX server gets the firmware update. Updates are on the "Server" tab.
- The "Now plays" line. Under every choice the admin panel shows which ringtone will play and where it comes from ("from the venue", "from the group", "on this phone"). It is faster than guessing which level won.
- A test call. Call from one phone to another — that is an "internal" call. Then transfer a call — that is a "transfer". The ringtones must differ.
- Connectivity and call audio are checked with the
*43echo test, not with the ringtone. If the phone does not ring at all or a call has no sound, start with the overview "SIP phone setup" and*43.
Where to choose the ringtone in the admin panel#
Everything is under "Telephony" → "Setup":
| What | Where |
|---|---|
| Venue ringtones by kind of call | "Lines" tab → "Ring signals" block → "One for all calls" or "By call type" → "Save" |
| The venue's own ringtones | same place, "Own ringtones" button: upload a file, pick a fallback signal from the catalogue |
| Ringtones of one employee | "Staff and groups" → gear next to the extension → "Ring signals" tab |
| A specific phone's own ringtone | extension window → "Connections" tab → expand the phone → "This phone's own ringtone" → "Change". The same is in the device card and in "Desk phones" (the "🔔 Ringtone" action) |
| A group ringtone | group editor → "Group ring signal" |
| A number's ringtone | line settings, next to the hold music |
Every list has a ♪ button to listen before choosing. "As set on the phone" removes the tag: the phone rings with its own ringtone.
The venue's own ringtones. Up to 20 ringtones, 1 to 40 seconds long. The admin panel converts the file into the formats phones and apps need. Every own ringtone must have a fallback signal from the catalogue: phones that cannot take your file (Grandstream, Fanvil, iPhone) ring with it.
Employees themselves. If "Employees change their own phones' signals" is on in the venue block, an employee picks the ringtones of their own phones right in Cenaly Phone. The change history shows who changed what.
Cenaly Phone and the phone on your computer#
Cenaly Phone for Android and iOS rings by kind on its own — nothing to set up on the phone. The app downloads catalogue ringtones and the venue's own ringtones in advance and keeps them, so a call never waits for the internet. The incoming call screen shows the kind under the name: "Transfer · Delivery", "Internal".
In the app: "Settings" → "Sound and notifications":
- "PBX ring signals" — on by default. Turn it off if this phone should always use its own ringtone; the caption with the kind of call stays.
- "Ring signals of my calls" — what plays for each kind and where it comes from. If the venue allows it, you can also choose ringtones for this phone here.
A ringtone you assigned to a contact in the phone's address book wins over the PBX signal by default. The owner can change this in the "Ring signals" block: "the contact's ringtone in the app beats the PBX signal".
On iPhone the venue's own ringtone plays as its fallback catalogue signal: iOS does not let an app ring with a downloaded file.
The phone on your computer (Cenaly bridge) plays the same ringtone through the computer speaker once the bridge is updated.
Auto-provisioned desk phones#
Yealink, Grandstream, Fanvil and Snom connected through "Desk phones" (auto-provisioning by MAC) get the "tag → ringtone" table on their own. You change ringtones in the admin panel — the phone picks up the new table at its next auto-provisioning: after a reboot or on its own check schedule. Nothing to do on the phone by hand.
| Brand | What auto-provisioning writes | The venue's own ringtone |
|---|---|---|
| Yealink | "Internal Ringer Text" table, up to 10 rows, ringtones Ring1…Ring13 (T3x — Ring1…Ring4); downloading a ringtone from the call's address is turned off | as a file, one per phone |
| Grandstream | turns on Alert-Info parsing and Bellcore patterns: the PBX sends this phone Bellcore-dr1…dr5 tags |
the built-in pattern of the fallback signal |
| Fanvil | "Alert Info Ring Settings", up to 10 rows, ringtones Type1…Type9 | the built-in ringtone of the fallback signal |
| Snom | "Alert-Info Ringer", up to 9 rows, ringtones Ringer1…Ringer10 | as a file, when the phone has "one ringtone for all calls" |
Only ringtones that can actually play on this phone go into the table. If there are more than ten, the extra ones ring with the phone's usual ringtone.
What happens to a removed ringtone
If a ringtone is removed in the admin panel, auto-provisioning does not leave the old row in the phone: Yealink gets
%NULL% in empty rows, Fanvil and Snom get empty text. So a removed ringtone does not "stick" after the settings change.
Any other SIP phone: the table by hand#
If the phone was connected by hand, with the account login and password, fill in the "tag → ringtone" table in its web
interface. Any SIP phone or softphone that understands the Alert-Info header is set up the same way.
- Choose ringtones by kind in the admin panel. Each ringtone's tag is
cenaly-plus its code from the table below, for examplecenaly-ring-marimba. - Open the Alert-Info table in the phone's web interface:
- Yealink: Settings → Ring → Internal Ringer Text / File. Be sure to turn off downloading the ringtone from the address: Account → Advanced → Distinctive Ring Tones → Disabled. Otherwise the phone first tries to download a ringtone from the address in the call and rings about 10 seconds late;
- Grandstream GRP/GXP: Account → Call Settings → Ringtone → Match Incoming Caller ID, "Alert Info text" rule (up to 10 rules, 3 on older GXP21xx);
- Fanvil: Phone settings → Audio (Media settings on some models) → Alert Info Ring Settings;
- Snom: Preferences → Audio → Alert-Info Ringer;
- other brands — look for "Alert-Info", "Distinctive Ring", "Ring Pattern".
- Enter the tag (
cenaly-ring-marimba) in a row and pick the phone's ringtone. - Make a test call of that kind.
⚠️ Do not put the words auto, intercom, answer in the table: some phones take them as a command to pick up by
themselves. Our tags never contain them.
Tags and built-in ringtones#
The catalogue has 15 ringtones we made ourselves (we own the rights). The brand columns show the phone's built-in ringtone that auto-provisioning uses in place of the catalogue ringtone. It is also a handy choice for manual setup.
| Tag | Ringtone | Character | Yealink | Grandstream | Fanvil | Snom |
|---|---|---|---|---|---|---|
cenaly-ring-double |
Double ring | normal | Ring1.wav | Bellcore-dr2 | Type1 | Ringer1 |
cenaly-ring-triple |
Triple ring | normal | Ring2.wav | Bellcore-dr3 | Type2 | Ringer2 |
cenaly-ring-retro |
Retro phone | normal | Ring3.wav | Bellcore-dr1 | Type3 | Ringer3 |
cenaly-ring-office |
Office | normal | Ring4.wav | Bellcore-dr1 | Type4 | Ringer4 |
cenaly-ring-bell |
Bell | calm | Ring5.wav | Bellcore-dr5 | Type5 | Ringer5 |
cenaly-ring-chime |
Chimes | calm | Ring6.wav | Bellcore-dr5 | Type6 | Ringer6 |
cenaly-ring-marimba |
Marimba | normal | Ring7.wav | Bellcore-dr4 | Type7 | Ringer7 |
cenaly-ring-cascade |
Cascade | normal | Ring8.wav | Bellcore-dr3 | Type8 | Ringer8 |
cenaly-ring-rise |
Rising | normal | Ring9.wav | Bellcore-dr3 | Type9 | Ringer9 |
cenaly-ring-dingdong |
Ding-dong | calm | Ring10.wav | Bellcore-dr2 | Type5 | Ringer10 |
cenaly-ring-soft |
Soft | calm | Ring11.wav | Bellcore-dr5 | Type6 | Ringer5 |
cenaly-ring-digital |
Digital | normal | Ring12.wav | Bellcore-dr4 | Type1 | Ringer1 |
cenaly-ring-trill |
Trill | normal | Ring13.wav | Bellcore-dr2 | Type7 | Ringer2 |
cenaly-ring-urgent |
Urgent | urgent | Ring1.wav | Bellcore-dr4 | Type2 | Ringer3 |
cenaly-ring-insist |
Insistent | urgent | Ring3.wav | Bellcore-dr1 | Type3 | Ringer4 |
A phone has fewer built-in ringtones than the catalogue, so some tags share a built-in ringtone. For different kinds of calls, choose ringtones from different rows of your brand's column. Grandstream has only five patterns.
FAQ#
A group call sounds the same as the others#
Check that the ringtone is set on the group itself or on the "distributed" kind. A call a colleague dials to the group number from inside counts as "internal", and the group ringtone does not play on it. Another reason: this phone has its "own ringtone for all calls", which beats the group.
The phone rings about 10 seconds late#
That is a Yealink set up by hand: it tries to download a ringtone from the address in the call. Turn off Account → Advanced → Distinctive Ring Tones. Auto-provisioned phones do this on their own.
I changed the ringtone but the phone rings the old way#
An auto-provisioned desk phone picks up the new table at its next check — reboot it. Cenaly Phone downloads a new ringtone after the first call with it: that first call plays the phone's usual ringtone, the next ones play the new one. If the "Ring signals" block says "the PBX needs an update", update the PBX server.
The phone picked up by itself on an ordinary call#
The phone's table has an auto-answer word (intercom, auto, answer). Remove that row: our tags never contain such
words. The PBX intercom uses its own separate auto-answer tag.
Can the vibration differ by kind of call?#
Not yet: the ringtone and the on-screen caption change by kind. Vibration is a general app setting.
Related pages#
- SIP phone setup — overview
- Softphones: Zoiper, MicroSIP, Linphone
- Factory reset
- If the phone does not work — troubleshooting
Sources#
- Brands' Alert-Info tables: Yealink Admin Guide V86 (Distinctive Ring Tones), Grandstream GRP261x/262x/263x
Administration Guide (Ignore Alert-Info, Bellcore Mapping, Match Incoming Caller ID) and the configuration template,
Fanvil "Alert Info Ring Settings", Snom "Ringtone — Alert Info" — excerpts in
docs/phone-knowledge/vendor/and the knowledge base articledocs/phone-knowledge/desk/distinctive-ring.md. - Brand formats and forbidden words in tags —
shared/sip/ring-vendor-formats.json; the ringtone catalogue —shared/pbx-ring/catalog.json. - Tested on the test PBX on 05.10.2026: auto-provisioning configs and call tags for all four brands, Cenaly Phone on Android.