Compartilhar via


Como dar suporte a comandos de voz em linguagem natural 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]

Saiba como a Cortana pode ser estendida com comandos de voz mais flexíveis e naturais, que permitem que o usuário diga o nome do aplicativo em qualquer lugar do comando.

A extensão da Cortana por meio de comandos de voz requer que o usuário indique o aplicativo e o comando ou a função específica a ser executada. Normalmente, isso é feito anunciando o nome do aplicativo no início do comando de voz. Por exemplo, "Adventure Works, adicione uma nova viagem para Las Vegas."

Porém, pode parecer estranho, artificial ou pode não fazer sentido especificar o nome do aplicativo antes do comando. Em muitos casos, a capacidade de dizer o nome do aplicativo em outro lugar do comando é mais confortável e natural, e ajuda a tornar a interação muito mais intuitiva e atraente para o usuário. Nosso exemplo anterior, "Adventure Works, adicione uma nova viagem para Las Vegas." poderia ser reformulado como "Adicione uma nova viagem do Adventure Works para Las Vegas." ou "Adicione uma nova viagem para Las Vegas usando o Adventure Works."

Você pode configurar os comandos de voz para dar suporte ao nome do aplicativo como um:

  • Prefixo - antes da frase de comando
  • Infixo - na frase de comando
  • Sufixo - após a frase de comando

Pré-requisitos

Este tópico complementa Iniciar um aplicativo em segundo plano com comando de voz na Cortana. Continuaremos demonstrando recursos com um aplicativo de planejamento e gerenciamento de viagens chamado Adventure Works.

Para concluir este tutorial, dê uma olhada nestes tópicos para se familiarizar com as tecnologias discutidas aqui.

Instruções

Etapa 1: Especifique um elemento AppName no VCD

O elemento AppName é usado para especificar um nome amigável para um aplicativo em um comando de voz.

<AppName>Adventure Works</AppName>

Etapa 2: Especifique em que parte do comando de voz o nome do aplicativo pode ser falado

O elemento ListenFor tem um atributo RequireAppName que especifica onde o nome do aplicativo pode aparecer no comando de voz. Esse atributo dá suporte a quatro valores.

  1. BeforePhrase

    O padrão.

    Indica que os usuários devem dizer o nome do aplicativo antes da frase de comando.

    Assim, a Cortana ouve "Adventure Works quando é minha viagem para Las Vegas".

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

    Indica que os usuários devem dizer o nome do aplicativo depois da frase de comando.

    Uma lista de frases localizadas de conjunções preposicionais é fornecida pelo sistema. Ela inclui frases como "usando", "com" e "em".

    Assim, a Cortana ouve comandos como "Mostre minha próxima viagem para Las Vegas no Adventure Works" e "Mostre minha próxima viagem para Las Vegas usando o Adventure Works".

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

    Indica que os usuários devem dizer o nome do aplicativo antes ou depois da frase de comando.

    Para a versão de sufixo, uma lista de frases localizadas de conjunções preposicionais é fornecida pelo sistema. Ela inclui frases como "usando", "com" e "em".

    Assim, a Cortana ouve comandos como "Adventure Works, mostre minha próxima viagem para Las Vegas" ou "Mostre minha próxima viagem para Las Vegas no Adventure Works".

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

    Indica que os usuários devem dizer o nome do aplicativo exatamente onde você especificar na frase comando. O usuário não precisa dizer o nome do aplicativo antes ou depois da frase.

    Você deve fazer referência explícita ao nome do aplicativo usando a marca {builtin:AppName}.

    Assim, a Cortana ouve comandos como "Adventure Works, mostre minha próxima viagem para Las Vegas" ou "Mostre minha próxima viagem do Adventure Works para Las Vegas".

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

Etapa 3: Casos especiais

Ao declarar um elemento ListenFor, onde RequireAppName está "AfterPhrase" ou "ExplicitlySpecified", determinados requisitos devem ser atendidos:

  1. {builtin:AppName} deve aparecer uma única vez quando RequireAppName estiver "ExplicitlySpecified".

    Com esse valor, o sistema não pode inferir onde o nome do aplicativo pode aparecer no comando de voz. Você deve especificar explicitamente o local.

  2. O comando de voz não pode começar com um elemento PhraseTopic, que normalmente é usado para o reconhecimento de fala de grande vocabulário. Deve haver pelo menos uma palavra antes dele.

    Isso ajuda a minimizar a chance da Cortana iniciar seu aplicativo caso um comando contenha o nome do aplicativo ou parte dele em qualquer lugar da expressão.

    Esta é uma declaração inválida que poderia fazer a Cortana iniciar o aplicativo Adventure Works se o usuário dissesse algo como "Mostre-me críticas do Kinect adventure works".

    <ListenFor RequireAppName="ExplicitlySpecified">{searchPhrase} {builtin:AppName}</ListenFor>
    
  3. Deve haver pelo menos duas palavras na cadeia de caracteres ListenFor além do nome do aplicativo e referências a elementos PhraseTopic.

    Semelhante ao caso 2, você precisa garantir que seus comandos tenham conteúdo fonético suficiente para minimizar as chances do aplicativo ser iniciado sem querer.

    Isso ajuda a configurar o aplicativo para o maior sucesso possível, de forma que ele não seja iniciado incorretamente quando o usuário disser, por exemplo, "Localizar Kinect Adventure works".

    Estas são declarações inválidas que poderiam fazer a Cortana iniciar o aplicativo Adventure Works quando o usuário dissesse algo como "Ei adventure works" ou "Localizar Kinect adventure works".

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

Comentários

O suporte a mais variações de como um comando de voz pode ser expresso pelo usuário na Cortana também aumenta a usabilidade geral do aplicativo.

Evite definir "Ei [nome do aplicativo]" como AppName ou CommandPrefix. Os usuários têm muito mais probabilidade de dizer "Ei Cortana" para invocar a Cortana por meio de ativação por voz e "Ei [nome do aplicativo]" na expressão não parece natural. Por exemplo, "Ei Cortana, mostre minha próxima viagem para Las Vegas no Ei Adventure Works".

Considere a adição de variações de infixo/sufixo para os comandos de voz existentes. Como mostramos aqui, não é muito difícil adicionar mais um atributo aos elementos ListenFor existentes, nem dar suporte a variações de sufixo. Parece muito mais natural dizer "Ei Cortana, mostre minha próxima viagem para Las Vegas no Adventure works" que "Ei Cortana, Adventure Works, mostre minha próxima viagem para Las Vegas".

Considere usar o nome do aplicativo como prefixo quando o comando de voz estiver em conflito com a funcionalidade da Cortana existente (chamada, mensagens e assim por diante). Por exemplo, "Adventure Works, mensagem [agente de viagem] sobre viagem para Las Vegas".

Exemplo completo

Este é um arquivo VCD que demonstra várias formas de fornecer comandos de voz em linguagem mais natural.

Observação  Isso vale para ter vários elementos ListenFor, cada um com um valor de atributo RequireAppName diferente.

 

<?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>

Tópicos relacionados

Interações da Cortana (HTML)

VCD elements and attributes v1.2

Designers

Diretrizes para design da Cortana