MixMonitor stops when use Transfer key Yealink

Hello, I am having a problem in a specific method of transfer on Asterisk 16.4.0.
When I am use a Transfer key of an IP Phone it didn’t record the call when the IP Phone is the source of the call and the source of the transfer. Let me give an exemple:

9002 is my IP Phone an Yealink T21P-E2 and I have two more for this exemple, 9000 and 9001.

  1. 9002 make a call to 9000
  2. 9000 answer 9002 and they start to talk
  3. 9002 use the Transfer Key to 9001
  4. 9001 answer 9002 and they start to talk
  5. 9002 hangup and complete the transfer between 9000 and 9001 (At this point the call aren’t recorded anymore.)
  6. 9000 start to talk with 9001

MixMonitor record the followed calls:

  • 9002 with 9000
  • 9002 with 9001

The transfered call 9000 with 9001 is not recorded.

Here is the sip.conf

[9000]
host=dynamic
type=friend
hasvoicemail=yes
fullname=9000
callgroup=0
pickupgroup=0
secret=9000
context=jail
disallow=all
allow=alaw,ulaw
callerid="9000" <9000>
qualify=yes
nat=force_rport,comedia

[9001]
host=dynamic
type=friend
hasvoicemail=yes
fullname=9001
callgroup=0
pickupgroup=0
secret=9001
context=jail
disallow=all
allow=alaw,ulaw
callerid="9001" <9001>
qualify=yes
nat=force_rport,comedia

[9002]
host=dynamic
type=friend
hasvoicemail=yes
fullname=9002
callgroup=0
pickupgroup=0
secret=9002
context=jail
disallow=all
allow=alaw,ulaw
callerid="9002" <9000>
qualify=yes
nat=force_rport,comedia

Here is the extensions.conf

[jail]
exten => _900X,1,NoOp(   ----------------- GRAVANDO: ${CDR(src)} -> ${CDR(dst)} | LINKEDID: ${CDR(LINKEDID)} -----------------   )
 same => n,Set(CDR(userfield)=${CDR(LINKEDID)}.wav)
 same => n,MixMonitor(${CDR(LINKEDID)}.wav,a)
 same => n,Dial(SIP/${EXTEN},,tT)
 same => n,HangUp()

Step 1 - 9002 make a call to 9000

[Jan 15 19:09:24]   == Using SIP RTP CoS mark 5
[Jan 15 19:09:24]     -- Executing [9000@jail:1] NoOp("SIP/9002-00000177", "   ----------------- GRAVANDO: 9000 -> 9000 | LINKEDID: 1610748564.2849 -----------------   ") in new stack
[Jan 15 19:09:24]     -- Executing [9000@jail:2] Set("SIP/9002-00000177", "CDR(userfield)=1610748564.2849.wav") in new stack
[Jan 15 19:09:24]     -- Executing [9000@jail:3] MixMonitor("SIP/9002-00000177", "1610748564.2849.wav,a") in new stack
[Jan 15 19:09:24]     -- Executing [9000@jail:4] Dial("SIP/9002-00000177", "SIP/9000,,tT") in new stack
[Jan 15 19:09:24]   == Begin MixMonitor Recording SIP/9002-00000177
[Jan 15 19:09:24]   == Using SIP RTP CoS mark 5
[Jan 15 19:09:24]     -- Called SIP/9000
[Jan 15 19:09:24]     -- SIP/9000-00000178 is ringing
[Jan 15 19:09:26]     -- SIP/9000-00000178 answered SIP/9002-00000177
[Jan 15 19:09:26]     -- Channel SIP/9000-00000178 joined 'simple_bridge' basic-bridge <977e4c9d-05f9-49bf-b145-2251ba7a3db0>
[Jan 15 19:09:26]     -- Channel SIP/9002-00000177 joined 'simple_bridge' basic-bridge <977e4c9d-05f9-49bf-b145-2251ba7a3db0>

mixmonitor list

finti*CLI> mixmonitor list
SIP/9000-00000178  SIP/9002-00000177
finti*CLI> mixmonitor list SIP/9000-00000178
MixMonitor ID   File    Receive File    Transmit File
=========================================================================
finti*CLI> mixmonitor list SIP/9002-00000177
MixMonitor ID   File    Receive File    Transmit File
=========================================================================
0x7fda8c001020  /var/spool/asterisk/monitor/1610748564.2849

Step 2 - 9002 use the Transfer Key to 9001

[Jan 15 19:11:00]     -- Started music on hold, class 'default', on channel 'SIP/9000-00000178'
[Jan 15 19:11:05]   == Using SIP RTP CoS mark 5
[Jan 15 19:11:05]     -- Executing [9001@jail:1] NoOp("SIP/9002-00000179", "   ----------------- GRAVANDO: 9000 -> 9001 | LINKEDID: 1610748665.2858 -----------------   ") in new stack
[Jan 15 19:11:05]     -- Executing [9001@jail:2] Set("SIP/9002-00000179", "CDR(userfield)=1610748665.2858.wav") in new stack
[Jan 15 19:11:05]     -- Executing [9001@jail:3] MixMonitor("SIP/9002-00000179", "1610748665.2858.wav,a") in new stack
[Jan 15 19:11:05]     -- Executing [9001@jail:4] Dial("SIP/9002-00000179", "SIP/9001,,tT") in new stack
[Jan 15 19:11:05]   == Using SIP RTP CoS mark 5
[Jan 15 19:11:05]     -- Called SIP/9001
[Jan 15 19:11:05]   == Begin MixMonitor Recording SIP/9002-00000179
[Jan 15 19:11:05]     -- SIP/9001-0000017a is ringing
[Jan 15 19:11:09]     -- SIP/9001-0000017a answered SIP/9002-00000179
[Jan 15 19:11:09]     -- Channel SIP/9001-0000017a joined 'simple_bridge' basic-bridge <ec1b1108-8f7c-439f-959e-5becd5ccb16e>
[Jan 15 19:11:09]     -- Channel SIP/9002-00000179 joined 'simple_bridge' basic-bridge <ec1b1108-8f7c-439f-959e-5becd5ccb16e>

mixmonitor list

finti*CLI> mixmonitor list
SIP/9000-00000178  SIP/9001-0000017a  SIP/9002-00000177  SIP/9002-00000179
finti*CLI> mixmonitor list SIP/9000-00000178
MixMonitor ID   File    Receive File    Transmit File
=========================================================================
finti*CLI> mixmonitor list SIP/9001-0000017a
MixMonitor ID   File    Receive File    Transmit File
=========================================================================
finti*CLI> mixmonitor list SIP/9002-00000177
MixMonitor ID   File    Receive File    Transmit File
=========================================================================
0x7fda8c001020  /var/spool/asterisk/monitor/1610748564.2849
finti*CLI> mixmonitor list SIP/9002-00000179
MixMonitor ID   File    Receive File    Transmit File
=========================================================================
0x7fda0c0070d0  /var/spool/asterisk/monitor/1610748665.2858

Step 3 - 9002 hangup and complete the transfer between 9000 and 9001
At this point the call aren’t recorded anymore.

[Jan 15 19:14:22]     -- Channel SIP/9000-00000178 left 'simple_bridge' basic-bridge <977e4c9d-05f9-49bf-b145-2251ba7a3db0>
[Jan 15 19:14:22]     -- Channel SIP/9002-00000179 left 'simple_bridge' basic-bridge <ec1b1108-8f7c-439f-959e-5becd5ccb16e>
[Jan 15 19:14:22]     -- Channel SIP/9000-00000178 swapped with SIP/9002-00000179 into 'simple_bridge' basic-bridge <ec1b1108-8f7c-439f-959e-5becd5ccb16e>
[Jan 15 19:14:22]     -- Channel SIP/9002-00000177 left 'simple_bridge' basic-bridge <977e4c9d-05f9-49bf-b145-2251ba7a3db0>
[Jan 15 19:14:22]   == Spawn extension (jail, 9001, 4) exited non-zero on 'SIP/9002-00000179'
[Jan 15 19:14:22]   == Spawn extension (jail, 9000, 4) exited non-zero on 'SIP/9002-00000177'
[Jan 15 19:14:22]   == MixMonitor close filestream (mixed)
[Jan 15 19:14:22]   == End MixMonitor Recording SIP/9002-00000179
[Jan 15 19:14:22]     -- Stopped music on hold on SIP/9000-00000178
[Jan 15 19:14:22]   == MixMonitor close filestream (mixed)
[Jan 15 19:14:22]   == End MixMonitor Recording SIP/9002-00000177

mixmonitor list

finti*CLI> mixmonitor list
SIP/9000-00000178  SIP/9001-0000017a
finti*CLI> mixmonitor list SIP/9000-00000178
MixMonitor ID   File    Receive File    Transmit File
=========================================================================
finti*CLI> mixmonitor list SIP/9001-0000017a
MixMonitor ID   File    Receive File    Transmit File
=========================================================================

Step 4 - 9001 hangup, end the call.

[Jan 15 19:15:42]     -- Channel SIP/9001-0000017a left 'simple_bridge' basic-bridge <ec1b1108-8f7c-439f-959e-5becd5ccb16e>
[Jan 15 19:15:42]     -- Channel SIP/9000-00000178 left 'simple_bridge' basic-bridge <ec1b1108-8f7c-439f-959e-5becd5ccb16e>

I don’t remember to have this problem on the Asterisk 13 when I used Set(AUDIOHOOK_INHERIT(MixMonitor)=yes).

Is this a BUG?

Do I have to do anything else to make the recording keep going in this scenario.

Is there a way to keeping using the Transfer key on the IP Phones in the example that I gave?

Hi, anyone else with this problem?

As I had haven’t any answer, I open a bug report on JIRA, you can check it on [ASTERISK-29314] MixMonitor stops when use Transfer key of a IP Phone - Digium/Asterisk JIRA

I’ll answer here. The problem is that you aren’t recording the call legs that are being transferred. You are recording the call leg of “9002” in each case, which goes away on completion. You’d want to place the MixMonitor on the other side of the call.

Yes, I would like to have all the call recorded, no matter if it was transfered by using blindxfer, atxfer or a Transfer key of an IP Phone.

If it isn’t a bug and you know how to make it work, please, explain me how to do that work properly.

Thanks.

MixMonitor follows the channel that it is executed on. If you look at your output, the MixMonitor is on the “SIP/9002” channel. This means that as it is transferred around, it will follow it. If that channel is hung up, then the MixMonitor will be hung up.

You want to place the MixMonitor on the dialed channel. This can be done using pre-dial handlers[1] for example.

[1] Pre-Dial Handlers - Asterisk Project - Asterisk Project Wiki

1 Like

Thanks, it will work around the problem.