Park() unexpected Behavior

I’m replacing an asterisk 16.9.0 box with an Asterisk certified/16.8-cert14 box. I have the same features.conf, res_parking.conf, and extensions.conf on both boxes but park is not behaving the way I would expect. See output below.

On the asterisk 16.9.0 when I do blind transfer to the park extention (700): it will park the other side of the call, announce the parking lot the other side landed in, and then hang up my side of the call.

On the asterisk 16.8 cert 14, when I do a blind transfer to the park extention (700): it will park the other side of the call, NOT announce the parking lot, and then NOT hang-up my side of the call.
Looking at the wiki page on park() I see that it is used “Typically in combination with an attended transfer to know the parking space”.

When I do an attended transfer on asterisk 16.8 cert 14 to extention 700: it will park the other side of the call, announce the parking lot, and then NOT hang-up my side of the call.
So, I have two questions.

  1. What changed between asterisk versions to cause the difference in the behavior of park?
  2. How can I get park to announce the parking lot and then hang-up?

Thanks in advance for any replies. I’m not looking for anyone to do the work for me, I just need a nuge in the right direction here. Thanks again

Asterisk 16.9.0

CLI> features show
Builtin Feature Default Current


Pickup *8 *8
Blind Transfer # **
Attended Transfer *0
One Touch Monitor
Disconnect Call * *
Park Call
One Touch MixMonitor

Dynamic Feature Default Current


(none)

Feature Groups:

(none)

CLI> dialplan show parkedcalls
[ Context ‘parkedcalls’ created by ‘res_parking’ ]
‘700’ => 1. Park() [res_parking]
‘701’ => 1. ParkedCall(default,701) [res_parking/default]
‘702’ => 1. ParkedCall(default,702) [res_parking/default]
‘703’ => 1. ParkedCall(default,703) [res_parking/default]
‘704’ => 1. ParkedCall(default,704) [res_parking/default]
‘705’ => 1. ParkedCall(default,705) [res_parking/default]
‘706’ => 1. ParkedCall(default,706) [res_parking/default]
‘707’ => 1. ParkedCall(default,707) [res_parking/default]
‘708’ => 1. ParkedCall(default,708) [res_parking/default]
‘709’ => 1. ParkedCall(default,709) [res_parking/default]
‘710’ => 1. ParkedCall(default,710) [res_parking/default]
‘711’ => 1. ParkedCall(default,711) [res_parking/default]
‘712’ => 1. ParkedCall(default,712) [res_parking/default]
‘713’ => 1. ParkedCall(default,713) [res_parking/default]
‘714’ => 1. ParkedCall(default,714) [res_parking/default]
‘715’ => 1. ParkedCall(default,715) [res_parking/default]
‘716’ => 1. ParkedCall(default,716) [res_parking/default]
‘717’ => 1. ParkedCall(default,717) [res_parking/default]
‘718’ => 1. ParkedCall(default,718) [res_parking/default]
‘719’ => 1. ParkedCall(default,719) [res_parking/default]
‘720’ => 1. ParkedCall(default,720) [res_parking/default]

-= 21 extensions (21 priorities) in 1 context. =-
ct4-prod*CLI>

[May 4 06:58:18] – SIP/4323-0000000b is ringing
[May 4 06:58:20] – SIP/4323-0000000b answered SIP/4380-0000000a
[May 4 06:58:20] – Channel SIP/4323-0000000b joined ‘simple_bridge’ basic-bridge <6e17c9e1-f902-4168-bb1c-80716504f526>
[May 4 06:58:20] – Channel SIP/4380-0000000a joined ‘simple_bridge’ basic-bridge <6e17c9e1-f902-4168-bb1c-80716504f526>
[May 4 06:58:29] – Channel SIP/4323-0000000b: Started DTMF blind transfer.
[May 4 06:58:29] – <SIP/4323-0000000b> Playing ‘pbx-transfer.gsm’ (language ‘en’)
[May 4 06:58:29] – Started music on hold, class ‘default’, on channel ‘SIP/4380-0000000a’
[May 4 06:58:35] – Stopped music on hold on SIP/4380-0000000a
[May 4 06:58:35] – Channel SIP/4380-0000000a left ‘simple_bridge’ basic-bridge <6e17c9e1-f902-4168-bb1c-80716504f526>
[May 4 06:58:35] – Parking ‘SIP/4380-0000000a’ in ‘default’ at space 701
[May 4 06:58:35] – Channel SIP/4380-0000000a joined ‘holding_bridge’ parking-bridge <14016a02-4b2f-405c-81fb-296dce7be64e>
[May 4 06:58:35] – Started music on hold, class ‘default’, on channel ‘SIP/4380-0000000a’
[May 4 06:58:35] – <SIP/4323-0000000b> Playing ‘digits/7.gsm’ (language ‘en’)
[May 4 06:58:36] – <SIP/4323-0000000b> Playing ‘digits/0.gsm’ (language ‘en’)
[May 4 06:58:37] – <SIP/4323-0000000b> Playing ‘digits/1.gsm’ (language ‘en’)
[May 4 06:58:38] – Channel SIP/4323-0000000b left ‘simple_bridge’ basic-bridge <6e17c9e1-f902-4168-bb1c-80716504f526>
[May 4 06:58:42] – Stopped music on hold on SIP/4380-0000000a
[May 4 06:58:42] – Channel SIP/4380-0000000a left ‘holding_bridge’ parking-bridge <14016a02-4b2f-405c-81fb-296dce7be64e>


Asterisk certified/16.8-cert14

CLI> features show
Builtin Feature Default Current


Pickup *8 *8
Blind Transfer # **
Attended Transfer *0
One Touch Monitor
Disconnect Call * *
Park Call *1
One Touch MixMonitor

Dynamic Feature Default Current


(none)

Feature Groups:

(none)
CLI> dialplan show parkedcalls
[ Context ‘parkedcalls’ created by ‘res_parking’ ]
‘700’ => 1. Park() [res_parking]
‘701’ => 1. ParkedCall(default,701) [res_parking/default]
‘702’ => 1. ParkedCall(default,702) [res_parking/default]
‘703’ => 1. ParkedCall(default,703) [res_parking/default]
‘704’ => 1. ParkedCall(default,704) [res_parking/default]
‘705’ => 1. ParkedCall(default,705) [res_parking/default]
‘706’ => 1. ParkedCall(default,706) [res_parking/default]
‘707’ => 1. ParkedCall(default,707) [res_parking/default]
‘708’ => 1. ParkedCall(default,708) [res_parking/default]
‘709’ => 1. ParkedCall(default,709) [res_parking/default]
‘710’ => 1. ParkedCall(default,710) [res_parking/default]
‘711’ => 1. ParkedCall(default,711) [res_parking/default]
‘712’ => 1. ParkedCall(default,712) [res_parking/default]
‘713’ => 1. ParkedCall(default,713) [res_parking/default]
‘714’ => 1. ParkedCall(default,714) [res_parking/default]
‘715’ => 1. ParkedCall(default,715) [res_parking/default]
‘716’ => 1. ParkedCall(default,716) [res_parking/default]
‘717’ => 1. ParkedCall(default,717) [res_parking/default]
‘718’ => 1. ParkedCall(default,718) [res_parking/default]
‘719’ => 1. ParkedCall(default,719) [res_parking/default]
‘720’ => 1. ParkedCall(default,720) [res_parking/default]

-= 21 extensions (21 priorities) in 1 context. =-
ComTronPBX*CLI>

[May 4 07:18:51] – SIP/4380-0000018f is ringing
[May 4 07:18:53] – SIP/4380-0000018f answered SIP/4381-0000018e
[May 4 07:18:53] – Channel SIP/4380-0000018f joined ‘simple_bridge’ basic-bridge <0374d40a-9a44-4983-ba73-b4f6324ce35b>
[May 4 07:18:53] – Channel SIP/4381-0000018e joined ‘simple_bridge’ basic-bridge <0374d40a-9a44-4983-ba73-b4f6324ce35b>
[May 4 07:18:55] – Registered SIP ‘4325’ at 192.168.51.159:5060
[May 4 07:18:57] – Channel SIP/4380-0000018f: Started DTMF blind transfer.
[May 4 07:18:57] – <SIP/4380-0000018f> Playing ‘pbx-transfer.gsm’ (language ‘en’)
[May 4 07:18:57] – Started music on hold, class ‘default’, on channel ‘SIP/4381-0000018e’
[May 4 07:19:03] – Stopped music on hold on SIP/4381-0000018e
[May 4 07:19:03] – Channel SIP/4381-0000018e left ‘simple_bridge’ basic-bridge <0374d40a-9a44-4983-ba73-b4f6324ce35b>
[May 4 07:19:03] – Parking ‘SIP/4381-0000018e’ in ‘default’ at space 701
[May 4 07:19:03] – Channel SIP/4381-0000018e joined ‘holding_bridge’ parking-bridge <6a38e9f0-350b-4161-9821-a0c701b59dea>
[May 4 07:19:03] – Started music on hold, class ‘default’, on channel ‘SIP/4381-0000018e’
[May 4 07:19:16] – Channel SIP/4380-0000018f left ‘simple_bridge’ basic-bridge <0374d40a-9a44-4983-ba73-b4f6324ce35b>
[May 4 07:19:18] – Stopped music on hold on SIP/4381-0000018e
[May 4 07:19:18] – Channel SIP/4381-0000018e left ‘holding_bridge’ parking-bridge <6a38e9f0-350b-4161-9821-a0c701b59dea>

That sounds like your device is doing a half attended transfer. Some SIP phones, when using SIP REFER, handle blind transfers using the attended transfer mechanism, in which the phone (not Asterisk) sends REFER/Replaces and hangs up as soon as the enquiry call is accepted.

Thanks for your reply.

If it was the softphone doing the transfer like you say, would it still show " Started DTMF blind transfer." in the asterisk CLI ? See my snips from the CLI above. That sounds like asterisk is doing the transfer.

I enter ** into the softphone, I hear the softphone says “transfer”.

I see in the CLI it says

followed by “playing pbx-transfer”. This part happens the same on both PBXs.

This leads me to believe the transfer is happening entirely on the asterisk side. I can provide a SIP trace upon request.

That’s a features.conf transfer. With transfers you need to be specific about what method is being used.

Thanks for your reply again.

I agree is a features.conf transfer.

You can see the “features show” output from both PBXs above. I have ** set to bind transfer.

Why is a features.conf blind transfer to park working differently between these two versions of asterisk?

I’ve tried this below. Attended transfer to 700, set the timeout, then park. But the timeout does not take affect. The transferer hears the parking slot number but it never disconnects the call.

exten = 700,1,Set(TIMEOUT(absolute)=5)
same => n,Park()

I’ve also tried this but it never gets past Park(). Therefore the short code to complete park is never sent.

exten = 700,1,Set(TIMEOUT(absolute)=5)
same => n,Park()
same => n,SendDTMF(complete axter short code)

I’ve also tried the one-touch park but it also requires the transferer hangup at the end. If I have to press the call park button, then press the hangup button… it’s not really one-touch, is it?

I’m simply looking for away to autocomplete attended transfers to park. So it says the parking lot number and hangs up. That’s true one-touch parking to me.

Parking is a strange creature as it does not work like most other applications.

Please read the article on parking at the link below and note the limitations with blind transfers.

This isn’t going to work. The dialplan thread is terminated by the Park application, so, although Park exits, there is no thread to continue processing the dialplan. If the call then times out in the parking lot, I believe the parked channel will have the context, extension and priority of your SendDTMF line set, and the the new dialplan thread will continue from that line.

It’s announcing to the transferror, which means special case processing, as the natural one to receive the announcement, given the way a blind transfer works, is the transferee, who is the one running Park(). At a guess the previous special case was to suppress the message, but it has been changed to send it on the unnatural channel. That does mean that it needs to keep the channel up after the transfer is complete.
Moreover, SendDTMF will send the DTMF to whatever was running on the channel, which is initially the parker and then the parkee. Both are outside of Asterisk, so the DTMF will have no impact on Asterisk’s operation.

I don’t understand why you are even trying to send “complete attended transfer”, when the logs show you are actually doing a blind transfer.

Although you are not using a SIP transfer, all the RFC examples of SIP blind transfers assume the transferror, not the switch, initiates the clearing of their leg, so it is not hat unreasonable for Asterisk to expect the same.

Thanks for the reply! Not sure how I didn’t see this article before.

This is the piece that caught my eye from that article: “However, the channel technology may not let you hear the location announcement”. Which led me to do more testing.

On Asterisk Certified/16.8-cert14 when using chan_sip, the pseudo attended transfer that should completes the transfer does not work. Blind transfers to park do not announce the parking lot and do not hangup automatically. I understand this is probably because I’m using the long deprecated chan_sip or so i thought…

For the next test I took Asterisk Certified/16.8-cert14 built it up using pjsip. However the pseudo attended transfer that should complete the transfer does not work with pjsip either. The same thing again, blind transfers to park do not announce the parking lot and do not hangup automatically.

So moved on to Asterisk 18.11.2 built it up using pjsip. The pseudo attended transfer that completes the transfer works. It announces the parking lot and hangs up automatically.

I want to use the certified branch but I can’t if park is broken.

The only reason for using the certified branch is because you have paid support from Sangoma, so why are you here?

Also, certified branches are only supported for the features covered by the support contract. chan_sip is not supported, even under a paid contract, as far as I know.

There is no support for certified versions of asterisk unless you have a paid support agreement with Sangoma. Bug fixes do not get added to certified branches unless a customer has a support agreement that includes patching asterisk. Please see the link about certified asterisk below.

I understand I can use the certified branch and not get support because I didn’t pay for it.

I also understand I can use another branch like 18 standard and not get true support because it’s not the certified branch. Either way I don’t get support.

I was using the certified branch because I thought it would be more stable. Guess I’m better off using the latest non-certified version. Seems a little silly but OK.

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