Avviare un'app in background con i comandi vocali di 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 ]

Oltre a usare i comandi vocali all'interno di Cortana per accedere alle funzionalità di sistema, puoi anche estendere Cortana con le caratteristiche e le funzionalità di un'app in background mediante comandi vocali che specificano un'azione o un comando da eseguire all'interno dell'app. Quando un'app gestisce un comando vocale in background, può visualizzare feedback nel canvas di Cortana e comunicare con l'utente usando la voce di Cortana.

Nota  

Un comando vocale è una singola parola o un enunciato con un intento specifico, definito in un file di definizione comando vocale (VCD, Voice Command Definition), indirizzato a un'app installata tramite Cortana.

La definizione di un comando vocale può avere complessità variabili. Può supportare qualsiasi cosa, da un singolo enunciato vincolato a una raccolta di enunciati in linguaggio naturale più flessibili, tutti con lo stesso intento.

Un file VCD definisce uno o più comandi vocali, ognuno con un intento univoco.

L'app di destinazione può essere avviata in primo piano (l'app assume lo stato attivo) o attivata in background (Cortana mantiene lo stato attivo ma fornisce risultati dall'app), a seconda del livello e della complessità dell'interazione. Ad esempio, i comandi vocali che richiedono ulteriore contesto o input dell'utente (come l'invio di un messaggio a un contatto specifico) vengono gestiti meglio in un'app in primo piano, mentre i comandi di base possono essere gestiti in Cortana tramite un'app in background.

 

Forniremo una dimostrazione di queste funzionalità con un'app per la pianificazione e la gestione dei viaggi denominata Adventure Works.

Ecco una panoramica dell'app Adventure Works integrata con il canvas di Cortana.

Panoramica del canvas di Cortana

Per visualizzare un viaggio in Adventure Works senza Cortana, un utente deve avviare l'app e passare alla pagina Viaggi in programma.

Usando i comandi vocali tramite Cortana per avviare l'app in background, l'utente può invece semplicemente chiedere "Adventure Works, quando è il mio viaggio a Las Vegas?". L'app gestisce il comando e Cortana visualizza i risultati insieme all'icona dell'app e ad altre informazioni sull'app, se disponibili. Ecco un esempio di una query di base su un viaggio e della schermata dei risultati di Cortana, in cui viene sia visualizzata che pronunciata la frase "Il tuo prossimo viaggio a Las Vegas è l'1 agosto".

Una query di base e la schermata dei risultati con l'app Adventure Works in background.

Questi sono i passaggi di base per aggiungere funzionalità dei comandi vocali ed estendere Cortana con funzionalità in background nella tua app mediante input vocale o tastiera:

  1. Crea un servizio app (vedi Windows.ApplicationModel.AppService) richiamato da Cortana in background.
  2. Crea un file VCD. Si tratta di un documento XML in cui vengono definiti tutti i comandi vocali che l'utente può pronunciare per avviare le azioni o richiamare comandi quando attiva l'app. Vedi VCD elements and attributes v1.2.
  3. Registra i set di comandi nel file VCD quando l'app viene avviata.
  4. Gestisci l'attivazione in background del servizio app e l'esecuzione del comando vocale.
  5. Visualizza e pronuncia il feedback appropriato per il comando vocale all'interno di Cortana.

Obiettivo: Apprendere come estendere Cortana con comandi vocali e app in background.

Prerequisiti

Se non hai familiarità con lo sviluppo di app mediante JavaScript:

Per completare questa esercitazione leggi gli argomenti seguenti per scoprire di più sulle tecnologie descritte qui.

Linee guida per l'esperienza utente:

Vedi le linee guida per la progettazione di Cortana per informazioni su come integrare la tua app con Cortana e le linee guida per la progettazione delle funzionalità vocali per trovare suggerimenti utili sulla progettazione di un'app pratica e coinvolgente abilitata per i comandi vocali.

Creare un servizio app

  1. In Visual Studio, fai clic con il pulsante destro del mouse sul nome della soluzione, seleziona Add->New Project, quindi seleziona Componente Windows Runtime. Questo è il componente che implementerà il servizio app (vedi Windows.ApplicationModel.AppService).Nota  Deve trattarsi di un progetto Visual C#.

     

  2. Digita un nome per il progetto (ad esempio, "VoiceCommandService") e fai clic su OK.

  3. In Esplora soluzioni seleziona il progetto "VoiceCommandService" e rinomina il file "Class1.cs" generato da Visual Studio. Per questo esempio, il file viene rinominato in "VoiceCommandService.cs".

  4. In "VoiceCommandService.cs" crea una nuova classe che implementa l'interfaccia IBackgroundTask. Il metodo Run è il punto di ingresso obbligatorio, chiamato quando Cortana riconosce il comando vocale.Nota  La classe delle attività in background e tutte le altre classi nel progetto di attività in background devono essere classi pubbliche sealed.

     

    Ecco una classe di attività in background di base per l'app Adventure Works.

    N/A
    
  5. In Visual Studio apri l'app e dichiara l'attività in background come un AppService nel manifesto dell'app.

    1. In Esplora soluzioni fai clic con il pulsante destro del mouse sul file "appxmanifest" e seleziona Visualizza codice.

    2. Individua l'elemento Application.

    3. Aggiungi un elemento Extensions all'elemento Application.

    4. Aggiungi un elemento Extension all'elemento Extensions.

    5. Aggiungi un attributo Category all'elemento Extension e imposta il valore dell'attributo Category su "windows.appService".

    6. Aggiungi un attributo EntryPoint all'elemento Extension e imposta il valore dell'attributo EntryPoint sul nome della classe che implementa IBackgroundTask, in questo caso "AdventureWorks.VoiceCommands.AdventureWorksVoiceCommandService".

    7. Aggiungi un elemento AppService all'elemento Extension.

    8. Aggiungi un attributo Name all'elemento AppService e imposta il valore dell'attributo Name su un nome per il servizio app, in questo caso "AdventureWorks.VoiceCommandService".

      <Package>
        <Applications>
          <Application>
      
            <Extensions>
              <Extension Category="windows.appService" 
                EntryPoint=
                  "AdventureWorks.VoiceCommands.AdventureWorksVoiceCommandService">
                <AppService Name="AdventureWorksVoiceCommandService"/>
              </Extension>
            </Extensions>
      
          <Application>
        <Applications>
      </Package>
      

Creare un file VCD

  1. In Visual Studio fai clic con il pulsante destro del mouse sul nome del progetto, scegli Add->New Item e quindi seleziona File di testo.
  2. Digita un nome per il file VCD e verifica di aggiungere l'estensione del file ".xml". Ad esempio, "AdventureWorksCommands.xml". Seleziona Aggiungi.
  3. In Esplora soluzioni seleziona il file VCD.
  4. Nella finestra Proprietà imposta l'azione di compilazione su Contenuto e quindi imposta Copia in directory di output su Copia se più recente.

Modificare il file VCD

Per ogni lingua supportata dall'app, crea un CommandSet di comandi vocali che l'app può gestire.

Ogni Command dichiarato in un file VCD deve includere queste informazioni:

  • Un nome di comando usato dall'applicazione per identificare il comando vocale in fase di esecuzione

  • Un elemento Example che contiene una frase che descrive in che modo un utente può richiamare il comando. Cortana mostra questo esempio quando l'utente pronuncia "Cosa posso dire?" o "Guida" oppure quando tocca Vedi altro.

  • Un elemento ListenFor che contiene le parole e le frasi che l'app riconosce per avviare il comando. Ogni comando deve disporre di almeno un elemento ListenFor.

  • Un elemento Feedback che contiene il testo visualizzato e pronunciato da Cortana all'avvio dell'applicazione.

  • Un elemento VoiceCommandService per indicare che il comando vocale avvia l'app in background.

Per altri dettagli, vedi la sezione VCD elements and attributes v1.2.

Puoi specificare versioni per più lingue dei comandi utilizzati per attivare l'app ed eseguire comandi. Puoi creare più elementi CommandSet, ciascuno con un attributo xml:lang diverso per usare l'app in paesi diversi. Ad esempio, un'app per gli Stati Uniti potrebbe avere un elemento CommandSet per l'inglese e un elemento CommandSet per lo spagnolo.

Attenzione  

Per attivare un'app e avviare un'azione usando un comando vocale, l'app deve registrare un file VCD contenente un elemento CommandSet con una lingua che corrisponde alla lingua dei comandi vocali che l'utente ha selezionato sul dispositivo. Questa lingua viene impostata dall'utente nella schermata Settings > System > Speech > Speech Language del dispositivo.

 

Ecco un file VCD che definisce un comando vocale per l'app Adventure Works.

Per questo esempio, CommandPrefix è impostato su "Adventure Works", Command è impostato su " whenIsTripToDestination", ListenFor specifica il testo che può essere riconosciuto (con un riferimento a un elemento PhraseList che vincola le destinazioni riconosciute), VoiceCommandService indica che il comando vocale è gestito da un servizio app in background e Feedback specifica cosa sentirà l'utente quando Cortana avvia il servizio app.

Il valore dell'attributo Target dell'elemento VoiceCommandService deve essere il nome dell'AppService, come specificato in package.appxmanifest. In questo esempio, il nome dell'AppService è "AdventureWorksVoiceCommandService".

Il comando "whenIsTripToDestination" ha un elemento ListenFor con un riferimento a un PhraseList per un set vincolato di destinazioni.

Gli elementi ListenFor non possono essere modificati a livello di codice. Tuttavia, gli elementi PhraseList associati agli elementi ListenFor possono essere modificati a livello di codice. Le applicazioni devono modificare il contenuto del PhraseList in fase di esecuzione, in base al set di dati generato mentre l'utente usa l'app. Vedi Come modificare in modo dinamico gli elenchi frasi VCD.

<?xml version="1.0" encoding="utf-8"?>
<VoiceCommands xmlns="https://schemas.microsoft.com/voicecommands/1.2">
  <CommandSet xml:lang="en-us" Name="commandSet_en-us">
    <CommandPrefix> Adventure Works, </CommandPrefix>
    <Example> When is my trip to Las Vegas? </Example>

    <Command Name="whenIsTripToDestination">
      <Example> When is my trip to Las Vegas?</Example>
      <ListenFor> when is [my] trip to {destination} </ListenFor>
      <Feedback> Looking for trip to {destination} </Feedback>
      <VoiceCommandService Target="AdventureWorksVoiceCommandService"/>
    </Command>

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

  </CommandSet>

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

</VoiceCommands>

Installare i comandi VCD

L'app deve essere seguita una volta per installare il set di comandi del file VCD.

All'attivazione dell'app, chiama InstallCommandSetsFromStorageFileAsync durante Launch per registrare i comandi che devono essere riconosciuti dal sistema.

Nota  Se viene eseguito il backup del dispositivo e l'app viene reinstallata automaticamente, i dati dei comandi vocali non vengono preservati. Per garantire che i dati dei comandi vocali dell'app rimangano intatti, puoi considerare di inizializzare il file VCD ogni volta che l'app viene avviata o si attiva oppure di memorizzare un'impostazione che indica se il file VCD è installato e verifica l'impostazione ogni volta che l'app viene avviata o si attiva.

 

Ecco un esempio che illustra come installare i comandi specificati da un file VCD (vcd.xml).

N/A

Gestire il comando vocale nel servizio app

Specifica nel servizio app in che modo l'app risponde alle attivazioni di comandi vocali dopo che è stata avviata e i set di comandi vocali sono stati installati.

  1. Esegui un rinvio del servizio, in modo che il servizio app non venga terminato durante la gestione del comando vocale.

  2. Verifica che l'attività in background sia in esecuzione come un servizio app attivato da un comando vocale.

    1. Esegui il cast di IbackgroundTaskInstance.TriggerDetails su Windows.ApplicationModel.AppService.AppServiceTriggerDetails.
    2. Controlla che IbackgroundTaskInstance.TriggerDetails.Name sia il nome del servizio app nel file "appxmanifest".
  3. Usa IbackgroundTaskInstance.TriggerDetails per creare una connessione VoiceCommandServiceConnection a Cortana per recuperare il comando vocale.

  4. Registra un gestore eventi per VoiceCommandServiceConnection.VoiceCommandCompleted per ricevere una notifica quando il servizio app viene chiuso a causa di un annullamento da parte dell'utente.

  5. Registra un gestore eventi per IbackgroundTaskInstance.Canceled per ricevere una notifica quando il servizio app viene chiuso per un errore imprevisto.

  6. Stabilisci il nome del comando e ciò che è stato pronunciato.

    1. Usa la proprietà VoiceCommand.CommandName per stabilire il nome del comando vocale.

    2. Per determinare ciò che è stato pronunciato dall'utente, controlla il valore di Text o le proprietà semantiche della frase riconosciuta nel dizionario SpeechRecognitionSemanticInterpretation.

  7. Esegui l'azione appropriata nel servizio app.

  8. Visualizza e pronuncia il feedback per il comando vocale con Cortana.

    1. Determina le stringhe che devono essere visualizzate e pronunciate da Cortana per l'utente in risposta al comando vocale e crea un oggetto VoiceCommandResponse. Vedi Linee guida per la progettazione di Cortana per indicazioni su come selezionare le stringhe di feedback visualizzate e pronunciate da Cortana.
    2. Usa l'istanza di VoiceCommandServiceConnection per segnalare lo stato o il completamento a Cortana chiamando ReportProgressAsync o ReportSuccessAsync con l'oggetto VoiceCommandServiceConnection.

    Per questo esempio, facciamo di nuovo riferimento al file VCD nel passaggio 3: Edit the VCD file.

    N/A
    

Nota  

Una volta avviato, il servizio app ha 5 secondi per chiamare ReportSuccessAsync. Cortana usa i dati forniti dall'app per visualizzare e pronunciare il feedback specificato nel file VCD. Se l'app impiega più di 0,5 secondi per effettuare la chiamata, Cortana inserisce una schermata di passaggio, come mostrato di seguito. Cortana visualizza la schermata di passaggio finché l'applicazione non chiama ReportSuccessAsync o per un massimo di 5 secondi. Se il servizio app non chiama ReportSuccessAsync o uno dei metodi VoiceCommandServiceConnection che forniscono informazioni a Cortana, l'utente riceve un messaggio di errore e il servizio app viene annullato.

Una query di base con lo stato e la schermata dei risultati con l'app Adventure Works in background.

 

Riepilogo e passaggi successivi

In questa sezione abbiamo appreso come implementare comandi vocali di base mediante file VCD per avviare un'app in background da Cortana e fornire feedback tramite il canvas e la voce di Cortana.

Successivamente, impareremo a implementare comandi vocali in background che richiedono all'utente, tramite Cortana, di fornire conferme e risolvere ambiguità. Vedi Come interagire con un'app in background in Cortana.

Argomenti correlati

Interazioni con Cortana

Come definire vincoli di riconoscimento personalizzati

VCD elements and attributes v1.2

Progettisti

Linee guida per la progettazione di Cortana