Skip to main content

ValetParkCall

Posted by dozment on Mon, 01/28/2008

At some point along the way a script for ValetParkCall appeared in my list of scripts. I have installed ValetParkCall, but I can't figure out how to make it work. Has anyone used it? Any tips on making it work?


Submitted by eeman on Mon, 01/28/2008 Permalink

its for multi tenant systems. Create a feature extension for valetpark another feature extension for valet unpark. In its original form it prompts you to pick a parking extension to park the call, the complete the attended transfer. To unpark the call dial the unpark extension and enter the room number.

you can also clone the script and change the behavior. I am considering just a single extension per tennant and doing away with the 'prompt for extension' bit entirely.

Submitted by dozment on Tue, 01/29/2008 Permalink

UPDATE: I think my problem with this could be a transfer issue on my phone. When I posted this I was testing with a Bria softphone. I just realized that I can't transfer calls from Bria. Sorry for the confusion.

Thanks. I'm using multi-tenant, so it's what I need. How is it initiated? Do you transfer the caller to the ValetPark feature extension?

Do the park extensions have to be defined somewhere? This is what I have in features.conf.

[general]

parkext => 700

parkpos => 701-704

Here's what my extensions looks like. Should this work?

exten => _*43.,1,Macro(tl-unpark) ; Unpark Call

exten => _*42.,1,Macro(tl-park,) ; Call parking test 2

For some reason it isn't working correctly. I will add the log entries as soon as I can capture them.

Submitted by eeman on Tue, 01/29/2008 Permalink

my feature extensions

exten => 700,1,Macro(bgnv-valetpark,240) ; Valet Call Parking

exten => 701,1,Macro(bgnv-valetunpark) ; Valet Parking Call Retrieve

i cloned and modified

[macro-bgnv-valetpark]

exten => s,1,Set(MY_CHAN=${CUT(BLINDTRANSFER,/,2)})

exten => s,n,Set(MYEXTENSION=${CUT(MY_CHAN,-,1)})

exten => s,n,Set(TIMEOUT=${ARG1})

exten => s,n,GotoIf($["${TIMEOUT}" != ""]?park)

exten => s,n,Set(TIMEOUT=360)

exten => s,n(park),ValetParkCall(1|${tenant}|${TIMEOUT}|${MYEXTENSION}|1|from-inside${TL_DASH}${tenant})

the one argument is the number of seconds before rining back the channel that parked the call.

and unpark

[macro-bgnv-valetunpark]

exten => s,1,ValetUnParkCall(1|${tenant})

the difference between my scripts and the default is that in my example each tenant will have just a single slot to park a call, but the up-trade of that is no additional keys must be pressed to select the slot when parking and/or unparking a channel.

you could mix and mach... perhaps a extension 700 calling ValetParkCall with 'query' as your slot and

exten => _7XZ,1,ValetUnParkCall(${EXTEN}|${tenant})

to retrieve them without having to enter the slot number on retrieval. However, that scenario requires the parker to type in 701, 702 etc somewhat quickly and the caller often hears his slot number played back to him.

For my company, weighing all the options, it seemed just giving 1 slot per tenant seemed the simplest and best solution. I haven't run into a tenant that ever parked more than 1 call at a time and those that might I should probably be quoting them their own PBX and buy IAX trunks from me.

Submitted by dozment on Tue, 01/29/2008 Permalink

Thanks for the update. This is helpful. But, I'm still missing something.

I cut and pasted your scripts into mine and set up feature code extensions 700 and 701 as you described.

[macro-env-park]

exten => s,1,Set(MY_CHAN=${CUT(BLINDTRANSFER,/,2)})

exten => s,n,Set(MYEXTENSION=${CUT(MY_CHAN,-,1)})

exten => s,n,Set(TIMEOUT=${ARG1})

exten => s,n,GotoIf($["${TIMEOUT}" != ""]?park)

exten => s,n,Set(TIMEOUT=360)

exten => s,n(park),ValetParkCall(1|${tenant}|${TIMEOUT}|${MYEXTENSION}|1|from-inside${TL_DASH}${tenant})

[macro-env-unpark]

exten => s,1,ValetUnParkCall(1|${tenant})

exten => 700,1,Macro(env-park,240) ; Park

exten => 701,1,Macro(env-unpark) ; Unpark

After reloading I placed a call in to an extension, put the call on hold from my softphone and transfered it to extension 700.

-- Called 101-env

-- SIP/101-env-085df100 is ringing

-- SIP/101-env-085df100 answered SIP/dozment-b7d00470

-- Started music on hold, class 'EnvClassGuit-env', on channel 'SIP/dozment-b7d00470'

-- Stopped music on hold on SIP/dozment-b7d00470

== Spawn extension (macro-tl-userexten-base, s, 146) exited non-zero on 'SIP/dozment-b7d00470' in macro 'tl-userexten-base'

== Spawn extension (macro-tl-userexten-base, s, 146) exited non-zero on 'SIP/dozment-b7d00470' in macro 'tl-stdexten'

== Spawn extension (macro-tl-userexten-base, s, 146) exited non-zero on 'SIP/dozment-b7d00470'

-- Started music on hold, class 'EnvClassGuit-env', on channel 'SIP/dozment-b7d00470'

== Parked SIP/dozment-b7d00470 on 701@parkedcalls. Will timeout back to extension [macro-tl-userexten-base] s, 146 in 180 seconds

-- Added extension '701' priority 1 to parkedcalls

-- Playing 'digits/7' (language 'en')

-- Playing 'digits/0' (language 'en')

-- Playing 'digits/1' (language 'en')

At this point the CLI says I have one parked call. Great!

um-882*CLI> show parkedcalls

Num Channel (Context Extension Pri ) Timeout

701 SIP/dozment-b7d00470 (macro-tl-userexten-base s 146 ) 172s

1 parked call.

I then dialed 701 to unpark the call and was told there were no calls parked at that extension (Note that another call came in at this point, and I attempted to strip it out. If anything is missing I stripped out too much).

-- Executing [701@from-inside-env:1] Macro("SIP/101-env-b7d1a948", "tl-set-variables2|from-inside-redir-env|env") in new stack

-- Executing [s@macro-tl-set-variables2:1] Set("SIP/101-env-b7d1a948", "__tenant=env") in new stack

-- Executing [s@macro-tl-set-variables2:2] Set("SIP/101-env-b7d1a948", "CDR(userfield)=env") in new stack

-- Executing [s@macro-tl-set-variables2:3] Set("SIP/101-env-b7d1a948", "__MOH=EnvClassGuit-env") in new stack

-- Executing [s@macro-tl-set-variables2:4] GotoIf("SIP/101-env-b7d1a948", "1 ?setmoh") in new stack

-- Goto (macro-tl-set-variables2,s,6)

-- Executing [s@macro-tl-set-variables2:6] SetMusicOnHold("SIP/101-env-b7d1a948", "EnvClassGuit-env") in new stack

-- Executing [s@macro-tl-set-variables2:7] Goto("SIP/101-env-b7d1a948", "from-inside-redir-env|701|1") in new stack

-- Goto (from-inside-redir-env,701,1)

== Channel 'SIP/101-env-b7d1a948' jumping out of macro 'tl-set-variables2'

-- Executing [701@from-inside-redir-env:1] Macro("SIP/101-env-b7d1a948", "env-unpark") in new stack

-- Executing [s@macro-env-unpark:1] ValetUnparkCall("SIP/101-env-b7d1a948", "1|env") in new stack

-- Playing 'pbx-invalidpark' (language 'en')

But, the CLI says I still have a parked call.

um-882*CLI> show parkedcalls

Num Channel (Context Extension Pri ) Timeout

701 SIP/dozment-b7d00470 (macro-tl-userexten-base s 146 ) 65s

My features.conf file in case it has anything to do with this...

[general]

parkext => 700 ; What extension to dial to park

parkpos => 701-704 ; What extensions to park calls on. These needs to be

; numeric, as Asterisk starts from the start position

; and increments with one for the next parked call.

context => parkedcalls ; Which context parked calls are in

parkingtime => 180 ; Number of seconds a call can be parked for

; (default is 45 seconds)

transferdigittimeout => 3 ; Number of seconds to wait between digits when transfering a call

courtesytone = beep ; Sound file to play to the parked caller

; when someone dials a parked call

xfersound = beep ; to indicate an attended transfer is complete

xferfailsound = beeperr ; to indicate a failed transfer

;adsipark = yes ; if you want ADSI parking announcements

;findslot => next ; Continue to the 'next' free parking space.

; Defaults to 'first' available

pickupexten = ** ; Configure the pickup extension. Default is *8

featuredigittimeout = 500 ; Max time (ms) between digits for

; feature activation. Default is 500

[featuremap]

blindxfer => ## ; Blind transfer

atxfer => #* ; Attended transfer

disconnect => #0 ; Disconnect

automon => #9 ; One Touch Record

[applicationmap]

; Note that the DYNAMIC_FEATURES channel variable must be set to use the features

; defined here. The value of DYNAMIC_FEATURES should be the names of the features

; to allow the channel to use separated by '#'. For example:

; Set(DYNAMIC_FEATURES=myfeature1#myfeature2#myfeature3)

;

;testfeature => #9,callee,Playback,tt-monkeys ;Play tt-monkeys to

;callee if #9 was pressed

Submitted by eeman on Tue, 01/29/2008 Permalink

you have parkedcalls included somewhere and they are conflicting. you dont want parkedcalls included anywhere in a MTE dialplan. remove all occurences of include => parkedcalls

Submitted by dozment on Wed, 01/30/2008 Permalink

I had no instances of parked calls.

[asterisk]# grep include => parkedcalls *

grep: =: No such file or directory

[asterisk]#

I did have references to call parking in features.conf. Not sure if that's supposed to be there, so I commented it out.

[general]

;parkext => 700 ; What extension to dial to park

;parkpos => 701-704 ; What extensions to park calls on. These needs to be

; numeric, as Asterisk starts from the start position

; and increments with one for the next parked call.

;context => parkedcalls ; Which context parked calls are in

;parkingtime => 180 ; Number of seconds a call can be parked for

; (default is 45 seconds)

I can still park a call by transferring it to 700, but when I dial 701 to unpark it I'm told that there are no parked calls at that extension.

Submitted by eeman on Wed, 01/30/2008 Permalink

== Parked SIP/dozment-b7d00470 on 701@parkedcalls. Will timeout back to extension [macro-tl-userexten-base] s, 146 in 180 seconds

-- Added extension '701' priority 1 to parkedcalls

-- Playing 'digits/7' (language 'en')

-- Playing 'digits/0' (language 'en')

-- Playing 'digits/1' (language 'en')

this indicates that parkedcalls is still being called. you can change your parkext to something else so that your ext 700's arent overlaping or change park context name. your grep wont work the way you think it will due to = and > operators. try just 'grep parkedcalls *'

Submitted by dozment on Thu, 01/31/2008 Permalink

Got it! I did find an include for parked calls in extensions.ael. Removed that and did a module reload, and it still didn't work. I then changed the park/unpark extensions to something other than 700/701 as you suggested, and it's working. I think for now I'm going to leave it the way it is and declare success.

eeman, thanks for all of your help.

Submitted by IVSCOMM on Mon, 07/07/2008 Permalink

In the script description it says: Script Description: Park call using ValetParkCall command. Requires app_valetparking application - make sure this application is installed.

Where do I find the app_valetparking application?

Submitted by George on Thu, 07/17/2008 Permalink

Erik,

first thanks for all the help in your posts..

I tested your script above and it works great, music on hold (parked), no announcement if you hit transfer at the wrong time ect..

The one thing I see as a problem is someone gets parked, another call comes in and someone else picks up for example and they park that call. The system leads that person to believe the call was parked but because there already was a parked call the system hangs up on the caller.

did I miss something / do something wrong or is this by design..?

Thanks

George

Submitted by eeman on Fri, 07/18/2008 Permalink

I only let my tenants park a single call, its a compromise considering the alternative is a broken system that lets tenants unpark other calls. Multi-context call parking is slated to get incorporated in 1.6.1-ish.

Submitted by George on Mon, 07/21/2008 Permalink

I understand and agree with you 100%, I just don't like the idea of a call getting kicked to the curb with out letting the party parking the call know.

I'm going to have to think about offering it until 1.6.#, it might be a while since we are only on 1.4.?

Thanks

George

Submitted by dozment on Mon, 09/22/2008 Permalink

I have finally had time (and a need) to get back to call parking, and I can't make it work. Eric, I have I believe I my valetparkcall script set up exactly as you describe above. I place a call from one extension to another. From the receiving extension I hit #* to transfer the call. It asks me to enter an extension and then press pound. I believe it is playing vm-extension.

I enter 1, press # and hang up. Now, from the other phone (the one that initiated the call) I hear "extension 1, extension 1, extension 1" repeated until that extension drops the call. I have another extension set up to pick up the calls, but I don't seem to be able to get them.

show valetparkedcalls shows that I am parking the call

um-882*CLI> show valetparkedcalls

Num Channel (Context Extension Pri ) Elapsed Timeout LotName

2 Local/*98@from-inside-env-d49f,2 (from-inside-env 101 1 ) 53s 187s env

(Note: in this case I responded to the vm-extension prompt with 2 instead of 1).

Any idea what I could be missing this time? If I'm using valetpark do I need the park extensions defined in features.conf? Is this still the best way to do call parking with MTE?

Submitted by dozment on Tue, 09/23/2008 Permalink

There is no reference to include=>parkedcalls in my etc/asterisk directory. The only reference to parkedcalls is comments on the valetpark/unpark macros.

Submitted by dozment on Tue, 10/14/2008 Permalink

I finally got this working, and I've been playing around with a little tweak that I made to Eric's script. First, thanks for all of your help with it, Eric.

Here is my ValetCallPark script as I have it now.

exten => s,1,Set(MY_CHAN=${CUT(CHANNEL,/,2)})

exten => s,n,Set(MYEXTENSION=${CUT(MY_CHAN,-,1)})

exten => s,n,NoOp(${MYEXTENSION})

exten => s,n,Set(TIMEOUT=${ARG1})

exten => s,n,GotoIf($["${TIMEOUT}" != ""]?park)

exten => s,n,Set(TIMEOUT=360)

exten => s,n(park),ValetParkCall(auto|${tenant}|${TIMEOUT}|${MYEXTENSION}|1|from-inside${TL_DASH}${tenant})

Instead of sending the call to slot 1 as Eric does I'm sending it to the auto slot so that I can park multiple calls.

Then, I use ValetParkList to unpark the call. When the feature code is dialed to unpark the call ValetParkList plays a list of slots in which calls are parked. The user presses * when he hears the call that he wants to unpark.

Here's my unpark script.

exten => s,1,ValetParkList(${tenant})

So, the call plays out like this:

1) Call comes in and is answered on extension 100.

2) 100 transfers the call to the ValetPark feature code (*98 in my case).

3) The system plays back the parking slot into which the call is parked (ie, "Extension 1")

4) The person at extension 100 notifies the intended recipient of the call that a call is parked at slot 1.

5) The third person dials the retrieve feature code (*99) and hears a list of parked calls (in this case he hears "1").

I played around with a variation where I parked the call at slot ${MYEXTENSION}. I thought it might make it easier to understand if the attended could announce, "I have a call parked for you at my extension", and then have the intended recipient pick it up from, say, slot 100.

The downside of this approach is that I can only park one call per extension. If I use "auto" to set the slot I can have one person park multiple calls simultaneously.

Eric, I don't understand what you are doing in the first line of your script, but my calls weren't coming back correctly after the timeout.

Submitted by eeman on Wed, 10/15/2008 Permalink

I set mine up to blind transfer to 700. In order to know who to ring back its taken from the BLINDTRANSFER variable. My users blind-transfer to 700 to park and dial 701 to unpark. They werent sophisticated enough to handle multiple slots where they have to listen to them in order to retrieve them.

multi-context parking slots is coming in 1.6.1 btw. Ive seen the code in SVN. I asked Mark Spencer for this personally July 07, so I'm glad its finally coming.

Submitted by raven on Thu, 07/02/2009 Permalink

I am about to load a new MT and wanted to get this app_valetpark. But now that link at freeswitch shows up as 403 Forbidden from anywhere I try. Is it available somewhere else, does any one have a copy, or is it still even required, months later?

Submitted by raven on Mon, 07/06/2009 Permalink

Thanks, big help there. Now if I can just figure out how to compile it... I'll search this forum and check back if I can't figure it out.

Submitted by eeman on Mon, 07/06/2009 Permalink

it may fail during compile depending on if they ever implemented the patch I submitted or not. It stopped compiling around 1.4.23 or so. The fix was simply list the #include files in a different order.

Submitted by eeman on Tue, 07/07/2009 Permalink

i have only tested it up to 1.4.24 but yes

--- app_valetparking.c.orig 2008-08-18 12:29:06.000000000 -0400

+++ app_valetparking.c 2009-03-11 18:29:49.000000000 -0400

@@ -23,7 +23,22 @@

  * OTHER DEALINGS IN THE SOFTWARE.

  */

 

+#include "asterisk.h"

+

+#include <stdlib.h>

+#include <errno.h>

+#include <unistd.h>

+#include <string.h>

+#include <stdlib.h>

+#include <stdio.h>

+#include <sys/time.h>

+#include <sys/signal.h>

+#include <netinet/in.h>

+

+#include <pthread.h>

+

 #include <stdio.h>

+

 #include <asterisk/lock.h>

 #include <asterisk/utils.h>

 #include <asterisk/file.h>

@@ -43,22 +58,11 @@

 #include <asterisk/cli.h>

 #include <asterisk/app.h>

 #include <asterisk/manager.h>

-#include <stdlib.h>

-#include <errno.h>

-#include <unistd.h>

-#include <string.h>

-#include <stdlib.h>

-#include <stdio.h>

-#include <sys/time.h>

-#include <sys/signal.h>

-#include <netinet/in.h>

-

-#include <pthread.h>

-

-#include "asterisk.h"

 

 ASTERISK_FILE_VERSION(__FILE__, "$Revision: 1.23 $")

 

+#define AST_MODULE "valet_parking"

+

 #define DEFAULT_VALETPARK_TIME 45000

 

 static struct ast_channel *valet_request(const char *type, int format, void *data, int *cause);

Submitted by raven on Fri, 07/10/2009 Permalink

I searched for the last few days on how and where to compile this app_valetpark.c file. Could anyone tell me where it goes in the make process? Are there any instructions or a link someone could send me?

Submitted by eeman on Fri, 07/10/2009 Permalink

it goes in the apps directory of the source tree of asterisk then do a ./configure, make menuselect, and make

Submitted by dozment on Tue, 08/04/2009 Permalink

I think I just found a problem with this using the same script that I listed earlier. Can someone try to confirm it? I'm running asterisk v 1.4.23.

1) Call comes in from outside to extension 110.

2) 110 parks call

3) 110 calls 111

4) While 110 and 111 are talking the ringback timeout expires on the parked call. It tries to call 110 and gets this...

[Aug 4 18:15:47] WARNING[17755]: app_dial.c:1253 dial_exec_full: Skipping dialing interface 'SIP/110-env' again since it has already been dialed

This only seems to happen if the parked call originates from the outside.

Submitted by eeman on Tue, 08/04/2009 Permalink

there was no one at the office available to test parking the call. My script is a bit different though. I still have the single slot script and my multiple slot script looks like this...

exten => s,1,Macro(tl-set-myvariables)

exten => s,n,Set(TIMEOUT=${ARG1})

exten => s,n,GotoIf($["${TIMEOUT}" != ""]?park)

exten => s,n,Set(TIMEOUT=360)

exten => s,n(park),ValetParkCall(auto|${tenant}|${TIMEOUT}|${MYEXTENSION}|1|from-inside${TL_DASH}${tenant})

but I am not using that one at the office.

Submitted by dozment on Tue, 08/04/2009 Permalink

Ok, Erik! You made me laugh! I think most of my posts here start with "I'm running version..." And, you always reply with "You should not be running...". Thanks for keeping me on my toes! Don't have anyone using pick up right now, and most everything else is working. So, I've stayed here.

I think the problem is that I'm returning the call to the same extension to which it was sent initially. It works if the parked call is from inside, but not if it comes in from outside.

I found the error in app_dial.c and app_queue.c App_queue.c also has this...

02731 * 2. Iterate trough the members of the queue, creating a callattempt corresponding to each member. During this

02732 * iteration, we also check the dialed_interfaces datastore to see if we have already attempted calling this

02733 * member. If we have, we do not create a callattempt. This is in place to prevent call forwarding loops. Also

02734 * during each iteration, we call calc_metric to determine which members should be rung when.

Submitted by eeman on Tue, 08/04/2009 Permalink

you're using aastra phones arent you? I am wondering if the same problem exists on a blind transfer instead of attended transfer... but aastra's cant do a true blind transfer. They instead do a 'blonde' transfer. A blind transfer is a redirect which behaves a lot differently (hence why original callerid sticks to the call etc). The bad news is the guy maintaining valetparking quit maintaining it. So fixing it in a means that it rings back the same way regular parking rings back is probably out. I wish i had a test platform to see where and if the 1.6 branch adopted muti-context parking. Russel said in a thread many months ago that it was going to be 1.6.1.x-ish but I saw the config options showing up as early as 1.6.0.x. I don't know if the feature itself ever evolved or if the config options were placeholders. Maybe for the short term set your timeout crazy high so that they don't get disconnected? Or redirect the timeout somewhere else (maybe an ivr?)

anyone using MTE with 1.6.x.x branch that I can see if call parking is multi-context or not?

Submitted by dozment on Tue, 08/04/2009 Permalink

I only have one customer with Aastra, and they don't really use any advanced features. If it rings they pick it up. Not much more than that. The rest of my customers use Polycom.

I set the timeout to 0, and it seems to have disabled the ring-back. That may be a decent work around. I also thought about ending it to an ivr or creating a variable for the extension that should receive the ring back.

Submitted by dozment on Tue, 08/04/2009 Permalink

Ok, I'm an idiot. app_valetparkcall is working perfectly as described above. I have my phones behind an Edgemarc 4500 router, and I swapped my router out with one that is licensed for two calls. When I was testing this I was tying up both of my allowed calls. So, the ring back wasn't able to come back in. Dang, I hate it when I do that! Tested it in a working configuration, and it works fine.

I did adjust my scripts slightly today, and I like the change. Here's what I have

Call park script (As before, ARG1 is the time in seconds until the call is returned to the original answering extension. Setting this to 0 seems to disable ring back.)

exten => s,1,Set(MY_CHAN=${CUT(BLINDTRANSFER,/,2)})

exten => s,n,Set(MYEXTENSION=${CUT(MY_CHAN,-,1)})

exten => s,n,NoOp(${MYEXTENSION})

exten => s,n,Set(TIMEOUT=${ARG1})

exten => s,n,GotoIf($["${TIMEOUT}" != ""]?park)

exten => s,n,Set(TIMEOUT=360)

exten => s,n(park),ValetParkCall(auto|${tenant}|${TIMEOUT}|${MYEXTENSION}|1|from-inside${TL_DASH}${tenant})

Call unpark script

exten => s,1,ValetUnParkCall(filo|${tenant})

This gives me the ability to park multiple calls. In the unparking script you can specify first-in-first-out (fifo) or first-in-last-out (filo) to tell it how to pull calls off of parking. I'm not dare going to suggest again that there is a problem with the code since I've already proven my incompetence tonight, but I fifo and filo seem to be reversed. With the unparking script set to pull in first-in-first-out order I get the last call parked first. Setting it to filo give me the oldest call first.

This seems to be working well.

Erik, as always, thanks for your good comments. Sorry to drag us down a dead end.

Dan

Submitted by eeman on Wed, 08/05/2009 Permalink

for multiple parking slots here is my park and unpark

exten 700 park:

exten => s,1,Macro(tl-set-myvariables)

exten => s,n,Set(TIMEOUT=${ARG1})

exten => s,n,GotoIf($["${TIMEOUT}" != ""]?park)

exten => s,n,Set(TIMEOUT=360)

exten => s,n(park),ValetParkCall(auto|${tenant}|${TIMEOUT}|${MYEXTENSION}|1|from-inside${TL_DASH}${tenant})

exten _70Z unpark:

exten => s,1,ValetUnParkCall(${MACRO_EXTEN:${ARG1}}|${tenant})

arg1 is invoking code length (incase someone doesnt want to stick with 700 and 701-709)

so when they hear a call is parked in slot 4 they dial 704 to unpark it.

Submitted by dozment on Wed, 08/05/2009 Permalink

How do you hear the slot the call is parked in when you park the call? Is it an attended transfer to 700? Right now we're doing a blind transfer to the parking lot, so we don't get the feedback.

Submitted by eeman on Wed, 08/05/2009 Permalink

attended trasfer will say 'one' or 'two' etc. in my one-slot-per-tenant solution I was using blind transfer since they didnt need to hear 'one' when they parked the call. Have you noticed that only polycom plays MOH when valetparking and when the call parker parks a second call the MOH stops? Apparently theres no MOH channel for valetparking and its a feature of polycom in that MOH plays while creating any sort of transfer that enables it.

Submitted by dozment on Wed, 08/05/2009 Permalink

I didn't see that problem with MOH. I have had two calls parked at a time, and both parked calls hear MOH. My unpark script pulls the oldest call off park. If I repark that call it becomes the newest call in the parking lot. Last night I was rotating through the parked calls, and always had MOH on every parked call. I was doing this with Polycom phones only. Anything I can do to help you chase this down?

I will take another look at using attended transfer. For now, I have Polycom softkeys set up for Park and Unpark, and they do blind transfers.

Submitted by eeman on Wed, 08/19/2009 Permalink

parking is like putting something on hold, except when you put someone on hold, only the phone that put it on hold can take it off hold. With parking you stick the call in a 'slot' and other phones can dial an extension to retrieve that call.

Submitted by agibson on Wed, 09/09/2009 Permalink

Erik wrote:

anyone using MTE with 1.6.x.x branch that I can see if call parking is multi-context or not?

I'm running PBX Manager on 1.6.0.6 and this is a desired feature. Let me know what you need.

I recompiled this build to include app_valetparking.c with the newer include order. It completed with no errors but asterisk is not listing it as an installed app and was selected in the menuselect.

Thanks,

Andy

Submitted by Denis Campq on Mon, 12/28/2009 Permalink

Had some time over the holidays to do a little testing with 1.6.1.11 new muti-context parking. This has been broken since 1.6.0.1 but seems to be working now on 1.6.1.11. I also just tested this with 1.6.1.12 also.

So far so good.

I am using the lastest ISO CentOS 5.3 and select 1.6 and complete the installation.

I then do an upgrade from asterisk 1.6.0.6 to 1.6.1.11 following standard installation steps.

Next step is to add a couple new call parking slots in features.conf.

features.cong
....
....
[general]
parkext => 700 ; What extension to dial to park
parkpos => 701-704 ; What extensions to park calls on. Need to be
; numeric, as Asterisk starts from the start
; and increments with one for the next parked call.

context => parkedcalls ; Which context parked calls are in
parkingtime => 60 ; Number of seconds a call can be parked for
; (default is 45 seconds)

;These are the new parking lots I created.

[parkinglot_Home] ; DC add for Tenant parking
context => from-inside-Home
parkpos => 801-810
;parkext => 800
findslot => next

[parkinglot_training] ; DC add for Tenant parking
context => from-inside-training
parkpos => 801-810
;parkext => 800
findslot => next

The context name need to start with parkinlot_xxxxxxxx I used the tenant name but it can be anything you want. I did not change the default parking number definded under general.

parkinglot=parkinglot_Home

I had to add this to each extension that will use the parking lot under the extension Other Options area.

I also had add an include statement under extension.include for each tenant.

include => parkinglot_Home ;DC

I think we should start a new thread on Asterisk 1.6 multi-tenant parking and end this thread.

I would be happy to explain what I did for thoes interested in testing the 1.6 parking capability for MT. It seems to be working well. Nothing like getting a few other eyes on this.

Denis Camp

Submitted by eeman on Mon, 12/28/2009 Permalink

It was never supposed to work in the 1.6.0 branch. well I have it running in 1.6.1.x, the rub is that theres some manual work required to get this working in MTE...

every sip extension has to define the parking lot as an extra arguement in other options..

parkinglot=parkinglot_tenantname

in features.conf you need

[parkinglot_tenantname]
context => parkedcalls-tenantname
parkingtime => 180
parkext => 700
parkpos => 701-704
findslot => next

and for the from-inside-redir-tenantname and from-inside-redir-tenantname-restricted based contexts in extension.include:

include => parkedcalls-tenantname after include => feature-extensions-tenantname

this has to be done manually for each and ever time you create a tenant. there will be no automation for this until the day we decide to never again support 1.4 and 1.6.0 versions of asterisk

Submitted by ryan.tuttle on Thu, 01/07/2010 Permalink

I have one thing I would like to add to the discussion. I would like to be able to setup BLF key's on a users phone to show them whether or not there is a parked call. I believe I've found out how to do this using the normal asterisk parking feature but I was wondering if anyone had tried to do this with valetparking. the sample below shows how to create an extension that would allow you to monitor calls parked on slot 71. Any thoughs?

exten => 71,hint,park:71@parkedcalls