Feature Code Maps
Feature code maps let subscriber lines dial short codes (*98-style) that
invoke switch applications instead of routing as calls. A map is a named set
of code → application entries; line profiles opt their lines into a map.
feature-codes: standard: "*98": voicemail.access "*97": voicemail.access-menu
line-profiles: office-phone: feature-code-map: standard ...A line whose profile sets no feature-code-map has no feature codes — every
dialed string goes to the translation walk.
How matching works
Section titled “How matching works”Feature codes apply to line-originated calls only (trunks have no feature codes) and are checked before the translation walk and before speed dials:
- When a line dials, the switch scans its map for entries whose code is a prefix of the dialed string.
- The longest matching prefix wins — with both
*9and*98configured, dialing*98matches*98. - On a match, the call is handed to the mapped application immediately. No translation, screening, or routing happens.
- With no match, the dialed string falls through to the normal translation walk unchanged.
Because matching is prefix-based, any digits dialed after the code are passed to the application as an argument — this is how the dial-in voicemail menu accepts a mailbox number appended to the code (below).
Available applications
Section titled “Available applications”The value of each map entry names an application. Two are available in this release, both voicemail access paths:
voicemail.access — own-mailbox access
Section titled “voicemail.access — own-mailbox access”Drops the caller directly into the voicemail menu for the dialing line’s own mailbox. Because the line itself authenticates the caller (the call comes from the registered device), no PIN is prompted — this is also the supported way for a subscriber to set their initial PIN, since new mailboxes are created without one.
Requires the line to have a voicemail box configured. If a line without a
mailbox dials the code, the call fails with the reorder treatment — a
deliberate, audible failure so the misconfiguration is noticed rather than
the digits silently routing as a call.
voicemail.access-menu — dial-in access to any mailbox
Section titled “voicemail.access-menu — dial-in access to any mailbox”The PIN-gated dial-in portal, for checking a mailbox from any phone. The digits following the code select the box, in three forms:
| Dialed | Behavior |
|---|---|
*97 |
Prompts for the mailbox number, then its PIN |
*97 1004 |
Mailbox given; prompts for its PIN |
*97 1004 4242 |
Mailbox and PIN given; verifies and enters directly |
The mailbox number’s length comes from the voicemail context’s
box-id-length, which is how the combined box+pin form is split. Three
wrong PIN entries end the call. Mailboxes that have no PIN set cannot be
opened through this path at all — they must first receive a PIN via
voicemail.access from their own line or through the management API.
Any other application name is rejected when the configuration is validated.
Multiple maps
Section titled “Multiple maps”Maps are independent, so different line classes can expose different codes — or none:
feature-codes: standard: "*98": voicemail.access "*97": voicemail.access-menu frontdesk: "*97": voicemail.access-menu # shared phones: dial-in only, no own-box shortcut
line-profiles: office-phone: feature-code-map: standard ... lobby-phone: # no feature-code-map: no star codes at all ...A hospitality or hot-desking deployment typically gives shared phones only
voicemail.access-menu (PIN-protected, works for any box) and omits
voicemail.access, which would expose whatever mailbox happens to be bound
to the shared line.
Troubleshooting
Section titled “Troubleshooting”- Code routes as a call instead of invoking the app — the line’s profile
doesn’t reference a map, or the map doesn’t contain the code. Remember the
profile opt-in: defining the map under
feature-codes:alone does nothing. - Caller hears fast-busy on
*98— the line has novoicemailbox configured, or the referenced map name doesn’t exist in the configuration. *97rejects a valid mailbox+PIN string — check the voicemail context’sbox-id-lengthagainst the mailbox numbering; the combined form is split at exactly that length.