Treat codes as part of the numbering plan
Feature Codes enables or disables supported functions and assigns the digits users dial to invoke them. Familiar star codes are defaults, not universal constants. A local administrator or provider template may have changed them.
Maintain one list covering extensions, ring groups, queues, parking and feature codes. A code that overlaps an extension or a dial pattern creates ambiguous behavior that users experience as a broken feature.
Change one code with its dependants
Inspect the Feature Codes module, record the current value and the feature’s enabled state, then choose an unused code. Apply the change and update provisioned phone buttons and user instructions together. Do not assume an old BLF label automatically follows the new code.
A dial action and a state subscription can differ. For a DND or hours button, verify both what pressing the button does and what the lamp means afterward.
Verify context and access
Dial the code from an authorized internal extension, then confirm that an unrelated public IVR cannot expose privileged functions. A hidden menu option is not authentication. Disable functions that the deployment does not use, especially ones capable of starting outbound calls.
If the phone sends nothing, inspect its local dial plan. If the PBX receives the digits but chooses the wrong application, inspect the generated dialplan and numbering overlap. Keep those observations separate.
Inspect effective state before editing
Record the feature's enabled state, default and user-defined code, and owning module before changing it. FreePBX modules register feature codes and administrators can change or disable them, so a vendor quick-reference card or another PBX's defaults are not authoritative. Compare extensions, direct-to-voicemail prefixes, internal destinations and outbound patterns for exact and pattern collisions.
After one supported Apply Config, inspect the running Asterisk dialplan read-only in the source extension's context. Do not edit generated FreePBX files: if the expected entry is absent, return to the owning module, Feature Codes state and configuration-generation result. The focused feature-code diagnostic keeps endpoint digits, runtime selection and later feature state separate.
Roll back coherently
Restore the previous code, apply the configuration and refresh affected device templates if the pilot fails. Tell users which behavior changed. Use the configuration lifecycle to keep future code changes reviewable.
Do not treat every pickup code as the same feature
General pickup requires overlapping call and pickup groups; directed pickup identifies an extension and context; a ring-group number and a BLF key can add other managed paths. Use the call-pickup diagnostic to preserve the exact path and ringing channel.
Keep in-call transfer codes distinct from phone transfer actions
A blind or attended transfer initiated by an Asterisk in-call feature code is not automatically the same as a phone Transfer key, BLF shortcut or native SIP REFER. Use the FreePBX transfer diagnostic to prove the active path, party permission, context and final bridge.
Allocate custom destination codes through Misc Applications
A Misc Application adds a unique user-dialable code for a managed FreePBX destination. Treat it as a numbering-plan allocation: prove the endpoint digits, effective code, collision search, destination, internal access boundary and loaded dialplan before publishing it to users.
Keep the Wake Up Calls code inside its authorization boundary
The Wake Up Calls guide separates the configured feature code from operator mode, permitted scheduling identity, selected destination and the later originated call.
Distinguish FreePBX codes from Asterisk custom bridge features
The custom dynamic features guide inventories built-in codes, application-map items, feature groups and their separate authorization boundary.
Sources & applicability
Primary references for the technical details above. Operational examples and planning checklists are VoIP.info editorial guidance.
- Sangoma: Feature Codes module ↗
- Asterisk call-pickup architecture ↗
- Asterisk 22 res_pjsip pickup-group options ↗
- Asterisk certified 22.8 Pickup application ↗
- Asterisk PickupChan application ↗
- Asterisk 22 AMI Pickup event ↗
- Sangoma FreePBX feature-code descriptions ↗
- Sangoma FreePBX Ring Groups guide ↗
- Sangoma phone BLF key behavior ↗
- Asterisk feature-code call transfers ↗
- Asterisk 22 BlindTransfer application ↗
- Asterisk 22 AttendedTransfer application ↗
- Asterisk 22 features configuration ↗
- Asterisk 22 FEATUREMAP function ↗
- Asterisk AMI v2 transfer-event specification ↗
- Asterisk CEL specification ↗
- Sangoma FreePBX end-user transfer documentation ↗
- Sangoma FreePBX feature-code descriptions ↗
- Sangoma phone BLF transfer-type guide ↗
- Sangoma Misc Applications user guide ↗
- Sangoma Misc Applications overview ↗
- Sangoma Misc Destinations user guide ↗
- FreePBX Misc Applications release/17.0 metadata ↗
- FreePBX Misc Applications release/17.0 dialplan source ↗
- Asterisk contexts, extensions and priorities ↗
- Asterisk dialplan inspection example ↗
- FreePBX Hotel Wakeup repository ↗
- FreePBX Hotel Wakeup metadata — release/17.0 ↗
- FreePBX Hotel Wakeup configuration and call-file source — release/17.0 ↗
- FreePBX Hotel Wakeup feature-code dialplan — release/17.0 ↗
- Sangoma Wake Up Calls user guide ↗
- Asterisk Call Files ↗
- Asterisk directory and file structure ↗
- Asterisk custom dynamic features ↗
- Asterisk 23 features.conf configuration reference ↗
- Asterisk built-in dynamic features ↗
- Asterisk features overview ↗
- Asterisk upstream features.conf sample ↗
- Asterisk upstream features configuration implementation ↗
- Asterisk 23 Dial application ↗
- Asterisk channel-variable inheritance ↗
Examples require adaptation to your topology. No live PBX or hardware testing is claimed.