FreePBX is great.
I wanted to set up multiple parking lots and direct calls into a particular lot, but I could not find how to do this in FreePBX. I knew Asterisk was supposed to support it. I figured it out and will show my work here.
The reason is if you have multiple targets (salespeople, doctors, etc), and a call comes into reception. If you only have one parking lot, the receptionist parks the call and gets a parking spot and announces it. If the target cannot be found before the call reverts, the receptionist may park the call again, but may get a different parking spot. The target now has to be told of the new spot.
I think a better approach is to give each target their own parking lot. Then, when a call comes in, the receptionist parks it in the target's parking lot and announces that. The target then will always know where their call is parked. If it reverts, the receptionist can send it back to the same lot.
I implemented 64 parking lots but have cut it down for this posting. In the following example, there are 8 parking lots, each holding up to 9 calls. The parking lots are numbered 22, 23, 24, 25, 26, 27, 28 ,29. To park a call, transfer it to the extension 222, or 223, or 224 etc. To retrieve the call, you dial 422, 423, 424 etc.
There are two files in /etc/asterisk you need to have. You can either login as root and edit them, or, I think there is some sort of FreePBX module that allows editing of such custom files.
The file features_general_custom.conf
================================================================
[parkinglot_22]
context => parkedcalls
parkext => 222
parkpos => 7221-7229
parkext_exclusive=yes
parkingtime=20
comebacktoorigin=no
parkinghints=yes
[parkinglot_23]
context => parkedcalls
parkext => 223
parkpos => 7231-7239
parkext_exclusive=yes
parkingtime=20
comebacktoorigin=no
parkinghints=yes
[parkinglot_24]
context => parkedcalls
parkext => 224
parkpos => 7241-7249
parkext_exclusive=yes
parkingtime=20
comebacktoorigin=no
parkinghints=yes
[parkinglot_25]
context => parkedcalls
parkext => 225
parkpos => 7251-7259
parkext_exclusive=yes
parkingtime=20
comebacktoorigin=no
parkinghints=yes
[parkinglot_26]
context => parkedcalls
parkext => 226
parkpos => 7261-7269
parkext_exclusive=yes
parkingtime=20
comebacktoorigin=no
parkinghints=yes
[parkinglot_27]
context => parkedcalls
parkext => 227
parkpos => 7271-7279
parkext_exclusive=yes
parkingtime=20
comebacktoorigin=no
parkinghints=yes
[parkinglot_28]
context => parkedcalls
parkext => 228
parkpos => 7281-7289
parkext_exclusive=yes
parkingtime=20
comebacktoorigin=no
parkinghints=yes
[parkinglot_29]
context => parkedcalls
parkext => 229
parkpos => 7291-7299
parkext_exclusive=yes
parkingtime=20
comebacktoorigin=no
parkinghints=yes
================================================================
and the file extensions_custom.conf
================================================================
[park-return-routing-custom]
exten => _7NNZ,1,Goto(park-return-routing,700,1)
[park-hints-custom]
exten => _4NN,1,Macro(parked-call,,parkinglot_${EXTEN:1})
exten => _4NN,hint,park:7${EXTEN:1}1@parkedcalls&park:7${EXTEN:1}2@parkedcalls&park:7${EXTEN:1}3@parkedcalls&park:7${EXTEN:1}4@parkedcalls&park:7${EXTEN:1}5@parkedcalls&park:7${EXTEN:1}6@parkedcalls&park:7${EXTEN:1}7@parkedcalls&park:7${EXTEN:1}8@parkedcalls&park:7${EXTEN:1}9@parkedcalls
================================================================
Each target can have up to 9 calls parked, and, will be able to see if there is anyone there with a busy lamp field on the 4nn extension.