FreePBX Call Parking and Pickup: Setup, Codes and BLF Keys
FreePBX call parking and pickup are two features: parking holds a live call in a slot (70 to park, 71-78 to retrieve), while pickup (** plus extension, or *8) answers a call still ringing on another phone.
- Parking holds a connected call in a numbered slot; pickup only grabs a call that is still ringing.
- FreePBX defaults: park by transferring to 70, retrieve from slots 71-78, directed pickup is ** plus the extension, group pickup is *8.
- *8 only works between extensions that share a pickup group, which is the most common cause of pickup failures.
- BLF lamps depend on a hint plus an allowed SUBSCRIBE context, so verify with core show hints before blaming the phone.
- Keep the parking slot range clear of real extension numbers and set a parking timeout that matches how long staff really take to retrieve calls.
What is the difference between call parking and call pickup?
Parking holds a connected call in a numbered slot with music on hold, so any phone can retrieve it by dialing the slot number. Pickup is different: it answers a call that is still ringing at another extension, with no slot involved.
Use parking when a call is answered and the person needed is elsewhere: park it, page the colleague, they dial the slot. Use pickup when a colleague's phone is ringing and they are away from the desk.
Both are built on feature codes in the dialplan, but they use different Asterisk machinery (res_parking versus the Pickup application), so they fail for different reasons and are configured in different places.
| Item | Parking | Pickup |
|---|---|---|
| Call state | Answered, on hold in a slot | Still ringing at another extension |
| FreePBX defaults | Transfer to 70, retrieve 71-78 | ** plus extension (directed), *8 (group) |
| Who can retrieve | Anyone who dials the slot | Only extensions allowed by pickup group (group) or anyone (directed) |
| Config location | Applications > Parking Lot | Feature Codes, plus Call Group and Pickup Group on each extension |
| Raw Asterisk | res_parking.conf, Park(), ParkedCall() | features.conf pickupexten, Pickup() |
How do I set up a parking lot in FreePBX?
In FreePBX 15 and later the module is Applications > Parking Lot (older releases call it Parking). Create or edit the default lot and set the values below, then Submit and Apply Config.
The timeout behavior matters most. Asterisk's comebacktoorigin makes an unanswered parked call ring back to the extension that parked it, so staff hear it return instead of the caller sitting forever.
| Setting | Typical value | What it does |
|---|---|---|
| Parking Lot Extension | 70 | The number you transfer to in order to park |
| Number of Slots | 8 | Creates slots 71-78 (extension + 1 and up) |
| Parking Timeout | 45 | Seconds before the call rings back |
| Parked Music Class | default | Music on hold class heard by the parked caller |
| Destination for Timeout | Parker, or a fallback such as reception | Where to send the call if the parker does not answer |
| Alert-Info / CID Prefix | Ring-back, or PARK: | Makes returned calls recognisable on screen and by ring tone |
- Open Applications > Parking Lot and edit the default lot.
- Set the parking extension to 70 and slots to 8.
- Choose a timeout of 45 to 90 seconds and a fallback destination such as reception.
- Set a CID prefix like PARK: so staff know the returning call was parked.
- Submit, click Apply Config, then test from two phones.
How do I park a call and retrieve it?
Parking in FreePBX is transfer based. While on the call, blind transfer to 70. The system announces the slot number (for example 71) to the parker and the caller hears music on hold. An attended transfer to 70 also works, and the parker hears the slot before hanging up.
To retrieve, anyone dials the slot, 71 in this example, from any extension that can reach the parkedcalls context. If nobody retrieves it within the timeout, it rings back to the parker.
On a desk phone, the sequence staff learn is: press Transfer, dial 70, press Transfer again (or send), read the slot number from the screen, then tell the colleague 'call is on 71'.
How do pickup groups and the pickup feature codes work?
FreePBX exposes two pickup codes. Directed pickup is ** followed by the extension, for example **104 answers the call ringing at 104, and it works regardless of groups. Group pickup is *8, which answers any ringing call within your own pickup group. Both live under Settings > Feature Codes.
Group pickup is why 'no matching call' appears so often. *8 only grabs calls ringing at extensions whose Call Group matches your Pickup Group. Set these on each extension under Applications > Extensions > Advanced. For a small office, put every extension in group 1 for both fields.
The raw Asterisk equivalents are shown below. Older chan_sip used callgroup and pickupgroup; PJSIP uses call_group and pickup_group, or the singular named_call_group and named_pickup_group for non-numeric names.
; features.conf [general]
pickupexten = *8 ; group pickup code
; pjsip.conf endpoint section
[104]
type=endpoint
call_group=1
pickup_group=1
; or, for named groups:
; named_call_group=office
; named_pickup_group=office
; extensions.conf directed pickup, FreePBX style
exten => _**X.,1,Pickup(${EXTEN:2}@PICKUPMARK)How do I program BLF keys so they light up and pick up?
A BLF key is a SUBSCRIBE to the extension's presence. Asterisk answers using a hint, then sends NOTIFY dialog events. Lamp convention: idle is green or off, ringing is flashing red, busy is solid red. If the key is pressed while the monitored extension is ringing, the phone sends the pickup code plus extension (for example **104), which is how one-touch pickup works. When idle, the key just dials the extension.
The phone needs a pickup code configured next to the BLF key. Field names vary by model and firmware, so confirm on your version's key page.
Parking slot lamps use hints like the ones FreePBX generates for you. Monitoring the slot on a key lights it when a call is parked there, and pressing it retrieves the call.
| Phone | Key type | Value | Pickup code field |
|---|---|---|---|
| Yealink | DSS Key > BLF | Extension, e.g. 104 | Extension field: ** (directed pickup) |
| Poly / Polycom | Attendant resource list, type normal | Address 104 | call.directedCallPickupString = ** and directed pickup enabled |
| Grandstream | Multi-Purpose Key > Busy Lamp Field | 104 and the account | Call pickup code in the account feature settings |
| Fanvil | Function Key > BLF | 104@account | Extension field: ** or *8 |
; hints (FreePBX generates these; shown for raw Asterisk)
exten => 104,hint,PJSIP/104
[parkedcalls]
exten => 71,hint,park:71@parkedcalls
exten => 72,hint,park:72@parkedcalls Why does it fail? Troubleshooting by symptom
Start with the CLI before touching phones. These commands answer most questions:
| Symptom | Likely cause | Confirm and fix |
|---|---|---|
| Pickup says no matching call | Different pickup groups, or a trunk call not tied to a group | pjsip show endpoint 104, check call_group and pickup_group; align them |
| BLF key never lights | No hint, or subscribe context not reaching the hint | core show hints; confirm the extension and context are listed |
| BLF lights but fails to pick up | Phone has no pickup code set | Set ** or *8 in the key's extension field |
| Parked call never returns | comebacktoorigin disabled or no timeout destination | Check res_parking.conf and the Parking Lot timeout destination |
| Slot dial gives busy or invalid | parkedcalls context missing from the dialing context | dialplan show parkedcalls; parkedcalls show |
| Park button works but no audio | NAT or SRTP mismatch | pjsip set logger on and rtp set debug on; check external_media_address and local_net |
asterisk -rvvv
core show hints
pjsip show endpoint 104
parkedcalls show
pjsip set logger on
rtp set debug on What is a good small-office setup and test checklist?
For reception plus 5 to 8 staff, use one lot, 8 slots, and one shared pickup group. Keep it simple: staff remember one parking code and one pickup code.
Reception gets the slot BLFs because that desk parks the most calls. Give each staff phone BLFs for the colleagues they cover most.
Choose the timeout from real behavior: 45 seconds suits a small office where people are nearby; extend it to 90 seconds or more if staff work on several floors. Music on hold for parked calls is set with the Parked Music Class (parkedmusicclass in res_parking.conf), so verify the class exists or callers hear silence.
- Set all extensions to Call Group 1 and Pickup Group 1.
- Create the parking lot with extension 70 and 8 slots.
- From extension A, call extension B; before B answers, press the BLF key on C and confirm the call moves to C.
- Answer a call on A, blind transfer to 70, note the slot, and retrieve from B by dialing it.
- Park another call and leave it; confirm it rings back to the parker after the timeout.
- Run core show hints and confirm each BLF key matches a hint entry.
Common questions
Why does *8 pickup not work for calls coming in from a trunk?
Group pickup only matches calls ringing at an extension in your pickup group. If the inbound call goes through a ring group or queue, the ringing channel may not carry the group, so use directed pickup (** plus extension) instead.
Can I change the parking and pickup codes?
Yes. The pickup codes can be changed under Settings > Feature Codes, and the parking extension and slots under Applications > Parking Lot. Remember to update any BLF keys and Apply Config afterward.
Do parked calls survive an Asterisk reload?
No. Parked calls live in memory, so a full restart drops them. A module or dialplan reload normally leaves them, but avoid reloading res_parking while calls are parked.
How many slots do I need?
Eight covers most small offices. Count the most calls you would plausibly hold at once and add a margin, because a full lot rejects new parks.