Compartilhar via


Iniciar um aplicativo em segundo plano com comandos de voz na Cortana (HTML)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente]

Além de usar comandos de voz dentro da Cortana para acessar os recursos do sistema, você também pode estender a Cortana com recursos e funcionalidade de um aplicativo em segundo plano usando comandos de voz que especificam uma ação ou comando para execução dentro do aplicativo. Quando um aplicativo manipula um comando de voz em segundo plano, ele pode exibir comentários na tela da Cortana e se comunicar com o usuário usando a voz da Cortana.

Observação  

Um comando de voz é uma expressão única com um propósito específico, definido em um arquivo VCD (Definição de Comando de Voz), direcionado para um aplicativo instalado por meio da Cortana.

Uma definição de comando de voz pode variar em complexidade. Ela pode oferecer suporte a tudo, desde uma única expressão restrita até uma coleção de expressões mais flexíveis e de linguagem natural, todas indicando o mesmo propósito.

Um arquivo VCD define um ou mais comandos de voz, cada um com um propósito exclusivo.

O aplicativo de destino pode ser iniciado em primeiro plano (o aplicativo recebe foco) ou ativado em segundo plano (a Cortana retém o foco, mas fornece resultados do aplicativo), dependendo da complexidade da interação. Por exemplo, comandos de voz que exigem contexto adicional ou entrada do usuário (como enviar uma mensagem para um contato específico) são realizados com mais facilidade em um aplicativo em primeiro plano, enquanto comandos básicos podem ser realizados na Cortana por meio de um aplicativo em segundo plano.

 

Demonstraremos esses recursos aqui com um aplicativo de planejamento e gerenciamento de viagens chamado Adventure Works.

Esta é uma visão geral do aplicativo Adventure Works integrado à tela da Cortana.

Visão geral da tela da Cortana

Para exibir uma viagem do Adventure Works sem a Cortana, o usuário deve iniciar o aplicativo e navegar até a página Viagens futuras.

Usando comandos de voz por meio da Cortana para iniciar o aplicativo em segundo plano, o usuário pode apenas dizer: "Adventure Works, quando é minha viagem para Las Vegas?". O aplicativo manipula o comando, e a Cortana exibe resultados juntamente com o ícone e outras informações do aplicativo, se fornecidas. Aqui está um exemplo de uma consulta básica de viagem e a tela de resultados da Cortana que mostra e fala: "Sua próxima viagem para Las Vegas é no dia 1º de agosto".

Uma consulta básica e uma tela de resultados usando o aplicativo Adventure Works em segundo plano,

Estas são as etapas básicas para adicionar a funcionalidade de comando de voz e estender a Cortana com a funcionalidade em segundo plano do seu aplicativo usando entrada de fala ou de teclado:

  1. Crie um serviço de aplicativo (consulte Windows.ApplicationModel.AppService) que a Cortana invoca em segundo plano.
  2. Crie um arquivo VCD. Este é um documento XML que define todos os comandos falados que o usuário pode dizer para iniciar ações ou invocar comandos ao ativar seu aplicativo. Confira VCD elements and attributes v1.2.
  3. Registre os conjuntos de comandos no arquivo VCD quando o aplicativo for iniciado.
  4. Manipule a ativação em segundo plano do serviço de aplicativo e a execução do comando de voz.
  5. Exibir e falar o comentário apropriado para o comando de voz na Cortana.

Objetivo: Para saber como estender a Cortana com comandos de voz e aplicativos em segundo plano.

Pré-requisitos

Se você for iniciante no desenvolvimento de aplicativos em JavaScript:

Para concluir este tutorial, examine estes tópicos para se familiarizar com as tecnologias discutidas aqui.

Diretrizes de experiência do usuário:

Confira as Diretrizes de design da Cortana para saber como integrar seu aplicativo à Cortana e as Diretrizes de design de controle por voz para obter dicas úteis para criar um aplicativo interessante e útil habilitado para controle por voz.

Criar um serviço de aplicativo

  1. No Visual Studio, clique com o botão direito do mouse no nome da solução, selecione Add->New Project e Componente do Tempo de Execução do Windows. Este é o componente que implementará o serviço de aplicativo (consulte Windows.ApplicationModel.AppService).Observação  Ele deve ser um projeto do Visual C#.

     

  2. Digite um nome para o projeto (por exemplo, "VoiceCommandService") e clique em OK.

  3. No Gerenciador de Soluções, selecione o projeto "VoiceCommandService" e renomeie o arquivo "Class1.cs" gerado pelo Visual Studio. Para este exemplo, renomeamos o arquivo para "VoiceCommandService.cs".

  4. No "VoiceCommandService.cs", crie uma nova classe que implemente a interface IBackgroundTask. O método Run é o ponto de entrada necessário, chamado quando a Cortana reconhece o comando de voz.Observação  A classe da tarefa em segundo plano em si, e todas as outras classes no projeto da tarefa em segundo plano, precisa ser de classes públicas seladas.

     

    Aqui está uma classe de tarefa em segundo plano básica para o aplicativo Adventure Works.

    N/A
    
  5. No Visual Studio, abra seu aplicativo e declare a tarefa em segundo plano como um AppService no manifesto do aplicativo.

    1. No Gerenciador de Soluções, clique com o botão direito do mouse no arquivo "Package.appxmanifest" e selecione Exibir Código.

    2. Encontre o elemento Application.

    3. Adicione um elemento Extensions ao elemento Application.

    4. Adicione um elemento Extension ao elemento Extensions.

    5. Adicione um atributo Category ao elemento Extension e defina o valor do atributo Category como "windows.appService".

    6. Adicione um atributo EntryPoint ao elemento Extension e defina o valor do atributo EntryPoint como o nome da classe que implementa IBackgroundTask, neste caso "AdventureWorks.VoiceCommands.AdventureWorksVoiceCommandService".

    7. Adicione um elemento AppService ao elemento Extension.

    8. Adicione um atributo Name ao elemento AppService e defina o valor do atributo Name como o nome do serviço de aplicativo, neste caso "AdventureWorksVoiceCommandService".

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

Criar um arquivo VCD

  1. No Visual Studio, clique com o botão direito do mouse no nome do projeto, selecione Add->New Item e Arquivo de Texto.
  2. Digite um nome para o arquivo VCD e certifique-se de acrescentar a extensão de arquivo ".xml". Por exemplo: "AdventureWorksCommands.xml". Selecione Adicionar.
  3. No Gerenciador de Soluções, selecione o arquivo VCD.
  4. Na janela Propriedades, defina Ação de construção para Conteúdo e defina Copiar para diretório de saída como Copiar se mais recente.

Editar arquivo VCD

Para cada idioma compatível com seu aplicativo, crie um CommandSet dos comandos de voz que seu aplicativo pode manipular.

Cada Command declarado em um arquivo VCD deve incluir estas informações:

  • Um Nome de comando usado pelo aplicativo para identificar o comando de voz no tempo de execução

  • Um elemento Example que contém uma frase que descreve como um usuário pode invocar o comando. A Cortana mostra este exemplo quando o usuário diz "O que posso falar?", "Ajuda", ou quando toca em Veja mais.

  • Um elemento ListenFor que contém as palavras ou frases que o aplicativo reconhece para iniciar um comando. Cada comando precisa ter pelo menos um elemento ListenFor.

  • Um elemento Feedback que contém o texto para a Cortana exibir e falar quando o aplicativo for iniciado.

  • Um elemento VoiceCommandService para indicar que o comando de voz inicia o aplicativo em segundo plano.

Consulte a referência VCD elements and attributes v1.2 para obter mais detalhes.

Você pode especificar várias versões de idiomas para os comandos usados para ativar o aplicativo e executar um comando. Você pode criar vários elementos CommandSet, cada um com atributo xml:lang diferente para permitir que o aplicativo seja usado em diferentes mercados. Por exemplo, um aplicativo para os Estados Unidos pode ter um CommandSet para Inglês e um CommandSet para Espanhol.

Cuidado  

Para ativar um aplicativo e iniciar uma ação usando um comando de voz, o aplicativo deve registrar um arquivo VCD que contém um CommandSet com um idioma que corresponde ao idioma do comando por voz que o usuário selecionou no dispositivo. Esse idioma é definido pelo usuário na tela Settings > System > Speech > Speech Language do dispositivo.

 

Aqui está um arquivo VCD que define um comando de voz para o aplicativo Adventure Works.

Neste exemplo, CommandPrefix é definido como "Adventure Works", Command é definido como "whenIsTripToDestination", ListenFor especifica o texto que pode ser reconhecido (com uma referência para um elemento PhraseList que restringe os destinos reconhecidos), VoiceCommandService indica que o comando de voz é realizado por um serviço de aplicativo em segundo plano e Feedback especifica o que o usuário ouvirá quando a Cortana iniciar o serviço de aplicativo.

O valor do atributo Target do elemento VoiceCommandService precisa ser o nome do AppService conforme especificado no package.appxmanifest. Neste exemplo, o nome do AppService é "AdventureWorksVoiceCommandService".

O comando "whenIsTripToDestination" tem um elemento ListenFor com uma referência a um PhraseList para um conjunto restrito de destinos.

Elementos ListenFor não podem ser modificados programaticamente. Entretanto, os elementos PhraseList associados aos elementos ListenFor podem ser modificados de forma programática. Os aplicativos devem modificar o conteúdo de PhraseList no tempo de execução com base no conjunto de dados gerado conforme o usuário usa o aplicativo. Veja Como modificar dinamicamente listas de frases 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>

Instalar os comandos VCD

O aplicativo deve ser executado para instalar os conjuntos de comando no VCD.

Quando o aplicativo é ativado, chame InstallCommandSetsFromStorageFileAsync durante Launch para registrar os comandos que o sistema deve ouvir.

Observação  Se for feito um backup do dispositivo e seu aplicativo for reinstalado automaticamente, os dados de comando de voz não serão preservados. Para garantir que os dados de comando por voz para o seu aplicativo permaneçam intactos, considere inicializar o arquivo VCD toda vez que o aplicativo inicializar ou ativar ou armazene uma configuração que indique se o VCD está atualmente instalado e verifique cada vez que o aplicativo for inicializado ou ativado.

 

Aqui está um exemplo que mostra como instalar os comandos especificados por um arquivo VCD (vcd.xml).

N/A

Manipule o comando de voz no serviço de aplicativo

Especifique no serviço de aplicativo como seu aplicativo responderá às ativações por comando de voz após ele ser iniciado e os conjuntos de comandos de voz serem instalados.

  1. Obtenha o adiamento de serviço para que o serviço de seu aplicativo não seja encerrado ao manipular o comando de voz.

  2. Confirme se a tarefa em segundo plano está sendo executada como um serviço de aplicativo ativado por um comando de voz.

    1. Converta IbackgroundTaskInstance.TriggerDetails em Windows.ApplicationModel.AppService.AppServiceTriggerDetails.
    2. Verifique se IbackgroundTaskInstance.TriggerDetails.Name é o nome do serviço de aplicativo no arquivo "Package.appxmanifest".
  3. Use IbackgroundTaskInstance.TriggerDetails para criar um VoiceCommandServiceConnection para que a Cortana recupere o comando de voz.

  4. Registre um manipulador de eventos para VoiceCommandServiceConnection.VoiceCommandCompleted para receber notificação quando o serviço de aplicativo for encerrado devido a um cancelamento do usuário.

  5. Registre um manipulador de eventos para IbackgroundTaskInstance.Canceled para receber notificação quando o serviço de aplicativo for encerrado devido a uma falha inesperada.

  6. Determine o nome do comando e o que foi falado.

    1. Use a propriedade VoiceCommand.CommandName para determinar o nome do comando de voz.

    2. Para determinar o que o usuário disse, verifique o valor de Text ou das propriedades semânticas da frase reconhecida no dicionário SpeechRecognitionSemanticInterpretation.

  7. Execute a ação apropriada no serviço de aplicativo.

  8. Exibir e falar o comentário para o comando de voz com a Cortana.

    1. Determine as cadeias de caracteres que você deseja que a Cortana exiba e fale para o usuário em resposta ao comando de voz e crie um objeto VoiceCommandResponse. Consulte Diretrizes para design da Cortana para obter orientação sobre como selecionar cadeias de caracteres de comentários que a Cortana mostra e fala.
    2. Use a instância VoiceCommandServiceConnection para relatar o progresso ou conclusão de Cortana chamando ReportProgressAsync ou ReportSuccessAsync com o objeto VoiceCommandServiceConnection.

    Para este exemplo, fazemos referência ao VCD na Etapa 3: Edit the VCD file.

    N/A
    

Observação  

Uma vez iniciado, o serviço de aplicativo tem 0,5 segundo para chamar ReportSuccessAsync. A Cortana usa os dados fornecidos pelo aplicativo para mostrar e falar o comentário especificado no arquivo VCD. Se o aplicativo levar mais de 0,5 segundo para fazer a chamada, a Cortana inserirá uma tela de transição, conforme mostrado aqui. A Cortana exibe a tela de transição até que o aplicativo chame ReportSuccessAsync ou durante 5 segundos no máximo. Se o serviço de aplicativo não chamar ReportSuccessAsync, ou qualquer um dos métodos VoiceCommandServiceConnection que fornecem informações à Cortana, o usuário receberá uma mensagem de erro, e o serviço de aplicativo será cancelado.

Uma consulta básica com telas de progresso e de resultados usando o aplicativo Adventure Works em segundo plano,

 

Resumo e próximas etapas

Aqui, você aprendeu como implementar comandos de voz básicos usando arquivos VCD para iniciar um aplicativo em segundo plano da Cortana e fornecer comentários usando a tela e a voz da Cortana.

A seguir, saiba como implementar comandos de voz em segundo plano que solicitam ao usuário, por meio da Cortana, confirmação e desambiguação. Consulte Como interagir com um aplicativo em segundo plano na Cortana.

Tópicos relacionados

Interações da Cortana

Como definir restrições de reconhecimento personalizadas

VCD elements and attributes v1.2

Designers

Diretrizes para design da Cortana