Cómo admitir comandos de voz en lenguaje natural en Cortana (HTML)

[ Este artículo está destinado a desarrolladores de Windows 8.x y Windows Phone 8.x que escriben aplicaciones de Windows en tiempo de ejecución. Si estás desarrollando para Windows 10, consulta la documentación más reciente

Aprende cómo Cortana puede ampliarse con comandos de voz más flexibles y naturales que permitan al usuario decir el nombre de la aplicación en cualquier lugar del comando.

La ampliación de Cortana mediante comandos de voz requiere que el usuario indique tanto la aplicación como el comando específico o la función que se quiere ejecutar. Por lo general, esto se logra al anunciar el nombre de la aplicación al principio del comando de voz. Por ejemplo, "Adventure Works, agregar un nuevo viaje a Las Vegas."

Sin embargo, especificar el nombre de la aplicación antes del comando puede resultar incómodo, forzado o incluso carecer de sentido. En muchos casos, poder decir el nombre de la aplicación en otro lugar del comando es más cómodo y natural y ayuda a que la interacción sea mucho más intuitiva y atractiva para el usuario. Nuestro ejemplo anterior, "Adventure Works, agregar un nuevo viaje a Las Vegas." puede cambiarse a "Agregar un nuevo viaje de Adventure Works a Las Vegas." o "Agregar un nuevo viaje a Las Vegas con Adventure Works."

Puedes configurar los comandos de voz para admitir el nombre de la aplicación como:

  • Prefijo (antes de la frase de comando)
  • Infijo (dentro de la frase de comando)
  • Sufijo (después de la frase de comando)

Requisitos previos

Este tema se basa en Iniciar una aplicación en segundo plano con los comandos de voz en Cortana. A continuación, se muestran las funciones con una aplicación de administración y planificación de viajes llamada Adventure Works.

Para completar este tutorial, echa un vistazo a los siguientes temas para familiarizarte con las tecnologías que se tratan aquí:

Instrucciones

Paso 1: Especifica un elemento AppName en la VCD:

El elemento AppName se usa para especificar un nombre descriptivo de una aplicación en un comando de voz.

<AppName>Adventure Works</AppName>

Paso 2: Especificar dónde se puede decir el nombre de la aplicación en el comando de voz

El elemento ListenFor tiene un atributo RequireAppName que especifica los lugares en que el nombre de la aplicación puede aparecer en el comando de voz. Este atributo admite cuatro valores.

  1. BeforePhrase

    Predeterminado.

    Indica que los usuarios deben decir el nombre de la aplicación antes de la frase de comando.

    Aquí, Cortana espera escuchar "Adventure Works cuándo es mi viaje a Las Vegas".

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

    Indica que los usuarios deben decir el nombre de la aplicación después de la frase de comando.

    El sistema ofrece una lista de frases localizada de conjunciones preposicionales. Esto incluye frases como "mediante", "con" y "en".

    Aquí, Cortana espera escuchar comandos como "Mostrar mi próximo viaje a Las Vegas en Adventure Works" y "Mostrar mi próximo viaje a Las Vegas mediante Adventure Works".

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

    Indica que los usuarios deben decir el nombre de la aplicación antes o después de la frase de comando.

    En la versión sufijo, el sistema ofrece una lista de frases localizada de conjunciones preposicionales. Esto incluye frases como "mediante", "con" y "en".

    Aquí, Cortana espera escuchar comandos como "Adventure Works, muestra mi próximo viaje a Las Vegas" o "Mostrar mi último viaje a Las Vegas en Adventure Works".

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

    Indica que los usuarios deben decir el nombre de la aplicación exactamente dónde lo especificas en la frase de comando. No es necesario que el usuario diga el nombre de la aplicación antes o después de la frase.

    Debes hacer referencia explícita al nombre de la aplicación con la etiqueta {builtin:AppName}.

    Aquí, Cortana espera escuchar comandos como "Adventure Works, muestra mi próximo viaje a Las Vegas" y "Mostrar mi próximo viaje de Adventure Works a Las Vegas".

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

Paso 3: Casos especiales

Al declarar un elemento ListenFor donde RequireAppName es "AfterPhrase" o "ExplicitlySpecified", debes asegurarte de que se cumplan ciertos requisitos:

  1. {builtin:AppName} debe aparecer una y solo una vez cuando RequireAppName es "ExplicitlySpecified".

    Con este valor, el sistema no puede deducir que el nombre de la aplicación puede aparecer en el comando de voz. Debes especificar explícitamente la ubicación.

  2. No es posible tener un comando de voz que comience con un elemento PhraseTopic, que suele usarse para el reconocimiento de voz de vocabularios grandes. Al menos una palabra debe precederlo.

    Esto ayuda a minimizar la posibilidad de que Cortana inicie la aplicación si un comando contiene el nombre de la aplicación o parte de ella, en cualquier parte de la expresión.

    Esta es una declaración no válida que podría dar lugar a que Cortana inicie la aplicación Adventure Works si el usuario dice algo como "Mostrar reseñas sobre Kinect adventure works".

    <ListenFor RequireAppName="ExplicitlySpecified">{searchPhrase} {builtin:AppName}</ListenFor>
    
  3. Debe haber al menos dos palabras en la cadena ListenFor además del nombre de la aplicación y las referencias a los elementos PhraseTopic.

    Igual que en el caso 2, deberás asegurarte de que los comandos tienen contenido fonético suficiente para minimizar las posibilidades de que la aplicación se inicie de forma accidental.

    Esto ayuda a configurar la aplicación para que tenga el mejor funcionamiento posible, de forma que la aplicación no se inicie de forma incorrecta cuando el usuario dice, por ejemplo, "Buscar Kinect Adventure works".

    Estas son declaraciones no válidas que podrían dar lugar a que Cortana iniciara la aplicación Adventure Works si el usuario dice algo como "Hola adventure works" o "Buscar Kinect adventure works".

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

Observaciones

Al admitir más variación en la forma en que un usuario puede decir un comando de voz en Cortana, también se aumenta la facilidad de uso general de la aplicación.

Evitar tener "Hola [nombre de la aplicación]" como tu AppName o CommandPrefix. Es mucho más probable que los usuarios digan "Hola Cortana" para invocar a Cortana mediante la activación por voz y tener "Hola [nombre de la aplicación]" en la expresión no suena natural. Por ejemplo, "Hola Cortana, muéstrame mi próximo viaje a Las Vegas en Hola Adventure Works".

Considera agregar variaciones de infijo y sufijo en los comandos de voz existentes. Como se ha mostrado aquí, no hay que realizar mucho esfuerzo para agregar un atributo adicional a los elementos ListenFor existentes y admitir variantes de sufijo. Resulta mucho más natural decir "Hola Cortana, muéstrame mi próximo viaje a Las Vegas en Adventure works" en lugar de "Hola Cortana, Adventure Works, muéstrame mi próximo viaje a Las Vegas".

Considera la posibilidad de usar el nombre de la aplicación como un prefijo en los casos donde el comando de voz entre en conflicto con funcionalidades de Cortana existentes (llamadas, mensajes, etc.). Por ejemplo, "Adventure Works, envía un mensaje a [agente de viajes] sobre el viaje a Las Vegas".

Ejemplo completo

Este es un archivo VCD que muestra varias maneras de ofrecer comandos de voz con lenguaje más natural.

Nota  Está permitido disponer de varios elementos ListenFor, cada uno con un valor de atributo RequireAppName distinto.

 

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

Temas relacionados

Interacciones de Cortana (HTML)

VCD elements and attributes v1.2

Diseñadores

Directrices para el diseño de Cortana