Come supportare comandi vocali in linguaggio naturale in Cortana (HTML)

[ Questo articolo è rivolto agli sviluppatori per Windows 8.x e Windows Phone 8.x che realizzano app di Windows Runtime. Gli sviluppatori che usano Windows 10 possono vedere Documentazione aggiornata ]

Informazioni su com'è possibile estendere Cortana con comandi vocali più flessibili e naturali che consentono all'utente di pronunciare il nome di un'app in qualsiasi punto del comando.

Per estendere Cortana tramite comandi vocali, è necessario che l'utente indichi sia l'app che lo specifico comando o la specifica funzione da eseguire. In genere, questa operazione viene eseguita annunciando il nome dell'app all'inizio del comando vocale. Ad esempio, "Adventure Works, aggiungi un nuovo viaggio a Las Vegas."

Tuttavia, specificare il nome dell'applicazione prima del comando potrebbe risultare scomodo, innaturale o perfino privo di senso. In molti casi, poter pronunciare il nome dell'app in un altro punto del comando è più pratico e naturale e rende l'interazione molto più intuitiva e interessante per l'utente. Tornando all'esempio precedente, la frase "Adventure Works, aggiungi un nuovo viaggio a Las Vegas." potrebbe essere riformulata come "Aggiungi un nuovo viaggio Adventure Works a Las Vegas." o "Aggiungi un nuovo viaggio a Las Vegas con Adventure Works."

Puoi impostare i comandi vocali per supportare il nome dell'app come:

  • Prefisso - prima della frase del comando
  • Infisso - all'interno della frase del comando
  • Suffisso - dopo la frase del comando

Prerequisiti

Questo argomento si basa su Avviare un'app in background con i comandi vocali di Cortana. Continueremo a fornire una dimostrazione delle funzionalità con un'app per la pianificazione e la gestione dei viaggi denominata Adventure Works.

Per completare questa esercitazione ti consigliamo di leggere gli argomenti seguenti per acquisire familiarità con le tecnologie descritte:

Istruzioni

Passaggio 1: Specificare un elemento AppName nel file VCD

L'elemento AppName è usato per specificare il nome descrittivo di un'app in un comando vocale.

<AppName>Adventure Works</AppName>

Passaggio 2: Specificare la posizione in cui il nome dell'app può essere pronunciato nel comando vocale

L'elemento ListenFor ha un attributo RequireAppName che specifica dove può apparire il nome dell'app nel comando vocale. Questo attributo supporta quattro valori.

  1. BeforePhrase

    Impostazione predefinita.

    Indica che gli utenti devono pronunciare il nome dell'app prima della frase del comando.

    In questo caso, Cortana risponde al comando "Adventure Works, quando è il mio viaggio a Las Vegas?".

    <ListenFor RequireAppName="BeforePhrase"> when is [my] trip to {destination} 
    
  2. AfterPhrase

    Indica che gli utenti devono pronunciare il nome dell'app dopo la frase del comando.

    Un elenco frasi localizzato di congiunzioni viene fornito dal sistema. Sono incluse espressioni come "usando", "con " e "in".

    In questo caso, Cortana risponde a comandi come "Mostra il mio prossimo viaggio a Las Vegas in Adventure Works" e "Mostra il mio prossimo viaggio a Las Vegas con Adventure Works".

    <ListenFor RequireAppName="AfterPhrase">show [my] next trip to {destination} </ListenFor>
    
  3. BeforeOrAfterPhrase

    Indica che gli utenti devono pronunciare il nome dell'app prima o dopo la frase del comando.

    Per la versione con il suffisso, un elenco frasi localizzato di congiunzioni viene fornito dal sistema. Sono incluse espressioni come "usando", "con " e "in".

    In questo caso, Cortana risponde a comandi come "Adventure Works, mostra il mio prossimo viaggio a Las Vegas" o "Mostra il mio prossimo viaggio a Las Vegas in Adventure Works".

    <ListenFor RequireAppName="BeforeOrAfterPhrase">show [my] next trip to {destination} </ListenFor>
    
  4. ExplicitlySpecified

    Indica che gli utenti devono pronunciare il nome dell'app esattamente nel punto specificato della frase del comando. L'utente non deve pronunciare il nome dell'app prima o dopo la frase.

    Devi fare riferimento in modo esplicito al nome dell'app usando il tag {builtin:AppName}.

    In questo caso, Cortana risponde a comandi come "Adventure Works, mostra il mio prossimo viaggio a Las Vegas" o "Mostra il mio prossimo viaggio Adventure Works a Las Vegas".

    <ListenFor RequireAppName="ExplicitlySpecified">show [my] next {builtin:AppName} trip to {destination} </ListenFor>
    

Passaggio 3: Casi speciali

Quando dichiari un elemento ListenFor dove RequireAppName è "AfterPhrase" o "ExplicitlySpecified", deve assicurarti che vengano soddisfatti determinati requisiti:

  1. {builtin:AppName} deve apparire una sola volta quando RequireAppName è "ExplicitlySpecified".

    Con questo valore, il sistema non è in grado di dedurre dove può apparire il nome dell'app nel comando vocale. Devi specificare la posizione in modo esplicito.

  2. Non puoi usare un comando vocale che inizia con un elemento PhraseTopic, che in genere viene usato per il riconoscimento vocale di un vocabolario di grandi dimensioni. Almeno una parola deve precedere tale elemento.

    Questo consente di ridurre al minimo le probabilità che Cortana avvii l'app se un comando contiene il nome dell'app o una sua parte, in qualunque parte dell'enunciato.

    Ecco una dichiarazione non valida che potrebbe far sì che Cortana avvii l'app Adventure Works se l'utente pronuncia una frase come "Mostrami le recensioni per Kinect Adventure Works".

    <ListenFor RequireAppName="ExplicitlySpecified">{searchPhrase} {builtin:AppName}</ListenFor>
    
  3. Devono essere presenti almeno due parole nella stringa ListenFor oltre al nome dell'app e ai riferimenti agli elementi PhraseTopic.

    Analogamente al caso 2, devi assicurarti che i comandi contengano sufficienti contenuti fonetici per ridurre al minimo le probabilità che l'app venga avviata involontariamente.

    Questo consente di configurare l'applicazione per i migliori risultati possibili, in modo che l'applicazione non venga avviata accidentalmente quando l'utente ad esempio pronuncia "Trova Kinect Adventure Works".

    Ecco alcune dichiarazioni non valide che potrebbero far sì che Cortana avvii l'app Adventure Works se l'utente pronuncia una frase come "Ehi Adventure Works" o "Trova Kinect Adventure Works".

    <ListenFor RequireAppName="ExplicitlySpecified">Hey {builtin:AppName}</ListenFor>
    <ListenFor RequireAppName="ExplicitlySpecified">Find {searchPhrase} {builtin:AppName}</ListenFor>
    

Osservazioni

Anche il supporto di più varianti rispetto al modo in cui un comando vocale può essere pronunciato da un utente in Cortana aumenta l'usabilità generale dell'app.

Evita di usare "Ehi [nome dell'app]" come AppName o CommandPrefix. È molto più probabile che gli utenti dicano "Ehi Cortana" per richiamare Cortana tramite l'attivazione vocale e usare "Ehi [nome dell'app]" nell'enunciato potrebbe risultare innaturale. Ad esempio, "Ehi Cortana, mostra il mio prossimo viaggio a Las Vegas in Ehi Adventure Works".

Valuta se aggiungere varianti tramite infissi o suffissi per i comandi vocali esistenti. Com'è stato illustrato, non è particolarmente complesso aggiungere un ulteriore attributo agli elementi ListenFor esistenti e supportare varianti tramite suffissi. Risulta molto più naturale dire "Ehi Cortana, mostra il mio prossimo viaggio a Las Vegas in Adventure Works" che "Ehi Cortana, Adventure Works, mostra il mio prossimo viaggio a Las Vegas".

Valuta se usare il nome dell'app come prefisso nei casi in cui il comando vocale sia in conflitto con funzionalità di Cortana esistenti (chiamate, messaggistica e così via). Ad esempio, "Adventure Works, invia un messaggio a [agenzia di viaggi] sul viaggio a Las Vegas".

Esempio completo

Ecco un file VCD che illustra vari modi per fornire ulteriori comandi vocali in linguaggio naturale.

Nota  È possibile avere più elementi ListenFor, ciascuno con un diverso valore dell'attributo RequireAppName.

 

<?xml version="1.0" encoding="utf-8"?>
<VoiceCommands xmlns="https://schemas.microsoft.com/voicecommands/1.1">
  <CommandSet xml:lang="en-us" Name="commandSet_en-us">
    <AppName>Adventure Works</AppName>
    <Example> When is my trip to Las Vegas? </Example>
    <Command Name="whenIsTripToDestination">
      <Example> When is my trip to Las Vegas?</Example>
      <ListenFor RequireAppName="BeforePhrase">
        when is my] trip to {destination} </ListenFor>

      <!-- This ListenFor command will set up Cortana to accept commands like 
           “Show my next trip to Las Vegas on Adventure Works”; “Show my next 
           trip to Las Vegas using Adventure Works” -->
      <ListenFor RequireAppName="AfterPhrase">
        show [my] next trip to {destination} </ListenFor>

      <!-- This ListenFor command will set up Cortana to accept commands when 
           the user specifies your app name either before or after the command. 
           “Adventure Works, show my next trip to Las Vegas”; 
           “Show my next trip to Last Vegas on Adventure works” -->
      <ListenFor RequireAppName="BeforeOrAfterPhrase">
        show [my] next trip to {destination} </ListenFor>

      <!-- This ListenFor command will set up Cortana to accept commands 
           when the user specifies your app name inline. 
           “Show my next Adventure Works trip to Las Vegas” -->
      <ListenFor RequireAppName="ExplicitlySpecified">
        show [my] next {builtin:AppName} trip to {destination} </ListenFor>

      <Feedback> Looking for trip to {destination} </Feedback>
      <Navigate />
    </Command>
    <PhraseList Label="destination">
      <Item> Las Vegas </Item>
      <Item> Dallas </Item>
      <Item> New York </Item>
    </PhraseList>
  </CommandSet>
  <!-- Other CommandSets for other languages -->
</VoiceCommands>

Argomenti correlati

Interazioni con Cortana (HTML)

VCD elements and attributes v1.2

Progettisti

Linee guida per la progettazione di Cortana