Configuration d'entités de conteneur composite
Les entités de conteneur composite permettent d'écrire des définitions de flux de dialogue plus courtes, car elles peuvent être résolues à l'aide d'un seul composant (Resolve Entities ou Common Response).
-
Capturer tout le texte libre, autoriser les téléchargements de fichier et collecter la position actuelle de l'utilisateur avec les éléments STRING, ATTACHMENT et LOCATION.
-
Exécuter le comportement individuel de chaque entité membre du conteneur : vous pouvez ajouter des invites spécifiques à une valeur et des messages d'erreur aux entités individuelles du conteneur composite (y compris aux entités personnalisées, aux entités système, et aux éléments STRING, ATTACHMENT et LOCATION). Vous pouvez également contrôler les entités qui doivent (ou qui ne doivent pas) correspondre à la saisie utilisateur. Etant donné que vous pouvez créer une séquence d'invites, la brique pourra générer différentes invites pour chaque tentative utilisateur.
-
Afficher des listes à sélection multiple.
-
Valider les correspondances de valeurs en fonction des règles de validation.
-
Prendre en charge les flux imparfaits : les utilisateurs peuvent corriger les entrées précédentes.
-
Exécuter des transitions temporaires basées sur des correspondances : le flux de dialogue peut quitter temporairement le composant lorsqu'une entité a été mise en correspondance. Cela permet à autre état d'exécuter une fonction d'aide telle qu'un appel REST. Une fois la fonction terminée, le flux de dialogue revient au composant afin que la mise en correspondance des valeurs puisse continuer. Par exemple :
-
Lorsqu'un utilisateur télécharge un justificatif, celui-ci doit être numérisé de sorte que des valeurs telles que la date, le montant et le type des frais puissent être extraites pour les autres entités du conteneur. Cela permet au composant de renseigner les autres valeurs à partir du justificatif, et non à partir de la saisie utilisateur.
-
La brique génère un message tel que "Almost there, just a few more questions" entre la mise en correspondance des ensembles d'entités au sein du conteneur.
-
La saisie utilisateur doit être validée via un appel REST back-end. La validation peut nécessiter d'être exécutée immédiatement, car elle détermine les éléments du conteneur qui doivent envoyer une invite pour obtenir d'autres saisies utilisateur. L'appel peut également renvoyer des informations devant être partagées avec l'utilisateur, comme un avertissement de manquement à un contrat.
-
-
Lever les ambiguïtés des valeurs : vous pouvez isoler une valeur de la saisie utilisateur via des propriétés d'invite et de composant propres à l'entité. Cela comprend la prise en charge des corrections apportées à l'entrée précédente (flux imparfait) et l'envoi d'invites sollicitant des saisies utilisateur pour des propriétés d'entité intégrée spécifiques.
Création d'une entité de conteneur composite
-
Cliquez sur Entités
dans la barre de navigation latérale.
-
Cliquez sur Ajouter des entités.
-
Choisissez Conteneur composite comme type d'entité.
- Entrez un nom et une description.
- Cliquez sur + Gestionnaire d'événements pour exécuter l'invite et la logique du conteneur composite par programmation à l'aide de gestionnaires d'événements d'entité.
-
Cliquez sur + Elément de conteneur pour ouvrir la boîte de dialogue Ajouter un élément de conteneur. Si vous ajoutez une entité intégrée ou une entité personnalisée existante, vous pouvez créer un nom propre au conteneur pour cette entité et y ajouter une description de son rôle dans le contexte du conteneur composite.
-
Vous pouvez remplir le conteneur avec des entités personnalisées, des entités intégrées et les éléments suivants :
-
STRING : capture le texte libre de l'utilisateur.
-
LOCATION : capture la localisation de l'utilisateur.
-
ATTACHMENT : accepte les fichiers, les fichiers audio, les fichiers vidéo ou les fichiers image téléchargés par l'utilisateur. L'entité de conteneur composite stocke l'URL qui héberge la pièce jointe.
-
-
Si vous cliquez sur Fermer, vous revenez à la page Entités, mais avant cela, vous pouvez ajouter d'autres fonctionnalités propres aux conteneurs à l'élément (ou mettre ce dernier à jour ultérieurement en cliquant sur
sur la page Entités).
-
Les étapes suivantes :
- Ajoutez des messages d'erreur individuels, des invites de désambiguïsation ou des invites conditionnelles aux éléments du conteneur.
Remarque
Ceux-ci seront écrasés si vous ajoutez l'entité à un conteneur composite. -
Ajoutez l'entité à une intention. Reportez-vous à Ajout d'entités aux intentions.
-
Configurez le flux de dialogue de façon à utiliser l'entité de conteneur composite..
- Ajoutez des messages d'erreur individuels, des invites de désambiguïsation ou des invites conditionnelles aux éléments du conteneur.
Remplissage de créneau amélioré
- Seul l'élément en cours de résolution sera mis à jour. Lorsqu'une correspondance s'applique à plusieurs éléments de conteneur, l'élément de conteneur en cours de résolution est prioritaire sur les autres éléments. Si vous désactivez le remplissage amélioré des créneaux, tous les éléments sont mis à jour avec la même valeur.
- Si l'élément de résolution actuel est un élément de conteneur STRING, aucun autre élément de conteneur n'est jamais mis à jour.
- Si une correspondance d'entité s'applique à plusieurs éléments de conteneur (non résolus), une boîte de dialogue de déshomonymie s'affiche, permettant à l'utilisateur de choisir l'élément à mettre à jour au lieu de mettre à jour tous les éléments de conteneur.
- Le commutateur Invite de déshomonymie de l'entité est ignoré. Nous vous recommandons d'implémenter une déshomonymie personnalisée avec un gestionnaire d'événements d'entité.
La bascule Utiliser le remplissage d'emplacement amélioré est activée par défaut pour les briques créées à l'aide de la version 22.08 de la plate-forme. Il est désactivé pour les briques qui ont été mises à niveau vers cette version.
Ajouter des invites
-
Si vous voulez activer les invites, laissez le champ Invite pour la valeur vide (état par défaut). La saisie de
false
dans le champ Invite pour la valeur empêche l'affichage des invites. Afin d'envoyer une invite pour une valeur conditionnelle, ajoutez une expression FreeMarker booléenne qui peut prendre la valeurtrue
(pour envoyer les invites) oufalse
.Conseil :
Lorsque vous définissez Invite pour la valeur surfalse
, l'élément peut toujours être résolu comme une partie d'un autre élément pour lequel une invite est envoyée lorsque vous activez l'option Extraction dans le désordre. -
Cliquez sur Ajouter une invite pour créer la séquence d'invites. Vous pouvez réorganiser les champs en les faisant glisser ou en les renumérotant. Vous pouvez rendre la sortie des invites aléatoire lorsque vous attribuez le même numéro à deux invites ou plus.RemarqueVous pouvez stocker les invites dans des groupes de ressources (par exemple,
Vous ne pouvez ajouter des invites aux entités intégrées que lorsque vous les ajoutez à un conteneur composite.${rb.askCheese}
) ou les écrire comme des combinaisons de texte et d'expressions FreeMarker.
Mise à jour des valeurs à créneaux avec des expressions Apache FreeMarker
Dans le champ Mise à jour possible, entrez une expression Apache FreeMarker qui prend la valeur true
pour permettre la mise à jour de la valeur insérée pour un élément de conteneur composite.
Activation de l'extraction dans le désordre
- Always : option par défaut. Lorsque vous choisissez cette option pour un élément, sa valeur peut être insérée sans invite. Par exemple, l'entité PizzaSize peut être résolue lorsqu'un client saisit I want a large pizza. Cette option permet également de modifier la valeur de l'élément à tout moment, à condition que l'expression de la propriété Modifiable ne renvoie pas la valeur
false
. Par exemple, lorsque le conteneur composite envoie une invite pour l'entité PizzaType, le client peut alors répondre Veggie please, but make it a medium. La brique peut mettre à jour la valeur de l'entité PizzaSize avec la valeur medium sans redémarrer la conversation car l'option Toujours est activée pour les éléments PizzaSize et PizzaType du conteneur.Remarque
Bien que cette option soit le comportement par défaut, elle peut ne pas toujours être appropriée pour les éléments STRING. Par exemple, si vous avez choisi cette option pour un élément STRING, le premier message utilisateur sera stocké par l'élément STRING au lieu d'être mis en correspondance par l'entité prévue (qui peut être désignée comme le premier élément du conteneur à résoudre). - Jamais : lorsque vous choisissez cette option, l'élément n'est inséré qu'une fois qu'il a été demandé, même lorsque d'autres messages utilisateur contiennent des valeurs valides. Sélectionnez Jamais pour empêcher les correspondances par inadvertance.
- Uniquement lors de la résolution de la variation d'intention : limite le slot de valeur hors séquence à la première variation utilisateur qui a été résolue en intention associée à l'entité de conteneur composite.
Règle d'extraction dans le désordre | Variation utilisateur initiale | Valeur insérée | Remarques |
---|---|---|---|
Toujours | Commander une pizza au thon | Thon | L'emplacement de la valeur pour l'élément PizzaToppings peut être mis en correspondance chaque fois que le message utilisateur contient la valeur correcte ("Champignons à la place !"). Il peut s'agir d'un créneau ou d'une mise à jour à tout moment de la conversation sans invite. |
jamais | Commander une pizza au thon | Aucune. | La valeur de l'élément PizzaTopping ne peut pas être insérée dans le désordre ou mise à jour ad hoc. Elle ne peut être mise en correspondance que lorsqu'elle est demandée. |
Uniquement lors de la résolution de la variation d'intention | Commander une pizza au thon | Thon. Toutefois, si l'utilisateur a saisi "Commander une grande pizza", le conteneur composite doit demander la valeur PizzaTopping. | L'élément PizzaTopping ne peut être inséré dans le désordre que lorsque la première variation utilisateur résolue en intention a une valeur correspondante. Sinon, cette valeur doit être demandée. Le conteneur composite n'autorisera pas la mise à jour ad hoc ou le créneau de cet élément. |
Activation de l'option Extraire avec
- Le conteneur composite comporte deux entités liées à l'adresse : NamedAddress, une entité de valeur de liste contenant des valeurs comme home et office, et DeliveryAddress, une entité ADDRESS.
- L'invite de l'entité DeliveryAddress est Where do you want that delivered?
- L'entité NamedAddress ne vous invite pas à saisir des informations (la valeur false est indiquée dans le champ Invite pour la valeur).
- L'entité NamedAddress peut être extraite avec DeliveryAddress (DeliveryAddress est sélectionné dans le menu Extraire avec).
Lorsque le conteneur composite invite à saisir l'entité DeliveryAddress, il peut résoudre l'entité à l'aide d'une adresse physique ou de l'une des valeurs de liste NamedAddress (home ou office).
Ajout de règles de validation
varName
est le nom de l'entité de conteneur composite déclarée comme variable dans la définition de flux de dialogue :${varName.value.itemName}
Si l'expression renvoie la valeur False, la saisie utilisateur n'est pas valide.amount
de l'entité CURRENCY :${expense.value.Amount.amount > 4}
Amounts below 5 ${expense.value.Amount.currency} cannot be expensed. Enter a higher amount or type 'cancel'.
Pour en savoir plus sur les autres propriétés de devise (et sur les autres propriétés des entités intégrées), reportez-vous à Entités intégrées et leurs propriétés.
Configuration d'un flux de dialogue YAML pour les entités de conteneur composite
Si votre brique est développée en mode de boîte de dialogue YAML, voici ce que vous devez faire pour configurer le flux de dialogue pour les entités de conteneur composite :
-
Dans le noeud
context
, déclarez l'entité de conteneur composite en tant que variable :... metadata: platformVersion: "1.1" main: true name: "ExpenseBot" context: variables: expense: "Expense" iResult: "nlpresult"
-
Vous pouvez utiliser
System.ResolveEntities
ouSystem.CommonResponse
. Ces deux composants permettent de tirer parti de l'entité de conteneur composite tout en offrant leurs propres avantages. Le composantSystem.ResolveEntities
est le plus simple des deux. Il contient un petit ensemble de propriétés. Contrairement au composantSystem.ResolveEntities
,System.CommonResponse
vous offre plus de contrôle sur l'interface utilisateur employée pour résoudre les entités du conteneur. Par exemple, vous pouvez ajouter une logique conditionnelle afin de déterminer les invites et les actions globales liées aux valeurs.Conseil :
Etant donné que les métadonnées du composantSystem.CommonResponse
peuvent devenir très complexes lorsque vous utilisez des entités de conteneur composite, nous vous recommandons d'utiliser le composantSystem.ResolveEntities
à la place et d'utiliser des gestionnaires d'événements d'entité pour toutes les personnalisations d'interface utilisateur. -
Reportez-vous à la variable de contexte d'entité de conteneur composite dans la propriété
variable
du composant, puis définissez les autres propriétés si nécessaire. System.ResolveEntities et Propriétés de composant décrivent ces propriétés et fournissent d'autres exemples.Voici un exemple de composantSystem.ResolveEntities
:createExpense: component: "System.ResolveEntities" properties: variable: "expense" useFullEntityMatches: true nlpResultVariable: "iResult" cancelPolicy: "immediate" transitions: actions: cancel: "cancelExpense" return: "done"
Variable system.entityToResolve
system.entityToResolve
fournit des informations sur le statut en cours du processus de résolution d'entité tel qu'exécuté par les composants Résoudre les entités et Réponse commune. Vous référencez généralement les propriétés de cette valeur de variable dans les métadonnées du composant Réponse commune lorsque vous souhaitez personnaliser les messages. Vous pouvez l'utiliser pour définir la logique du message d'erreur d'une entité, ou pour diverses propriétés appartenant aux composants Résoudre les entités et Réponse commune. Ajoutez les propriétés suivantes pour renvoyer la valeur d'entité actuelle :
userInput
prompt
promptCount
updatedEntities
outOfOrderMatches
disambiguationValues
enumValues
needShowMoreButton
rangeStartVar
nextRangeStart
prompt
, errorMessage
et les règles de validation.
Sorry,'${system.entityToResolve.value.userInput!'this'}' is not a valid pizza size.
system.entityToResolve
. Parmi ces définitions se trouve un message défini pour la propriété text
, qui confirme la mise à jour d'une valeur d'entité précédemment définie à l'aide d'une directive Apache FreeMarker list
et de la propriété updatedEntities
. metadata:
responseItems:
- type: "text"
text: "<#list system.entityToResolve.value.updatedEntities>I have updated <#items as ent>${ent.description}<#sep> and </#items>. </#list><#list system.entityToResolve.value.outOfOrderMatches>I got <#items as ent>${ent.description}<#sep> and </#items>. </#list>"
- type: "text"
text: "${system.entityToResolve.value.prompt}"
actions:
- label: "${enumValue}"
type: "postback"
iteratorVariable: "system.entityToResolve.value.enumValues"
needShowMoreButton
, rangeStartVar
et nextRangeStart
: globalActions:
- label: "Show More"
type: "postback"
visible:
expression: "${system.entityToResolve.value.needShowMoreButton}"
payload:
action: "system.showMore"
variables:
${system.entityToResolve.value.rangeStartVar}: ${system.entityToResolve.value.nextRangeStart}
- label: "Cancel"
type: "postback"
visible:
onInvalidUserInput: true
payload:
action: "cancel"
Le libellé Afficher plus doit inclure une valeur system.showMore
(action: "system.showMore"
). Sinon, il ne fonctionne pas.
Expressions entityToResolve
Expression : | Description |
---|---|
${system.entityToResolve.value.resolvingField} |
Renvoie le nom de l'élément de conteneur. |
${system.entityToResolve.value.allMatches[0].entityName} |
Renvoie le nom d'entité référencé par l'élément de conteneur. Le tableau allMatches contient toutes les entités dont les valeurs peuvent potentiellement être mises à jour par le message utilisateur.
|
${<variable>1.value[system.entityToResolve.value.resolvingField]} |
Renvoie la valeur d'élément de conteneur entrée ou sélectionnée par les utilisateurs. |
${system.entityToResolve.value.userInput} |
Renvoie le texte saisi par l'utilisateur. Vous pouvez utiliser cette expression pour consigner la saisie utilisateur ou l'afficher dans la discussion, par exemple, lorsqu'un utilisateur entre une valeur non valide. |
${system.entityToResolve.value.outOfOrderMatches[n].entityName} |
Renvoie le nom des entités extraites dans le désordre. Outre les valeurs demandées par les composants Resolve Entities ou Common Response, les utilisateurs peuvent fournir des valeurs supplémentaires qui déclenchent une extraction de valeurs dans le désordre et mettent à jour d'autres entités dans le conteneur composite. |
${system.entityToResolve.value.outOfOrderMatches[n].name} |
Renvoie le nom de l'élément de conteneur composite. |
${system.entityToResolve.value.outOfOrderMatches? has_content?then(…,…)} |
Renvoie la valeur d'une entité ayant été mise en correspondance dans le désordre. Etant donne qu'il est probable qu'aucune entité n'ait été mise en correspondance dans le désordre, cette expression utilise l'opérateur has_content .
|
Gestionnaires d'événements d'entité
Vous pouvez gérer le service déployé pour l'EEH à partir de la page Composants

bots-node-sdk
. Par exemple, le fragment de code suivant illustre la définition d'un événement validate
sur un élément de conteneur appelé ExpenseDate qui empêche les utilisateurs de saisir une date future lors de la déclaration d'une note de frais.ExpenseDate: {
validate: async (event, context) => {
if (new Date(event.newValue.date) > new Date()) {
context.addValidationError("ExpenseDate",context.translate('ExpenseDate.text'));
return false;
}
}
La documentation Gestionnaires d'événements d'entité d'écriture de bots-node-sdk
décrit la structure globale du code de gestionnaire d'événements, les événements de niveau élément et entité, ainsi que les méthodes EntityResolutionContext telles que addValidationError
et translate
dans le fragment de code ci-dessus.
Etant donné que les gestionnaires d'événements d'entité sont écrits dans JavaScript, vous pouvez utiliser une logique avancée difficilement réalisable, voire impossible, avec les expressions FreeMarker que vous pouvez utiliser pour définir la validation, les erreurs et les invites dans la page Modifier l'élément de conteneur et le flux de dialogue. Ils sont également plus faciles à déboguer. Vous n'avez toutefois pas besoin de choisir entre les gestionnaires d'événements d'entité et les expressions FreeMarker. Vous pouvez les combiner. Par exemple, vous pouvez utiliser des expressions FreeMarker pour des validations et des invites simples et réserver un EEH pour des fonctions plus complexes telles que l'appel d'une API REST lorsque tous les éléments de conteneur ont été résolus.
Création de gestionnaires d'événements d'entité à l'aide de l'éditeur de code de gestionnaire d'événements
Vous pouvez créer l'EEH à l'aide de l'éditeur de code de gestionnaire d'événements accessible à partir de la page de propriétés du conteneur composite ou à l'aide de l'IDE de votre choix. Bien que l'éditeur de code de gestionnaire d'événements présente certains avantages par rapport à un outil tiers, vous pouvez alterner avec un IDE tiers en fonction de la taille de la tâche et des bibliothèques dont vous avez besoin. Pour évaluer les avantages et les inconvénients, reportez-vous à la section Quel IDE dois-je utiliser ?
- Cliquez sur + Gestionnaire d'événements.
- Renseignez la boîte de dialogue Créer un gestionnaire d'événement en ajoutant un nom de service et un nom de gestionnaire.
Une fois le gestionnaire créé, vous pouvez ouvrir l'éditeur en cliquant sur .
L'éditeur contient le code de démarrage. Son objet handlers
contient les objets entity
, items
et custom
. Au sein de ces objets, vous définissez les événements au niveau de l'événement, qui sont déclenchés pour l'ensemble du conteneur composite, les événements au niveau de l'élément, qui contrôlent la résolution des éléments de conteneur individuels, et les événements personnalisés qui sont déclenchés lors des actions de postback. Par défaut, un objet entity
est défini pour l'objet handler
. Les objets items
et custom
sont remplis lorsque vous ajoutez un modèle personnalisé ou de niveau élément.
Description de l'illustration eeh-default-template.png
event
: objet JSON des propriétés propres aux événements.context
: référence à la classe EntityResolutionContext, dont les méthodes (telles queaddValidationError
dans le fragment de code suivant) fournissent la logique du gestionnaire d'événements.
items: {
Amount: {
validate: async (event, context) => {
let amount = event.newValue.amount;
if (amount < 5) {
context.addValidationError("Amount",`Amounts below 5 ${event.newValue.currency} cannot be expensed. Enter a higher amount or type 'cancel'.`);
}
}
}
Pour plus d'informations sur le code de démarrage EEH, les événements de niveau élément et entité, EntityResolutionContext et les exemples de code, reportez-vous à la documentation
bots-node-sdk
sur l'écriture des gestionnaires d'événements d'entité.
Ajout d'événements
Par exemple, l'ajout d'un modèle d'événement
validate
alimente l'éditeur avec le code suivant :validate: async (event, context) => {
},
Vous pouvez ensuite mettre à jour ce modèle avec votre propre code :validate: async (event, context) => {
if (event.newValue.value === 'PEPPERONI')
context.addValdiationError('Type', "Sorry, no pepperoni pizzas today!");
},
Lorsque le code est valide, cliquez sur Enregistrer pour le déployer automatiquement et le packager dans un fichier TGZ. Vous pouvez surveiller le statut du déploiement et télécharger le fichier TGZ pour le réutiliser dans d'autres briques à partir de la page Composants.
Conseil :
Pour rechercher les erreurs d'exécution, activez l'option Activer la journalisation de composant, puis consultez les journaux (accessibles en cliquant sur Diagnostics > Visualiser les journaux) afin d'en savoir plus sur les paramètres qui ont appelé les événements.

Ajouter des gestionnaires d'événements de niveau entité
validate
, publishMessage
, maxPromptsReached
, resolved
, attachmentReceived
et locationReceived
.Evénement | Description |
---|---|
validate |
Gestionnaire de validations de niveau entité appelé lorsque la valeur d'au moins un des éléments de conteneur a été modifiée. |
publishMessage |
Gestionnaire de secours générique appelé chaque fois qu'un élément de conteneur n'a pas de message d'invite ou de gestion de l'homonymie. |
maxPromptsReached |
Gestionnaire de secours générique appelé lorsque le gestionnaire propre à l'élément en cas de nombre maximal d'invites atteint n'a pas été spécifié. |
resolved |
Cette fonction est appelée lorsque l'entité de conteneur composite a été résolue. En général, vous ajoutez un événement resolved pour appeler une API back-end qui termine une transaction liée aux valeurs collectées par l'entité de conteneur composite. Si l'appel d'API renvoie des erreurs car certaines valeurs collectées par le conteneur composite ne sont pas valides, vous pouvez effacer ces valeurs.
|
attachmentReceived |
Ce gestionnaire est appelé lorsque l'utilisateur envoie une pièce jointe. |
locationReceived |
Ce gestionnaire est appelé lorsque l'utilisateur envoie un emplacement. |
publishMessage
. Grâce aux fonctions updatedItemMessage
et outOfOrderItemsMessage
(qui sont également définies dans le modèle par défaut), cet événement permet à la brique de générer des messages confirmant qu'une valeur d'élément de conteneur précédemment résolue a été mise à jour ou qu'elle a accepté une entrée valide pour un élément de conteneur autre que celui que l'entité demande actuellement (entrée hors séquence).Cet événement est facultatif. Vous pouvez la supprimer, la conserver telle quelle ou y ajouter des fonctionnalités. Par exemple, vous pouvez ajouter un bouton d'annulation lorsque les tentatives de saisie d'une valeur valide d'un utilisateur ont dépassé le nombre maximal d'invites.
publishMessage: async (event, context) => {
updatedItemsMessage(context);
outOfOrderItemsMessage(context);
//Add Cancel button for invalid values entered by users
let message = context.getCandidateMessageList()[0];
}
…
message.addGlobalAction(context.getMessageFactory().createPostbackAction('Cancel', {action:'cancel'}));
context.addMessage(message); }
}
Ajouter des gestionnaires de niveau élément
shouldPrompt
, validate
, publishPromptMessage
, publishDisambiguateMessage
et MaxPromptsReached
.Evénement | Description |
---|---|
shouldPrompt |
Invite un élément en fonction des valeurs des autres éléments du conteneur. Ce gestionnaire est prioritaire sur les invites configurées via le champ Invite pour la valeur. |
validate |
Ce gestionnaire est appelé uniquement lorsqu'une valeur a été définie pour un élément de conteneur. Si la validité de la valeur dépend d'autres éléments de conteneur, vous devez implémenter l'événement validate de niveau entité à la place.
|
publishPromptMessage |
Utilisez cette fonction afin de remplacer ou d'étendre le message généré par les composants Réponse commune et Résoudre les entités pour demander l'élément. |
publishDisambiguateMessage |
Utilisez cette fonction pour remplacer ou étendre le message d'invite de désambiguïsation généré par les composants Réponse commune et Résoudre les entités. |
maxPromptsReached |
Cette fonction est appelée lorsque le nombre maximal d'invites, spécifié par l'option Nombre maximal de tentatives de saisie utilisateur sur l'écran de l'élément de conteneur composite, a été atteint pour cet élément. |
L'ajout d'un événement de niveau élément génère l'objet items
.
Description de l'illustration eeh-items-block.png
Ajouter des événements personnalisés
L'ajout d'un modèle personnalisé ajoute un objet
custom
avec l'event code de base. Pour obtenir des exemples d'implémentation d'un événement personnalisé, reportez-vous à la documentation bots-node-sdk
sur l'écriture de gestionnaires d'événements d'entité.someCustomEvent: async (event, context) => {
}
Remplacer ou supprimer un gestionnaire d'événements d'entité
- Sélectionnez une ligne vide dans le menu Gestionnaire d'événements pour réactiver le bouton + Gestionnaire d'événements.
- Ouvrez la page Composants
. Désactivez Service activé ou supprimez le service.
Remarque
Vous ne pouvez pas supprimer ou désactiver un service si l'EEH est toujours associé à l'entité de conteneur composite. - Si nécessaire, ajoutez un nouvel EEH au conteneur composite ou, si vous n'optez pas pour un nouvel EEH, vous pouvez ajouter la logique de résolution avec les expressions FreeMarker.
Conseil :
La suppression de l'entité de conteneur composite supprimera également le service déployé pour l'EEH.Quel IDE utiliser ?
bots-node-sdk pack
, ou vous pouvez utiliser l'éditeur de code de gestionnaire d'événements que nous fournissons. Lorsque vous utilisez notre éditeur, vous n'avez pas besoin de configurer votre environnement de développement, ou de packager et de déployer votre code. Le code est déployé automatiquement une fois que vous l'avez enregistré. Vous pouvez également réviser le code directement sans avoir à le déployer, ce qui n'est pas possible lorsque vous packagez et déployez un gestionnaire créé avec votre propre IDE. Vous ne pouvez pas ajouter des packages NPM supplémentaires à l'aide de l'éditeur de code de gestionnaire d'événements. Vous aurez besoin d'un autre IDE. Par exemple, si vous voulez utiliser Moment.js pour travailler sur des dates, vous devez télécharger le TGZ, ajouter la bibliothèque à l'aide de l'IDE de votre choix, puis repackager et déployer le TGZ. Ensuite, vous pouvez continuer à utiliser l'éditeur de code de gestionnaire d'événements.
Conseil :
L'éditeur de code de gestionnaire d'événements peut être une meilleure option pour de petites modifications. Si vous avez besoin d'apporter des modifications plus importantes ou d'ajouter des packages NPM supplémentaires, vous pouvez télécharger le fichier TGZ à partir de la page Composants, le décompresser, puis utiliser votre éditeur favori pour modifier le code avant de le repackager et de le déployer.Simplifier les flux de dialogue avec les gestionnaires d'événements d'entité
Les gestionnaires d'événements d'entité peuvent simplifier votre définition de flux de dialogue car ils sont utilisés avec les meilleures pratiques de raccourcissement de dialogue qui sont des entités de conteneur composite. En ce qui concerne les services back-end, ils rendent la définition de flux de dialogue moins compliquée car vous n'avez pas besoin d'écrire un état distinct pour le composant personnalisé qui les appelle.
metadata
du composant de réponse commune. A la place, vous pouvez ajouter le carrousel via du code simple, ce qui signifie que vous pouvez également ajouter des réponses de carte au composant Résoudre les entités. Par exemple, le code suivant permet au composant Résoudre les entités de générer un carrousel de cartes à défilement horizontal pour le type de pizza, chaque carte comportant un bouton Annuler :Type: {
publishPromptMessage: async (event, context) => {
let candidateMessage = context.getCandidateMessageList()[0];
const mf = context.getMessageFactory();
const message = mf.createCardMessage()
.setLayout(horizontal)
.setCards(context.getEnumValues().map(p => {
mf.createCard(p.value)
.setDescription(pizzaInfo[p.value].description)
.setImageUrl(pizzaInfo[p.value].image)
.addAction(mf.createPostbackAction('Order',{variables: {pizza: p.value}}));
})
.setGlobalActions(candidateMessage.getGlobalActions());
context.addMessage(message);
}
Tutoriels sur les gestionnaires d'événements d'entité
Suivez ce tutoriel pour vous familiariser avec les gestionnaires d'événements d'entité en créant un gestionnaire à l'aide de l'éditeur. Consultez ensuite ce tutoriel avancé pour créer un gestionnaire d'événements d'entité avec un IDE externe et bots-node-sdk
.
Désambiguïté des éléments et sous-types de poche imbriquée
startTime
et endTime
pour un sous-type INTERVAL, elle présente aux utilisateurs la valeur définie pour la propriété Libellé afin de clarifier l'entrée demandée. Conseil :
Comme pour toutes les chaînes, nous vous recommandons de définir la valeur Libellé en tant que regroupement de ressources.Ajout de l'entité DATE_TIME à un conteneur composite
Bien que vous puissiez utiliser la date, l'heure et la durée comme entités autonomes, nous vous recommandons de les utiliser dans les entités de conteneur composite.
- Avant de créer un élément de conteneur DATE_TIME, configurez les règles de résolution des ambiguïtés de date et d'heure appropriées à votre cas d'emploi. Par exemple, si vous créez une brique de note de frais, sélectionnez Passé. Si la brique est un planificateur de réunions, sélectionnez Futur.
- Dans l'entité de conteneur composite, cliquez sur Ajouter un élément.
- Sélectionnez Entité dans le menu Type.
- Sélectionnez DATE_TIME dans le menu Nom de l'entité.
- Choisissez un sous-type DATE_TIME dans le menu Sous-type.
Les options de configuration de la page Ajouter un élément de poche varient en fonction du sous-type sélectionné. Par exemple, si vous sélectionnez le sous-type Récurrent, vous pouvez accéder aux options de configuration des éléments de conteneur imbriqué spécifiques à la définition d'un événement récurrent, telles que l'objet Date et heure pour la date et l'heure de début initiales et l'objet Durée pour la définition de la fréquence d'événement. - Si vous avez sélectionné les sous-types Récurrent ou Intervalle :
- Définissez les valeurs de sous-type que le conteneur composite invite à saisir dans le menu Invite pour.
- Etant donné que les réunions commencent et se terminent généralement le même jour, activez l'option Date de fin par défaut à la date de début pour le sous-type
startDate
. La date de fin est alors identique à la date de début lorsque le message utilisateur ne mentionne pas la date de fin (ou lorsque la date de fin n'est pas extraite dans l'ordre).
- Ajoutez éventuellement une étiquette d'homonymie si l'entrée utilisateur peut correspondre à plusieurs sous-types.
Conseil :
Vous pouvez également configurer les propriétés qui ne sont pas spécifiques à DATE_TIME, telles que renseignement amélioré des emplacements, mise à jour des valeurs d'emplacement avec Apache FreeMarker, des invites personnalisées et des messages d'erreur. - Vous pouvez accéder à la configuration de niveau sous-type en cliquant sur un sous-type. Utilisez la traversée pour revenir à la configuration de niveau article.
- Les étapes suivantes :
- Associez l'entité de conteneur composite à l'intention.
- Déclarez une variable pour l'entité dans le flux de dialogue.
- Dans le flux de dialogue, référencez l'entité de conteneur composite avec l'élément DATE_TIME à l'aide de l'état Résoudre le conteneur composite.
- Les valeurs DATE_TIME sont représentées au format ISO 8601. Pour une sortie conviviale, utilisez Apache FreeMarker
.xs
intégré. Dans le fragment de code suivant, la valeur du sous-type Heure est formatée à l'aide de.value?time.xs?string['hh:mm a']
.
Au lieu de référencer l'élément DATE_TIME en tant que chaîne, vous pouvez suivre l'approche recommandée pour le référencer dans un groupe de ressources, commeYour pizza will be delivered at ${pizza.value.deliveryTime.value?time.xs?string['hh:mm a']}.
DeliveryMessage
dans l'exemple suivant.
Pour le message de groupe de ressources${rb('DeliveryMessage','time',pizza.value.deliveryTime.value?time.xs?string['hh:mm a'])}
DeliveryMessage
, la valeur est affichée via le paramètre{time}
:Your pizza will be delivered at {time}.
Tutoriel : extraction d'entités réelles à l'aide d'entités de conteneur composite
Vous pouvez obtenir un aperçu pratique de la création d'un conteneur composite en suivant ce tutoriel : Activation de l'extraction d'entités réelles à l'aide d'entités de conteneur composite.