All the major features or functions of your application (nouns/verbs) could be loaded as top-level voice commands and or menu items using
AddCommands. It is recommended that this list be less than 150 commands, to improve application initialization performance and for high voice recognition quality.
As an application, you will want to respond to user input. To limit changes in modality, we highly recommend looking at the trigger source for input provided to your application, either via voice or menu. In instances where
OnCommand indicates you've made a selection, and you want to use
PerformInteraction, ensure the mode is the same. For example, if trigger source is
MENU, you'll want to start your interaction with an interaction mode of
MANUAL_ONLY. If trigger source is
VR, you'll want to trigger your interaction as
VOICE_ONLY. Also, as a best practice always set your
PerformInteraction timeout to max giving sufficient time for the user to respond.
Applications can load
ChoiceSet with 100 items. If your
PerformInteraction requires additional commands, you may reference additional
ChoiceSets. That is, one
PerformInteraction can contain more than one
ChoiceSet. If your list of choices is known ahead of time, it is helpful to create these during your initialization phases, and simply reuse the
ChoiceSet throughout your application's lifecycle. When a user initiates an interaction, the user may choose from whatever choices are defined at that moment. It is up to the application to ensure that all appropriate choices are defined before the app interaction. Also, consider grouping your choices in a way that maximizes reusability of the defined
ChoiceSet, it is suggested that you wait some time since it was last used. Immediately deleting a
PerformInteractionhas returned could lead to undesired application behavior.
DeleteInteractionChoiceSetare supported RPCs, only use them when appropriate. Avoid deleting commands and
ChoiceSetsthat will knowingly be used again.
ChoiceSetsshould have unique IDs within the app's lifecycle.
Always order items in your lists for better user experience. Ordering the items which are more often used in your application or ordering the items based on the specific user preferences, or based on current location of the user etc. will help keep the most important items to the user accessible. In general, order the items from most important to least important.
To add VR for softbuttons, use
AddCommand with no
You may use both name and image for items wherever applicable.
Applications must not register voice grammars using synonyms that include other application names, or conflict with on-board voice commands.
It is always a good practice to add relevant and useful information to the list items, for example if your app is a media app and you have a list of audio contents, adding information such as when the content was aired.
PerformInteraction lists should always be as small as possible by UX design. However, in cases where having long lists cannot be avoided, please follow the below best practices for better user experience.
Note: Avoid opening
PerformInteraction from within another
List with multiple action item per choice
Showand announce it with a pure voice alert via
Skipbutton (which is currently only available for Media Apps)
Skiphard button on the steering wheel for easy navigation.
Note: Only make the announcement the first time the search has been completed to reduce any kind of annoyance to the user.
If the results are known by the user or the result list is very small you can use
PerformInteraction instead depending on the current use case.
User Action 1: VR/MENU: "Create result list" Result 1: SCREEN LINE 1: "Result 1 a" SCREEN LINE 2: "Result 1 b" MEDIA TRACK: "1/25" SOFTBUTTONS: Action 1, Action 2, Action 3,...,Previous, Next, More... TTS: "Result 1 <possibly more information about the result>" //First Time: Announce possible ways to navigate (skip buttons, voice command, etc..)
User Action 2: VR/MENU/SOFTBUTTON: "Action 1" Result 2: This is only applicable if the "Action 1" of "Result 1" results in another screen. If just a call is initiated by "action 1" there is no need to display an ensuing screen. SCREEN LINE 1: "Action 1 Result 1 a" SCREEN LINE 2: "Action 1 Result 1 b" SOFTBUTTONS: Softbuttons highly depend on the use case you are developing. If the user again has an array of choices, use the same concept as explained above. Otherwise, adapt the screen to your use case. TTS: "Result of Action 1 on Result 1"
User Action 3: VR/MENU/SOFTBUTTONS: "Next" Result 3: SCREEN LINE 1: "Result 2 a" SCREEN LINE 2: "Result 2 b" MEDIA TRACK: "2/25" SOFTBUTTONSS: Action 1, Action 2, Action 3,...,Previous, Next, More... TTS: “Result 2 <possibly more information about the result>.”