This post explains the possibility using Enhanced Feature Keys / EFK macros to change softkey functions or remove softkeys.
Many other examples involving Soft Keys can be found using the Forum Search.
NOTE: This feature is available on VVX Business Media, VVX IP Phones, Poly Trio since UC Software 5.7.2 and CCX Phones when using openSIP or Skype for Business Base Profile.
Older legacy SoundPoint IP 32x/33x, 450, 550, 560, 650, and 670, SoundStation IP 5000, 6000 and 7000, and VVX 1500 running UCS 3.3.0 or newer support softkeys.
Please be aware that limited functionality on certain Platforms may occur if an older Version like SIP 3.2.x or older is used.
This functionality has only been implemented since SIP 3.0.0 and older Versions are unable to change the Softkey functionality as described below (No support for SPIP300 & SPIP500).
What is an EFK ?
Enhanced feature keys (EFK) enables you to customize the functions of a phone's line, soft, and hard keys to assign frequently used functions to keys or to create menu shortcuts to frequently used phone settings.
Enhanced feature key functionality is implemented using star code sequences like *89 and SIP
messaging. Star code sequences that define EFK functions are written as macros that you apply to line and soft keys. The EFK macro language was designed to follow current configuration file standards and to be extensible.
In addition, you can configure an EFK as a line key allowing the users to execute the macro action
defined to that line key. When this feature is enabled, all the EFK macros that are configured using
efk.eklist parameter and has efk.efklist.x.status="1" will display as a line key.
You can enable or disable this feature using the configuration parameters or importing the configuration file using the Web Configuration Utility.
Any change to a Softkey always requires:
feature.enhancedFeatureKeys.enabled="1"
Usually utilizing the efk.efklist.x would require in addition the ability to access the Phone Directory as shown => here <= to be able to assign the EFKList to a spare directory Entry.
Since VVX UC Software 5.7.0 the new parameter feature.EFKLineKey.enabled="1" => here <= can be used instead to assign this to a free line key.
Possible Keys are:
Custom soft keys can be added in the following call states:
Since VVX UC Software >6.4.1< and CCX UC Software >7.2.0< or later we also added
<web feature.enhancedFeatureKeys.enabled="1"
softkey.1.action="xxxx"
softkey.1.enable="1"
softkey.1.label="xxxx"
softkey.1.use.transfer="1" />
<web feature.enhancedFeatureKeys.enabled="1"
softkey.1.action="xxxx"
softkey.1.enable="1"
softkey.1.label="xxxx"
softkey.1.use.conference="1" />
General possible Keys for $F examples are:
Note: Please verify the individual availability of a specific key against the Admin Guide!
Line1 | Line21 | Line41 | Softkey1 | DoNotDisturb | Divert |
Line2 | Line22 | Line42 | Softkey2 | Select | EnterRecord |
Line3 | Line23 | Line43 | Softkey3 | Conference | Exit |
Line4 | Line24 | Line44 | Softkey4 | Transfer | GroupPickup |
Line5 | Line25 | Line45 | Softkey5 | Redial | LCR |
Line6 | Line26 | Line46 | VolDown | Hold | ListenMode |
Line7 | Line27 | Line47 | VolUp | Status | MyStatus |
Line8 | Line28 | Line48 | Headset | CallList | NewCall |
Line9 | Line29 | Dialpad0 | Handsfree | Page | Null |
Line10 | Line30 | Dialpad1 | MicMute | Talk | Offline |
Line11 | Line31 | Dialpad2 | Menu | Join | ParkedPickup |
Line12 | Line32 | Dialpad3 | Messages | Intercom | QuickSetup |
Line13 | Line33 | Dialpad4 | Applications | LockPhone | Redial |
Line14 | Line34 | Dialpad5 | Directories | ACDAvailable | ServerACDAgentAvailable |
Line15 | Line35 | Dialpad6 | Setup | ACDLogin | ServerACDAgentUnavailable |
Line16 | Line36 | Dialpad7 | ArrowUp | ACDLogout | ServerACDSignIn |
Line17 | Line37 | Dialpad8 | ArrowDown | ACDUnavailable | ServerACDSignOut |
Line18 | Line38 | Dialpad9 | ArrowLeft | Answer | Silence |
Line19 | Line39 | DialPadStar | ArrowRight | BargeIn | SpeedDial |
Line20 | Line40 | DialPadPound | Backspace | BuddyStatus | Split |
Callers | CallPark | CallPickup | Delete | DialpadURL | Video |
DirectedPickup |
New EFK since UC Software 5.3.0
$TMeetNow$ |
New EFK since UC Software 5.5.2
$FBWSAnyWhere$ |
New EFK since UC Software 5.7.0
$FAssistantMenu$ |
$FExecutiveMenu$ |
New EFK since UC Software 5.9.0
$Tconsult$ |
A new macro $Tconsult$ is added to execute the consultative transfer functionality irrespective of default transfer type (Consultative/Blind) set on the phone.
A complete list of the Key Labels and Internal Functions can be found in the Admin Guide
Accessing Softkey's on a Poly Trio or CCX:
Example 1:
In this example below, we are going to remove the new call softkey, change the function of the forward softkey to forward to the voicemail extension and add a new softkey to dial the voicemail and add our extension and pin automatically.
NOTE: Below has been tested against UCS 3.3.3!
Standard Idle Screen:
Running UCS 3.3.x and using below code:
<feature>
<feature.enhancedFeatureKeys feature.enhancedFeatureKeys.enabled="1"></feature.enhancedFeatureKeys>
</feature>
<softkeyoff>
<softkey softkey.feature.newcall="0" softkey.feature.forward="0"/>
</softkeyoff>
<softkey2>
<softkey softkey.1.action="$FDivert$$FSelect$$FSoftKey2$" softkey.1.enable="1" softkey.1.label="Forward" softkey.1.use.idle="1" />
</softkey2>
<softkey3>
<softkey softkey.2.action="8500$Tinvite$$Cwaitconnect$$Cpause4$3001$Tdtmf$$Cpause4$0000$Tdtmf$" softkey.2.enable="1" softkey.2.label="VM" softkey.2.use.idle="1" />
</softkey3>
<divertcontact>
<divert divert.1.contact="8500"/>
</divertcontact>
Running UCS 4.x.x and using below code:
<WEB feature.enhancedFeatureKeys.enabled="1"
softkey.feature.forward="0"
softkey.feature.newcall="0"
reg.1.fwdContact="8500"
softkey.1.action="$FDivert$$FSelect$$FSoftKey2$"
softkey.2.action="8500$Tinvite$$Cwaitconnect$$Cpause4$3001$Tdtmf$$Cpause4$0000$Tdtmf$"
softkey.1.enable="1"
softkey.2.enable="1"
softkey.1.label="Forward"
softkey.2.label="VM"
softkey.1.use.idle="1"
softkey.2.use.idle="1" />
NOTE: This is only an example and numbers may need to be changed to match the local setup. The Admin Guide and the Feature Descriptions & Technical Notifications Page contain additional examples.
The Phone now shows the new softkey's:
Pressing Forward will toggle between call forward on or off
Example 2:
Note: Below has been tested against UCS 4.0.4
<park feature.enhancedFeatureKeys.enabled="1" softkey.1.enable="1" softkey.1.use.active="1" softkey.1.label="Park" softkey.1.insert="4" softkey.1.action="#$Cp1$700" />
Example 3:
Note: Below has been tested against UCS 4.0.4
<sd feature.enhancedFeatureKeys.enabled="1" softkey.1.enable="1" softkey.1.use.idle="1" softkey.1.label="SD-Call" softkey.1.insert="4" softkey.1.action="$FLine2$$S1$$Cnewcall$" />
Example 4:
Note: Below has been tested against UCS 4.1.5
Based on the below example configuration we add the softkey's
<test feature.enhancedFeatureKeys.enabled="1"
reg.1.fwdContact="8500"
softkey.1.action="$FDivert$$FSelect$$FSoftKey2$"
softkey.2.action="8500$Tinvite$$Cwaitconnect$$Cpause4$3001$Tdtmf$$Cpause4$0000$Tdtmf$"
softkey.1.enable="1"
softkey.2.enable="1"
softkey.1.label="Test1"
softkey.2.label="Test2"
softkey.1.use.idle="1"
softkey.2.use.idle="1"/>
If no precede is set:
If precede is set for Softkey 1 only:
softkey.1.precede="1"
If precede is set for Softkey 2 only:
<web softkey.2.precede="1"/>
If precede is set for both Softkey's:
<web softkey.1.precede="1" softkey.2.precede="1" />
Example 5:
Note: Below has been tested against UCS 5.0.1
An example configuration (attached):
<WEB feature.enhancedFeatureKeys.enabled="1"
softkey.1.action="$FPage$"
softkey.1.enable="1"
softkey.1.label="PAGE"
softkey.1.use.dialtone="1"
softkey.1.precede="1"
/>
Above will add a new PAGE Key when the phone is off hook:
VVX500
VVX400
Example 6:
Note: Below has been tested against UCS 5.0.2
An example configuration (attached):
<blind feature.enhancedFeatureKeys.enabled="1" softkey.1.enable="1" softkey.1.precede="1" softkey.1.use.active="1" softkey.1.action="$P1N4$$Trefer$" softkey.1.label="Blind" efk.efkprompt.1.status="1"
efk.efkprompt.1.label="Enter transfer destination"
efk.efkprompt.1.type="numeric"
efk.efkprompt.1.userfeedback="visible"
efk.efkprompt.1.digitmatching="none" />
Above will add a BLIND softkey once the call is answered:
Pressing the Key will open a Prompt for the extension to dial:
The P1 is for the Prompt 1 and N4 is for 4 Digit extensions.
If official support is required please check how to phone or open a case here
----------------Example 7:
<conference feature.enhancedFeatureKeys.enabled="1"
softkey.1.enable="1"
softkey.1.use.active="1"
softkey.1.label="DCon"
softkey.1.insert="1" softkey.1.action="$FConference$123$Tinvite$$Cwc$$FJoin$" />
Example 8:
<Change
feature.enhancedFeatureKeys.enabled="1"
softkey.1.action="$FTransfer$$FDirectories$$FDialpad2$"
softkey.1.enable="1"
softkey.1.label="Lync Dir."
softkey.1.use.active="1" />
Example 9:
<WEB feature.enhancedFeatureKeys.enabled="1"
softkey.1.action="123$Trefer$"
softkey.1.enable="1"
softkey.1.label="Dtrans"
softkey.1.use.active="1"
softkey.1.insert="3"
/>
Example 10:
UCS 5.2.0 added this new Functionality which enables the Intercom functionality without requiring the support of a call server using the SIP Info-Header functionality explained => here <=
feature.enhancedFeatureKeys.enabled="1" softkey.1.precede="1" softkey.1.label="IC-Bob" softkey.1.use.idle="1" softkey.1.enable="1" softkey.1.action="1002$Tintercom$"
Using the above example will add a new Softkey before any other softkey called IC-Bob and dial Extension 1002 Using the $Tintercom$ functionality.
The UCS 5.2.0 Admin Guide page 150 explains this in more detail
Example 11:
Polycom VVX 300, 310 , 400 and 410 and for example SoundPoint IP 550, 560, 650 and 670 have physical hardware keys for Hold or Transfer (in some instances even Conference) options and it may be therefore desirable to remove the duplicated soft keys that appear during an active call.
NOTE: The Conference soft key cannot be removed from phones that do not have a hardware key mapped !
In order to remove the Hold and Transfer Softkey the following configuration should be applied:
<web feature.enhancedFeatureKeys.enabled="1" softkey.feature.basicCallManagement.redundant="0" />
Example on a VVX410:
Note: The above will simply remove the softkeys but will not align the existing spaces left by the removal
The Conference Facility itself can be disabled:
<web call.localConferenceEnabled="0" />
The above therefore would remove the Conference Soft Key.
In order to remove the Hold, Conference and Transfer Softkey and align the leftover keys the following configuration should be applied:
Example on a VVX410:
Example configuration is attached as DisableConferenceBasicCallManagementAllignLeft.cfg
Example 12 :
The VVX300/310/400/410 have less space on their display to show softkeys and also lack the touch screen disabilities of the VVX500/600.
It may be therefore of interest, whilst transferring a call, to return to the Phone Idle screen rather than having presented last caller list.
The below example adds a new Softkey called Trans and automatically returns to the Idle screen (Lines). It also removes the standard Hold and Transfer soft keys.
<web feature.enhancedFeatureKeys.enabled="1" softkey.1.enable="1" softkey.1.use.active="1" softkey.1.label="Trans" softkey.1.precede="1" softkey.1.action="$FTransfer$$FSoftkey1$" softkey.feature.basicCallManagement.redundant="0" />
Pressing the Trans Softkey whilst in a call:
Pressing Exit will allow the user to toggle back to the last caller screen
An example configuration is attached
Example 13 :
It may be desirable for testing purposes to be able to factory reset the phone in a quick manner.
The below example simulates the steps a user manually would have to make:
<web feature.enhancedFeatureKeys.enabled="1" softkey.1.precede="1" softkey.1.action="$FSetup$$FDialpad2$$FDialpad4$$FDialpad5$$FDialpad6$$FSelect$$FDialpad1$$FDialpad5$$FDialpad5$$FSoftkey4$" softkey.1.enable="1" softkey.1.label="Factory" softkey.1.use.idle="1" />
An example configuration is attached (ResetFactory.zip)
For additional security, you may want to mask the Admin Password via:
<web up.echoPasswordDigits="0"/>
NOTE: The above was only added in UC Software 5.2.2!
Example 14 :
It may be desirable to have a softkey to open a Web Site using the Microbroser
<WEB feature.enhancedFeatureKeys.enabled="1"
softkey.1.action="http://google.co.uk"
softkey.1.enable="1"
softkey.1.label="Google"
softkey.1.use.idle="1"
softkey.1.precede="1"
/>
Pressing the Key opens the page
Example 15:
It may be required that an EFK Action is only sent on the actual line used and not on the first line.
Please add this to the configuration as discussed => here <=
<web call.stickyAutoLineSeize="1"/>
If official support is required please check how to phone or open a case here
----------------Troubleshooting Enhanced Feature Keys / EFK and Configurable Soft Keys on Polycom Phones
Under certain circumstances it may be desirable to debug an EFK issue if the feature is not working as expected
Lower the logging level for the EFK either via the Web Interface:
Or a configuration file:
<Logging log.level.change.efk="1" />
Example EFK:
<Example feature.enhancedFeatureKeys.enabled="1" softkey.1.action="123$Tinvite$" softkey.1.enable="1" softkey.1.label="Dan" softkey.1.use.idle="1" softkey.1.use.active="1" />
Pressing the key will dial 123 and show the following action in the logs / syslog
1120133408|efk |1|03|Macro [123$Tinvite$] is valid. 1120133408|efk |1|03|Action [123$Tinvite$] looks good. 1120133408|efk |1|03|No more input... 1120133408|efk |1|03|Efk exec engine: adding token [123] 1120133408|efk |1|03|Efk exec engine: adding token [Tinvite] 1120133408|efk |1|03|User buffer contains [123]. 1120133408|efk |1|03|Executing [invite], sending [123]. 1120133408|efk |1|03|EFK Exec engine said we are done and will stop.
If official support is required please check how to phone or open a case here
----------------Enhanced Feature Keys Enhancements:
<test feature.EFKLineKey.enabled="1" efk.efklist.1.action.string="ReplaceWithNumber"
efk.efklist.1.mname="ReplaceWithName" feature.enhancedFeatureKeys.enabled="1"
efk.efklist.1.status="1" />
The above would add a phone number with a name
Introducing the Line Key Reassignment >here< for example with a basic configuration would "break" the above basic cfg:
<web efk.efklist.1.action.string="ReplaceWithNumber"
efk.efklist.1.mname="ReplaceWithName"
feature.enhancedFeatureKeys.enabled="1"
efk.efklist.1.status="1"
lineKey.reassignment.enabled="1"
lineKey.1.category="Line"
lineKey.1.index="1"/>
Ensuring the actual EFK function key is defined:
<web feature.EFKLineKey.enabled="1"
efk.efklist.1.action.string="ReplaceWithNumber"
efk.efklist.1.mname="ReplaceWithName"
feature.enhancedFeatureKeys.enabled="1"
efk.efklist.1.status="1"
lineKey.reassignment.enabled="1"
lineKey.1.category="Line"
lineKey.1.index="1"
lineKey.5.category="EFK"/>
Introducing yet another feature to define the number of line keys allowed on the phone:
<web feature.EFKLineKey.enabled="1"
efk.efklist.1.action.string="ReplaceWithNumber"
efk.efklist.1.mname="ReplaceWithName"
feature.enhancedFeatureKeys.enabled="1"
efk.efklist.1.status="1"
lineKey.reassignment.enabled="1"
lineKey.1.category="Line"
lineKey.1.index="1"
lineKey.5.category="EFK"
up.numOfDisplayColumns="2"/>
The above example uses a number to be dialled. Changing the efk.efklist.X.action.string into an actual EFK like efk.efklist.1.action.string="$FLdapCorpDir$" would add the corporate Directory
or changing the EFK into an action string
<web feature.EFKLineKey.enabled="1"
efk.efklist.1.action.string="501$Tinvite$$Cwaitconnect$,6021561#$Tdtmf$"
efk.efklist.1.mname="Act.Key"
feature.enhancedFeatureKeys.enabled="1"
efk.efklist.1.status="1"
lineKey.reassignment.enabled="1"
lineKey.1.category="Line"
lineKey.1.index="1"
lineKey.5.category="EFK"
up.numOfDisplayColumns="2" />
The above would dial 501 and wait until connected and it would then wait for 2 seconds using the, (comma) and then dial 6021561# via DTMF
If official support is required please check how to phone or open a case here
----------------Macro Actions explanation:
Action String |
Description |
$L<label>$ |
This is the label for the entire operation. The value can be any string including the null string (in this case, no label displays). This label is used if no other operation label collection method worked (up to the point where this field is introduced). Make this the first entry in the action string to be sure this label is used; otherwise another label may be used and this one ignored. |
digits |
The digits to be sent. The appearance of this parameter depends on the action string. |
$C<command>$ |
This is the command. It can appear anywhere in the action string. Supported commands (or shortcuts) include: hangup ( hu ) hold ( h ) waitconnect ( wc ) pause <number of seconds> ( p <num sec> ) where the maximum value is 10 |
$T<type>$ |
The embedded action type. Multiple actions can be defined. Supported action types include: invite dtmf refer intercom Polycom recommends that you always define this field. If it is not defined, the supplied digits are dialed using INVITE (if no active call) or DTMF (if an active call). The use of refer method is call server dependent and may require the addition of star codes. |
$M<macro>$ |
The embedded macro. The <macro> string must begin with a letter. If the macro name is not defined, the execution of the action string fails. |
$P<prompt num>N<num digits>$ |
The user input prompt string. |
$S<speed dial index>$ |
The speed dial index. Only digits are valid. The action is found in the contact field of the local directory entry pointed to by the index |
$F<internal function>$ |
An internal key function. |
URL |
A URL. Only one per action string is supported. |
If official support is required please check how to phone or open a case here
----------------Macro for Enhanced Feature Keys Functional Improvements
▪ Internal Key Functions
UCS 6.1.0 adds a new list of internal key functions (usually $F ) for the new macro $A<internal function>$.
New Macro for Internal Key Function
Action String |
Description |
$A<internal function>$ |
The internal key function. If you need to add value to the macro, use a parameter value before the macro definition. For example, 1$AVoiceMail$ - Voice mail is an internal function, which uses “1” as an input for the parameter. |
Function | Description | Notes |
VoiceMail | Displays the voicemail messages for a registration line. | Must have a prefixed line index. |
PageGroup | Initiates paging. | Example: 5$APageGroup$ - It initiates the paging from default page group5. |
Admin must enable the input page channel. |
The following table lists the new internal key functions for enhanced feature keys.
Internal Key Functions
Function | Description |
Diagnostic | Displays the diagnostic screen. |
MediaStat | Displays the media statistics screen. |
Preferences | Displays the preference menu screen. |
LdapCorpDir | Displays the corporate directory menu screen. |
GAB | Displays the Ribbon |
communications Global Address Book. | |
PAB | Displays the Ribbon |
communications Personal Address Book. | |
CallList | Displays the call logs. |
Favorites | Displays the favorites list. |
UCOneDir | Displays the UCOne directory. |
Calendar | Displays the calendar screen. |
Example:
Below configuration will show a preferences EFK on the phone and pressing it will take the user to Preferences Menu.
<test feature.EFKLineKey.enabled=“1” feature.enhancedFeatureKeys.enabled=“1” efk.efklist.1.mname=“Preferences” efk.efklist.1.status=“1” efk.efklist.1.action.string=“$FPreferences$” />
Note: For voice mail and paging, the action string, should be defined with the following syntax :
<n>$A< Internal function>$
In the macro definition, <n> is a numeric string that can represent a registration line index for voice mail or page group index for paging.
Example:
1$AVoiceMail$
or
5$APageGroup$
If official support is required please check how to phone or open a case here
----------------UC Software 6.0.0 added the ability to create an EFK which a Prompt which gives the user access to the Phone Screen in order to select the Lines or BLF's or Speed Dials.
The above is a directed call pick up EFK which when pressed offers the Prompt and then once selecting the Lines softkey, dials the chosen contact.
Another example could be to Dial a Voice Mail of a specific user
In the above example, the user pressed the ToVM Softkey. This presents him with prompt voice mail. Selecting the Lines key will allow him access to his idle display. Selecting the extension 3048 will then dial 8500 and DTMF 3048
Example config:
<test feature.enhancedFeatureKeys.enabled="1" softkey.1.action="8500$Tinvite$$Cwaitconnect$$P1N4$" softkey.1.enable="1" softkey.1.use.idle="1" softkey.1.label="ToVm" efk.softkey.alignleft="1" efk.efkprompt.1.label="Voice Mail" efk.efkprompt.1.status="1" efk.efkprompt.1.type="numeric"/>
Example Logging:
1107154655|efk |1|00|Macro [8500$Tinvite$$Cwaitconnect$$P1N4$] is valid. 1107154655|efk |1|00|Action [8500$Tinvite$$Cwaitconnect$$P1N4$] looks good. 1107154655|efk |1|00|Creating new menu... 1107154655|efk |1|00|New menu has been created... 1107154657|efk |1|00|Line Select menu has been created... 1107154658|efk |1|00|Efk exec engine: adding token [8500] 1107154658|efk |1|00|Efk exec engine: adding token [Tinvite] 1107154658|efk |1|00|Efk exec engine: adding token [Cwaitconnect] 1107154658|efk |1|00|Efk exec engine: adding token [3048] 1107154658|efk |1|00|User buffer contains [8500]. 1107154658|efk |1|00|Executing [invite], sending [8500]. 1107154658|efk |1|00|Executing [waitconnect], breaking out. ... 1107154658|sip |0|00| INVITE sip:8500@10.252.122.122;user=phone SIP/2.0 ... 1107154658|efk |1|00|Got call state change: [4] 1107154658|efk |1|00|Got call state change: [4] 1107154658|efk |1|00|Got call state change: [6] 1107154658|efk |1|00|EFK is in connected state. 1107154658|efk |1|00|EFK engine state is [3]. 1107154658|efk |1|00|Going to check calls. 1107154658|efk |1|00|Calls are not null. 1107154658|efk |1|00|Continue to run EFK engine in connected state. 1107154658|efk |1|00|User buffer contains [3048]. 1107154658|efk |1|00|EFK buffer not empty but no action assigned. 1107154658|efk |1|00|EFK Exec engine will invoke default dialing behavior. 1107154658|efk |1|00|Trying to dial [3048] using dtmf. 1107154658|efk |1|00|DTMF dial is sending digits: [3048] 1107154658|efk |1|00|EFK Exec engine said we are done and will stop.
If official support is required please check how to phone or open a case here
----------------