Skip to main content

Visual Call Park

Simplify parking and retrieving calls (from your PBX) for users without the need for them to remember and dial the feature shortcodes

Written by Alex Brainin
Parking slots in the Ringotel desktop app

Call Park feature allows you to put a call on hold and retrieve it from another extension or a device.

Note:

Please refer to your PBX documentation/configuration to check if the call park feature is available and configured.

With the Ringotel Visual Call Park feature, users can park a call into designated parking slots configured in your PBX and Ringotel settings by simply pressing the buttons on their softphone app.

In the Ringotel Shell portal, you can configure the Visual Call Park feature for each connection. It allows you to set up different parking slots for different groups of users. For example, one organization(department) can use slots from 1 to 5, and the other one can use slots from 6 to 10, etc. Ringotel Call Park provides the following benefits out-of-the-box:

  • Different parking slots for a different set of users;

  • Automatic notification of users within an organization(connection) about the parked calls;

  • Users can retrieve the parked calls from any device by simply pressing a button on the notification;

  • Shows parking slot BLF status in real-time;

  • Provides Caller ID after retrieving a parked call;

How to set up

Follow these steps to configure the Visual Call Park feature in your Ringotel Shell portal:

  1. In organization, select a Connection and navigate to the Features tab.

  2. Scroll down to the Visual Call Park section.

  3. Select from the list of presets to auto-fill settings based on the default configuration in some PBXs. It could vary depending on your PBX configuration.

  4. Alternatively, fill in the options described below:

    1. Call Park Prefix (optional) - added before the parking slot number. E.g., “*”.

    2. Call Park Retrieve Prefix (optional) - added after the parking slot number. E.g., “*”.

    3. BLF subscription prefix (optional) - required to subscribe for BLF in some PBX systems.

  5. Add the list of Parking slots that will be available to Ringotel users to park the calls into. Click + Add slot to add more parking slots.

    1. Label (required) - short description of the parking slot. E.g., “Park 1“ or “Line 1“.

    2. Number (required) - extensions/slot number. E.g., “5901“ or “7001“.

  6. Click Save changes.

Note:

Already logged in Ringotel users will need to log out and login back again into their apps to apply changes.

How to park a call

  1. To park a call, use a call transfer button from the active call panel on your device

iOS

Android

Desktop

2. If the Call Park feature is enabled for your accounts, select a parking slot where you would like to park a call.

Note:

Only available parking slots are listed. If all parking slots are busy, you will not see any parking slots in the list.

iOS

Android

Desktop

3. All users within the same connection profile (ask your system admin for more details regarding the connection profiles) will now receive a notification about a waiting call in a parking slot.

Retrieve a parked call

  1. Navigate to the Contacts tab (Users tab in the PC/Mac app) and select a parking slot to retrieve a call.

iOS

Android

Desktop

2. Confirm action in the pop-up window and you should now connect with the parked call.

Troubleshooting

Issue

In certain FusionPBX configurations, the valet parking feature may fail to operate correctly when calls are parked using the SIP REFER method.

The issue is caused by the default valet_park dialplan regex, which may not correctly parse the Refer-To header in this format:

sip:park+*5901@domain.com:5060

Where to make changes:

In FusionPBX, go to: Dialplan → Dialplan Manager

Open the dialplan entry: valet_park

Then click: XML

Edit the XML and update the required regex.

What needs to be changed:

1.Update the Refer-To host parsing regex
Find this condition:

<condition field="${sip_refer_to}" expression="(?:sip:)?@([^:]+)(?::\d+)?" break="never"> 	
<action application="set" data="referred_by_host=$1" inline="true"/> </condition>

Replace it with:

<condition field="${sip_refer_to}" expression="(?:sip:)?[^@]+@([^:;>]+)(?::\d+)?" break="never"> 	
<action application="set" data="referred_by_host=$1" inline="true"/> </condition>

What this change does

This change updates the regex used to parse the Refer-To header.
The original regex may not correctly detect the domain when Refer-To contains a SUP URI like:

sip:park+*5901@domain.com:5060

The updated regex correctly extracts the domain from this value, so FusionPBX can use the correct valet parking context.

Optional: upgrade the parking number regex

The original regex usually matches parking numbers like:

*5901
park+*5901

Originaly:

^(park)?\+?\*(59(0[1-9]|[1-9][0-9]))$

Updated:

^(park\+)?\*?(59[0-9]{2})$

The updated regex allows more formats:

5901
*5901
park+5901
park+*5901

Important: this version also allows 5900.

Full updated XML example:

<extension name="valet_park" continue="false" uuid="731c41db-c777-4b3d-b1e6-dd56237741cf">
<condition field="destination_number" expression="^(park\+)?\*?(59(0[1-9]|[1-9][0-9]))$" break="never"/>

<condition field="${sip_refer_to}" expression="^.+$" break="never"/>

<condition field="${sip_refer_to}" expression="(?:sip:)?[^@]+@([^:;>]+)(?::\d+)?" break="never">
<action application="set" data="referred_by_host=$1" inline="true"/>
</condition>

<condition field="${sip_h_Referred-By}" expression="(?:sip:)?(\d+)(?:@.*)?" break="never">
<action application="set" data="referred_by_user=$1" inline="true"/>
</condition>

<condition field="destination_number" expression="^(park\+)?\*?(59(0[1-9]|[1-9][0-9]))$" break="never"/>

<condition field="${referred_by_user}" expression="^.+$" break="never">
<action application="set" data="valet_context=${referred_by_host}" inline="true"/>
<anti-action application="set" data="valet_context=${domain_name}" inline="true"/>
</condition>

<condition field="destination_number" expression="^(park\+)?\*?(59(0[1-9]|[1-9][0-9]))$" break="never">
<action application="set" data="park_in_use=false" inline="true"/>
<action application="set" data="park_lot=$2" inline="true"/>
<action application="info" data=""/>
</condition>

<condition field="destination_number" expression="^(park\+)?\*?(59(0[1-9]|[1-9][0-9]))$"/>

<condition field="${referred_by_user}" expression="^.+$" break="never">
<action application="set" data="valet_info_park=${valet_info park@${valet_context}}|\*${park_lot}" inline="true"/>
<action application="set" data="park_in_use=${regex ${valet_info park@${valet_context}}|\*${park_lot}}" inline="true"/>
</condition>

<condition field="${park_in_use}" expression="true" break="never">
<action application="transfer" data="${referred_by_user} XML ${referred_by_host}"/>
<anti-action application="set" data="effective_caller_id_name=${cond ${regex ${direction} | inbound} == true ? 'park#${caller_id_name}' : 'park#${callee_id_name}'}" inline="true"/>
<anti-action application="set" data="valet_parking_timeout=900"/>
<anti-action application="set" data="valet_hold_music=${hold_music}"/>
<anti-action application="set" data="valet_parking_orbit_exten=${cond ${regex ${referred_by_user} | ^$} == true ? ${sip_from_user} : ${referred_by_user}}"/>
<anti-action application="answer" data=""/>
<anti-action application="valet_park" data="park@${valet_context} *${park_lot}"/>
</condition>
</extension>

After applying the change

After saving the XML:

Save → Reload XML

Then test call parking again.

The expected result is that FusionPBX correctly parses the Refer-To header, extracts the host/domain, and parks the call in the correct valet parking context.

Did this answer your question?