Partager via


Modifier dynamiquement les listes d’expressions VCD Cortana

Avertissement

Cette fonctionnalité n’est plus prise en charge à partir de la mise à jour Windows 10 Update de mai 2020 (version 2004, nom de code « 20H1 »).

Accédez à la liste des expressions prises en charge (éléments PhraseList ) dans un fichier VCD (Voice Command Definition) au moment de l’exécution à l’aide du résultat de la reconnaissance vocale.

Remarque

Une commande vocale est un énoncé unique avec une intention spécifique, définie dans un fichier VCD (Voice Command Definition), dirigé vers une application installée via Cortana.

Un fichier VCD définit une ou plusieurs commandes vocales, chacune avec une intention unique.

Les définitions de commande vocale peuvent varier en complexité. Ils peuvent prendre en charge n’importe quoi d’un énoncé unique et limité à une collection d’énoncés de langage naturel plus flexibles, tout en indiquant la même intention.

La modification dynamique d’une liste d’expressions au moment de l’exécution est utile si la commande vocale est spécifique à une tâche impliquant un type de données d’application définies par l’utilisateur ou temporaires.

Par exemple, supposons que vous disposez d’une application de voyage où les utilisateurs peuvent entrer des destinations et que vous souhaitez que les utilisateurs puissent démarrer l’application en disant le nom de l’application suivi de « Afficher le voyage vers <la destination> ». Dans l’élément ListenFor lui-même, vous spécifiez quelque chose comme : <ListenFor> Show trip to {destination} </ListenFor>, où « destination » est la valeur de l’attribut Label pour phraseList.

La mise à jour de la liste d’expressions au moment de l’exécution élimine la nécessité de créer un élément ListenFor distinct pour chaque destination possible. Au lieu de cela, vous pouvez remplir dynamiquement PhraseList avec des destinations spécifiées par l’utilisateur au fur et à mesure qu’il entre ses itinéraires.

Pour plus d’informations sur PhraseList et d’autres éléments VCD, consultez la référence des éléments et attributs VCD v1.2.

Conseil

Conditions préalables

Si vous débutez avec le développement d’applications plateforme Windows universelle (UWP), consultez ces rubriques pour vous familiariser avec les technologies présentées ici.

Instructions relatives à l’expérience utilisateur

Consultez les instructions de conception de Cortana pour obtenir des informations sur l’intégration de votre application à Cortana et aux interactions vocales pour obtenir des conseils utiles sur la conception d’une application prenant en charge la reconnaissance vocale utile et attrayante.

Identifier la commande et mettre à jour la liste d’expressions

Voici un exemple de fichier VCD qui définit une commande « showTripToDestination » et une PhraseList qui définit trois options pour la destination dans notre application de voyage Adventure Works . Lorsque l’utilisateur enregistre et supprime des destinations dans l’application, l’application met à jour les options dans PhraseList.

<?xml version="1.0" encoding="utf-8"?>
<VoiceCommands xmlns="https://schemas.microsoft.com/voicecommands/1.1">
  <CommandSet xml:lang="en-us" Name="AdventureWorksCommandSet_en-us">
    <AppName> Adventure Works, </AppName>
    <Example> Show trip to London </Example>

    <Command Name="showTripToDestination">
      <Example> show trip to London  </Example>
      <ListenFor> show trip to {destination} </ListenFor>
      <Feedback> Showing trip to {destination} </Feedback>
      <Navigate/>
    </Command>

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

  </CommandSet>

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

</VoiceCommands>

Pour mettre à jour un élément PhraseList dans le fichier VCD, obtenez l’élément CommandSet qui contient la liste d’expressions. Utilisez l’attribut Name de cet élément CommandSet (Name doit être unique dans le fichier VCD) comme clé pour accéder à la propriété VoiceCommandManager.InstalledCommandSets et obtenir la référence VoiceCommandSet.

Une fois que vous avez identifié le jeu de commandes, obtenez une référence à la liste d’expressions que vous souhaitez modifier et appeler la méthode SetPhraseListAsync ; utilisez l’attribut Label de l’élément PhraseList et un tableau de chaînes comme nouveau contenu de la liste d’expressions.

Remarque

Si vous modifiez une liste d’expressions, la liste d’expressions entière est remplacée. Si vous souhaitez insérer de nouveaux éléments dans une liste d’expressions, vous devez spécifier les éléments existants et les nouveaux éléments de l’appel à SetPhraseListAsync.

Dans cet exemple, nous mettons à jour la liste d’expressions indiquée dans l’exemple précédent avec une destination supplémentaire vers Phoenix.

Windows.ApplicationModel.VoiceCommands.VoiceCommandDefinition.VoiceCommandSet commandSetEnUs;

if (Windows.ApplicationModel.VoiceCommands.VoiceCommandDefinitionManager.
      InstalledCommandSets.TryGetValue(
        "AdventureWorksCommandSet_en-us", out commandSetEnUs))
{
  await commandSetEnUs.SetPhraseListAsync(
    "destination", new string[] {"London", "Dallas", "New York", "Phoenix"});
}

Notes

L’utilisation d’une phraseList pour limiter la reconnaissance est appropriée pour un ensemble ou des mots relativement petits. Lorsque l’ensemble de mots est trop volumineux (des centaines de mots, par exemple), ou ne doit pas être limité du tout, utilisez l’élément PhraseTopic et un élément Subject pour affiner la pertinence des résultats de reconnaissance vocale afin d’améliorer la scalabilité.

Dans notre exemple, nous avons une phraseTopique avec un scénario de « Recherche », plus affiné par un sujet de « City\State ».

<?xml version="1.0" encoding="utf-8"?>
<VoiceCommands xmlns="https://schemas.microsoft.com/voicecommands/1.1">
  <CommandSet xml:lang="en-us" Name="AdventureWorksCommandSet_en-us">
    <AppName> Adventure Works, </AppName>
    <Example> Show trip to London </Example>

    <Command Name="showTripToDestination">
      <Example> show trip to London  </Example>
      <ListenFor> show trip to {destination} </ListenFor>
      <Feedback> Showing trip to {destination} </Feedback>
      <Navigate/>
    </Command>

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

    <PhraseTopic Label="destination" Scenario="Search">
      <Subject>City/State</Subject>
    </PhraseTopic>

  </CommandSet>