Modificare in modo dinamico gli elenchi frasi VCD di Cortana

Avviso

Questa funzionalità non è più supportata a partire dall'aggiornamento di Windows 10 di maggio 2020 (versione 2004, nome codice "20H1").

Per informazioni sul modo in cui Cortana trasforma le esperienze di produttività moderne, vedere Cortana in Microsoft 365.

Accedere e aggiornare l'elenco delle frasi supportate (elementi PhraseList) in un file VCD (Voice Command Definition) al runtime usando il risultato del riconoscimento vocale.

Nota

Un comando vocale è una singola espressione con una finalità specifica, definita in un file VCD (Voice Command Definition), indirizzata a un'app installata tramite Cortana.

Un file VCD definisce uno o più comandi vocali, ognuno con una finalità univoca.

Le definizioni dei comandi vocali possono variare in termini di complessità. Possono supportare qualsiasi elemento, da una sola espressione limitata a una raccolta di espressioni del linguaggio naturale più flessibili, tutte con la stessa finalità.

La modifica dinamica di un elenco frasi al runtime è utile se il comando vocale è specifico di un'attività che implica alcuni tipi di dati dell'app definiti dall'utente o temporanei.

Si supponga, ad esempio, di avere un'app di viaggi in cui gli utenti possono immettere destinazioni e si vuole che gli utenti possano avviare l'app pronunciando il nome dell'app seguito da "Mostra viaggio a <destinazione>". Nell'elemento ListenFor stesso, si specifica qualcosa del tipo: <ListenFor> Show trip to {destination} </ListenFor>, dove "destinazione" è il valore dell'attributo Label per PhraseList.

L'aggiornamento dell'elenco frasi al runtime elimina la necessità di creare un elemento ListenFor separato per ogni possibile destinazione. È invece possibile popolare in modo dinamico PhraseList con le destinazioni specificate dall'utente durante l'immissione degli itinerari.

Per altre informazioni su PhraseList e altri elementi VCD, vedere il riferimento Elementi VCD e attributi v1.2.

Suggerimento

Prerequisiti

Se non si ha familiarità con lo sviluppo di app UWP (Universal Windows Platform), vedere questi argomenti per acquisire familiarità con le tecnologie descritte qui.

Linee guida sull'esperienza utente

Vedere Linee guida di progettazione per Cortana per informazioni sull'integrazione dell'app con Cortana e Interazioni vocali per suggerimenti utili sulla progettazione di un'app di riconoscimento vocale utile e coinvolgente.

Identificare il comando e aggiornare l'elenco frasi

Ecco un file VCD di esempio che definisce un comando "showTripToDestination" e un elemento PhraseList che definisce tre opzioni per la destinazione nell'app di viaggi Adventure Works. Quando l'utente salva ed elimina destinazioni nell'app, quest'ultima aggiorna le opzioni in PhraseList.

<?xml version="1.0" encoding="utf-8"?>
<VoiceCommands xmlns="https://schemas.microsoft.com/voicecommands/1.1">
  <CommandSet xml:lang="en-us" Name="AdventureWorksCommandSet_en-us">
    <AppName> Adventure Works, </AppName>
    <Example> Show trip to London </Example>

    <Command Name="showTripToDestination">
      <Example> show trip to London  </Example>
      <ListenFor> show trip to {destination} </ListenFor>
      <Feedback> Showing trip to {destination} </Feedback>
      <Navigate/>
    </Command>

    <PhraseList Label="destination">
      <Item> London </Item>
      <Item> Dallas </Item>
      <Item> New York </Item>
    </PhraseList>

  </CommandSet>

<!-- Other CommandSets for other languages -->

</VoiceCommands>

Per aggiornare un elemento PhraseList nel file VCD, ottenere l'elemento CommandSet che contiene l'elenco di frasi. Utilizzare l'attributo Name dell'elemento CommandSet (Name deve essere univoco nel file VCD) come chiave per accedere alla proprietà VoiceCommandManager.InstalledCommandSets e ottenere il riferimento VoiceCommandSet.

Dopo aver identificato il set di comandi, ottenere un riferimento all'elenco frasi che si vuole modificare e chiamare il metodo SetPhraseListAsync; utilizzare l'attributo Label dell'elemento PhraseList e una matrice di stringa come nuovo contenuto dell'elenco frasi.

Nota

Se si modifica un elenco frasi, l'intero elenco frasi viene sostituito. Se si vuole inserire nuovi elementi in un elenco frasi, è necessario specificare gli elementi esistenti e quelli nuovi nella chiamata a SetPhraseListAsync.

In questo esempio si aggiorna l'elemento PhraseList illustrato nell'esempio precedente con una destinazione aggiuntiva a Phoenix.

Windows.ApplicationModel.VoiceCommands.VoiceCommandDefinition.VoiceCommandSet commandSetEnUs;

if (Windows.ApplicationModel.VoiceCommands.VoiceCommandDefinitionManager.
      InstalledCommandSets.TryGetValue(
        "AdventureWorksCommandSet_en-us", out commandSetEnUs))
{
  await commandSetEnUs.SetPhraseListAsync(
    "destination", new string[] {“London”, “Dallas”, “New York”, “Phoenix”});
}

Osservazioni:

È appropriato usare PhraseList per limitare il riconoscimento per un set relativamente piccolo di parole. Quando il set di parole è troppo grande (ad esempio centinaia di parole) o non deve essere affatto limitato, usare l'elemento PhraseTopic e un elemento Subject per perfezionare la pertinenza dei risultati del riconoscimento vocale per migliorare la scalabilità.

Nell'esempio si ha un elemento PhraseTopic con un elemento Scenario "Ricerca", ulteriormente perfezionato da un elemento Subject "Città\provincia".

<?xml version="1.0" encoding="utf-8"?>
<VoiceCommands xmlns="https://schemas.microsoft.com/voicecommands/1.1">
  <CommandSet xml:lang="en-us" Name="AdventureWorksCommandSet_en-us">
    <AppName> Adventure Works, </AppName>
    <Example> Show trip to London </Example>

    <Command Name="showTripToDestination">
      <Example> show trip to London  </Example>
      <ListenFor> show trip to {destination} </ListenFor>
      <Feedback> Showing trip to {destination} </Feedback>
      <Navigate/>
    </Command>

    <PhraseList Label="destination">
      <Item> London </Item>
      <Item> Dallas </Item>
      <Item> New York </Item>
    </PhraseList>

    <PhraseTopic Label="destination" Scenario="Search">
      <Subject>City/State</Subject>
    </PhraseTopic>

  </CommandSet>