Skip to content

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.