Call Parking and Hardware parking

I recently acquired an RCA/Telefield IP160/170 Phone system. The handsets have “Call Parking” function on them and the web GUI asks for a “Call Parking Code”

I had some success with using a “transfer” to extension 700 but that assigns a random Parking extension and it is the caller that is hearing the Parking Lot Extension, not the person initiating the transfer. In any case I want each extension to have a fixed parking lot extension where their calls are parked not one dynamically assigned extension.

Any advice for how to do this and integrate with the hardware “parking” code?

This forum doesn’t support any GUI. Any way of achieving this is likely to involve removing or subverting the GUI.

If the GUI is FreePBX, please use their forum.

There is a channel variable you can set to force a particular parking lot number.

How are you doing the transfer. Asterisk has two ways and SIP, has various ways as well.

david551 I referred only to “web gui” on HANDSETS .

This is pure text based asterisk.

Please STOP reading something that I did not say into my post.

You are one of those people who makes the poster defend his post more than anything. People like you only cause problems.

I believe 700 is the park manager. You can directly transfer the calls (or setup the parking code) with/to any of the parking slots.

PitsKey , Saying that “…you can…” is not the kind of help I was looking for. If you know something about HOW then say so, if not, then no need to reply.

Sorry for trying to be helpful.

1 Like

markosjal - with your attitude I am surprised anyone wants to reply.


Mercury1, the problem is replies like yours and those that say nothing about the topic. The question never was "Can I " , it was “How do I”

Please stay on topic unless you just want points for posing useless replies

Markosjal —-—- :joy::joy::joy:

This may come in handy in the future.

1 Like

Hi @markosjal, please correct me if I misunderstood your setting. Not sure if this is the best solution but it works for me (Asterisk 16.13.0). As bonus, I got a single park-pickup-button and the park status is correctly indicated on my phone (green = no one parked, red = someone parked). I assume that …

  1. You can set a Call Parking Code, e.g. 61 (sixty-one), via web GUI for each phone.
  2. You have access to and can program Asterisk conf-files.
  3. You configured the parkedcalls context with parking slots 71-79 (seventy-one to seventy-nine), see below.

What I’ve done to achieve single button parking with fixed slots per phone. Put this into extensions.conf

include => parkedcalls
exten = _6[1-9],hint,park:7${EXTEN:1:1}@parkedcalls
exten = _6[1-9],1,NoOp(caller {CALLERID(number)} called {CALLERID(dnid)})
same = n,Set(PARKINGEXTEN=7${EXTEN:1:1})
same = n,Gotoif([{DEVICE_STATE(park:${PARKINGEXTEN}@parkedcalls)}==INUSE]?pickup)
same = n,Park(default,s)

same = n,Hangup
same = n(pickup),ParkedCall(default,${PARKINGEXTEN})
same = n,Hangup

The res_parking.conf looks like:

parkeddynamic = no

[default] ; Default Parking Lot
parkext => 70
parkpos => 71-79
context => parkedcalls ; Which context parked calls and the default park
parkinghints = yes ; Add hints priorities automatically for parkposextensions if parkext is set
parkingtime = 60 ; Number of seconds a call can be parked before returning
comebacktoorigin = no

In the main context for your phones, e.g. from-internal, put include = special-parking.
Assuming you have not more than 9 phone, you assign every phone one of the numbers from 61 to 69. Hitting “Call Parking” button on the first phone (61) should park the current call. Hitting “Call Parking” again should pick it up.

Is this the answer you were looking for?

EDIT: Had to add additional empty line to fix missing line breaks in first blockquote.

@terraformer Thank you so much for this! I believe this is what I am looking for and will test and post results. I appreciate your on-topic replay. These kinds of direct replies where someone actually reads the post, seem harder to get each day.

@sedwards , if that is directed to me I think it is misguided . Your home sex life may be your issue, and the cause of much frustration for you, but not me. It too however is off-topic.

If you read the replies properly, and asked for clarification, where necessary, rather than simply complaining about people interpreting your ambiguous text based on the most common case, you would have got to a solution much faster. The key part of the latest reply is the use of PARKINGEXTEN, which is what I was referring to in the third paragraph in my reply.

I’ll leave it to you to decipher the garbling of the dialplan resulting from not marking it up as preformatted text.

If you had come back politely, and asked for clarification, I might even have looked up the documentation myself, to find the exact name of the variable (although I generally try to hint at what to look for in the documentation, rather than provide answers on a plate, both on the basis of teaching to fish, and also because it means I don’t have to test the solution myself).

@david551 , Yes I am sure that one-liner, third paragraph was certainly a knowledgable and complete answer, after you saying that I am using a Free PBX GUI , which I never said . I am sure your skills at reading and interpreting are far greater than mine .

@terraformer , I tried this and as I understand it , I should be able to transfer a call to 61 and it can be recovered on 71 ?

If I try to transfer to 61 I get “There is no call Parked there” recording.

Sorry that my dialplan is a little confusing. I’ll try to clarify.

Oh my, while typing an answer, I saw that there were missing line breaks in my first post. Sorry. That may have caused the problem. In case you did not correct it already in your dialplan, this should be correct:

include => parkedcalls
exten = _6[1-9],hint,park:7${EXTEN:1:1} @parkedcalls
exten = _6[1-9],1,NoOp(caller {CALLERID(number)} called {CALLERID(dnid)})
same = n,Set(PARKINGEXTEN=7${EXTEN:1:1})
same = n,Gotoif([{DEVICE_STATE(park:{PARKINGEXTEN}@parkedcalls)}==INUSE]?pickup)
same = n,Park(default,s)
same = n,Hangup
same = n(pickup),ParkedCall(default,{PARKINGEXTEN})
same = n,Hangup

If this was not the reason, let me try again.

You use the extension 61 to park the active call, i.e. (blind) transfer your active call to number 61. Note that it is actually parked on the parking slot 71 due to this line:

same = n,Set(PARKINGEXTEN=7${EXTEN:1:1})

Hence, you should be able to pick up that call by manually dialing 71.
One reason it did not work may be that you accidentally missed the hint statement. It is mandatory for my dialplan example.

exten = _6[1-9],hint,park:7${EXTEN:1:1} @parkedcalls

Nevertheless, here is a simplified version of [special-parking] where BLF is not working but you use the park slot numbers directly.

include => parkedcalls
exten = _7[1-9],1,NoOp(caller {CALLERID(number)} called {CALLERID(dnid)})

same = n,Park(default,s)
same = n,Hangup
exten = _8[1-9],1,NoOp(caller {CALLERID(number)} called {CALLERID(dnid)})
same = n,ParkedCall(default,7${EXTEN:1:1})
same = n,Hangup

With this dialplan, you set the Call Park ID on phone 1 to 71, on phone two to 72 etc. I assume your phones have a pick up button to assign Pickup ID. This would be 81, 82 and so on.

To simplify your life when deploying many phones, you could think about using the phones CALLERID(num) to derive the parking slot number and set the same Park Call ID to all phones.

I apologize for the missing line breaks in my initial post.
Let me know if this works now.

EDIT: This is weird. Preview did show correct line breaks but actual post did not have them.

Yes I goit the line break fixced that was not the issue

I am using

include => parkedcalls
exten = _6[1-9],hint,park:7${EXTEN:1:1} `@parkedcalls`
exten = _6[1-9],1,NoOp(caller {CALLERID(number)} called {CALLERID(dnid)})
same = n,Set(PARKINGEXTEN=7${EXTEN:1:1})
same = n,Gotoif([{DEVICE_STATE(park:${PARKINGEXTEN} `@parkedcalls` )}==INUSE]?pickup)
same = n,Park(default,s)
same = n,Hangup
same = n(pickup),ParkedCall(default,${PARKINGEXTEN})
same = n,Hangup

I just hear “there is no call parked at that extension” when I try to transfer the call to 61. Of course I assume that I park a call by transferring it to 61 .

This is strange. @markosjal can you run rasterisk -vvvvv and post the output when you are trying to park a call via your phone? My guess is that the DEVICE_STATE is not interpreted correctly.
Maybe it’s just the forum that auto-corrected your post. If not, there are two $ missing. That could explain it.

same = n,Gotoif($[${DEVICE_STATE(park:${PARKINGEXTEN} `@parkedcalls` )}==INUSE]?pickup)

This is how it looks for me:

[Sep 17 11:36:40]     -- Executing [62@from-internal:1] NoOp("PJSIP/224-00000050", "caller 224 called 222") in new stack
[Sep 17 11:36:40]     -- Executing [62@from-internal:2] Set("PJSIP/224-00000050", "PARKINGEXTEN=72") in new stack
[Sep 17 11:36:40]     -- Channel PJSIP/222-00000051 left 'simple_bridge' basic-bridge <aec16bea-d80d-4bfb-885d-2483ecad7143>
[Sep 17 11:36:40]     -- Executing [62@from-internal:3] GotoIf("PJSIP/224-00000050", "0?par1") in new stack
[Sep 17 11:36:40]     -- Executing [62@from-internal:4] Set("PJSIP/224-00000050", "PTIMEOUT=30") in new stack
[Sep 17 11:36:40]     -- Executing [62@from-internal:5] NoOp("PJSIP/224-00000050", "set timeout 30 and return context  for parkext 72") in new stack
[Sep 17 11:36:40]     -- Executing [62@from-internal:6] GotoIf("PJSIP/224-00000050", "0?pickup") in new stack
[Sep 17 11:36:40]     -- Executing [62@from-internal:7] GotoIf("PJSIP/224-00000050", "1?godefault") in new stack
[Sep 17 11:36:40]     -- Goto (from-internal,62,10)
[Sep 17 11:36:40]     -- Executing [62@from-internal:10] Park("PJSIP/224-00000050", "default,st(30)") in new stack
[Sep 17 11:36:40]        > Setting Parker dial string to PJSIP/222 from BLINDTRANSFER value
[Sep 17 11:36:40]     -- Parking 'PJSIP/224-00000050' in 'default' at space 72
[Sep 17 11:36:40]     -- Channel PJSIP/224-00000050 joined 'holding_bridge' parking-bridge <6a895cda-d845-439d-8f24-458f5351a0fa>
[Sep 17 11:36:40]     -- Started music on hold, class 'default', on channel 'PJSIP/224-00000050'

Btw I’ve use “>” to make quotes because I wasn’t aware of block preformatted text “```”

This is what I get :

      > 0x68b7f6a8 -- Strict RTP learning after remote address set to:
    -- Started music on hold, class 'default', on channel 'SIP/2125551212-00000368'
    -- Stopped music on hold on SIP/2125551212-00000368
    -- Channel SIP/5910-0000036b left 'simple_bridge' basic-bridge <d0c029a1-8025-4654-96a7-4a0fe4038b3f>
    -- Channel SIP/2125551212-00000368 left 'simple_bridge' basic-bridge <d0c029a1-8025-4654-96a7-4a0fe4038b3f>
    -- Executing [61@from-internal:1] NoOp("SIP/2125551212-00000368", "caller {CALLERID(number)} called {CALLERID(dnid)}") in new stack
    -- Executing [61@from-internal:2] Set("SIP/2125551212-00000368", "PARKINGEXTEN=71") in new stack
    -- Executing [61@from-internal:3] GotoIf("SIP/2125551212-00000368", "[{DEVICE_STATE(park:71@parkedcalls)}==INUSE]?pickup") in new stack
    -- Goto (from-internal,61,6)
    -- Executing [61@from-internal:6] ParkedCall("SIP/2125551212-00000368", "default,71") in new stack
    -- <SIP/2125551212-00000368> Playing 'pbx-invalidpark.ulaw' (language 'en')
  == Spawn extension (from-internal, 61, 6) exited non-zero on 'SIP/2125551212-00000368'

I hear “Im Sorry there is no call parked on that extension” ON THE PHONE BEING TRANSFERRED, not on the phone initiating the transfer, then it is disconnected

I think issues are in mistakes in your dialplan, the :


should represent value, not variable name.
most probably, you missed $ sign in front.

it must be:

same for {CALLERID(number)} , any variable surrounded by {} should be
like: ${}