User Experience and Features
VIA itself handled all permission pages FTUE behavior, voice dialog animation which shows base on amplitude of user input
and system output, embedded voice data handling and etc.
Wakeword
VIA support "Hey Scout" wake word to trigger voice session, it could be configured preload(not runtime).
Touch to trigger Voice Interaction
VIA also support touch to trigger voice session, usually the AAOS/AOSP system will have the voice app trigger soft button,
click will trigger voice session if TN VIA select as the default Voice app. Launcher app could also put a soft button into
a place to display it, and send standard Intent(To be filled) to trigger the session.
FTUE and Permissions
VIA include FTUE pages which will ask the user to select default voice app, enable permissions for Voice support,
Media controller(Notification permission), etc. User just follow step by step to enable them and then hear welcome message
then will be ready to use voice functionalities.
Voice Settings
VIA exposed API for apps to set up preferences, like language, unit, search radius, log level, etc. For detail settings items,
could be found from here: UPDATE_ASSISTANT_SETTINGS in Voice Domain.
Voice Animations
VIA already integrate with dialog state to show different dialog states.
- LISTENING
- THINKING
- SPEAKING/ASKING
- IDLE
TTS
VIA integrated TTS engine for dialog system prompt, meanwhile, it also expose API for other apps to play TTS and manage audio
focus priorities together. To use, please send Intent named "NLG" which defined detail Intent format in this
page.
Barge In
Barge in is a functionality that you can interrupt system prompt at any moment and continue conversation with system without
saying wake word or touch to trigger a new voice session. VIA will help to handle echo cancellation, which have dependency to get
audio architecture of the hardware to tune to get it work.
Multi Voice Engine Support
VIA supports multi voice engines integration behind it, which include Cerence Assistant, TN Assistant, Alexa and SoundHound(In progress).
There is domain CogArb component which will base on domain expert to switch to corresponding engine, for example in first version, Nav,
Media command will go to Cerence Assistant, and ICC command will go to TN Assistant. It is also allowed for you to select the engine
base on your requirement, in build or runtime.
Different voice engine has its own data model definition for domain commands, TN Voice Assistant set up the proxy layer to convert all
of them to the unified Intent to be used for communication with different domain, without changing integration logic when you want to
select a different engine. Take start navigation command "navigate to San Francisco Airport" as an example, please see the differences
from different engine, and from TN Nav domain Intent definition you will see how it defined unified and easier to be integrate with.
Engines |
Data Model |
Notes |
Cerence |
public void calculateRoutes( Location location, RouteOption routeOption, DestinationType destinationType, boolean b, NaviDomainHandler naviDomainHandler) |
Base on latest Cerence hybrid engine in Dec 2021.API callback, have to be integrated and then communicate with different apps. |
Soundhound |
public void onResponse(String rawResponse, VoiceSearchInfo voiceSearchInfo) rawResponse: "MapShowDirections":[ { "StartMapLocationSpec":{ "Type":"Other", "Label":"The Current Location", "SpokenLabel":"The Current Location", "Address":"", "CountryCode":"US", "Geohash":"9q9kdjvwkmw0", "Verified":true, "HighConfidence":true, "CurrentLocation":true, "Latitude":3.738620376586914e+01, "Longitude":-1.218965530395508e+02, "ReferenceDatum":"WGS84", "TimeZone":"America/Los_Angeles", "Radius":1, "TypeID":10, "SourceID":1, "RecordID":0 }, "DestinationMapLocationSpec":{ "Type":"Airport", "Label":"San Francisco International Airport", "SpokenLabel":"San Francisco International Airport", "Address":"San Francisco International Airport, California, United States", "Admin2":"San Mateo County", "Admin1":"California", "Country":"United States", "CountryCode":"US", "IATA":"SFO", "ICAO":"KSFO", "Geohash":"9q8yp229t0kg", "Verified":true, "HighConfidence":true, "CurrentLocation":false, "Latitude":3.761882019042969e+01, "Longitude":-1.223758010864258e+02, "ReferenceDatum":"WGS84", "TimeZone":"America/Los_Angeles", "Radius":5.000000000000000e-01, "Links":[ { "Label":"Wikipedia", "URL":"https://en.wikipedia.org/wiki/San_Francisco_International_Airport" } ], "SourceID":2, "Source":"Geoname", "GeonameID":464776 }, "ImplicitStart":true, "NavigationMethod":"Drive", "Navigate":true, "AsksForDistance":false, "AsksForTravelTime":false, "UnitOfMeasureID":"Mile" }
|
Base on Houndify SDK 1.5.0. API callback, have to be integrated and then communicate with different apps. |
Alexa |
* transportationMode (optional) : Indicates the means by which to navigate to the destination(Values: BIKING, DRIVING, TRANSIT, WALKING) * waypoints (required) : list of waypoints, which can be empty * waypoints.type (required) : String from Enum Type of the waypoint - SOURCE, DESTINATION or INTERIM * estimatedTimeOfArrival (optional) : Arrival time at the destination * estimatedTimeOfArrival.ideal (optional) : Expected arrival time to the destination without considering any other signals such as traffic, diversions etc * estimatedTimeOfArrival.predicted (required) : Predicted arrival time to the destination based on traffic etc. In the case of actual and current matching, only current ETA will be populated * address (optional) : Waypoint address * address.addressLine1 (optional) : address line 1 * address.addressLine2 (optional) : address line 2 * address.addressLine3 (optional) : address line 3 * address.city (optional) : city of destination address * address.stateOrRegion (optional) : city of destination address * address.countryCode (optional) : 3 letter country code in ISO 3166-1 alpha-3 format * address.districtOrCounty (optional) : district or county * address.postalCode (optional) : postal code * coordinate (required) : Contains the geolocation information of the destination * coordinate.latitudeInDegrees (required) : Latitude coordinate in degrees * coordinate.longitudeInDegrees (required) : Longitude coordinate in degrees * name (optional) : waypoint name * pointOfInterest (optional) : POI information related to the waypoint * pointOfInterest.id (optional) : Lookup Id for the POIs vended by Alexa * metadata.hoursOfOperation (optional) : Hours of operation for the business * hoursOfOperation.dayOfWeek (required) : Day of the week (Values: MONDAY, TUESDAY, WEDNESDAY, THURSDAY, * FRIDAY, SATURDAY, SUNDAY) * hoursOfOperation.hours (required): List of opening (open) and closing (close) hours for the day. Hours are in * ISO-8601 time with timezone format * hoursOfOperation.type (required) : Indicates whether the location is open on this day or not (Values: * OPEN_DURING_HOURS, OPEN_24_HOURS, CLOSED, UNKNOWN, HOLIDAY) * metadata.phoneNumber (optional) : The phone number of the location in E.164 format */ public void startNavigation(String payload) |
Base on Alexa Auto SDK 4.0. API callback, have to be integrated and then communicate with different apps. |
TN Intent |
val intentAction = "com.telenav.apps.maps.START_DIRECTIONS" val mapIntent = Intent(intentAction) mapIntent.putExtra("api", 1) mapIntent.putExtra("original_domain", "UDE") mapIntent.putExtra("source", "voice") mapIntent.putExtra("request_id", requestID) mapIntent.putExtra("type", "entity") mapIntent.putExtra("destination", destination) context.sendBroadcast(mapIntent) |
Destination data model: Entity Data Model |
Dialog Customization
At default, VIA already have its default dialog and prompts, but it is allowed to customize the dialog and prompts with updating
the dialog model and prompt sheets.