Bind the Park action to an exact live channel
The AMI Park action operates on the named Channel, not an abstract call. Preserve node, release, loaded res_parking module, manager identity, ActionID, channel, Uniqueid, Linkedid, bridge, intended parking lot and policy owner before issuing it. Transfers and Local channels can replace a leg while the business call continues.
TimeoutChannel is where the parked call returns after timeout. AnnounceChannel only receives the parking announcement when bridged and, as the action reference says, has no bearing on the parked call state. An accepted response therefore is not proof that the correct call parked, a participant heard a slot, media continued or the eventual caller outcome succeeded.
Keep lot, space, access extension and timeout distinct
Parkinglot names the configured lot; ParkingSpace requests a position in that lot. A space already in use causes execution to continue at the next priority, so it is not a safe assertion that the requested slot was assigned. The access extension used to enter parking and the extension or application used to retrieve a call are separate dialplan concepts.
The AMI Timeout value is milliseconds, converted to seconds by the action; zero disables the timeout. That request value is distinct from the lot parkingtime and from remaining ParkingTimeout in an event. Record which layer supplied the effective value instead of silently comparing unlike units.
Inventory lots and calls without inventing completion proof
Parkinglots asks for all parking lots and says they are returned as a series of AMI events. ParkedCalls lists parked calls and accepts an optional exact ParkingLot filter. Preserve each raw AMI frame and its ActionID, and treat lot configuration and parked-call membership as different snapshot sets.
The generated action pages reviewed here do not document a terminal completion event or detailed response framing for either action. Do not invent a named completion event, infer completeness from socket silence or join concurrent lists only by arrival time. Verify the raw framing and terminal behavior on the installed Asterisk branch before an inventory collector declares a snapshot complete.
Interpret each lifecycle event by its documented reason
ParkedCall is raised when a channel is parked and carries parkee identity, ParkerDialString, lot, space, remaining timeout and parking duration. UnParkedCall means the channel left parking because it was retrieved and reconnected, and includes parker and retriever identities. ParkedCallGiveUp means the parked channel hung up without being answered; ParkedCallTimeOut means its timer expired.
Correlate by node, ParkeeUniqueid, ParkeeLinkedid, lot, space and bounded time. The AMI specification requires the parked event before the channel enters the parking bridge, and a bridge event still is not media proof. No lifecycle event alone proves that an announcement was audible, the intended user retrieved the call, both parties exchanged audio or the business outcome succeeded.
Model retrieval and timeout routing explicitly
The ParkedCall dialplan application selects a lot from its explicit argument, then PARKINGLOT, then CHANNEL(parkinglot), then the default lot. A supplied space selects that parked call; without a space it retrieves the first available call. An ambiguous retrieval can therefore connect a different waiting call even when the dialplan runs successfully.
In branch 22 res_parking, comebacktoorigin=yes dials the parker on timeout; otherwise comebackcontext and fallback behavior apply. Timeout variables include PARKING_SPACE, PARKEDLOT, PARKER and PARKER_FLAT. When FreePBX owns the configuration, reconcile its generated lot, context and feature-code state before changing Asterisk files directly.
Validate one disposable lifecycle and negative cases
In an approved nonproduction window, use one disposable call. Capture the exact channel, action response, actual lot and space from ParkedCall, list snapshot framing, bridge sequence, retrieval request, retriever identity, UnParkedCall and authorized two-way media outcome. Separately test a short timeout and a caller hangup to distinguish ParkedCallTimeOut from ParkedCallGiveUp; test an occupied or invalid requested space without risking a real caller.
No PBX, module, config, manager account, session, parking lot, channel, bridge, event stream, endpoint, packet, audio or live call was inspected or tested for this guide. Documentation cannot establish availability, compatibility, announcement audibility, retrieval correctness, media quality or generated FreePBX behavior.
Sources & applicability
Primary references for the technical details above. Operational examples and planning checklists are VoIP.info editorial guidance.
Examples require adaptation to your topology. No live PBX or hardware testing is claimed.