Alert! Issue after blind transfer. Bridge not happening User B -> User C

Dear team,

Please help me out with below:

Actual requirement is as follows

  1. User A dials user B
  2. User A and user B are in the same bridged call
  3. While bridged, User A presses dtmf ’ ** ’ for blind transfer call to other number
  4. User A enters user C number → User C answers the call
  5. When User A disconnects automatically User C should be connected to User B.

Users details:

User A :  444444
User B : 555555
User C : 666666

Issue is that :

If User A disconnects, automatically User C also gets disconnected ( No bridge happening between User B and User C )

extensions.conf file:

[testtransfer]

exten => _X.,1,set(__DYNAMIC_FEATURES=blindxfer#atxfer)
same => n,playback(silence)
same => n,progress()
same => n,ringing()
same => n,set(CONTACTS=${PJSIP_DIAL_CONTACTS(${EXTEN})})
same => n,dial(${CONTACTS},45,T)
same => n,hangup()

Asterisk version :

[root@localhost ~]# rasterisk
Asterisk 20.12.0, Copyright (C) 1999 - 2025, Sangoma Technologies Corporation and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Connected to Asterisk 20.12.0 currently running on localhost (pid = 1133)
Parsing /etc/asterisk/logger.conf
Core debug is still 3.
localhost*CLI>

Pjsip endpoint configuration :

=# select * from ps_endpoints where id in('444444','555555','666666');
-[ RECORD 1 ]----+--------------------
id               | 444444
transport        | transport-wss
aors             | 444444
auth             | auth_444444
context          | testtransfer
disallow         | all
allow            | ulaw,alaw,opus,g729
direct_media     | no
nat              | force_rport,comedia
rtp_symmetric    | yes
rewrite_contact  | yes
dtls_verify      |
dtls_setup       |
dtls_rekey       | 0
media_encryption |
dtls_cert_file   |
dtls_private_key |
dtls_ca_file     |
dtls_cipher      |
webrtc           | yes
mailboxes        |
ice_support      | yes
force_rport      | yes
session_expires  | 1800
use_avpf         |
outbound_auth    |
rtp_timeout      |
rtp_timeout_hold |
allow_transfer   | yes
dtmf_mode        | rfc4733
-[ RECORD 2 ]----+--------------------
id               | 555555
transport        | transport-wss
aors             | 555555
auth             | auth_555555
context          | testtransfer
disallow         | all
allow            | ulaw,alaw,opus,g729
direct_media     | no
nat              | force_rport,comedia
rtp_symmetric    | yes
rewrite_contact  | yes
dtls_verify      |
dtls_setup       |
dtls_rekey       | 0
media_encryption |
dtls_cert_file   |
dtls_private_key |
dtls_ca_file     |
dtls_cipher      |
webrtc           | yes
mailboxes        |
ice_support      | yes
force_rport      | yes
session_expires  | 1800
use_avpf         |
outbound_auth    |
rtp_timeout      |
rtp_timeout_hold |
allow_transfer   | yes
dtmf_mode        | rfc4733
-[ RECORD 3 ]----+--------------------
id               | 666666
transport        | transport-wss
aors             | 666666
auth             | auth_666666
context          | testtransfer
disallow         | all
allow            | ulaw,alaw,opus,g729
direct_media     | no
nat              | force_rport,comedia
rtp_symmetric    | yes
rewrite_contact  | yes
dtls_verify      |
dtls_setup       |
dtls_rekey       | 0
media_encryption |
dtls_cert_file   |
dtls_private_key |
dtls_ca_file     |
dtls_cipher      |
webrtc           | yes
mailboxes        |
ice_support      | yes
force_rport      | yes
session_expires  | 1800
use_avpf         |
outbound_auth    |
rtp_timeout      |
rtp_timeout_hold |
allow_transfer   | yes
dtmf_mode        | rfc4733


Pjsip aors configuration :

=# select * from ps_aors where id in('444444','555555','666666');
-[ RECORD 1 ]------+-------
id                 | 444444
max_contacts       | 20
remove_existing    | yes
minimum_expiration | 60
maximum_expiration | 7200
contact            |
qualify_frequency  |
-[ RECORD 2 ]------+-------
id                 | 555555
max_contacts       | 20
remove_existing    | yes
minimum_expiration | 60
maximum_expiration | 7200
contact            |
qualify_frequency  |
-[ RECORD 3 ]------+-------
id                 | 666666
max_contacts       | 20
remove_existing    | yes
minimum_expiration | 60
maximum_expiration | 7200
contact            |
qualify_frequency  |


Pjsip auths configuration :

=# select * from ps_auths where username in('444444','555555','666666');
-[ RECORD 1 ]----------
id        | auth_444444
auth_type | userpass
username  | 444444
password  | 444444
realm     | asterisk
-[ RECORD 2 ]----------
id        | auth_555555
auth_type | userpass
username  | 555555
password  | 555555
realm     | asterisk
-[ RECORD 3 ]----------
id        | auth_666666
auth_type | userpass
username  | 666666
password  | 666666
realm     | asterisk

Features.conf content :

features.txt (8.8 KB)

Attached message logs :

messages.txt (4.4 MB)

Current working System :

Thanks and regards

Dear Team,

Please help me out.

Iam unable to make blind transfer . Please refer to attachments.

extensions.txt (2.1 KB)
messages.txt (453.4 KB)
features.txt (354 Bytes)

Thanks and regards,

There is no team; we are all individual volunteers.

Your log file was too noisy for me to want to spend time trying to find the useful information in it. Sometimes you need the debug log, but mostly it gets in the way.

Dear team,

thanks for your reply, let me simplify log instead of sharing entire message log

    -- Executing [555555@testtransfer:1] NoOp("PJSIP/444444-00000010", "Starting Call with Dynamic Transfer Support") in new stack
    -- Executing [555555@testtransfer:2] Set("PJSIP/444444-00000010", "__CALLER_CHANNEL=PJSIP/444444-00000010") in new stack
    -- Executing [555555@testtransfer:3] Set("PJSIP/444444-00000010", "__TRANSFER_TARGET=PJSIP/555555") in new stack
    -- Executing [555555@testtransfer:4] Set("PJSIP/444444-00000010", "__DYNAMIC_FEATURES=blindxfer#atxfer") in new stack
    -- Executing [555555@testtransfer:5] Playback("PJSIP/444444-00000010", "silence") in new stack
    -- <PJSIP/444444-00000010> Playing 'silence.gsm' (language 'en')
    -- Executing [555555@testtransfer:6] Ringing("PJSIP/444444-00000010", "") in new stack
    -- Executing [555555@testtransfer:7] Set("PJSIP/444444-00000010", "CONTACTS=PJSIP/555555/sip:103559pf@49.49.49.49:4531;transport=ws;x-ast-orig-host=o56f2o8q9jbq.invalid:0") in new stack
    -- Executing [555555@testtransfer:8] Dial("PJSIP/444444-00000010", "PJSIP/555555/sip:103559pf@49.49.49.49:4531;transport=ws;x-ast-orig-host=o56f2o8q9jbq.invalid:0,45,TtU(track_call,s,1)") in new stack
    -- Called PJSIP/555555/sip:103559pf@49.49.49.49:4531;transport=ws;x-ast-orig-host=o56f2o8q9jbq.invalid:0
    -- PJSIP/555555-00000011 is ringing
    -- PJSIP/555555-00000011 answered PJSIP/444444-00000010
    -- PJSIP/555555-00000011 Internal Gosub(track_call,s,1(s,1)) start
    -- Executing [s@track_call:1] NoOp("PJSIP/555555-00000011", "Tracking the call for transfer") in new stack
    -- Executing [s@track_call:2] Set("PJSIP/555555-00000011", "__PEER_CHANNEL=PJSIP/555555-00000011") in new stack
    -- Executing [s@track_call:3] Set("PJSIP/555555-00000011", "CLEAN_PEER=PJSIP/555555-00000011") in new stack
    -- Executing [s@track_call:4] ExecIf("PJSIP/555555-00000011", "1?Set(CLEAN_PEER=555555-00000011)") in new stack
    -- Executing [s@track_call:5] Set("PJSIP/555555-00000011", "DB(TRANSFER/PJSIP/444444-00000010)=PJSIP/555555-00000011") in new stack
    -- Executing [s@track_call:6] NoOp("PJSIP/555555-00000011", "Saved Peer: 555555-00000011 for PJSIP/444444-00000010") in new stack
    -- Executing [s@track_call:7] Return("PJSIP/555555-00000011", "") in new stack
  == Spawn extension (testtransfer, , 1) exited non-zero on 'PJSIP/555555-00000011'
    -- PJSIP/555555-00000011 Internal Gosub(track_call,s,1(s,1)) complete GOSUB_RETVAL=
    -- Channel PJSIP/555555-00000011 joined 'simple_bridge' basic-bridge <456cea87-fb21-454d-91a2-97660075fa67>
    -- Channel PJSIP/444444-00000010 joined 'simple_bridge' basic-bridge <456cea87-fb21-454d-91a2-97660075fa67>
(0x7fe3c40222e0) RTP audio difference is 114587064 set mark
(0x7fe3c4032e40) RTP audio difference is 459832152 set mark
[Mar 18 09:11:59] WARNING[6340][C-00000009]: app_transfer.c:104 transfer_exec: Transfer requires an argument ([Tech/]destination)
    -- Channel PJSIP/444444-00000010 left 'simple_bridge' basic-bridge <456cea87-fb21-454d-91a2-97660075fa67>
  == Spawn extension (testtransfer, 555555, 8) exited non-zero on 'PJSIP/444444-00000010'
    -- Channel PJSIP/555555-00000011 left 'simple_bridge' basic-bridge <456cea87-fb21-454d-91a2-97660075fa67>


please guide me

thanks and regards,

There is no team

You didn’t say that you were using the Transfer application, rather than doing a standard features transfer!

I assume this is where it breaks, but I can’t see where the Transfer application is called; transfer_logic doesn’t seem to be executed.

Wait a minute:

[applicationmap]
blindxfer => **,self/caller,Transfer

You seem to have defined ** in two different ways.

I’d suggest that Transfer is not something that one could reasonably expect to work from a feature code.

If it does work, it needs an argument.

/caller will be ignored.

You don’t seem to have full timestamps, which normally means you screen scraped, rather than using /var/log/asterisk/full.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.