Call Park - Single Button Using Dsskey

Let’s try for a step-by-step solution. The overall concept is we have a programmable button that is associated with a parking slot. It has three functions:

  1. When on a call, pushing the button sends the call to the parking slot. This is implemented with a SIP REFER request equivalent to a blind transfer to the slot number.
  2. When not on a call, pushing the button initiates a call to the parking slot. This is implemented with a SIP INVITE request equivalent to dialing the slot number.
  3. The button monitors the state of the slot, showing green when it is available and red when in use.

We can test that the PBX handles the first two functions correctly, without setting up any buttons or even using a Yealink phone. From any device capable of SIP blind transfer (examples: Sangoma Connect, Groundwire, MicroSIP) make or receive a call and blind transfer to 71 (assuming default slot configuration). The remote party should hear hold music. Now make an ordinary call to 71 and you should be reconnected with the remote party. If this basic stuff fails, fix that first; it has nothing to do with Yealink.

Next, on your Yealink phone, set up a button with Type: Call Park, Value: 71, Line: Line 1. After saving, the button should light up green (assuming slot not in use). If you park a call in that slot, e.g. from another device, the button should turn red. If that doesn’t work right, find out why and fix it.

Next, from your Yealink phone, make or receive a call, press the physical TRAN button, dial 71 and quickly (before the call gets sent) press TRAN again. This should do a blind transfer to 71, regardless of transfer settings; the call should be parked and the button should go red.

Now pick up the Yealink phone, dial 71 and press Send or wait the timeout, the parked call should be picked up.

If everything works so far, when on a call press the button and it should be parked. If not, there must be something wrong with the Park settings in the phone. My T26Ps are so ancient that they don’t have Features → Park and Pickup settings, but it’s a good bet that there are settings on the more recent models that do the same thing. What you need to shoot for is the phone sends a REFER (not ## or any other character string).

Finally, when not on a call and with a call parked, pressing the red button should pick it up.


Got it… Now that I know how it is NOT supposed to work…

here is my fresh install of Freepbx 15, same issues, 2 test phones.





OK, so it appears that the phone is not sending a REFER (blind transfer). Using pjsip logger, see that the phone sends when you try the blind transfer. Also, what response does the phone show / play?

That, I do not understand unless there is something specific to the version of asterisk you are using. I have several customers running with the Yealink phones and the parking is working exactly as you initially described. At this point it may be easier to build a new FreePBX on the latest version. I am using and have Yealink T42s, T46s, etc and it works exactly as you described initially. To be safe, also default your phones back to factory settings, make sure your on the latest firmware and follow the instruction I provided and make sure you have the ## in those fields and it will work.

@Stewart1 I will have to try the pjsip logger tomorrow when I get back to the office. My Yealink has a built in debugger that I can run and I have already posted that in this thread twice. I see Asterisk has a pjsip logger but I have never needed to use it so I will attempt to learn it tomorrow.

Someone probably knows what this line in the Phone logs means so I will post it raw

  1. <134>Sep 20 02:38:13 GUI [1266:1266]: GBIH<6+info > 693.754.047:Global Key Up:(110004c)

  2. <134>Sep 20 02:38:13 GUI [1266:1266]: BKLT<6+info > >693.754.720:BackLightManager::AddEvent [1]

  3. <134>Sep 20 02:38:13 GUI [1266:1266]: BKLT<6+info > 693.757.262:SetAvoidPowerSaving(1)

  4. <134>Sep 20 02:38:13 GUI [1266:1266]: DKUI<6+info > >693.759.640:CDssKeyButton::OnBtnClicked…:7

  5. <134>Sep 20 02:38:13 GUI [1266:1266]: DSSK<6+info > 693.763.580:dsskey[16], onclick!

  6. <134>Sep 20 02:38:13 GUI [1266:1266]: TALK<6+info > >693.768.706:CTalkRoutine::TransferViaDSSkey: Type[2]

  7. <134>Sep 20 02:38:13 GUI [1266:1266]: TALK<6+info > 693.773.899:HoldRoutine: hold[1] type[0] >host[0]

  8. <134>Sep 20 02:38:13 GUI [1266:1266]: CUIT<6+info > 693.775.132:sip hold[32870][1]

  9. <133>Sep 20 02:38:13 sua [1285]: APP <5+notice> [SIP] SIP_C2S_CALL_HOLD, lid:0 cid:32870

  10. <134>Sep 20 02:38:13 sua [1285]: SUA <6+info > [000] ****API Event:(0x0006) >SIPUA_EVENT_A2S_REINVITE ****

  11. <134>Sep 20 02:38:13 sua [1285]: CAL <6+info > [000] reinvite_flag=1, hold=1

  12. <134>Sep 20 02:38:13 GUI [1266:1266]: TALK<6+info > 693.781.427:HoldSession [32870], >state[0] statusonly[0]

  13. <134>Sep 20 02:38:13 GUI [1266:1266]: TALK<6+info > 693.783.298:VoiceInterface:hold >talk[32870]

  14. <134>Sep 20 02:38:13 sua [1285]: FSM <6+info > [000] allocating transaction ressource 6438 >0_3374894737

  15. <134>Sep 20 02:38:13 ipvp[1151]: IPVP<6+info > 693.784.799:unknown msg,0x00050b04,from >0xc401d38c 0x00008066, 0x00010000

Why is this even needed? This works just fine with chan_pjsip.

Because you have to SUBSCRIBE to the parking slot.

This seems strange to me. ## is the default value for the “In-Call Asterisk Blind Transfer” feature. On my systems, I am certain that parking and retrieving calls do not use ## in any way. Have the newer Yealink phones lost the ability to transfer calls with REFER? Or do you use ## because it is better in some way?

You need to do all of the other required things to the Yealink phones as well and that was described previously in this thread. After that and making sure you have the phone set for the transfer method, this is the only way that I have ever found to make the Yealinks work properly with a single park button assigned as a BLF. On previous versions of FreePBX, I believe 13 ish, you did not need to do any of this and the BLF just worked. With current versions of FreePBX and current Yealink phones, it will only work this way as far as I have found. Once configured this way, it is dead simple and reliable for the users.

I’m not sure how. Chan_SIP is dead, my friend. It leaves Asterisk next year and does not receive any updates or fixes as of this time. The assumption that you need chan_sip for this is wrong, you have no idea what any of us who have said “we have this working” is using. I, for example, use chan_pjsip 100%.

A bug? Well you are running EOL and unsupported versions of Asterisk. v14 and v17 are dead. You are running an EOL version of a phone that hasn’t had a firmware update in 3 years. But understand that when you convert between the two drivers you are rebuilding and resetting everything in the Asterisk side of the extension. This is akin to “I deleted it and re-added it and it worked” or “I rebooted and it worked” both of those indicate that a setting/state was not what it should be and doing those things clears all the issues away. It doesn’t mean you know why it solved the issue or if the issue will ever come back. It’s a blanket way to try and solve a problem by starting from the beginning.

Again, switching the extension back and forth from one driver to another isn’t a real answer here because many of us have this working in chan_pjsip. So please, do not recommend chan_sip for any of this because it isn’t a long term or the proper solution for this.

@BlazeStudios Agreed, I should not have mentioned changing the drivers back and fourth starting with sip to pjsip and back to sip, I deleted the comment, but for the record it does work on my EOL PBX and, my last statement was

My fresh install of Freepbx (yes using pjsip) does not work, the T46G will not blind transfer. So, I am taking the off ramp here. Thanks to those that added to the conversation, if what has mostly been said here is true you should just do a default install, factory reset your T46G and per the information here, you will most certainly, in every case be working, if not its most likely your settings, that while may have been set by default they are still yours… GL