On Call Features (in-call DTMF transfer + conference + hold music)¶
Org-level controls that let agents transfer and conference a live call from their phone keypad, plus the hold music a caller hears during those operations. Configured from the "On Call Features" sheet next to Add User on the Users page — applies org-wide, no per-user setup.
Keypad codes (FreePBX/Asterisk de-facto standard)¶
Codes were chosen to match what staff already know from other PBXes (zero relearning), and are all *-prefixed except the blind transfer (so they don't clash with sending DTMF to a 3rd-party IVR).
| Code | Action |
|---|---|
## + ext | Blind transfer — caller is sent straight to the extension; agent drops off immediately |
*2 + ext | Attended transfer — caller goes on hold, agent talks to the target, hangs up to complete |
*8 + ext | Directed pickup — grab a colleague's ringing call |
During an attended consult (*2, customer on hold):
| Code | Action |
|---|---|
*3 | 3-way conference — keep all three in the call |
*4 | Swap — toggle the agent between the customer and the 3rd party |
*1 | End consult — drop the 3rd party, return to the customer |
| (hang up) | Complete the transfer (agent drops out) |
Conference is the native continuation of the
*2attended transfer — there's one consult mechanism; the next key decides the outcome. It is NOT a separate ConfBridge feature.
Who can use it / which calls¶
The codes work on any agent-answered call where the org toggle is on — both direct extension calls and queue calls (both Dial paths carry the t/T flags). The agent presses the code during the live call (after answer), and their softphone must send DTMF as RFC2833 / SIP-INFO (the default on Zoiper/Grandstream).
The "On Call Features" sheet¶
Users page → On Call Features (right-side sheet). Org-level settings, saved to Organization.settings; each save regenerates the dialplan + reloads Asterisk (non-disruptive) and shows a progress bar.
- In-Call Transfer & Conference toggle — one switch (conference rides on the same attended-transfer
t/Tgate, so they move together). Backed bysettings.features.call_transfer/conference(default ON). - Hold Music (direct calls) dropdown — what a caller hears when an agent holds them during a transfer/conference on a direct call. Populated from the same
GET /mohsource as Departments. Queue calls keep their department's MOH (the queue sets its ownmusicclass). Stored assettings.moh_class(full class name, e.g.org_<ctx>__custom); "Default (Asterisk)" clears it.
Architecture¶
features.conf(global, insip-gateway/cloud-{staging,prod}/, deployed verbatim bydeploy-api-{staging,prod}.yml+module reload features):[featuremap]:blindxfer => ##,atxfer => *2, pluspickupexten = *8.[general]attended-transfer controls:atxferabort = *1,atxfercomplete = *2,atxferthreeway = *3,atxferswap = *4,featuredigittimeout = 1500.- It is a global file — the feature DIGITS are the same for every org. Per-org enable/disable is done in the dialplan, not here.
- Per-org gating (
dialplanGenerator): theDial()t/Tflags are emitted only whensettings.features.call_transferis true (default ON), via the_callFeatureFlags(org)helper, on every agent-facing Dial. With not/Tflag on a leg, that leg can't invoke any feature regardless of the featuremap.TRANSFER_CONTEXTis set so the dialed<ext>resolves in<org>_internal. - Hold music: the generator sets
CHANNEL(musicclass)=<settings.moh_class>on the direct-call leg only; queue paths set their own. - API:
PATCH /api/v1/organizations/:id/settingsaccepts{ features: { call_transfer, conference }, moh_class }, persists + regenerates + reloads.
Per-org key customization¶
Not available. The transfer codes live in Asterisk's global featuremap, so per-org custom keys aren't cleanly possible (would need a heavier per-channel DYNAMIC_FEATURES setup). A platform-wide admin customization (one scheme for all orgs) is possible if ever needed.
Related¶
- Phone-forward caller-ID handling (the
fwdcidpre-dial handler keeps the customer number while presenting the DID to a forwarded mobile): see Troubleshooting Error 64. - Live Calls representative-leg pick (so Transfer redirects the customer): Troubleshooting Error 65.
- Music on Hold Architecture · Queue Routing Architecture.