Repository navigation
Description
Steps to reproduce
- In FreePBX, open Applications → Blind transfer callback (Return On Transfer), set Enabled to Yes and save.
- Extension A calls extension B, B answers.
- B blind-transfers the call (SIP REFER) to extension C, and C does not answer.
Expected behavior
After the configured timeout the call stops ringing C and comes back to B, with the configured caller-name prefix and Alertinfo.
Actual behavior
C keeps ringing past the timeout and the call never comes back to B. The [blindxfer_ringback] context is generated, but no call goes through it: the transferred call goes through from-internal-xfer-dest → from-internal-xfer instead.
Reproduced on NethVoice with FreePBX 17 (image pr-1194.1684-1.e51fb5b, same core as 1.8.0) using SIP clients 201 → 202, 202 REFER to 203 (no answer), timeout 27 s. The TRANSFER_CONTEXT setting was blindxfer_ringback, while the dialplan global was TRANSFER_CONTEXT = from-internal-xfer-dest.
The module sets the FreePBX TRANSFER_CONTEXT setting to blindxfer_ringback. Upstream FreePBX core 17.0.18.54 adds that setting as a global, then overrides it with $ext->addGlobal('TRANSFER_CONTEXT', 'from-internal-xfer-dest') (functions.inc.php, around line 2050). The nethcti3 transfer hook (#1126) then routes from-internal-xfer-dest through func-nethvoice-transfer-context to from-internal-xfer. So the callback works on FreePBX 16 (NethVoice 1.7) but never triggers on the FreePBX 17 line.
Components
NethVoice 1.8 (FreePBX core 17.0.18.54), Return On Transfer module 1.2.x, nethcti3 transfer profile hook.
Proposed correction
When the callback is enabled, route blind transfers through blindxfer_ringback again, for example from the nethcti3 transfer hook in from-internal-xfer-dest (blind transfers have BLINDTRANSFER set), keeping the profile-based transfer context from #1126 for the final dial.
See also
- NethVoice: FreePBX fails after disabling transfer callback #8308 and fix(freepbx): Preserve disabled transfer callbacks nethesis/ns8-nethvoice#1194 (settings crash, separate issue)
- https://github.com/nethesis/ns8-nethvoice/blob/main/freepbx/var/www/html/freepbx/admin/modules/returnontransfer/Returnontransfer.class.php
- https://github.com/nethesis/ns8-nethvoice/blob/main/freepbx/var/www/html/freepbx/admin/modules/nethcti3/functions.inc.php
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsDone
Activity
fix(dialplan): Return blind transfers to the transferer again (#1196)
edospadoni commentedon Nov 11, 2026
Test
PRs: nethesis/ns8-nethvoice#1196
Setup: three extensions A, B and C (physical phones or softphones that support blind transfer). In FreePBX, Applications → Blind transfer callback: Enabled = Yes, note the timeout (default 15 s) and the Caller ID prefix. For Test Case 3 also a trunk to call from and to an external number.
Test Case 1 - Blind transfer not answered returns to the transferer
Test Case 2 - Blind transfer answered
Test Case 3 - External calls
RT: <C> <caller name>)Test Case 4 - Regressions
fwconsole reloaduntil fix(freepbx): Preserve disabled transfer callbacks nethesis/ns8-nethvoice#1194 (NethVoice: FreePBX fails after disabling transfer callback #8308) is merged; skip this check on this release if #1194 is not includedNote: when A is an internal extension, the ring back on B shows A's name instead of the configured prefix (FreePBX replaces the caller name of internal users); this is not changed by the PR.
Testing release: 1.8.2-testing.1 (nethesis/ns8-nethvoice#1196)
Update command (replace
nethvoiceXwith the NethVoice instance):Stell0 commentedon Nov 12, 2026
Release
nethesis/ns8-nethvoice1.8.2