Composants d'interface utilisateur

Il s'agit des composants disponibles dans la catégorie Interface utilisateur de l'éditeur de flux de dialogue basé sur YAML.

Appuyez-vous sur les composants suivants pour afficher le texte et les éléments d'interface à l'utilisateur :

System.CommonResponse

Le composant System.CommonResponse vous permet de créer des messages avec des fonctionnalités d'interface utilisateur enrichies telles que des carrousels de cartes avec des images et des boutons d'action, ou des formulaires avec des tables et des champs d'entrée.

Remarque

Cette rubrique traite de l'utilisation de ce composant en mode YAML. Pour plus d'informations sur son utilisation dans le concepteur de flux visuel, voir Modèles de composant de réponse communs.

Les modèles pour System.CommonResponse sont disponibles dans la section Messagerie utilisateur de la boîte de dialogue Ajouter un composant.

La façon dont vous créez des messages en fonction de ce composant dépend du mode de dialogue de la brique. En mode YAML, vous modifiez les modèles d'état du composant OBotML. Le processus est simplifié en mode visuel, où vous pouvez créer ces messages d'interface utilisateur enrichie en mettant simplement à jour les champs et les métadonnées d'élément de réponse dans la fenêtre de propriétés des modèles de messagerie utilisateur basés sur un composant de réponse commune. Pour les briques basées sur YAML, vous pouvez voir un exemple d'utilisation du composant System.CommonResponse dans CrcPizzaBot : l'un des exemples de bots. Dans cette présentation de PizzaBot, vous pouvez afficher un menu riche en images avec les boutons d'action rapide Commander maintenant. Dans le contexte du composant System.CommonResponse, les différents types de message sont appelés types de réponse. CrcPizzaBot vous montre, entre autres, comment les utilisateurs de bot peuvent répondre aux invites à l'aide des boutons d'action et comment afficher le menu de pizza en tant que cascade des éléments de carte.

Dans le menu Ajouter un composant, vous pouvez sélectionner différents modèles System.CommonResponse pour les réponses de carte, de texte et de pièce jointe et les entités de conteneur composite (illustrées par CbPizzaBot). Ces modèles incluent des propriétés communes à toutes ces propriétés de type de réponse et propres à chaque type de réponse. Alors que le menu Ajouter un composant ajoute des états distincts pour chaque type de réponse, vous pouvez combiner des types de réponse en un seul état. CrcPizzaBot affiche des exemples des deux cas dans l'état ShowMenu (réponse de texte) et dans l'état OrderPizza (réponses de texte et de carte).

Remarque

Vous devez tester chaque brique dans vos canaux cible au début du cycle de développement afin de vous assurer que les composants s'affichent comme souhaité.

Propriétés de composant

La configuration des composants System.CommonResponse implique la définition de propriétés qui dirigent le moteur de dialogue avec des propriétés de métadonnées qui décrivent non seulement la façon dont le composant livre les messages (comme les invites de texte, les cartes ou les pièces jointes), mais également la définition du contenu et du comportement pour les messages eux-mêmes.

Nom Description Requis ?
metadata La réponse à la discussion créée par ce composant est orientée par le contenu de la propriété metadata. Reportez-vous à Propriété Metadata dans Composants de réponse communs. Oui
processUserMessage Définissez cette propriété sur true pour que le moteur de dialogue revienne à l'état après que l'utilisateur saisit du texte ou appuie sur un bouton. Définissez cette propriété sur false si aucune entrée utilisateur n'est requise (ou attendue).

Définissez cette propriété sur true lorsque vous définissez un emplacement.

Oui
autoNumberPostbackActions Cette propriété est utilisée pour les conteneurs composites, les réponses de texte et les réponses de carte. Lorsqu'elle est définie sur true, cette option ajoute des nombres en tant que préfixes à des options. Même si vous n'avez pas défini cette option sur true, la numérotation automatique peut être appliquée aux éléments de carte lorsque la configuration Activer la numérotation automatique sur les actions de postback de l'assistant numérique est définie sur true. Comme démontré par sa configuration par défaut, la numérotation automatique propre au canal peut être appliquée à tout bot de brique inscrit dans un assistant numérique (${(system.channelType=='twilio')?then('true','false')}) : Non
variable

Cette variable contient le nom du contexte ou de la variable utilisateur rempli lorsqu'un utilisateur répond en entrant du texte libre au lieu d'appuyer sur un bouton. Cette propriété est ignorée lorsqu'un utilisateur appuie sur un bouton, car la charge utile du bouton détermine les valeurs des variables à définir. Si la propriété de variable a déjà été définie lorsque le moteur de dialogue entre dans cet état, l'état est ignoré.

Pour les entités de conteneur composite, référencez la variable d'entité de conteneur composite. Les utilisateurs sont invités à saisir les différentes valeurs d'entité dans le conteneur. Lorsque toutes les valeurs d'entité sont définies, le composant passe à l'état suivant.

Non
nlpResultVariable Définit la propriété variable avec une valeur d'entité (si cette valeur d'entité n'a pas encore été définie pour la variable référencée). Vous pouvez activer la fonction nlpResultVariable pour renvoyer une valeur lorsque vous la définissez à l'aide d'une variable contenant les résultats du traitement du langage naturel (par exemple, iResult: "nlpresult" qui est utilisé dans nos exemples de bots). Ainsi, la propriété nlpResultVariable peut toujours remplir la valeur lorsqu'elle est NULL si elle trouve une entité résolue correspondant à celle référencée par la variable. La boîte de dialogue passe à l'état suivant lorsque nlpResultVariable définit la valeur. Vous pouvez utiliser cette propriété à la place du composant System.SetVariable. Non
useFullEntityMatches Lorsque cette propriété est définie sur true, les valeurs d'entité personnalisée sont stockées en tant qu'objets JSON (comme les valeurs d'entité intégrée). Vous pouvez ainsi créer des expressions pour accéder aux propriétés telles que value, primaryLanguageValue et originalString, qui sont particulièrement importantes pour les briques actuellement multilingues ou susceptibles de le devenir. Non
maxPrompts Pour que le composant System.CommonResponse puisse remplir la valeur de variable que vous avez indiquée pour la propriété variable à partir du texte saisi par l'utilisateur, il valide la valeur par rapport au type de variable. Il peut s'agir d'une validation de type d'entité ou, dans le cas d'un type primitif, d'une valeur qui peut être contrainte au type primitif.

Lorsque le composant ne peut pas valider la valeur, le moteur de dialogue renvoie le texte du message et les options. (Vous pouvez modifier ce message pour refléter l'échec de la validation.) Pour éviter une boucle infinie résultant de l'incapacité de l'utilisateur à entrer une valeur valide, utilisez cette propriété afin de définir une limite sur le nombre de tentatives accordé à l'utilisateur. Lorsque l'utilisateur dépasse ce nombre, le composant System.CommonResponse passe à l'action cancel. Reportez-vous à Limitation du nombre d'invites utilisateur.

Comme décrit dans Création d'une entité de conteneur composite, des entités dans le conteneur composite peuvent remplacer ce paramètre lorsque l'option Nombre maximal de tentatives de saisie utilisateur est définie.

Non
keepTurn La propriété keepTurn s'applique uniquement lorsque vous définissez la propriété processUserMessage sur false. Pour savoir comment définir cette propriété, reportez-vous à System.Output. Non
translate Utilisez cette propriété afin de remplacer la valeur booléenne que vous avez définie pour la variable de contexte autotranslate. Si vous n'avez pas défini cette variable ou si vous l'avez définie sur false, vous pouvez définir cette propriété sur true afin d'activer la traduction automatique pour ce composant uniquement. Si vous définissez la variable autotranslation sur true, vous pouvez définir cette propriété sur false pour exclure ce composant de la traduction automatique. Reportez-vous à Services de traduction dans les briques. Non
footerText Améliore la sortie sur les canaux de texte uniquement. Comme décrit dans Pieds de page, vous pouvez utiliser des expressions FreeMarker afin d'appliquer des conditions au texte de pied de page pour les canaux de texte uniquement. Non
transitionAfterMatch (obsolète) Valeur booléenne qui, lorsque vous la définissez sur true, permet une transition temporaire de la correspondance d'entité effectuée par ce composant vers un autre état. Cette propriété n'est plus prise en charge. Pour obtenir cette fonctionnalité, utilisez un gestionnaire d'événements d'entité. Non
cancelPolicy Détermine le moment de la transition cancel :
  • immediate : immédiatement après que la valeur définie pour le nombre maximal de tentatives de saisie utilisateur de l'élément de conteneur a été atteinte. Si cette valeur n'a pas été définie, le composant déclenche cette transition lorsque la valeur maxPrompts de niveau composant est atteinte.

  • lastEntity : lorsque la dernière entité dans le conteneur a été mise en correspondance avec une valeur.

Cette propriété est ignorée si vous avez inscrit un gestionnaire d'événements d'entité auprès d'un gestionnaire maxPromptsReached de niveau élément ou de niveau événement.
Non

Voici le YAML pour un exemple d'état basé sur le composant System.CommonResponse.

  AskPizzaSize:
    component: "System.CommonResponse"
    properties:
      variable: "pizzaSize"
      nlpResultVariable: "iresult"
      maxPrompts: 2
      metadata:
        responseItems:
        - type: "text"
          text: "<#if system.invalidUserInput == 'true'>Invalid size, please try again.\
            \ </#if>What size do you want?"
          name: "What size"
          separateBubbles: true
          actions:
          - label: "${enumValue}"
            type: "postback"
            payload:
              action: ""
              variables:
                pizzaSize: "${enumValue}"
            name: "size"
            iteratorVariable: "pizzaSize.type.enumValues"
      processUserMessage: true
    transitions:
      actions:
        cancel: "Intent"
      next: "AskLocation" 

Conseil :

La propriété text dans ce fragment de code est définie à l'aide du langage FTL (FreeMarker Template Language) Apache. Pour savoir comment ajouter des expressions FTL et utiliser les opérations intégrées FreeMarker afin de transformer les valeurs de variable, reportez-vous à Syntaxe de langage FTL Apache.

Transitions pour le composant System.CommonResponse

Les composants de réponse communs utilisent les transitions suivantes.
Transition Description
cancel Déclenché lorsqu'un utilisateur dépasse le nombre de tentatives allouées défini par la propriété maxAttempts ou redirige le flux.
textReceived Déclenché lorsqu'un utilisateur envoie du texte ou des emojis au lieu d'appuyer sur un bouton d'action ou un lien.
attachmentReceived Déclenché lorsqu'un utilisateur envoie une image, un fichier audio, une vidéo ou une pièce jointe.
locationReceived Déclenché lorsque l'utilisateur envoie un emplacement.
system.outOfOrderMessage Cette option est définie pour contourner le comportement inattendu de l'utilisateur. Plus précisément, lorsqu'un utilisateur n'appuie sur aucun élément d'action dans le message actuel, mais qu'il appuie sur une action appartenant à un ancien message dans la session de discussion.

Transitions de conteneur composite dans le composant System.CommonResponse

Ces composants System.CommonResponse déclenchent les actions match et cancel en fonction des valeurs mises en correspondance à partir de la saisie utilisateur et de la configuration de la propriété cancelPolicy.
Action Description Requis ?
match Le composant déclenche cette action pour accéder à l'état spécifié lorsqu'au moins une entité du conteneur correspond à la saisie utilisateur. Non
cancel Le composant déclenche cette action pour accéder à l'état spécifié en fonction des paramètres de la propriété cancelPolicy. Non

System.Webview

Remarque

Cette rubrique traite de l'utilisation de ce composant en mode YAML. Pour plus d'informations sur son utilisation dans le concepteur visuel de flux, reportez-vous à Composant de vue Web.

Le composant System.Webview ouvre une vue Web dans votre brique ou dans un onglet de navigateur pour des briques qui s'exécutent dans un canal Web.

Propriétés du composant System.WebView

Propriété Description Requis ?
sourceVariableList Liste des noms de variable utilisateur ou de contexte séparés par des virgules. Ces noms de variable sont les paramètres envoyés à la vue Web ; il s'agit des paramètres d'entrée de votre bot. Vous pouvez définir chaque variable en ajoutant une série d'états System.SetVariable avant l'état System.Webview. Oui
variable Nom de la variable (valeur de chaîne) identifiant la charge utile de vue Web renvoyée au bot une fois que l'utilisateur a terminé ses interactions dans la vue Web.

La charge utile étant stockée dans cette variable, vous pouvez y accéder ultérieurement dans la définition du flux de dialogue. Vous pouvez par exemple y faire référence dans un composant de sortie.

Oui
prompt Chaîne de texte comme "Tap to continue". Non
service Nom du service du composant de vue Web. Non
imageUrl URL de l'image qui accompagne une invite. Non
linkLabel Libellé du bouton qui appelle l'application Web. Non
cancelLabel Libellé du bouton Annuler qui permet aux utilisateurs de quitter l'état sans appeler l'application Web. Non
autoNumberPostbackActions Autorise la saisie utilisateur dans les canaux SMS, qui ne prennent pas en charge les boutons, en ajoutant des équivalents numériques aux éléments d'interface utilisateur.
  • false : remplace la variable globale autoNumberPostbackActions.

  • true

    ajoute un numéro de séquence en tant que préfixe au bouton Annuler, qui, lorsqu'il est saisi, exécute la charge utile de postback du bouton comme si l'utilisateur avait appuyé sur le bouton au lieu de saisir son équivalent numérique.
Non
translate Utilisez cette propriété afin de remplacer la valeur booléenne que vous avez définie pour la variable de contexte autotranslate. Si vous n'avez pas défini cette variable ou si vous l'avez définie sur false, vous pouvez définir cette propriété sur true afin d'activer la traduction automatique pour ce composant uniquement. Si vous définissez la variable autotranslation sur true, vous pouvez définir cette propriété sur false pour exclure ce composant de la traduction automatique. Reportez-vous à Services de traduction dans les briques. Non

Transitions pour le composant System.Webview

Transitions Description
next Nomme l'état suivant dans le flux de dialogue une fois le callback effectué à partir de l'application Web.
return Quitte la conversation une fois le callback effectué dans l'application Web.
error Nomme l'état qui gère les erreurs.
actions
  • cancel : indique l'état permettant de gérer le scénario dans lequel l'utilisateur appuie sur Annuler.
  • textReceived : indique l'état dans lequel les utilisateurs saisissent du texte plutôt que d'appuyer sur l'un des boutons.

System.IncidentCreation

Vous pouvez utiliser le composant System.IncidentCreation pour créer un incident sur un site de service client. Pour pouvoir utiliser ce composant dans votre instance, vous devez créer une intégration de service client à partir de la page Paramètres > Services supplémentaires > Intégration de service client.

Remarque

Cette rubrique traite de l'utilisation de ce composant en mode YAML. Pour plus d'informations sur son utilisation dans le concepteur visuel de flux, reportez-vous à Création d'incident.

Voici un exemple d'utilisation de ce composant pour renvoyer la conversation à un site Oracle B2C Service.

  component: "System.IncidentCreation"
    properties:
      serviceName: "IncidentService"
      subject: "${incident.value.subject}"
      attachmentUrl: <#if (incident.value.Attachment.url)??>${incident.value.Attachment.url}<#else></#if>
      customFields: 
        description: "${incident.value.description}"
        contactInfo: "<#if (profile.contactInfo)??>${profile.contactInfo}<#else></#if>"
      contactProperties: 
        firstName: "${profile.firstName}"
        lastName: "${profile.lastName}"
        email: "${incident.value.email}"
      incidentNumberVariable: "incidentNumber"
    transitions:
      error: "incidentError" 
      next: "exitIncident"

Voici un exemple pour Oracle Fusion Service :

  component: "System.IncidentCreation"
  properties:
    serviceName: "IncidentServiceB2BEndUserAuth"
    subject: "${service.value.subject}"
    attachmentUrl: <#if (service.value.Attachment.url)??>${service.value.Attachment.url}<#else></#if>
    agentReportFilter: "ODAQueue"
    addChatTranscript: "true"      
    customFields: 
      description: "${service.value.description}"
      contactInfo: "<#if (profile.contactInfo)??>${profile.contactInfo}<#else></#if>"
    contactProperties: 
      firstName: "${profile.firstName}"
      lastName: "${profile.lastName}"
      email: "<#if (profile.email)??>${profile.email}<#else></#if>"
    incidentNumberVariable: "incidentNumber"
  transitions:
    error: "incidentError" 
    next: "exitIncident"
Propriété Description Requis ?
serviceName Nom de l'intégration tel que configuré dans Paramètres > Services supplémentaires > Intégration du service client. Oui
subject Texte de l'objet de l'incident. Oui
attachmentUrl URL d'un document ou d'une image lié à l'incident. Notez que l'ajout de pièces jointes n'est pas pris en charge pour les briques DA en tant qu'agent. Non
agentReportFilter (Pour les incidents Oracle Fusion Service), texte permettant de filtrer les incidents. La valeur par défaut est ODA. Non
addChatTranscript (Pour les incidents Oracle Fusion Service uniquement.) Lorsque la valeur est définie sur Vrai, la transcription de la discussion est ajoutée à l'incident. Valeur par défaut : False.

Les analyses doivent être activées pour la brique afin que la transcription de discussion soit disponible.

Une transcription ne peut être ajoutée à l'incident que si vous utilisez un DA en tant qu'intégration d'agent en combinaison avec des incrustations Web Chat for Service ou Oracle Inlay Toolkit.

Non
customFields Carte contenant description et, éventuellement, contactInfo, qui peut contenir des détails supplémentaires sur l'incident.

La carte est transmise non validée en tant que version texte de l'objet et insérée dans le message d'incident en tant que note privée.

Non
contactProperties Carte de paires nom/valeur contenant les informations requises pour rechercher ou créer des informations de contact du service client. Il doit contenir email et peut éventuellement contenir firstName et lastName.

Si email n'est pas fourni, vous devez fournir firstName et lastName.

Uniquement pour Oracle B2C Service
incidentNumberVariable Nom de la variable de contexte de chaîne dans laquelle stocker le numéro d'incident. Non

System.IntelligentAdvisor

Utilisez ce composant pour accéder à une enquête Oracle Intelligent Advisor à partir d'une brique.

Remarque

Cette rubrique traite de l'utilisation de ce composant en mode YAML. Pour plus d'informations sur son utilisation dans le concepteur de flux visuel, voir Intelligent Advisor.

Vous devez créer une intégration de service Intelligent Advisor pour pouvoir utiliser ce composant. Reportez-vous à Ajout d'un service Intelligent Advisor. Par ailleurs, l'enquête doit avoir été déployée vers Intelligent Advisor Hub et activée sur le canal du service de discussion. L'enquête doit être destinée aux utilisateurs anonymes. Vous ne pouvez pas accéder aux enquêtes pour les utilisateurs de portail ou les utilisateurs d'agent.

Vous pouvez utiliser les propriétés du composant pour spécifier les paramètres d'enquête suivants :

  • Affichage ou non des titres et de l'explication
  • Libellés des boutons des options oui, non et incertain
  • Chaînes saisies par l'utilisateur pour réinitialiser l'enquête, revenir à la question précédente (annulation) et quitter l'enquête
  • Texte à afficher à la fin de l'enquête
  • Formulation de la question concernant l'affichage ou non de l'explication
  • Chaîne saisie par l'utilisateur pour indiquer qu'il a terminé le téléchargement des fichiers
  • Valeurs d'attribut et paramètres de connecteur à transmettre à l'enquête
  • Paramètres régionaux du projet à utiliser

Voici un exemple :

  loanAdvisorIA:
    component: "System.IntelligentAdvisor"
    properties:
      intelligentAdvisorService: "myService"
      deployment: "Loan Advisor"
      # default yesLabel: "yes"
      # default noLabel: "no"
      uncertainLabel: "not sure"
      endLabel: "You can ask me another question if there's something else that I can help
    you with."
      # default doneLabel: "/done"
      # default undoLabel: "/back"
      # default resetLabel: "/reset"
      # default exitLabel: "/exit"
      showExplanation: "ask"
      # default explanationAskLabel: "Do you want to see the explanation?"
      # default removeHtml: false        
    transitions:
      error: "handleIAError"
      next: "endOfFlow"

  handleIAError:
    component: "System.Output"
    properties:
      text: |
        We are having a problem with a connection.
        Can you please send email to 
        contact@example.com to let them know that
        the loan advisor isn't working? Thank you.
    transitions:
      next: "endOfFlow"
      

Reportez-vous à Utilisation du composant Intelligent Advisor dans votre brique pour obtenir un exemple d'utilisation du composant dans un flux de dialogue.

Conseil :

Les valeurs par défaut de toutes les propriétés de libellé sont stockées dans le groupe de ressources de la brique. Pour modifier une valeur par défaut, ouvrez la page Groupe de ressources de la brique, cliquez sur Icône Groupes de ressources, sélectionnez l'onglet Configuration et modifiez le message de la clé IntelligentAdvisor - <nom de propriété>. Si vous utilisez le groupe de ressources de la brique pour modifier la valeur par défaut, vous n'avez pas besoin d'inclure la propriété de libellé dans le composant, sauf si vous voulez remplacer la valeur par défaut.

Le groupe de ressources de configuration permet également de modifier les messages IntelligentAdvisor - defaultValue, IntelligentAdvisor - doneHelp, IntelligentAdvisor - maskLabel, IntelligentAdvisor - outOfOrderMessage, IntelligentAdvisor - resumeSessionPrompt, IntelligentAdvisor - numberMinMax, IntelligentAdvisor - outOfOrderMessage, IntelligentAdvisor - resumeSessionPrompt et IntelligentAdvisor - yesNoMessage. Par exemple, le message IntelligentAdvisor - doneHelp apparaît pour les champs de pièce jointe et prend par défaut la valeur When you are done with the upload, say {0}. Vous pouvez le remplacer par Say {0} to let me know that you are done uploading.

Propriété Description Requis ?
currency Code devise ISO-4217 pour la devise utilisée dans l'enquête. Lorsque ce code est spécifié, l'utilisateur peut uniquement saisir des valeurs de devise dans les formats autorisés pour cette devise. Vous pouvez définir cette propriété sur vide ou l'exclure si l'enquête ne demande pas de montants en devise ou ne s'attend pas à une certaine devise. Non
deployment Nom du projet de déploiement actif dans Intelligent Advisor Hub. Oui
doneLabel Texte que les utilisateurs saisissent pour indiquer qu'ils ont terminé le téléchargement d'un fichier.

La valeur par défaut est /done.

Non
endLabel Texte à afficher dans la discussion à la fin de l'enquête.

La valeur par défaut est Interview ended. Vous pouvez définir la propriété sur "" pour empêcher l'affichage du texte.

Non
exitLabel Texte que les utilisateurs saisissent pour indiquer qu'ils veulent quitter l'enquête.

La valeur par défaut est /exit.

Non
explanationAskLabel Question à poser lorsque la propriété showExplanation est définie sur ask.

La valeur par défaut est Do you want to see the explanation?

Non
hideScreenTitle Indique si tous les titres d'écran de l'enquête doivent être masqués.

La valeur par défaut est false, ce qui signifie que les titres d'écran doivent être affichés.

Non
intelligentAdvisorService Nom du service Intelligent Advisor configuré dans Paramètres > Services supplémentaires. Oui
interviewAttributes Nom d'une variable de contexte de type chaîne dans laquelle stocker les valeurs d'attribut de l'enquête. Les valeurs d'attribut sont stockées sous la forme d'un tableau de paires clé/valeur. Non
locale

Cette propriété affecte à la fois l'entretien cible et la résolution de date et de nombre.

Le composant lance la version de l'enquête nommée (déploiement) associée à la langue indiquée par la propriété locale du composant. S'il n'y a pas de déploiement Hub pour l'environnement local spécifié, le composant utilise l'environnement local par défaut associé au déploiement.

Pour l'entrée de DATE et de nombre, les valeurs sont résolues en fonction des paramètres d'entité DATE et NUMBER. Lorsque l'option Consider l'environnement linguistique de l'utilisateur final est activée pour l'entité, la valeur est résolue pour l'environnement linguistique spécifié par cette propriété (ou la valeur par défaut si elle n'est pas spécifiée). Reportez-vous à Résolution d'entité basée sur les paramètres régionaux.

Cette propriété est définie par défaut sur la valeur profile.locale. Si profile.locale n'a pas de valeur, il utilise l'environnement local du canal.

Non
noLabel Libellé à utiliser pour représenter les valeurs FALSE booléennes.

La valeur par défaut est Non.

Non
params Correspondance des paramètres de connexion clé-valeur à transmettre au début de l'enquête. Cela est généralement nécessaire pour les enquêtes avec intégration de données externes. Non
removeHtml Indique si le balisage HTML doit être enlevé du texte. La valeur par défaut est false. Non
resetLabel Texte que les utilisateurs saisissent pour indiquer qu'ils veulent revenir à la première question.

La valeur par défaut est /reset.

Non
seedData Correspondance des noms et des valeurs d'attribut Intelligent Advisor à transmettre à l'enquête. Pour les attributs de date et d'heure, utilisez les formats Intelligent Advisor standard. Par exemple : start_date: "2010-01-31".

L'option Prédéfinir à partir d'un paramètre d'URL doit être activée dans Policy Modeling pour l'attribut auquel vous transmettez la valeur.

Non
showExplanation Indique si l'explication Intelligent Advisor doit être affichée. Les valeurs autorisées sont never, always et ask.

Si vous définissez la valeur ask, utilisez la propriété explanationAskLabel afin de spécifier le texte à utiliser pour demander à l'utilisateur s'il veut afficher l'explication.

La valeur par défaut est never.

Non
uncertainLabel Libellé que l'utilisateur peut saisir s'il ne connaît pas la valeur. Ce libellé apparaît pour les boutons radio booléens facultatifs.

La valeur par défaut est Uncertain.

Non
undoLabel Texte que les utilisateurs saisissent pour indiquer qu'ils veulent revenir à la question précédente.

La valeur par défaut est /back.

Non
yesLabel Libellé à utiliser pour représenter les valeurs TRUE booléennes.

La valeur par défaut est Oui.

Non

Exemple : utilisation du composant Intelligent Advisor dans votre brique

  ####################    
  # Loan Advisor
  ####################

  loanAdvisorStart:
    component: "System.Output"
    properties:
      keepTurn: true
      text: |
        OK, I can initiate a loan request for you.
        But first I'll transfer you to an 
        automated advisor that will ask some
        questions about the loan that you want, 
        your assets, your liabilities, and your 
        financial history. It shouldn't take 
        more than 5 minutes.
        <#if (user.notFirstTime)??><#else>
        At any time, you can say 
        /back to go to the previous question, 
        /reset to start over or 
        /exit to stop the questions.</#if>
    transitions:
      next: "setNotFirstTime"
      
  setNotFirstTime:
    component: "System.SetVariable"
    properties:
      variable: "user.notFirstTime"
      value: true
    transitions:
      next: "loanAdvisorIA"  
      
  loanAdvisorIA:
    component: "System.IntelligentAdvisor"
    properties:
      intelligentAdvisorService: "myService"
      deployment: "Loan Qualifier"
      # default yesLabel: "yes"
      # default noLabel: "no"
      uncertainLabel: "not sure"
      endLabel: " "
      # default doneLabel: "/done"
      # default undoLabel: "/back"
      # default resetLabel: "/reset"
      # default exitLabel: "/exit"
      showExplanation: "ask"
      # default explanationAskLabel: "Do you want to see the explanation?"
      interviewAttributes: "interviewDetails"      
    transitions:
      error: "handleIAError"
      next: "handleEligibility"

  handleEligibility:
    component: "System.Switch"
    properties:
      source: <#list interviewDetails.value as i><#if i.key = 'eligibility'>${i.val}</#if></#list>
      # The values that are matched against the value of the variable or source property. The value that matches is set as transition action
      values:
      - "eligible"
      - "noteligible"
    transitions:
      actions:
        eligible: "initiateLoan"
        noteligible: "suggestNextSteps"
        NONE: "handleUnexpectedAttributeValue" # the attribute value was other than eligible or noteligible or the user exited interview
      error: "handleAttributeNotSet" # the attribute wasn't set during the interview or the key is incorrect

  handleIAError:
    component: "System.Output"
    properties:
      text: |
        We are having a problem with a connection.
        Can you please send email to 
        contact@example.com to let them know that
        the loan advisor isn't working? Thank you.
    transitions:
      next: "endOfFlow"
...
      

Exemple : Accéder aux attributs d'enquête

Voici un exemple simple d'accès aux valeurs d'attribut d'une enquête :

context:
  variables:
    iResult: "nlpresult"
    interviewDetails: "string"

states:
  ...
  loanAdvisorIA:
    component: "System.IntelligentAdvisor"
    properties:
      intelligentAdvisorService: "myService"
      deployment: "Loan Qualifier"
      # default yesLabel: "yes"
      # default noLabel: "no"
      uncertainLabel: "not sure"
      endLabel: " "
      # default doneLabel: "/done"
      # default undoLabel: "/back"
      # default resetLabel: "/reset"
      # default exitLabel: "/exit"
      showExplanation: "ask"
      # default explanationAskLabel: "Do you want to see the explanation?"
      interviewAttributes: "interviewDetails"      
    transitions:
      error: "handleIAError"
      next: "handleEligibility"

  handleEligibility:
    component: "System.Switch"
    properties:
      source: <#list interviewDetails.value as i><#if i.key = 'eligibility'>${i.val}</#if></#list>
      # the values that are matched against the value of the variable or source property. The value that matches is set as transition action
      values:
      - "eligible"
      - "noteligible"
    transitions:
      actions:
        eligible: "initiateLoan"
        noteligible: "suggestNextSteps"
        NONE: "handleUnexpectedAttributeValue" # the attribute value was other than eligible or noteligible or the user exited interview
      error: "handleAttributeNotSet" # the attribute wasn't set during the interview or the key is incorrect
  ...

System.KnowledgeSearch

Remarque

Cette rubrique traite de l'utilisation de ce composant en mode YAML. Pour plus d'informations sur son utilisation dans le concepteur visuel de flux, reportez-vous à Recherche dans la base de connaissances.

Utilisez ce composant pour rechercher des informations sur un terme de recherche donné dans Oracle B2C Service Knowledge Foundation ou Oracle Fusion Service Knowledge Management et afficher les résultats.

Pour Oracle B2C Service, les résultats renvoyés par le service dépendent du caractère public des réponses et des paramètres de niveau d'accès, de produit ou de catégorie.

Vous devez créer un service de recherche dans la base de connaissances pour pouvoir utiliser ce composant. Reportez-vous à Ajout d'un service de recherche dans la base de connaissances.

Voici un exemple d'utilisation de ce composant. Il recherche dans un service de gestion des connaissances toutes les informations relatives à la dernière variation de l'utilisateur. Pour plus d'exemples, reportez-vous à Utilisation du composant de recherche dans la base de connaissances.

  searchFor:  knowledgeSearch:
    component: "System.KnowledgeSearch"
    properties:
      searchServiceName: "myKnowledgeSearch"
      searchTerm: "${iResult.value.query}"
      searchPrelude: "I don't know the answer for that. Let me search for an answer."
      resultSizeLimit: 5
      resultVersion: "Special Response"
      resultVersionExclusive: true
      resultLinkLabel: "Show More"
      searchLinkLabel: "Open Page with All Answers" # For B2B set to "Go to search home page"
      noResultText: "I don't have an answer for that. Try rephrasing your question."
    transitions:
      actions:
        resultSent: "reset"
        noResult: "reset"
        serverError: "handleSearchServerProblem"
      error: "handleSearchError"
      next: "reset"  

Conseil :

Les valeurs par défaut des propriétés defaultAttachmentLabel, noResultText et resultLinkLabel sont stockées dans le groupe de ressources de la brique. Pour modifier une valeur par défaut, ouvrez la page Groupe de ressources de la brique, cliquez sur Icône Groupes de ressources, sélectionnez l'onglet Configuration et modifiez le message de la clé KnowledgeSearch - <nom de propriété>. Si vous utilisez le groupe de ressources de la brique pour modifier la valeur par défaut, vous n'avez pas besoin d'inclure la propriété dans le composant, sauf si vous voulez remplacer la valeur par défaut.
Propriété Description Requis ?
cardLayout Indique si les cartes de résultat doivent être affichées verticalement ou horizontalement. La valeur par défaut est horizontal. Non
customFilters Liste des filtres de résultats de recherche présentés sous forme de paires nom-valeur. Les noms de filtre autorisés sont product et category. Chacun d'eux autorise une seule déclaration de filtre. Reportez-vous à la section Filtrage des résultats par produit et catégorie. Non
customProperties Oracle B2C Service uniquement : correspondance de paires clé/valeur à envoyer au service de recherche. Actuellement, cette propriété prend uniquement en charge la clé word_connector. Utilisez la propriété word_connector définie sur AND pour ajouter au début de chaque mot du terme de recherche +. Non
defaultAttachmentLabel

Libellé par défaut à utiliser pour l'action d'URL de la carte de résultat liée à une pièce jointe si aucun nom d'affichage n'est configuré pour cette pièce jointe. Lorsqu'il est utilisé, un numéro d'index y est ajouté. Par exemple, si la deuxième pièce jointe ne possède pas de nom d'affichage, le chiffre 2 est ajouté au libellé de pièce jointe par défaut.

La valeur par défaut est Download.

Non
locale La valeur par défaut est la valeur de la variable profile.locale.

Pour les services d'intégration des connaissances à plusieurs interfaces d'Oracle B2C Service, code d'environnement linguistique ISO ou BCP à cinq caractères indiquant l'interface à utiliser pour effectuer la recherche (exemple : en_GB). Si aucune interface ne prend en charge les paramètres régionaux, l'interface par défaut est utilisée. Reportez-vous à Implémenter la recherche multilingue dans la base de connaissances.

Pour Oracle Fusion Service, il extrait les articles associés aux paramètres régionaux spécifiés. Si les articles correspondants n'existent pas pour les paramètres régionaux, il renvoie noResult.

Non
noResultText

Texte à afficher lorsqu'aucun résultat de recherche n'est disponible.

La valeur par défaut est le texte de l'entrée de regroupement de ressources KnowledgeSearch - noResultText.

Non
resultLinkLabel

Libellé à utiliser pour l'action d'URL (bouton) de la carte de résultat qui renvoie à la version Web des informations.

La valeur par défaut est le texte de l'entrée de regroupement de ressources KnowledgeSearch - resultLinkLabel.

Si vous définissez cette propriété sur ${r""}, le bouton de lien de résultat n'est pas affiché et le texte intégral est généré. Cela n'est pas recommandé si vous avez des articles très longs qui seraient difficiles à lire dans un widget de compétence de taille standard.

Non
resultSizeLimit

Nombre maximal de résultats à afficher.

Valeur par défaut : 10.

Non
resultVersion

Oracle B2C Service uniquement : version préférée à renvoyer lorsqu'il existe plusieurs versions d'un résultat.

Vous pouvez définir cette propriété sur Answer ou Special Response.

Vous pouvez vous appuyer sur les réponses spéciales afin d'afficher une sortie spécialement conçue pour les discussions et non pour les pages Web.

Valeur par défaut : Answer. La valeur par défaut est susceptible de changer dans une version ultérieure.

Non
resultVersionExclusive

Oracle B2C Service uniquement : indique si seuls les résultats disponibles dans la version préférée doivent être affichés.

Si la propriété est définie sur false, elle inclut d'abord toutes les réponses correspondantes disponibles avec la version préférée (resultVersion). Si le nombre de réponses incluses est inférieur à la limite, elle continue d'inclure des réponses dans la version non préférée jusqu'à ce que la limite soit atteinte.

La valeur par défaut est false.

Non
searchLinkLabel

Oracle B2C Service : libellé à utiliser pour l'action de charge utile de message de carte liée à la page Web avec la liste complète des résultats de recherche.

Oracle Fusion Service : Libellé à utiliser pour l'action de charge utile de message de carte liée à la page de recherche d'accueil.

Si cette propriété n'est pas définie, la charge utile de message de carte n'affiche pas l'action.

Non
searchPrelude

Texte à présenter avant l'affichage du résultat de recherche.

Si cette propriété n'est pas définie, le texte de l'entrée de regroupement de ressources KnowledgeSearch - searchPrelude s'affiche en sortie.

Si vous ne voulez pas que le prélude de recherche soit affiché, définissez cette propriété sur ${r""}.

Non
searchServiceName Nom de l'intégration de recherche dans la base de connaissances tel que configuré dans Paramètres. Oui
searchTerm Texte à utiliser comme terme de recherche pour l'appel de la recherche dans la base de connaissances. Un terme de recherche est requis pour Oracle Fusion Service Knowledge Management. Pour Oracle B2C Service Knowledge Foundation, il renvoie les articles les plus populaires si aucun terme de recherche n'est fourni.

Pour les techniques de terme de recherche, voir Utiliser le composant Recherche dans la base de connaissances.

Oui

System.KnowledgeSearchTransitions

Action Description
resultSent La recherche a renvoyé au moins un résultat.
noResult Aucun résultat n'est associé au terme de recherche.
serverError Une erreur s'est produite sur le serveur du service de recherche dans la base de connaissances lors de l'appel, par exemple une erreur de serveur ou une erreur inattendue.

Lorsque cette erreur survient, le message d'erreur est stocké dans system.state.<state-name>.serverError.message.

Exemple : Association de questions connexes à un terme de recherche dans un flux de dialogue YAML

Le diagramme suivant illustre l'implémentation de la méthode à un seul état si votre flux de dialogue est créé en mode YAML. 1) Vous utilisez une variable de contexte de correspondance pour associer les intentions de connaissances aux termes de recherche. 2) Vous définissez chaque intention de connaissances action dans l'état Intent pour passer à un flux de données qui utilise la correspondance afin de définir la variable de contexte searchTerm sur le terme de recherche de l'intention. 3) Vous passez ensuite à un état qui recherche la valeur searchTerm dans la base de connaissances.

Description de l'image kf-assoc-intent-term.png ci-après
description de l'illustration kf-assoc-intent-term.png,

Voici un exemple de flux de dialogue dans lequel il existe des intentions individuelles pour chaque réponse de la base de connaissances.

context:
  variables:
    iResult: "nlpresult"
    intentName: "string"
    searchTerm: "string"
    searchTerms: "map"
    someVariable: "string" # For the reset state

states:

  #
  # Set search term for each knowledge intent
  #

  setSearchTerms:
    component: "System.SetVariable"
    properties:
      variable: "searchTerms"
      value:
        knowledge.Shipping Return Costs: "Shipping Return Costs"
        knowledge.Locate Service Tag or Serial: "Locating Your Service Tag or Asset Serial Number"
        knowledge.Support Account: "My Support Account"
        knowledge.Product Registration: "How do I register my product?" # (1)
        knowledge.Noncontiguous Delivery Time: "What is the delivery time to Alaska, Hawaii and the U.S. Territories?"
        knowledge.Return Policy: "What is your return policy?"
    transitions:
      next: "intent"
  
  intent:
    component: "System.Intent"
    properties:
      variable: "iResult"
    transitions:
      actions:
        system.Greeting: "welcome"
        system.Unsatisfactory Response: "transferToAgent"
        system.Request Agent: "transferToAgent"
        knowledge.Shipping Return Costs: "startIntentKnowledgeSearch"
        knowledge.Locate Service Tag or Serial: "startIntentKnowledgeSearch"
        knowledge.Support Account: "startIntentKnowledgeSearch"
        knowledge.Product Registration: "startIntentKnowledgeSearch" # (2)
        knowledge.Noncontiguous Delivery Time: "startIntentKnowledgeSearch"
        knowledge.Return Policy: "startIntentKnowledgeSearch"
        unresolvedIntent: "genericKnowledgeSearch"

  #
  # Start knowledge search for a knowledge intent's search term
  # based on searchTerms context variable
  # 
  # First, reset variables
  #
  
  startIntentKnowledgeSearch: # (2)
    component: "System.ResetVariables"
    properties:
      variableList: "searchTerm, intentName"
    transitions:
      next: "setIntentName"
      
  # 
  # Set the intentName context variable
  #
  
  setIntentName:     
    component: "System.SetVariable"
    properties:
      variable: "intentName"
      value: "${iResult.value.intentMatches.summary[0].intent}"
    transitions:
      next: "setSearchTerm"      
    
  # 
  # Get the search term to use for the intent
  #
  
  setSearchTerm:
    component: "System.SetVariable"
    properties:
      variable: "searchTerm"
      value: "${searchTerms.value[intentName.value]}"
    transitions:
      next: "knowledgeSearchForGivenSearchTerm" # (3)            
      
  # 
  # This state searches for the searchTerm variable's value
  #
  
  knowledgeSearchForGivenSearchTerm:   
    component: "System.KnowledgeSearch"
    properties:
      # Set to the name of the search service that is configured in Settings
      searchServiceName: "KnowledgeSearch"
      searchTerm: "${searchTerm.value}" # put the search term here (3)
      # searchPrelude: Optional property. If missing, there's no search prelude.      
      resultSizeLimit: 1 # Change to how many articles to show. 
      # resultVersion: Optional property. Defaults to "Answer".
      # resultVersionExclusive: Optional property. Defaults to false.
      resultLinkLabel: "Show More"
      # defaultAttachmentLabel: Optional property. Defaults to "Download"
      searchLinkLabel: "Search for Similar Answers"
      noResultText: >
        I don't have an answer for that. Try rephrasing your question 
        (or you can ask to speak to a live agent).
      # cardLayout: Optional property. Defaults to "horizontal"
    transitions:
      actions:
        resultSent: "offerMoreHelp"
        noResult: "reset"
        serverError: "handleSearchServerProblem"
      error: "handleSearchError"
      next: "reset"    

  #
  # This state is called after knowledge search returns its results.
  #
  
  offerMoreHelp:
    component: "System.Output"
    properties:
      text: > 
        You can ask me another question if there's something 
        else that I can help you with.
    transitions:
      return: "offerMoreHelp"

  #
  # This state is called when there's a problem accessing the knowledge base such
  # as a server error fault or an unexpected error fault. When this error occurs,
  # the error message is stored in system.state.<state-name>.serverError.message. 
  # 
  
  handleSearchServerProblem:
    component: "System.Output"
    properties:
      text: >
        I'm not able to get an answer for that question. Let me know 
        if there's anything else I can help you with.
    transitions:
      return: "handleSearchServerProblem"      
  
  #
  # This state is called when there's a problem using the knowledge search component
  # such as when there's a problem with the knowledge search integration configuration
  # 
  
  handleSearchError:
    component: "System.Output"
    properties:
      text: >
        Oops, my answer mechanism for that isn't working properly.
        You can ask a different question or ask to speak to an agent?
    transitions:
      return: "handleSearchError"      

  #
  # This state ends the conversation
  #
  
  reset:
    component: "System.SetVariable"
    properties:
      variable: "someVariable"
      value: "x"
    transitions:
      return: "reset"

Exemple : utiliser la variation utilisateur comme terme de recherche

L'exemple suivant montre comment définir searchTerm sur la variation de l'utilisateur dans une brique de boîte de dialogue YAML. Pour une brique de dialogue visuelle, utilisez plutôt ${skill.system.nlpresult.value.query}.

context:
  variables:
    iResult: "nlpresult"
    someVariable: "string" # For the reset state

states:

  intent:
    component: "System.Intent"
    properties:
      variable: "iResult"
    transitions:
      actions:
        system.Greeting: "welcome"
        system.Unsatisfactory Response: "transferToAgent"
        ...
        unresolvedIntent: "genericKnowledgeSearch"
  
  #
  # This state searches the knowledge base with the user input as the search term.
  #

  genericKnowledgeSearch: 
    component: "System.KnowledgeSearch"
    properties:
      # Set to the name of the search service that is configured in Settings
      searchServiceName: "KnowledgeSearch"
      searchTerm: "${iResult.value.query}"
      searchPrelude: "I don't know the answer offhand. Let's see what articles we have..."      
      resultSizeLimit: 3 # Change to how many articles to show. Defaults to 10.
      # resultVersion: Optional property. Defaults to "Answer".
      # resultVersionExclusive: Optional property. Defaults to false.
      resultLinkLabel: "Show More"
      # defaultAttachmentLabel: Optional property. Defaults to "Download"
      searchLinkLabel: "Open Page with All Answers"
      noResultText: >
        I couldn't find any articles about that. Try rephrasing your 
        question (or you can ask to speak to a live agent).
      # cardLayout: Optional property. Defaults to "horizontal"
    transitions:
      actions:
        resultSent: "offerMoreHelp"
        noResult: "reset"
        serverError: "handleSearchServerProblem"
      error: "handleSearchError"
      next: "reset"

  #
  # This state is called after knowledge search returns its results.
  #
  
  offerMoreHelp:
    component: "System.Output"
    properties:
      text: > 
        You can ask me another question if there's something 
        else that I can help you with.
    transitions:
      return: "offerMoreHelp"

  #
  # This state is called when there's a problem accessing the knowledge base such
  # as a server error fault or an unexpected error fault. When this error occurs,
  # the error message is stored in system.state.<state-name>.serverError.message. 
  # 
  
  handleSearchServerProblem:
    component: "System.Output"
    properties:
      text: >
        I'm not able to get an answer for that question. Let me know 
        if there's anything else I can help you with.
    transitions:
      return: "handleSearchServerProblem"      
  
  #
  # This state is called when there's a problem using the knowledge search component
  # such as when there's a problem with the knowledge search integration configuration
  # 
  
  handleSearchError:
    component: "System.Output"
    properties:
      text: >
        Oops, my answer mechanism for that isn't working properly.
        You can ask a different question or ask to speak to an agent?
    transitions:
      return: "handleSearchError"      

  #
  # This state ends the conversation
  #
  
  reset:
    component: "System.SetVariable"
    properties:
      variable: "someVariable"
      value: "x"
    transitions:
      return: "reset"

System.AgentTransfer

Utilisez le composant System.AgentTransfer dans les assistants numériques en tant qu'agents pour renvoyer la conversation au service de discussion. La conversation sera acheminée vers un agent physique selon les règles de discussion qui ont été configurées dans le service de discussion.

Remarque

Cette rubrique traite de l'utilisation de ce composant en mode YAML. Pour plus d'informations sur son utilisation dans le concepteur visuel de flux, reportez-vous à Transfert d'agent.

Ce composant est destiné aux conversations provenant d'un service de discussion, tel que décrit dans La structure d'assistant numérique en tant qu'agent en action. Pour les conversations qui proviennent de la brique, utilisez plutôt System.AgentConversation.

Voici un exemple d'utilisation de ce composant pour renvoyer la conversation au service de discussion.

  transferToAgent:
    component: "System.AgentTransfer"
    properties:
      maxEngagementsInQueue: "8"
      maxWaitSeconds: "300"
      waitingMessage: "Let me see if a human agent is available to help you. Hold tight."
      rejectedMessage: "No agents are available at this time. Please try again later."
      errorMessage: "We're unable to transfer you to a human agent because there was a system error."
    transitions:
      actions:
        accepted: "reset"
        rejected: "handleRejected"
        error: "offerMoreHelp"
      next:
        "reset"

Conseil :

Dans les briques avec les versions 21.04 et ultérieures de la plate-forme, les valeurs par défaut des propriétés acceptedMessage, errorMessage, rejectedMessage et waitingMessage sont stockées dans le groupe de ressources de la brique. Pour modifier une valeur par défaut, ouvrez la page Groupe de ressources de la brique, cliquez sur Icône Groupes de ressources, sélectionnez l'onglet Configuration et modifiez le message de la clé AgentTransfer - <nom de propriété>. Si vous utilisez le groupe de ressources de la brique pour modifier le message par défaut, vous n'avez pas besoin d'inclure la propriété de message dans le composant, sauf si vous voulez remplacer le message par défaut.
Propriété Description Requis ?
agentStatusVariable Nom de la variable de contexte de type correspondance à utiliser pour stocker les informations de statut de disponibilité de l'agent. Aucune information n'est stockée si la propriété n'est pas indiquée. Pour référencer une variable de correspondance, utilisez une expression de valeur comme suit : ${<mapVariableName>.value.<key>}. Par exemple, agentStatus.value.expectedWaitMinutes.

Pour en savoir plus sur les valeurs renvoyées dans cette variable, reportez-vous à System.AgentTransferCondition.

Non
allowTransferIf Spécifie les conditions dans lesquelles la brique doit transférer la session de discussion.
  • agentsAreRequestingNewEngagements (par défaut) : pour les agents Oracle B2C Service qui doivent extraire des discussions (demander de nouvelles interactions), il s'agit de l'ensemble de conditions le plus restrictif, et l'utilisateur n'a pas à attendre trop longtemps avant de parler à un agent. La brique tente de transférer la conversation uniquement si des agents ont demandé de nouvelles interactions. Dans tous les autres cas, cette option adopte le même comportement que agentSessionsAreAvailable. N'utilisez pas cette option forOracle Fusion Service Chat, car le nombre total d'agents Oracle Fusion Service demandant de nouvelles interactions est toujours égal à 0.
  • agentSessionsAreAvailable : la brique tente de transférer la conversation si l'un des agents disponibles n'a pas atteint le nombre maximal de discussions simultanées qui lui sont autorisées. L'utilisateur devra peut-être attendre si les agents sont occupés par des conversations de longue durée ou effectuent un suivi après discussion.
  • agentsAreAvailable : la brique tente de transférer la conversation si des agents sont en ligne, qu'ils aient ou non atteint leur nombre maximal de discussions ou qu'ils demandent ou non de nouvelles interactions. Avec cette option, l'attente des utilisateurs peut être longue.

Si les conditions spécifiées ne sont pas remplies, l'action rejected se produit.

Non
customProperties Correspondance contenant les informations à transmettre au service. Reportez-vous à Transmission d'informations au service. Non
errorMessage Message présenté à l'utilisateur lorsqu'une erreur système se produit lors du transfert de la session de discussion vers un agent. La valeur par défaut est We were unable to transfer you because there was a system error. Vous pouvez définir la propriété sur une chaîne vide ou vide pour supprimer la sortie du message. Non
maxEngagementsInQueue Nombre maximal autorisé d'interactions dans la file d'attente de destination. Lorsque la demande de discussion est envoyée, le service de discussion répond avec le nombre actuel d'interactions dans la file d'attente. Si cette valeur dépasse maxEngagementsInQueue, l'action rejected se produit. La valeur par défaut est -1, ce qui signifie qu'il n'existe aucune limite sur les interactions.

Notez que pour Oracle Fusion Service Chat, la réponse est toujours 0. Cette propriété n'a donc aucune valeur pour Oracle Fusion Service.

Non
maxWaitSeconds Nombre maximal de secondes d'attente estimées autorisées. Lorsque le service de discussion reçoit la demande de transfert, il répond avec le temps d'attente estimé. Si cette valeur dépasse maxWaitSeconds, l'action rejected se produit. La valeur par défaut de cette propriété est -1, ce qui signifie qu'il n'existe aucun temps d'attente maximal. Lorsque cette propriété est définie sur -1, l'assistant numérique transfère l'utilisateur vers un agent humain quel que soit le temps d'attente estimé.

L'action rejected est basée sur le temps d'attente estimé et non sur le temps d'attente réel. Une fois la conversation transférée, l'assistant numérique ne contrôle pas la conversation et n'a pas accès aux informations la concernant. Par conséquent, le temps d'attente réel peut dépasser le temps d'attente estimé.

Non
rejectedMessage Message présenté aux utilisateurs lorsque l'un des événements suivants survient :
  • Les conditions allowTransferIf n'ont pas été remplies.
  • Le temps d'attente estimé dépasse maxWaitSeconds.
  • Le nombre d'interactions dans la file d'attente dépasse maxEngagementsInQueue.
La valeur par défaut est Agent rejected. Vous pouvez définir la propriété sur une chaîne vide ou vide pour supprimer la sortie du message.
Non
waitingMessage Message présenté aux utilisateurs lorsqu'ils sont transférés vers une file d'attente. La valeur par défaut est Agent chat session established. Waiting for agent to join. Vous pouvez définir la propriété sur une chaîne vide ou vide pour supprimer la sortie du message. Non

Ce composant peut renvoyer les actions suivantes :

Action Description
accepted La transition accepted est définie lorsque la discussion est transférée vers une file d'attente.

Une fois qu'une demande de discussion est acceptée, la conversation doit se terminer par l'instruction return. Par exemple, vous pouvez accéder à un état qui génère une chaîne (non visible par l'utilisateur) ou qui définit une variable.

    transitions:
      actions:
        accepted: "reset"
        rejected: "handleRejected"
        error: "offerMoreHelp"
      next: "reset"
rejected La transition rejected est définie lorsque l'une des situations suivantes se produit :
  • Les conditions allowTransferIf n'ont pas été remplies.
  • Le temps d'attente estimé dépasse maxWaitSeconds.
  • Le nombre d'interactions dans la file d'attente dépasse maxEngagementsInQueue.
error La transition error est définie lorsqu'une erreur système empêche le transfert vers un agent humain.

Exemple : transfert à un agent humain

Voici un exemple de flux de dialogue qui effectue un transfert vers un agent lorsque le client demande à parler à un agent:

metadata:
  platformVersion: "1.1"
main: true
name: "AutomatedAgentConversation"
context:
  variables:
    iResult: "nlpresult"
    someVariable: "string"
states:
  intent:
    component: "System.Intent"
    properties:
      variable: "iResult"
    transitions:
      actions:
        ...
        system.Unsatisfactory Response: "transferToAgent"
        system.Request Agent: "transferToAgent"
        ...
  
  #
  # This state tries to transfer the user to another agent when the user explicitly requests for it.
  #
  transferToAgent:
    component: "System.AgentTransfer"
    properties:
      maxWaitSeconds: "300"
      waitingMessage: "I'm transferring you to a human agent. Hold tight."
      rejectedMessage: "I wasn't able to transfer you to a human agent. Please try again later."
      errorMessage: "We're unable to transfer you to a human agent because there was a system error."
    transitions:
      actions:
        accepted: "reset"
        rejected: "handleRejected"
        error: "offerMoreHelp"
      next: "reset"
  #
  # This state is called when an agent transfer is rejected. 
  # It lets the customer know they can ask for something else.
  # 
  handleRejected:
    component: "System.Output"
    properties:
      text: "Meanwhile, let me know if there's anything else I can help you with."
    transitions:
      return: "handleRejected"
  
  #
  # This state is called when an agent transfer encounters a system error. 
  # It lets the customer know they can ask for something else.
  #
  offerMoreHelp:
    component: "System.Output"
    properties:
      text: > 
        You can ask me another question if there's something 
        else that I can help you with.
    transitions:
      return: "offerMoreHelp"
      
  #
  # This state ends the conversation with a return transition for insights purposes, 
  # after the user has been transferred to another agent.
  #
  reset:
    component: "System.SetVariable"
    properties:
      variable: "someVariable"
      value: "x"
    transitions:
      return: "reset"

Exemple : transmission d'informations au service

Lorsque vous transférez une conversation d'un assistant numérique vers un agent physique, vous pouvez utiliser des propriétés personnalisées dans le composant System.AgentTransfer pour transmettre ces informations.

Voici la structure pour Oracle B2C Service :


      customProperties:
        - name: 
          value: 
          type:

La propriété type est requise pour les champs personnalisés. Sinon, elle est facultative.

Voici la structure d'Oracle Fusion Service :


      customProperties:
        - name: 
          value:

Voici un exemple de paramètre customProperties pour Oracle Fusion Service :

  doTransfer:
    component: "System.AgentTransfer"
    properties:
      maxWaitSeconds: "300"
      allowTransferIf: "agentSessionsAreAvailable"
      # Example of passing a custom property to Oracle Fusion
                                Service      
      customProperties:
        # This is a checkbox custom field in the Universal Work Object.
        # Checkboxes take the value of Y (selected) or N (unselected).
        - name: "TriagedByODA_c"
          value: "Y"
      acceptedMessage: "The conversation has been transferred to a live agent."
      waitingMessage: "I'm transferring you to a human. Hold tight"
      rejectedMessage: "Looks like no one is available. Please try later"
      errorMessage: "We're unable to transfer you to a live agent because there was a system error."
    transitions:
      actions:
        accepted: "reset"
        rejected: "handleRejected"
        error: "offerMoreHelp"
      next: "reset"

Conseil :

Pour Oracle Fusion Service, l'évaluation des règles s'arrête à la première règle remplissant toutes les conditions. Lorsque vous configurez vos règles, assurez-vous que la conversation transférée n'est pas réacheminée vers l'agent de l'assistant numérique. Dans l'exemple doTransfer, la propriété personnalisée TriagedByODA_c est définie sur Y, et les règles peuvent utiliser cette propriété personnalisée pour faire en sorte que, lorsqu'elle est définie sur Y, la conversation ne soit pas acheminée vers l'agent d'assistant numérique. (Pour Oracle B2C Service, la configuration Etat de transition et arrêt détermine l'acheminement.)

System.AgentTransferCondition

Vous pouvez utiliser le composant System.AgentTransferCondition dans les assistants numériques DA-as-agent pour déterminer si des agents sont disponibles et, le cas échéant, le temps d'attente attendu.

Remarque

Cette rubrique traite de l'utilisation de ce composant en mode YAML. Pour plus d'informations sur son utilisation dans le concepteur visuel de flux, reportez-vous à Condition de transfert d'agent.

Vous utilisez les propriétés du composant pour spécifier les conditions de transfert et il renvoie une action indiquant si les conditions ont été remplies. En outre, il définit les valeurs de la variable de correspondance de contexte nommée comme suit :

queueId (integer, optional): The engagement queue ID,
expectedTotalWaitSeconds (integer, optional): Expected wait time in the queue in seconds
        ( -1 if there's inadequate information, zero or greater otherwise ).,
expectedWaitSeconds (integer, optional): The number representing the "ss" segment of the expected wait time of format mm:ss 
        ( -1 if there's inadequate information, zero or greater otherwise ).,
expectedWaitMinutes (integer, optional): The number representing the "mm" segment of the expected wait time of format mm:ss 
        ( -1 if there's inadequate information, zero or greater otherwise ).,
availableAgentSessions (integer, optional): Total number of sessions available across all agents.,
totalAvailableAgents (integer, optional): Total number of agents whose status is available.,
totalUnavailableAgents (integer, optional): Total number of agents whose status is unavailable.,
totalAgentsRequestingNewEngagement (integer, optional): Total number of agents who are available and have capacity.,
outsideOperatingHours (boolean, optional): True if outside operating hours. False if inside operating hours.,
engagementsInQueue (integer, optional): The number of engagements currently in the queue.,
sessionId (string, optional): The session ID.,
clientId (integer, optional): The client ID.

Voici un exemple d'utilisation de ce composant pour savoir si des agents sont disponibles, signaler le temps d'attente et permettre aux utilisateurs d'annuler la demande de transfert s'ils ne veulent pas attendre aussi longtemps.

  handleAgentRequest:
    component: "System.CommonResponse"
    properties:
      keepTurn: true
      metadata:
        responseItems:        
        - type: "text" 
          text: "I understand. Give me a moment while I see who might be available to help you."
    transitions:
      next: "evaluateAgentTransferCondition"

  ############################
  # Agent Transfer
  ############################  

  # See if there are any agents available 
  
  evaluateAgentTransferCondition:
    component: "System.AgentTransferCondition"
    properties:
      maxWaitSeconds: 300
      maxEngagementsInQueue: 20
      allowTransferIf: "agentsAreAvailable"
      agentStatusVariable: "agentStatus"
    transitions:
      actions:
        conditionsMet: "askIfWillWait"
        conditionsNotMet: "handleRejected"
        error: "handleTransferError"
      next: "done"
            
  askIfWillWait:
    component: "System.CommonResponse"
    properties:
      processUserMessage: true
      metadata:
        responseItems:
          - type: "text"
            text:  "${rb('promptTextForTransferDecision','minutes,seconds',agentStatus.value.expectedWaitMinutes,agentStatus.value.expectedWaitSeconds)}"
            separateBubbles: true
            actions:
              - label: "Yes, I'll wait"
                type: "postback"
                keyword: "yes"
                payload:
                  action: "yes"
                name: "Yes"
              - label: "No, nevermind"
                keyword: "no"
                type: "postback"
                payload:
                  action: "no"
                name: "No"
    transitions:
      actions:
        yes: "transferToAgent"
        no: "handleCancelled"
        textReceived: "intent"
      next: "handleCancelled"     
      
  # Perform the actual transfer
  #
  # The maxWaitSeconds, maxEngagementsInQueue, allowTransferIf,
  # and customProperties, if any, should match those used for 
  # System.AgentTransferCondition 
  
  transferToAgent:
    component: "System.AgentTransfer"
    properties:
      maxWaitSeconds: 300
      maxEngagementsInQueue: 20
      allowTransferIf: "agentsAreAvailable"
    transitions:
      actions:
        accepted: "done"
        rejected: "handleRejected"
        error: "handleTransferError"
      next: "handleTransferError"

Conseil :

Voici une définition de regroupement de ressources suggérée que vous pouvez utiliser pour afficher le temps d'attente attendu :
This might take {minutes, plural,
     =-1 {}
     =0 {}
     =1 {1 minute and }
     other {# minutes and }
}{seconds, plural,
     =-1 {a while}
     =0 {{minutes, plural,
          =0 {a short wait time}
          other {0 seconds}
        }}
     =1 {1 second}
     other {# seconds}
} to connect. Are you willing to wait?
Propriété Description Requis ?
agentStatusVariable Nom de la variable de contexte de type correspondance à utiliser pour stocker les informations de statut de disponibilité de l'agent. Aucune information n'est stockée si la propriété n'est pas indiquée. Pour référencer une variable de correspondance, utilisez une expression de valeur comme suit : ${<mapVariableName>.value.<key>}. Par exemple, agentStatus.value.expectedWaitMinutes. Non
allowTransferIf Spécifie l'ensemble de conditions de base qui doit être rempli.
  • agentsAreRequestingNewEngagements : (par défaut) pour les agents B2C qui doivent extraire des discussions (demander de nouvelles interactions), les agents doivent avoir extrait des discussions. Dans tous les autres cas, cette option adopte le même comportement que agentSessionsAreAvailable.
  • agentSessionsAreAvailable : exige que les agents demandent des discussions.
  • agentsAreAvailable : exige qu'au moins un agent soit actif, qu'il ait atteint son nombre maximal de discussions ou qu'il demande de nouvelles interactions.

Si les conditions spécifiées ne sont pas remplies, l'action conditionsNotMet se produit.

Non
customProperties Correspondance contenant les informations à transmettre au service. Reportez-vous à Transmission d'informations au service. Cette propriété est prise en charge dans les versions 21.04 et ultérieures. Non
errorMessage Message affiché à l'utilisateur lorsque Digital Assistant rencontre des problèmes avec le service de discussion de l'agent. La valeur par défaut est We were unable to check the agent transfer conditions because there was a system error. Cette chaîne par défaut est stockée dans le regroupement de ressources de configuration sous la clé systemComponent_AgentTransferCondition_errorMessage. Vous pouvez définir la propriété sur une chaîne vide ou vide pour supprimer la sortie du message. Non
maxEngagementsInQueue Nombre maximal autorisé d'interactions dans la file d'attente de destination. Lorsque la demande est envoyée, le service de discussion répond avec le nombre actuel d'interactions dans la file d'attente. Si cette valeur dépasse maxEngagementsInQueue, l'action conditionsNotMet se produit. La valeur par défaut est -1, ce qui signifie qu'il n'existe aucune limite sur les interactions. Non
maxWaitSeconds Nombre maximal de secondes d'attente estimées autorisées. Lorsque le service de discussion reçoit la demande, il répond avec le temps d'attente estimé. Si cette valeur dépasse maxWaitSeconds, l'action conditionsNotMet se produit. La valeur par défaut de cette propriété est -1, ce qui signifie qu'il n'existe aucun temps d'attente maximal.

L'action conditionsNotMet est basée sur le temps d'attente estimated et non sur le temps d'attente actual.

Non

Ce composant peut renvoyer les actions suivantes :

Action Description
conditionsMet La transition conditionsMet est définie lorsqu'elle se trouve dans les heures de bureau et que les conditions maxWaitSeconds, maxEngagementsInQueue et allowTransferIf sont remplies.
conditionsNotMet La transition conditionsNotMet est définie lorsque l'une des situations suivantes se produit :
  • C'est en dehors des heures de bureau.
  • Les conditions allowTransferIf n'ont pas été remplies.
  • Le temps d'attente estimé dépasse maxWaitSeconds.
  • Le nombre d'interactions dans la file d'attente dépasse maxEngagementsInQueue.
error La transition error est définie en cas de problème de connexion au service de discussion d'agent lors de la vérification des conditions de l'agent.

Exemple : Obtenir la disponibilité de l'agent et le temps d'attente

Voici un exemple de flux de dialogue qui appelle le composant, affiche le temps d'attente et donne à l'utilisateur la possibilité d'annuler sa demande de transfert.

  ############################
  # Agent Transfer
  ############################  

  # See if there are any agents available 
  
  evaluateAgentTransferCondition:
    component: "System.AgentTransferCondition"
    properties:
      maxWaitSeconds: 300
      maxEngagementsInQueue: 20
      allowTransferIf: "agentsAreAvailable"
      agentStatusVariable: "agentStatus"
    transitions:
      actions:
        conditionsMet: "askIfWillWait"
        conditionsNotMet: "setInsightsCustomMetricsConditionsNotMet"
        error: "handleTransferError"
      next: "done"
      
  # Measure when agents aren't available

  setInsightsCustomMetricsConditionsNotMet:
    component: "System.SetCustomMetrics"
    properties:
      dimensions: 
      - name: "Agent Transfer Choice"
        value: "No agents available for new chats"
    transitions:
      next: "handleRejected"      
                  
  askIfWillWait:
    component: "System.CommonResponse"
    properties:
      processUserMessage: true
      metadata:
        responseItems:
          - type: "text"
            text:  "${rb('promptTextForTransferDecision','minutes,seconds',agentStatus.value.expectedWaitMinutes,agentStatus.value.expectedWaitSeconds)}"
            separateBubbles: true
            actions:
              - label: "Yes, I'll wait"
                type: "postback"
                keyword: "yes"
                payload:
                  action: "yes"
                name: "Yes"
              - label: "No, nevermind"
                keyword: "no"
                type: "postback"
                payload:
                  action: "no"
                name: "No"
    transitions:
      actions:
        yes: "setInsightsCustomMetricsAgentTransferInitiated"
        no: "setInsightsCustomMetricsAgentTransferCancelled"
        textReceived: "intent"
      next: "handleCancelled"
      
  # Measure when user chooses to wait for transfer

  setInsightsCustomMetricsAgentTransferInitiated:
    component: "System.SetCustomMetrics"
    properties:
      dimensions: 
      - name: "Agent Transfer Choice"
        value: "User chose to wait"
    transitions:
      next: "transferToAgent"        
      
  # Measure when user chooses to not wait for transfer

  setInsightsCustomMetricsAgentTransferCancelled:
    component: "System.SetCustomMetrics"
    properties:
      dimensions: 
      - name: "Agent Transfer Choice"
        value: "User didn't want to wait"
    transitions:
      next: "handleCancelled"
      
  # Perform the actual transfer
  #
  # The maxWaitSeconds, maxEngagementsInQueue, allowTransferIf,
  # and customProperties, if any, should match those used for 
  # System.AgentTransferCondition 
  
  transferToAgent:
    component: "System.AgentTransfer"
    properties:
      maxWaitSeconds: 300
      maxEngagementsInQueue: 20
      allowTransferIf: "agentsAreAvailable"
    transitions:
      actions:
        accepted: "done"
        rejected: "handleRejected"
        error: "handleTransferError"
      next: "handleTransferError"
     
  ############################
  # All done
  ############################
                  
  done:
    component: "System.Output"
    properties:
      text: "Let me know if you need help on anything else."
    transitions:
      return: "done"  
      
  handleRejected:
    component: "System.CommonResponse"
    properties:
      keepTurn: true
      metadata:
        responseItems:        
        - type: "text"
          text: > 
            Unfortunately, none of my colleagues are currently available to assist with this.
            Still, we’d love to see this through for you. 
            Please feel free to reach us through email@example.com.
    transitions:
      next: "done"
      
  handleCancelled:
    component: "System.CommonResponse"
    properties:
      keepTurn: true
      metadata:
        responseItems:        
        - type: "text" 
          text: "OK. Maybe some other time. Please feel free to reach us through email@example.com."
    transitions:
      next: "done"
      
  handleTransferError:
    component: "System.CommonResponse"
    properties:
      keepTurn: true
      metadata:
        responseItems:        
        - type: "text" 
          text: "Unfortunately, we can't transfer you at this time. Please try again later."
    transitions:
      next: "done"
      
  ############################
  # Global error handler
  ############################
  
  globalErrorHandler:
    component: "System.Output"
    properties:
     text: "Sorry, we were unable to do the action that you requested." 
    transitions:
      next: "done"

L'état askIfWillWait utilise une entrée de groupe de ressources pour former le message de temps d'attente de sorte que le message indique si le temps est supérieur ou inférieur à une minute et si un nombre est égal à 0, un ou plusieurs.

There are some experts online. But it might take {minutes, plural,
     =-1 {}
     =0 {}
     =1 {1 minute and }
     other {# minutes and }
}{seconds, plural,
     =-1 {a while}
     =0 {{minutes, plural,
          =0 {a very short wait time}
          other {0 seconds}
        }}
     =1 {1 second}
     other {# seconds}
} for one to join. Are you willing to wait?

Notez que cet exemple utilise System.SetCustomMetrics pour suivre si des agents étaient disponibles et, le cas échéant, combien d'utilisateurs ont choisi d'attendre et combien ont annulé la demande de transfert.

Composants de transfert vers un agent physique

System.AgentInitiation

Si vous souhaitez transférer une conversation de la brique à un agent Oracle B2C Service, ajoutez ce composant au flux de dialogue afin de lancer l'établissement de liaison avec le canal d'intégration d'agent indiqué par la propriété agentChannel. Vous devez appeler ce composant avant d'appeler le composant System.AgentConversation.

Ce composant est destiné aux conversations qui proviennent de la brique. N'utilisez pas ce composant pour les conversations qui proviennent de la discussion Oracle B2C Service, comme décrit dans La structure d'assistant numérique en tant qu'agent en action.

Voici un exemple d'utilisation de ce composant pour lancer l'établissement de liaison avec l'instance Oracle B2C Service définie par le canal d'intégration d'agent nommé ServiceCloudIntegration.

  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      agentChannel: "ServiceCloudIntegration"
      nlpResultVariable: "iResult"
      waitingMessage: "Waiting for an agent..."
      rejectedMessage: "Agents are not available right now."
      resumedMessage: "We're connecting you to an agent..."
      errorMessage: "Oops! We're having system issues. We're sorry, but we can't connect you with an agent right now."
    transitions:
      actions:
        accepted: "agentConversation"
        rejected: "tryAgain"
        error: "tryAgain"
   agentConversation:
    component: "System.AgentConversation"
    properties:
      agentChannel: "ServiceCloudIntegration"
      nlpResultVariable: "iResult"
      exitKeywords: "bye, exit, take care, goodbye, quit"
      expiryMessage: "Your chat with the agent timed out."
      conclusionMessage: "Your chat with the agent has ended."
      waitMessage: "You are number ${system.message.messagePayload.position} in the queue. Your waiting time is ${(system.message.messagePayload.waitTime>60)?then('${(system.message.messagePayload.waitTime/60)?int} mins','${system.message.messagePayload.waitTime} seconds')}."
    transitions:
      next: "endPrompt"
      actions:
        agentLeft: "endPrompt"
        expired: "sessionExpired"
        error" "agentConversationError"

Conseil :

Dans les briques avec les versions 21.04 et ultérieures de la plate-forme, les valeurs par défaut des propriétés agentActionsMessage, errorMessage, rejectedMessage, resumedMessage et waitingMessage sont stockées dans le groupe de ressources de la brique. Pour modifier une valeur par défaut, ouvrez la page Groupe de ressources de la brique, cliquez sur Icône Groupes de ressources, sélectionnez l'onglet Configuration et modifiez le message de la clé AgentInitiation - <nom de propriété>. Si vous utilisez le groupe de ressources de la brique pour modifier le message par défaut, vous n'avez pas besoin d'inclure la propriété de message dans le composant, sauf si vous voulez remplacer le message par défaut.
Propriété Description Requis ?
agentActions Liste des actions que l'agent peut déclencher afin de mettre fin à la discussion et de déplacer le flux vers l'état défini pour l'action de transition. Dans la console du représentant du service client, ces actions s'affichent sous forme de commandes avec barres obliques lorsque la conversation de l'agent est lancée, comme illustré dans l'exemple suivant :
Here are the available actions that you can send to transfer the conversation
back to the bot. Prepend the action with a forward slash (for example, /actionName).
/OrderPizza : Order Pizza : Order a pizza.
/ShowMenu : Show Menu : Show order options.

Les noms d'action doivent correspondre aux propriétés actions de System.AgentConversation. Par exemple, dans l'état agentInitiation suivant, les entrées ShowMenu et OrderPizza dans la propriété agentActions correspondent aux actions définies pour l'état agentConversation :

  agentInitiation:
    component: "System.AgentInitiation"
    ...
    properties:
      agentChannel: "ServiceCloudIntegration"
      agentActions:
      - action: "OrderPizza"
        label: "Order Pizza"
        description: "Order a pizza."
      - action: "ShowMenu"
        label: "Show Menu"
        description: "Show order options. "
      …
  agentConversation:
    component: "System.AgentConversation"
    ...
    transitions:
      next: "terminatedWithoutAction"
      actions:
        ShowMenu: "ShowMenu"
        OrderPizza: "OrderPizza"

Vous pouvez définir les éléments de liste agentActions de plusieurs façons :

  • En tant que liste de correspondances, où chaque correspondance doit contenir une propriété d'action, une propriété de valeur et, éventuellement, une propriété de description. Par exemple :
          - action: "action1"
            label: "label1"
            description: "description1"
          - action: "action2" 
            label: "label2"
            description: "description2"
  • En tant que tableau JSON, dans lequel chaque objet doit contenir une propriété d'action, une propriété de valeur et, éventuellement, une propriété de description. Par exemple :
          [
          {action: "action1",
          label: "label1",
          description: "description1"},
          {action: "action2",
          label: "label2",
          description: "description2"}      
          ]
  • En tant que chaîne de valeurs d'action séparées par des virgules. Le libellé et la description sont identiques à la valeur d'action. Par exemple :
    "action1, action2"
Non
agentActionsMessage Si la propriété agentActions est définie, la console de l'agent affiche cette valeur à la place du message par défaut. Par exemple :

agentActionsMessage: "\nYou can terminate when done or send one of these actions.\n"

Non
agentChannel Nomme le canal d'intégration d'agent. Cette valeur, le nom du canal d'intégration d'agent et la propriété agentChannel définis pour le composant System.AgentConversation doivent tous correspondre. Oui
allowTransferIf Spécifie les conditions dans lesquelles la brique doit transférer la session de discussion. Le composant utilise la valeur queueId pour identifier la file d'attente à partir de laquelle obtenir les statistiques. Vérifiez que les règles de discussion transfèrent bien la conversation vers la file d'attente identifiée, et non vers une autre file d'attente.
  • agentsAreRequestingNewEngagements : ensemble de conditions le plus restrictif. La brique tente de transférer la conversation uniquement si des agents ont demandé de nouvelles interactions (discussions extraites) et sont affectés à la file d'attente indiquée, ou, si le serveur de discussion transmet automatiquement des discussions aux agents, certains agents sont disponibles pour recevoir des discussions, n'ont pas atteint leur nombre maximal de discussions et sont affectés à la file d'attente indiquée. Avec cette option, l'attente de l'utilisateur avant de parler à l'agent est très réduite.
  • agentSessionsAreAvailable : la brique tente de transférer la conversation si des agents disponibles n'ont pas atteint leur nombre maximal de discussions et sont affectés à la file d'attente indiquée. L'utilisateur devra peut-être attendre si les agents sont occupés par des conversations de longue durée ou effectuent un suivi après discussion.
  • agentsAreAvailable : la brique tente de transférer la conversation si des agents en ligne sont affectés à la file d'attente indiquée, qu'ils aient ou non atteint leur nombre maximal de discussions ou qu'ils demandent ou non de nouvelles interactions. Avec cette option, l'attente des utilisateurs peut être longue.

Si la condition spécifiée n'est pas remplie, le composant renvoie rejected.

Lorsque vous incluez cette propriété, vous devez également inclure la propriété queueId.

Cette propriété est disponible uniquement dans les instances d'Oracle Digital Assistant qui ont été provisionnées sur Oracle Cloud Infrastructure (parfois appelée infrastructure cloud Generation 2).

Non
chatResponseVariable Nomme la variable de correspondance contenant les informations de réponse de l'agent. Une fois que le composant System.AgentInitiation est connecté, la correspondance contient les propriétés suivantes :
{
  "sessionID": "string", // agent session id

  "completedSurveyID": {
    "id": "int"
  },

  "engagementID": { // survey id
    "id": "int"
  },

  "cancelledSurveyID": {
    "id": "int"
  }
}
Non
customProperties Correspondance contenant l'ID d'incident, l'interface, le contact ou les champs personnalisés (ou une combinaison de ces éléments) à transmettre au service. Pour référencer une variable de correspondance, utilisez une expression de valeur comme suit : ${mapVariableName.value}. Reportez-vous à Transmission d'informations client à une discussion en direct. Non
errorMessage Message à afficher en cas de problème lors de l'établissement de la connexion à Oracle B2C Service. Par exemple, le mot de passe dans le canal d'intégration d'agent n'est plus valide ou le serveur rencontre un problème. Non
nlpResultVariable Variable qui stocke le message de requête du client. Non
rejectedMessage Message indiquant si l'établissement de liaison AgentInitiation a été rejeté (s'il se trouve en dehors des heures d'ouverture configurées, par exemple). Par exemple :

rejectedMessaage: "Sorry, no agents are available at this time."

Non
resumedMessage Message (par exemple, Patientez quelques minutes... Nous vous mettons en contact avec un agent.) qui s'affiche lorsque la discussion du client avec le représentant du service client reprend. L'ajout de cette propriété empêche les clients dont les demandes ont déjà été mises en file d'attente de recevoir un message de reprise de discussion avec un agent trompeur lorsqu'ils demandent une discussion en direct de manière répétée. Non
subject Ligne d'objet qui s'affiche sur la console de l'agent après le transfert à la plate-forme de l'agent. Par défaut, il s'agit du dernier message du client stocké dans la propriété nlpResultVariable, mais vous pouvez également la définir à l'aide d'une variable que vous avez définie plus tôt dans la définition de flux de dialogue. Par exemple, vous pouvez définir une variable de contexte de type string dont la valeur a été définie antérieurement par rapport au composant System.AgentInitiation :

subject: "A customer needs help regarding ${context_variable.value}"

Non
queueId ID de la file d'attente que le composant doit utiliser pour déterminer si la condition allowTransferIf spécifiée est remplie. Il doit s'agir de l'ID de la file d'attente vers laquelle les règles de discussion Oracle B2C Service acheminent cette conversation.

Cette propriété est ignorée si la propriété allowTransferIf n'est pas présente.

Requise lorsque la propriété allowTransferIf est présente.
transcriptDateTimeFormat Format de la date et de l'heure dans les messages de transcription de conversation transmis à l'agent. Reportez-vous à la classe Java DateTimeFormatter pour connaître les modèles valides. Exemple : dd/MM/yyyy HH:mm. La valeur par défaut est yyyy-mmm-ddThh:mm:ssZ. Non
transcriptTimezoneName Nom IANA (Internet Assigned Numbers Authority) du fuseau horaire à utiliser pour formater la transcription de conversation à l'aide de la propriété transcriptDateTimeFormat. Exemple : America/Sao_Paulo. La valeur par défaut est Europe/London. Si vous n'incluez pas la propriété transcriptDateTimeFormat, cette propriété est ignorée. Non
waitingMessage Message qui s'affiche pendant que les clients attendent d'entrer en communication avec un agent. Par exemple :

waitingMessage: "You’ve joined the chat session. An agent will be right with you.

Non

System.AgentInitiation Transitions

Le composant System.AgentInitiation renvoie les actions accepted, rejected et error. Ces actions peuvent pointer vers un état différent. L'action accepted nomme généralement l'état du composant System.AgentConversation :
  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      agentChannel: "ServiceCloudIntegration"
      ...
    transitions:
      actions:
        accepted: "agentConversation"
        rejected: "noAgentsAvailable"
        error: "handshakeError"
Action Description
accepted L'établissement de liaison a abouti. L'état peut passer à l'état du composant System.AgentConversation.
error Un problème survient lors de l'établissement de la connexion à Oracle B2C Service. Par exemple, le mot de passe dans le canal d'intégration d'agent n'est plus valide ou le serveur Service Cloud rencontre un problème.
rejected Oracle B2C Service a rejeté la demande de connexion. Voici quelques-unes des raisons du rejet d'une demande de connexion :
  • Aucun agent n'est disponible (les propriétés allowTransferIf et queueId sont requises)
  • La demande a été faite en dehors des heures d'ouverture configurées.
  • Il s'agit d'un jour férié.
  • Un problème est survenu avec le serveur de discussion.

Si vous ne définissez pas allowTransferIf et queueId, l'action rejetée ne se produira pas lorsqu'aucun agent n'est disponible. A la place, le transfert restera dans une condition d'attente.

Exemple : gestion du rejet d'initialisation d'agent et des erreurs système

Voici un exemple de gestion des erreurs système et des actions error et rejected.

  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      agentChannel: "B2CServiceIntegration"
      nlpResultVariable: "iResult"
      waitingMessage: "Let me connect you with someone who can further assist you."
      resumedMessage: "Someone will be with you shortly."
      errorMessage: "Oops! We're having system issues and we can't connect you with an agent right now."
      rejectedMessage: "Unfortunately, no one's available right now."     
    transitions:
      actions:
        accepted: "agentConversation"
        rejected: "initiationRejected"
        error: "tryAgain"
      error: "agentInitiationSystemError"
  initiationRejected:
    component: "System.Output"
    properties:
      text: "Perhaps it's outside their working hours or it's a holiday."
    transitions:
      return: "initiationRejected"
  tryAgain:
    component: "System.Output"
    properties:
      text: "Please try again later."
    transitions:
      return: "tryAgain"
  agentInitiationSystemError:
    component: "System.Output"
    properties:
      text: "I seem to be having a connection problem. Can you please email email@example.com to let them know?"
    transitions:
      return: "done"

Exemple : propriété incidentID

context:
  variables:
    liveChatInfo: "map"
    customerTicketId: "int"
...
  setCustomFields:
    component: "System.SetVariable"
    properties:
      variable: "liveChatInfo"
      value:
        incidentID: "${customerTicketId}" # long value
  ...
  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      ...
      customProperties: "${liveChatInfo.value}"

Exemple : objet customerInformation standard

Cet exemple définit contactID.

context:
  variables:
    liveChatInfo: "map"
    contactId: "int"
...
  setCustomFields:
    component: "System.SetVariable"
    properties:
      variable: "liveChatInfo"
      value:
        customerInformation:
          contactID:
            id: "${customerId}"
  ...
  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      ...
      customProperties: "${liveChatInfo.value}"

Exemple : objet customerInformation hérité

L'exemple suivant définit interfaceID et contactID.

Conseil :

Le WSDL indique que interfaceID est de type NamedID. Vous pouvez donc utiliser name: "myInterfaceName" au lieu de id: id: "${interfaceId}".
context:
  variables:
    liveChatInfo: "map"
    interfaceId: "int"
    contactId: "int"
...
  setCustomFields:
    component: "System.SetVariable"
    properties:
      variable: "liveChatInfo"
      value:
        customerInformation:
          interfaceID:
            id:
              id: "${interfaceId}"
          contactID:
            id: "${customerId}"
  ...
  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      ...
      customProperties: "${liveChatInfo.value}"

Exemple : objet customFields standard

context:
  variables:
    liveChatInfo: "map"
...
  setupCustomFields:
    component: "System.SetVariable"
    properties:
      variable: "liveChatInfo"
      value:
        customFields:
          - name: "c$text_field"        # text field
            type: "STRING"
            value: "SILVER"
          - name: "c$text_area"         # text area
            type: "STRING"
            value: "My package arrived but there were no contents in the box. Just bubble wrap."
          - name: "c$integer"           # integer
            type: "INTEGER"
            value: 21
          - name: "c$yes_no"  # yes/no (1=yes and 0=no)
            type: "BOOLEAN"
            value: 1
          - name: "c$date_field"        # date (yyyy-MM-dd'T'00:00:00. Use 0 for time)
            type: "DATE"
            value: "2020-02-04T00:00:00+00:00" 
          - name: "c$date_time"         # datetime (yyyy-MM-dd'T'HH:mm:ssXXX)
            type: "DATETIME"
            value: "2020-02-04T21:24:18+00:00" 
          - name: "c$menu"              # menu (no type property, you can pass the string or the ID for the value property)
            value: "12"
    transitions:
      ...
  ...
  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      ...
      customProperties: "${liveChatInfo.value}"

Exemple : objet customFields hérité

context:
  variables:
    liveChatInfo: "map"
    skillType: "string"
...
  setupCustomFields:
    component: "System.SetVariable"
    properties:
      variable: "liveChatInfo"
      value:
        customerInformation: 
          interfaceID:
            id:
              id: 1     
        customFields:
# Text Field
          - name: "c$da_text_field"
            dataType: "STRING"
            dataValue:
              stringValue: "SILVER"
# Text Area
          - name: "c$da_text_area"
            dataType: "STRING"
            dataValue:
              stringValue: "This is a very long string that is more than 32 characters."
# Integer
          - name: "c$da_integer"
            dataType: "INTEGER"
            dataValue:
              integerValue: 21
# Menu
          - name: "c$da_menu"
            dataType: "NAMED_ID"
            dataValue: 
              namedIDValue:
                name: "Item 1"
# Instead of name, you can use
#                id:
#                  id: 1
#
# Yes/No
          - name: "c$da_is_from_skill"
            dataType: "BOOLEAN"
            dataValue:
              booleanValue: true
# Date (XML Schema Date)
          - name: "c$da_date"
            dataType: "DATE"
            dataValue:
              dateValue: "2019-10-26" 
# DateTime (XML Schema DateTime)
          - name: "c$da_datetime"
            dataType: "DATETIME"
            dataValue:
              dateTimeValue: "2019-10-26T21:32:52"               
    transitions:
      ...
  ...
  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      ...
      customProperties: "${liveChatInfo.value}"

Exemple : assemblage de l'objet Propriétés personnalisées

Ces étapes décrivent comment déclarer l'objet customProperties et définir ses différentes valeurs.

Etape 1 : déclaration de la variable des propriétés personnalisées
Dans le noeud de contexte, définissez une variable de correspondance pour la propriété customProperties du composant System.AgentInitiation. Il s'agit d'un objet JSON qui peut contenir les informations sur le client de la discussion, ainsi que les valeurs de champ personnalisé. Dans l'exemple suivant, cette variable est déclarée en tant que liveChatInfo :
context:
  variables:
    size: "PizzaSize"
    type: "PizzaType"
    crust: "PizzaCrust"
    iResult: "nlpresult"
    interfaceId: "string"
    categoryId: "string"
    skillType: "string"
    liveChatInfo: "map"
Etape 2 : définition des valeurs de la variable de correspondance customProperties
Dans le noeud de contexte, définissez une variable de correspondance pour la propriété customProperties du composant System.AgentInitiation. Il s'agit d'un objet JSON qui peut contenir les informations sur le client de la discussion, ainsi que les valeurs de champ personnalisé. Dans l'exemple suivant, cette variable est déclarée en tant que liveChatInfo :
context:
  variables:
    size: "PizzaSize"
    type: "PizzaType"
    crust: "PizzaCrust"
    iResult: "nlpresult"
    interfaceId: "string"
    categoryId: "string"
    skillType: "string"
    liveChatInfo: "map"
Etape 3 : définition des champs de la variable de correspondance customProperties
Que vous définissiez les valeurs de correspondance via un composant personnalisé ou via le flux de dialogue, vous devez structurer l'objet de correspondance. Utilisez les formats d'objet standard, sauf si le canal d'intégration d'agent a été créé avant la version 20.1 ou si le canal se connecte à une version Oracle B2C Service antérieure à 19A. Voici un exemple de format standard :

  setLiveChatInfo:
    component: "System.SetVariable"
    properties:
      variable: "liveChatInfo"
      value:
        customerInformation: 
          categoryID:
            id: "${categoryId}"             
        customFields: 
          - name: "c$skilltype"
            type: "STRING"
            value: "${skillType}"
    transitions:
      next: "agentInitiation"
Etape 4 : ajout de customProperties au composant System.AgentInitiation
Enfin, ajoutez la propriété customProperties au composant System.AgentInitiation et définissez-la à l'aide d'une expression qui accède à la valeur de variable de correspondance.
  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      subject: "A customer needs help regarding ${skillType}."
      agentChannel: "ServiceCloudIntegration"
      waitingMessage: "Let me connect you with someone who can further assist you."
      resumedMessage: "Please wait, someone will be with you shortly."
      rejectedMessage: "Sorry no one is available now."
      errorMessage: "We're sorry! We're having system issues and we can't connect you with an agent."
      customProperties: "${liveChatInfo.value}"
    transitions:
      actions:
        accepted: "agentConversation"
        rejected: "initiationRejected"
        error: "tryAgain"
  initiationRejected:
    component: "System.Output"
    properties:
      text: "Perhaps it's outside their working hours or it's a holiday."
    transitions:
      return: "tryAgain"
  tryAgain:
    component: "System.Output"
    properties:
      text: "Please try again later."
    transitions:
      return: "tryAgain"

System.AgentConversation

Ce composant permet de transférer la conversation d'une brique à un agent physique Oracle B2C Service et de gérer l'échange entre la brique et l'agent. Vous devez appeler le composant System.AgentInitiation pour pouvoir utiliser ce composant.

System.AgentConversation est destiné aux conversations qui proviennent de la brique. N'utilisez pas ce composant pour les conversations qui proviennent de la discussion Oracle B2C Service, comme décrit dans La structure d'assistant numérique en tant qu'agent en action.

Voici un exemple d'utilisation de ce composant pour transférer la conversation à l'instance Oracle B2C Service définie par le canal d'intégration d'agent nommé ServiceCloudIntegration.

  agentConversation:
    component: "System.AgentConversation"
    properties:
      agentChannel: "ServiceCloudIntegration"
      nlpResultVariable: "iResult"
      errorMessage: "Oops, we lost connection with the agent. If you need further help, please call customer support."
      exitKeywords: "bye, exit, take care, goodbye, quit"
      expiryMessage: "Your chat with the agent timed out"
      waitExpiryMessage: "The chat expired while waiting for an agent"
      conclusionMessage: "Your chat with the agent has ended."
      waitMessage: "You are number ${system.message.messagePayload.position} in the queue. Your waiting time is ${(system.message.messagePayload.waitTime>60)?then('${(system.message.messagePayload.waitTime/60)?int} mins','${system.message.messagePayload.waitTime} seconds')}."
    transitions:
      next: "endPrompt"
      actions:
        agentLeft: "endPrompt"
        expired: "sessionExpired"
        waitExpired: "expiredWhileWaiting"
        error: "handleConnectionError"
Propriété Description Requis ?
agentChannel Nomme le canal d'intégration d'agent. Cette valeur, le nom du canal d'intégration d'agent et la propriété agentChannel définis pour le composant System.AgentInitiation doivent tous correspondre. Oui
conclusionMessage Message automatisé envoyé au client lorsque l'utilisateur entre un mot-clé de sortie, que l'action agentLeft est déclenchée ou que l'agent met fin à la conversation sans envoyer l'une des actions agentActions. Par exemple, Your chat with the agent has ended. Non
errorMessage Message affiché par la discussion en cas de problème de connexion à Oracle B2C Service.

Le message par défaut est Chat session error. The reason is {cause}..

Cette propriété fonctionne uniquement avec les instances d'Oracle Digital Assistant qui ont été provisionnées sur Oracle Cloud Infrastructure (parfois appelée infrastructure cloud Generation 2).

Non
exitKeywords Liste des mots de sortie standard séparés par des virgules utilisés par un client pour terminer la conversation avec l'agent physique. Par exemple :

exitKeywords: "bye, exit, take care, goodbye, quit"

La valeur par défaut de la propriété est bye, take care, see you, goodbye.

Non
expiryMessage Message affiché lorsque l'action expired est déclenchée. Le message par défaut est Chat session expired. Thanks for chatting with us.

conclusionMessage n'est pas généré si expiryMessage est généré.

Le message d'expiration n'est pas généré lorsque la conversation est terminée car la valeur USER_WAIT_QUEUE_TIMEOUT de Service Cloud a été dépassée.

Non
nlpResultVariable Variable nlpResultVariable qui contient le message de requête du client. Non
waitExpiryMessage Message affiché à l'utilisateur lorsque la discussion expire pendant l'attente d'un agent. Le message par défaut est The request for live chat expired while waiting for an agent. Non
waitMessage Par défaut, une fois le transfert de conversation lancé, la brique affiche le message d'attente que le service de discussion en direct lui envoie, comme la position dans la file d'attente et le temps d'attente. Utilisez cette propriété pour personnaliser le message. Par exemple :

waitMessage: "You are number ${system.message.messagePayload.position} in the queue. Your waiting time is ${(system.message.messagePayload.waitTime>60)?then('${(system.message.messagePayload.waitTime/60)?int} mins','${system.message.messagePayload.waitTime} seconds')}."

Non

System.AgentConversationTransitions

System.AgentConversation peut déclencher l'action expired, agentLeft, error ou waitExpired. En outre, il peut déclencher une action à partir de la propriété agentActions du composant System.AgentInitiation. Vous devez également ajouter une transition next car un client peut saisir l'un des exitKeywords pour quitter la discussion afin que l'une de ces actions puisse être déclenchée.


  agentConversation:
    component: "System.AgentConversation"
    properties:
      agentChannel: "ServiceCloudIntegration"
      nlpResultVariable: "iResult"
      exitKeywords: "bye, adios, take care, goodbye"
      ...
    transitions:
      next: "endPrompt"
      actions:
        agentLeft: "endPrompt"
        expired: "endPrompt"
        waitExpired: "endPrompt"
        error: "agentConversationError"
  ...
  endPrompt:
    component: "System.List"
    properties: 
      prompt: "Your session has ended. What would you like to do?"
      options: 
      - label: "Order a Pizza"
        value: "OrderPizza" 
      - label: "Nothing. I'm done here."
        value: "Finished" 
      autoNumberPostbackActions: true
    transitions:
      actions:
        OrderPizza: "resolvePizzaSize"
        Finished: "done"
...
      
    
Action Description
agentActions Si le composant System.AgentInitiation possède une propriété agentActions, ce composant doit comporter une action de transition pour toutes les actions prises en charge indiquées par agentActions.
agentLeft L'agent a mis fin à la session sans utiliser d'action avec une barre oblique (par exemple, /Order). Sinon, la session s'est terminée car aucune activité n'a eu lieu pendant la période indiquée par la configuration CS_IDLE_TIMEOUT d'Oracle B2C Service et cette configuration est inférieure au paramètre Expiration de la session du canal d'intégration d'agent. Pour plus d'informations, reportez-vous à l'action expired.

Cette action n'est pas renvoyée lorsque l'utilisateur quitte la conversation en saisissant un mot-clé de sortie. Dans ce cas, le flux passe à l'état nommé par la transition next ou, en l'absence de transition next, à l'état suivant dans le flux.

error

Un problème de connexion au service d'agent physique est survenu.

Cette action fonctionne uniquement avec les instances d'Oracle Digital Assistant qui ont été provisionnées sur Oracle Cloud Infrastructure (parfois appelée infrastructure cloud Generation 2).

expired

Si le paramètre CS_IDLE_TIMEOUT d'Oracle B2C Service est égal ou supérieur au paramètre Expiration de la session du canal d'intégration d'agent, cette action est déclenchée lorsque ni l'utilisateur final ni l'agent n'envoie de message dans le délai d'expiration de la session. Si CS_IDLE_TIMEOUT est inférieur au paramètre Expiration de la session du canal d'intégration d'agent et qu'aucune activité n'a lieu, Oracle B2C Service met fin à la discussion et l'action agentLeft est déclenchée à la place.

Par défaut, la valeur de CS_IDLE_TIMEOUT est de 10 minutes.

L'action expired n'est pas renvoyée lorsque la conversation se termine car la valeur USER_WAIT_QUEUE_TIMEOUT de Service Cloud a été dépassée. Envisagez de définir cette configuration sur une valeur élevée, telle que 7 200 secondes (2 heures).

Pour afficher ou modifier les paramètres de votre instance Oracle B2C Service, ouvrez la console de bureau, cliquez sur Navigation, sur la première option Configuration du menu, puis sur Paramètres de configuration. Recherchez ensuite le paramètre dans le dossier Discussion.

waitExpired La demande de discussion a expiré lors de l'attente d'un agent. Cela se produit lorsque le temps d'attente dépasse la valeur du paramètre USER_WAIT_QUEUE_TIMEOUT du client de discussion.

Exemple : configuration du flux de dialogue de transfert à l'agent

Dans cet exemple, l'intention GetAgent est entraînée à comprendre les appels de détresse comme aidez-moi s'il vous plait !

intent:
    component: "System.Intent"
    properties:
      variable: "iResult"
    transitions:
      actions:
        OrderPizza: "resolvesize"
        CancelPizza: "cancelorder"
        GetAgent: "agentInitiation"
        unresolvedIntent: "agentInitiation"

Voici les étapes de base pour configurer le flux de dialogue :

  1. Lancez le transfert à l'agent physique.

    1. Ajoutez un état pour le composant System.AgentInitiation.

    2. Définissez la propriété agentChannel de l'état sur le nom du canal d'intégration d'agent que vous avez configuré pour le système d'agent physique.

    Une fois que le canal d'intégration d'agent a établi une connexion et qu'Oracle B2C Service a envoyé la demande de discussion à la file d'attente (c'est-à-dire, une fois qu'il a créé un ticket d'aide), le composant System.AgentInitiation permet la transition vers l'état suivant, qui est généralement défini pour le composant System.AgentConversation (agentConversation dans l'exemple suivant).
    
      agentInitiation:
        component: "System.AgentInitiation"
        properties:
          agentChannel: "ServiceCloudIntegration"
          nlpResultVariable: "iResult"
          waitingMessage: "Waiting for an agent..."
          rejectedMessage: "Agents are not available right now."
          resumedMessage: "We're connecting you to an agent..."
          errorMessage: "Oops! We're having system issues. We're sorry, but we can't connect you with an agent right now."
        transitions:
          actions:
            accepted: "agentConversation"
            rejected: "tryAgain"
            error: "tryAgain"
      tryAgain:
        component: "System.Output"
        properties:
          text: "Please try again later."
        transitions:
          return: "tryAgain"

    Conseil :

    Les clients peuvent demander plusieurs fois à discuter avec un agent physique même lorsque leurs demandes ont déjà été mises dans la file d'attente de la console de discussion de l'agent. Ajoutez une propriété resumedMessage à l'état System.AgentInitiation pour empêcher ces clients de recevoir un message Reprise de la discussion avec un agent qui pourrait les induire en erreur.
  2. Ajoutez et configurez le composant System.AgentConversation. Tant que le moteur de dialogue se trouve dans l'état défini pour ce composant, la brique transmet les messages entre le client et l'agent. La brique écoute les mots-clés de sortie dans l'entrée client, comme au revoir. Lorsque la brique détecte l'un de ces mots-clés, le composant System.AgentConversation met fin à la session en cours et déclenche la transition next.

    Voici un exemple :

      agentConversation:
        component: "System.AgentConversation"
        properties:
          agentChannel: "ServiceCloudIntegration"
          nlpResultVariable: "iResult"
          errorMessage: "Oops, we lost connection with the agent. If you need further help, please call customer support."
          exitKeywords: "bye, exit, take care, goodbye, quit"
          expiryMessage: "Your chat with the agent timed out."
          conclusionMessage: "Your chat with the agent has ended."
          waitMessage: "You are number ${system.message.messagePayload.position} in the queue. Your waiting time is ${(system.message.messagePayload.waitTime>60)?then('${(system.message.messagePayload.waitTime/60)?int} mins','${system.message.messagePayload.waitTime} seconds')}."
        transitions:
          next: "endPrompt"
          actions:
            agentLeft: "endPrompt"
            expired: "endPrompt"
            error: "endPrompt"
      endPrompt:
        component: "System.Output"
        properties:
          text: "Returning you to your bot."
        transitions:
          return: "endPrompt"

Exemple : obtenir des informations d'enquête

Dans l'exemple suivant utilisant le format standard, le composant AgentConversation génère un lien d'enquête après la fin de la conversation avec l'agent. Le lien inclut les ID de session et d'interaction de la correspondance nommée par la propriété chatResponseVariable.

context:
  variables:
    agentSystemResponse: "map" # chat request response is stored in this variable.
    ...
states:
  ...
  agentInitiation:
    component: "System.AgentInitiation"
    properties:
      agentChannel: "B2CServiceIntegration"
      nlpResultVariable: "iResult"
      chatResponseVariable: "agentSystemResponse"  
    transitions:
      actions:
        accepted: "agentConversation"
        rejected: "tryAgain"
        error: "tryAgain"
  agentConversation:
    component: "System.AgentConversation"
    properties:
      agentChannel: "B2CServiceIntegration"
      nlpResultVariable: "iResult"
      exitKeywords: "bye, exit, take care, goodbye, quit"
      expiryMessage: "Your chat with the agent timed out."
      conclusionMessage: "Can you please fill out this survey: <PUT SURVEY URL HERE>?session=${agentSystemResponse.value.sessionId}&surveyid=${agentSystemResponse.value.engagementId}"
    transitions:
      next: "endPrompt"
      actions:
        agentLeft: "endPrompt"
        expired: "sessionExpired"
        error: "agentConversationError"

Exemple : transfert de la discussion vers une file d'attente Oracle B2C Service spécifique

  1. Si vous ne l'avez pas encore fait, dans le noeud de contexte, définissez une variable de correspondance à utiliser avec la propriété customProperties du composant System.AgentInitiation. Par exemple :

    context:
      variables:
        greeting: "string"
        name: "string"
        liveChatInfo: "map"
    
  2. Définissez les champs de la variable de correspondance.

    Voici un exemple de format standard pour les canaux d'intégration d'agent créés dans la version 20.01 ou version ultérieure et connectés à Oracle B2C Service version 19A ou ultérieure.

      setLiveChatInfo:
        component: "System.SetVariable"
        properties:
          variable: "liveChatInfo"
          value:
            customFields: 
              - name: "c$frombot"
                type: "BOOLEAN"
                value: 1
        transitions:
          next: "agentInitiation"

    Voici un exemple de format hérité pour les canaux d'intégration d'agent créés avant la version 20.01 ou qui se connectent à une version antérieure à Oracle B2C Service version 19A.

      setLiveChatInfo:
        component: "System.SetVariable"
        properties:
          variable: "liveChatInfo"
          value:
            customFields: 
              - name: "c$frombot"
                dataType: "BOOLEAN"
                dataValue:
                  booleanValue: true
        transitions:
          next: "agentInitiation"
  3. Ajoutez la propriété customProperties au composant System.AgentInitiation et définissez-la sur la valeur de votre variable de correspondance. Par exemple :

      agentInitiation:
        component: "System.AgentInitiation"
        properties:
          agentChannel: "B2CServiceIntegration"
          nlpResultVariable: "iResult"
          customProperties: "${liveChatInfo.value}"
          waitingMessage: "Waiting for an agent..."
          rejectedMessage: "Agents are not available right now."
          resumedMessage: "We're connecting you to an agent..."
          errorMessage: "Oops! We're having system issues. We're sorry, but we can't connect you with an agent right now."
        transitions:
          actions:
            accepted: "agentConversation"
            rejected: "tryAgain"
            error: "tryAgain"
      tryAgain:
        component: "System.Output"
        properties:
          text: "Please try again later."
        transitions:
          return: "tryAgain"

System.ResolveEntities

Remarque

Cette rubrique traite de l'utilisation de ce composant en mode YAML. Pour plus d'informations sur son utilisation dans le concepteur de flux visuel, reportez-vous à Résoudre l'entité.

Ce composant effectue une itération sur tous les champs d'entité dans le conteneur composite, communique avec l'utilisateur et résout tous les champs. Le composant choisit au hasard les invites à fournir à chaque entité lors de la résolution de cette dernière.

Propriété Description Requis
variable Fait référence à la variable de contexte d'entité de conteneur composite remplie par ce composant. Si toutes les entités enfant de la variable d'entité composite ont déjà une valeur, le flux de dialogue passe à l'état suivant sans envoyer de message à l'utilisateur. Oui
nlpResultVariable Remplit la propriété variable (qui fait référence à la variable d'entité de conteneur composite) à l'aide des valeurs stockées dans la variable de contexte nlpresult. Vous pouvez définir cette propriété en nommant la variable nlpresult (généralement, iResult). Lorsque la structure résout une entité enfant unique, la propriété variable est remplie avec cette valeur uniquement. Lorsque la variable nlpresult contient des valeurs pour toutes les entités enfant, le flux de dialogue passe à l'état suivant. Vous pouvez utiliser cette propriété à la place des états SetVariable qui remplissent les valeurs de l'entité enfant. Non
maxPrompts Spécifie le nombre de tentatives alloué à l'utilisateur pour saisir une valeur valide qui correspond au type d'entité enfant. Si le nombre maximal de tentatives est dépassé pour la première entité enfant, cette propriété est réinitialisée sur 0 et le bot génère l'invite pour l'entité enfant suivante. Comme décrit dans Création d'une entité de conteneur composite, des entités dans le conteneur composite peuvent remplacer ce paramètre lorsque l'option Nombre maximal de tentatives de saisie utilisateur est définie. Non
autoNumberPostbackActions Lorsque vous définissez cette option sur true, elle ajoute des nombres en tant que préfixes à des options. Même si vous n'avez pas défini cette option sur true, la numérotation automatique peut être appliquée aux éléments de liste lorsque la configuration Activer la numérotation automatique sur les actions de postback de l'assistant numérique est définie sur true. La numérotation automatique propre au canal peut être appliquée à tous les bots de brique enregistrés dans un assistant numérique :
${(system.channelType=='twilio')?then('true','false')}
Non
useFullEntityMatches Lorsque cette propriété est définie sur true, les valeurs d'entité personnalisée sont stockées en tant qu'objets JSON (comme les valeurs d'entité intégrée). Vous pouvez ainsi créer des expressions pour accéder aux propriétés telles que value, primaryLanguageValue et originalString, qui sont particulièrement importantes pour les briques actuellement multilingues ou susceptibles de le devenir.  
footerText Améliore la sortie sur les canaux de texte uniquement. Comme décrit dans Pieds de page, vous pouvez utiliser des expressions FreeMarker afin d'appliquer des conditions au texte de pied de page pour les canaux de texte uniquement. Non
headerText Message qui s'affiche avant que le composant demande à l'utilisateur d'indiquer l'élément suivant dans le conteneur. Vous pouvez utiliser cet en-tête pour fournir des informations en retour sur les entités précédentes du conteneur ayant été mises en correspondance (ou mises à jour).
headerText: "<#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>"
Non
transitionAfterMatch Valeur booléenne qui, lorsque vous la définissez sur true, permet une transition temporaire de la correspondance d'entité effectuée par ce composant vers un composant personnalisé. Par défaut, la valeur est false. Cette propriété est ignorée (et la transition match n'est pas déclenchée) si vous avez inscrit un gestionnaire d'événements d'entité. Non
cancelPolicy Détermine le moment de la transition cancel :
  • immediate : immédiatement après la fin des tentatives maxPrompts allouées pour une entité dans le conteneur.

  • lastEntity : lorsque la dernière entité dans le conteneur a été mise en correspondance avec une valeur.

Cette propriété est ignorée si vous avez inscrit un gestionnaire d'événements d'entité auprès d'un gestionnaire maxPromptsReached de niveau élément ou de niveau événement.
Non

Composants de calendrier

Utilisez les composants de calendrier suivants pour interagir avec les calendriers Outlook et Google :

Autorisation de calendrier

Pour activer l'interaction entre une brique et un fournisseur de calendrier, vous devez configurer un service, et modifier la brique et le flux de dialogue afin de permettre à l'utilisateur de se connecter à son calendrier via ce service.

Avant d'utiliser un composant de calendrier, vous devez inscrire une application auprès du fournisseur de calendrier et créer un service de code d'autorisation. Pour obtenir les procédures, reportez-vous aux rubriques suivantes :

Dans votre flux de dialogue, vous utilisez le composant System.OAuth2AccountLink pour inviter l'utilisateur à se connecter à son calendrier via le service de code d'autorisation que vous avez créé. Vous ne pouvez pas définir la propriété enableSingleSignOn du composant sur true lorsque vous utilisez le composant pour l'autorisation de composant de calendrier.

Vous pouvez utiliser la fonctionnalité Autorisation requise pour vérifier automatiquement que l'utilisateur s'est connecté (a obtenu un jeton d'accès) avant d'appeler des composants de calendrier. Cette fonctionnalité demande uniquement à l'utilisateur de se connecter s'il ne dispose pas encore d'un jeton d'accès, ou si celui-ci a expiré et ne peut pas être actualisé. Vous pouvez utiliser la configuration Autorisation requise de la brique afin de définir la valeur par défaut pour l'ensemble de la brique, puis appliquer le paramètre requiresAuthorization au niveau de l'état pour remplacer la valeur par défaut. Autrement dit, vous utilisez le paramètre de la brique pour définir la valeur par défaut, puis incluez uniquement le paramètre requiresAuthorization du composant dans les états pour lesquels la valeur par défaut ne s'applique pas.

Pour utiliser la fonctionnalité Autorisation requise, vous devez ajouter une action system.authorizeUser au noeud defaultTransitions afin de nommer l'état qui démarre le flux d'autorisation. Par exemple :

defaultTransitions:
  error: "globalErrorHandler"
  actions:
    system.authorizeUser: "userAuthN.performOAuth"

Avant qu'une brique passe à un état avec autorisation requise, elle vérifie s'il existe un jeton d'accès valide pour le service de calendrier. Si le jeton est absent, elle effectue les actions suivantes :

  1. Elle appelle l'état que vous avez défini pour l'action system.authorizedUser dans le noeud defaultTransitions.

  2. Elle demande à l'utilisateur de se connecter.

  3. Elle passe à l'état nécessitant une autorisation (c'est-à-dire l'état défini par ${system.requestedState}).

Voici un exemple de flux de dialogue d'autorisation :

defaultTransitions:
  error: "globalErrorHandler"
  actions:
    system.authorizeUser: "userAuthN.performOAuth"

...

  ############################
  # Authenticate
  ############################
     
  userAuthN.performOAuth:
    component: "System.OAuth2AccountLink"
    properties:
      prompt: "User Authentication"
      variable: "code"
      linkLabel: "Sign into ${system.config.calendarProvider}"
      authenticationService: "${system.config.authService}"
      accessTokenVariableName: "user.accessToken"
      authenticatedUserVariableName: "user.authenticatedUser"
      enableSingleSignOn: false # SSO not supported for calendar components
    transitions:
      actions:
        pass : "${system.requestedState}"
        fail : "handleFailedLogin"
        textReceived: "intent"
  handleFailedLogin:
    component: "System.Output"
    requiresAuthorization: false
    properties:
      text: "Sorry, you aren't authorized to do that"
    transitions:
      return: "doneHandleFailedLogin" 

Pour une brique principalement axée sur les composants de calendrier, envisagez de définir la configuration Autorisation requise de la brique sur true, puis définissez la valeur sur False uniquement pour les états qui ne nécessitent pas d'autorisation. Dans cet exemple, n'importe quel utilisateur peut exécuter les états initTimezoneOffset et intent. Par conséquent, le paramètre requiresAuthorization est défini sur false pour ces états. Les états qui utilisent les composants de calendrier n'ont pas besoin d'inclure requiresAuthorization car la valeur par défaut est true.

  initTimezoneOffset:
    requiresAuthorization: false
    component: "System.SetVariable"
    properties:
      variable: "timezoneOffset"
      value: <#attempt>${profile.timezoneOffset}<#recover>0</#attempt>      
    transitions:
      next: "intent"

  intent:
    component: "System.Intent"
    requiresAuthorization: false
    properties:
      variable: "iResult"
    transitions:
      actions:
        SetupMeeting: "setUpMeeting"
        CancelMeeting: "cancelMeeting"
        ListMeetings: "listMeetings"
        UpdateMeeting: "updateMeeting"
        ListInvites: "listInvites"
        RespondInvites: "respondInvites"
        LogoutUser: "logoutUser"
        unresolvedIntent: "greeting"

...
  cancelMeeting.performDelete:
    component: "System.DeleteCalendarEvent"
    properties:
      eventId: "${eventId}"
      provider: "${system.config.calendarProvider}"
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      next: "cancelMeeting.printSuccessMessage"
  cancelMeeting.printSuccessMessage:
    component: "System.Output"
    properties:
      text: "I've cancelled the meeting"
    transitions:
      return: "doneCancel"

Utilisation des dates et heures du calendrier

Lorsque vous utilisez les composants de calendrier, il est important de comprendre la relation entre les heures de début et de fin du calendrier, les entités DATE et TIME, et le fuseau horaire local.

Lorsque vous créez, mettez à jour ou extrayez des événements, vous utilisez la date et l'heure locales pour les valeurs start et end, et soit timezoneOffset, soit timezone pour indiquer au composant comment calculer le temps universel (UTC).

La valeur timezoneOffset des composants de calendrier est différente de profile.timezoneOffset. Pour les composants de calendrier, timezoneOffset est la valeur que le composant doit ajouter aux valeurs start et end pour obtenir l'heure UTC. Vous pouvez déduire la valeur de propriété timezoneOffset d'un composant de calendrier en multipliant profile.timezoneOffset par -1.

Il est possible que profile.timezoneOffset ne soit pas toujours disponible. Tout dépend de la fourniture ou non du décalage par le client. Par exemple, quelqu'un peut créer une application Web Oracle qui ne définit pas profile.timezoneOffset. Par conséquent, il est recommandé de créer un fuseau horaire par défaut pour les cas où le paramètre profile.timezoneOffset n'a pas été défini. Par exemple :

  initTimezoneOffset:
    requiresAuthorization: false
    component: "System.SetVariable"
    properties:
      variable: "timezoneOffset"
      value: <#attempt>${profile.timezoneOffset}<#recover>${system.config.defaultTimezoneOffset}</#attempt>      
    transitions:
      next: "intent

Lorsque vous récupérez un événement, le composant renvoie les valeurs de date/d'heure au format UTC. Par exemple : 2021-04-15T22:00:00.000Z. Votre brique doit convertir la valeur à l'heure locale.

  updateMeeting.printEventDetails:
    component: "System.Output"
    properties:
      keepTurn: true
      text: |
        You selected:
        ${eventDetails.value.subject}
        ${(eventDetails.value.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['MMM d']}
        ${(eventDetails.value.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}-${(eventDetails.value.end?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}
        Location: ${eventDetails.value.location}        
        Attendees: ${eventDetails.value.attendees?join(', ')}     
    transitions:
      next: "updateMeeting.selectItemToChange"

Lorsque vous utilisez les entités DATE et TIME, voici quelques points à prendre en compte :

  • Si vous utilisez un conteneur composite comportant à la fois une entité DATE et des entités TIME, vous devez désactiver l'option Extraction dans le désordre. Sinon, lorsque les entités sont résolues, vous n'avez pas le contrôle sur les valeurs résolues en entité DATE et les valeurs résolues en entité TIME (ou les deux). Par exemple, lorsque l'entité TIME est résolue, elle peut modifier la valeur de l'entité DATE.

  • Lorsqu'une variation contient du texte tel que "hier", "aujourd'hui" ou "demain", l'analyseur ne prend pas en compte le fuseau horaire local. Il est donc possible que, tôt le matin et tard l'après-midi, la mauvaise date soit utilisée. C'est pourquoi il est recommandé de renvoyer la date résolue afin que l'utilisateur puisse la vérifier avant que la brique n'ajoute un événement, ou ne mette à jour l'heure de début ou de fin d'un événement.

  • Pour définir les valeurs des propriétés start et end d'un calendrier, vous devez utiliser la date de l'entité DATE et l'heure de l'entité TIME. Par exemple :

          start: "${newEvent.value.date.date?number_to_date?string['yyyy-MM-dd']}T${newEvent.value.startTime.date?number_to_date?string['HH:mm:ss']}"
          end: "${newEvent.value.date.date?number_to_date?string['yyyy-MM-dd']}T${newEvent.value.endTime.date?number_to_date?string['HH:mm:ss']}"

Gestion des erreurs de calendrier

Le fournisseur de calendrier peut rejeter une demande d'événement. Par exemple, il peut renvoyer une erreur si l'utilisateur tente de créer un événement dont l'heure de fin est antérieure à l'heure de début. Dans la plupart des cas, le fournisseur de calendrier renvoie une erreur 400 qui, à son tour, transmet la brique au gestionnaire d'erreurs global.

Envisagez de valider les valeurs afin d'éviter que ces erreurs ne se produisent. Voici des exemples de validation d'entité de conteneur composite :

  • Entité DATE : pour les réunions nouvelles et mises à jour, vérifiez que la date est identique ou postérieure à la date du jour.

    ${(meetingSlot.value.date.date?number?long gte  ((.now?date?long - timezoneOffset?number?long)?number_to_date?string['yyyy-MM-dd']+'T00:00:00')?datetime.iso?long)?then('true','false')}
  • Entité TIME : pour les réunions nouvelles et mises à jour, vérifiez que la date et l'heure de début sont identiques ou postérieures à la date et à l'heure en cours.

    ${(((meetingSlot.value.date.date?number_to_date?string['yyyy-MM-dd']+'T'+meetingSlot.value.startTime.date?number_to_date?string['HH:mm:ss'])?datetime.iso?long) gte (.now?date?long - timezoneOffset?number))?then('true','false')}

    Pour toutes les heures de fin, vérifiez que l'heure de fin est postérieure à l'heure de début.

    ${(newEvent.value.startTime.date?number_to_time < newEvent.value.endTime.date?number_to_time)?then('true','false')}

Pour gérer sans erreur les rejets de fournisseur de calendrier, ajoutez votre propre gestionnaire d'erreurs global. Par exemple :

defaultTransitions:
  error: "globalErrorHandler"
  actions:
    system.authorizeUser: "userAuthN.performOAuth"

...

  globalErrorHandler:
    requiresAuthorization: false
    component: "System.Output"
    properties:
      text: "Sorry, we were unable to do the action that you requested."
    transitions:
      return: "done"

Vous pouvez également utiliser la transition des erreurs pour créer des gestionnaires d'erreurs adaptés à chaque cas :

  setUpMeeting.performSchedule:
    component: "System.CreateCalendarEvent"
    properties:
      start: "${newEvent.value.date.date?number_to_date?string['yyyy-MM-dd']}T${newEvent.value.startTime.date?number_to_date?string['HH:mm:ss']}"
      end: "${newEvent.value.date.date?number_to_date?string['yyyy-MM-dd']}T${newEvent.value.endTime.date?number_to_date?string['HH:mm:ss']}"
      subject: "${newEvent.value.subject}"
      location: "${newEvent.value.location}"
      attendees: "${newEvent.value.attendees}"
      provider: "${system.config.calendarProvider}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      next: "setUpMeeting.printResults"
      error: "handleCreateEventError"

...

  handleCreateEventError:
    requiresAuthorization: false
    component: "System.Output"
    properties:
      text: "Sorry, there's a problem with the event that you wanted to create."
    transitions:
      return: "done"

System.CreateCalendarEvent

Utilisez ce composant pour ajouter un événement à un calendrier Outlook ou Google. Vous ne pouvez pas créer d'événements récurrents ou d'une journée entière.

L'utilisateur doit être connecté au fournisseur de calendrier pour accéder à ce composant. Vous pouvez utiliser la fonctionnalitéAutorisation requise pour gérer la connexion utilisateur, comme décrit dans Autorisation de calendrier.

Pour découvrir comment définir les valeurs start et end, reportez-vous à Utilisation des dates et heures du calendrier.

Voici un exemple d'utilisation de ce composant. Dans cet exemple, une entité de conteneur composite est utilisée pour obtenir la date, les heures de début et de fin, l'objet, le lieu et les participants.


  ####################
  # Create Meeting 
  ####################

  setUpMeeting:
    component: "System.CommonResponse"
    properties:
      keepTurn: true
      processUserMessage: true
      variable: "newEvent"
      nlpResultVariable: "iResult"     
      cancelPolicy: "immediate"
      transitionAfterMatch: "false"
      metadata:
        responseItems:       
          - type: "text"
            text: "${system.entityToResolve.value.prompt}"
            actions:
              - label: "${enumValue}"
                type: "postback"
                iteratorVariable: "system.entityToResolve.value.enumValues"
                payload:
                  variables:
                    newEvent: "${enumValue}"
        globalActions:
          - label: "Cancel"
            type: "postback"
            visible:
              onInvalidUserInput: false
            payload:
             action: "cancel"
    transitions:
      actions:
        cancel: "allDone"
      next: "setUpMeeting.askConfirm"       
  setUpMeeting.askConfirm:
    component: "System.CommonResponse"
    properties:
      processUserMessage: true
      metadata:
        responseItems:
          - type: "text"
            text: |
              Create ${newEvent.value.subject} meeting on ${newEvent.value.date.date?number_to_date?string['MMM d']}
              from ${newEvent.value.startTime.date?number_to_date?string['hh:mm a']} to ${newEvent.value.endTime.date?number_to_date?string['hh:mm a']}
              at ${newEvent.value.location} with ${newEvent.value.attendees}?
            name: "confirmCreate"
            separateBubbles: true
            actions:
              - label: "Yes"
                type: "postback"
                keyword: "yes"
                payload:
                  action: "yes"
                name: "Yes"
              - label: "No"
                keyword: "no"
                type: "postback"
                payload:
                  action: "no"
                name: "No"
    transitions:
      next: "intent"
      actions:
        yes: "setUpMeeting.performSchedule"
        no: "allDone"
        textReceived: "intent"      
  setUpMeeting.performSchedule:
    component: "System.CreateCalendarEvent"
    properties:
      start: "${newEvent.value.date.date?number_to_date?string['yyyy-MM-dd']}T${newEvent.value.startTime.date?number_to_date?string['HH:mm:ss']}"
      end: "${newEvent.value.date.date?number_to_date?string['yyyy-MM-dd']}T${newEvent.value.endTime.date?number_to_date?string['HH:mm:ss']}"
      subject: "${newEvent.value.subject}"
      location: "${newEvent.value.location}"
      attendees: "${newEvent.value.attendees}"
      provider: "${system.config.calendarProvider}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      next: "setUpMeeting.printResults"
      error: "handleCreateCalendarError"
  setUpMeeting.printResults:
    component: "System.Output"
    properties:
      text: "The ${newEvent.value.date.date?number_to_date?string['MMM d']} meeting is now on your calendar."
      keepTurn: true
    transitions:
      next: "setUpMeeting.getMeetings"
...
Remarque

Ce composant est pris en charge dans Oracle Digital Assistant version 21.02 et versions ultérieures.
Propriété Description Requis ?
provider Fournisseur de calendrier. Valeurs autorisées : Google et Outlook. Oui
calendarOwner ID utilisateur du propriétaire du calendrier. Il doit s'agir d'un ID de compte valide pour le fournisseur de calendrier, tel que la valeur de la variable identifiée par la propriété authenticatedUserVariable du composant System.OAuth2AccountLink, définie lors de l'authentification de l'utilisateur. Oui
calendarId Nom du calendrier. Pour le calendrier par défaut de l'utilisateur, définissez la même valeur que pour la propriété calendarOwner. Oui
credential Jeton d'accès du fournisseur. Il s'agit de la valeur de la variable identifiée par la propriété accessTokenVariableName du composant System.OAuth2AccountLink, définie lors de l'authentification de l'utilisateur. Oui
start Date et heure de début de la réunion au format yyyy-MM-dd'T'HH:mm:ss. Par exemple, 2021-02-26T09:55:00. Oui
end Date et heure de fin de la réunion au format yyyy-MM-dd'T'HH:mm:ss. Par exemple, 2021-02-26T09:55:00. Oui
subject Objet de la réunion. Oui
attendees Liste des participants, séparés par des virgules. Le fournisseur de calendrier ne peut pas envoyer de notification à un participant si l'ID n'est pas un ID de compte valide pour ce fournisseur. Oui
timezoneOffset Durée en millisecondes à ajouter au temps universel (UTC) pour obtenir l'heure standard dans le fuseau horaire de l'utilisateur. Par exemple, si le fuseau horaire local est UTC-2, timezoneOffset est -7200000. La valeur par défaut est 0.
Remarque

Vous pouvez déduire la propriété timezoneOffset pour l'utilisateur en cours en fonction de la valeur de la variable de contexte utilisateur profile.timezoneOffset. Toutefois, dans ce cas, vous devez multiplier profile.timezoneOffset par -1.

Vous pouvez indiquer timezoneOffset ou timezone, mais pas les deux.

Non
timezone

ID du fuseau horaire local identifié par https://www.iana.org/time-zones. Egalement appelé nom tz database. Par exemple : America/Los_Angeles. La valeur par défaut est UTC. Vous pouvez indiquer timezoneOffset ou timezone, mais pas les deux.

Non

System.DeleteCalendarEvent

Utilisez ce composant pour supprimer un événement d'un calendrier Outlook ou Google. Vous ne pouvez pas supprimer des événements récurrents ou d'une journée entière.

L'utilisateur doit être connecté au fournisseur de calendrier pour accéder à ce composant. Vous pouvez utiliser la fonctionnalitéAutorisation requise pour gérer la connexion utilisateur, comme décrit dans Autorisation de calendrier.

Voici un exemple d'utilisation de ce composant.


  ####################
  # Cancel Meeting
  ####################
  
  # Want to select from deletable meetings

  cancelMeeting:
    component: "System.SetVariable"
    properties:
      variable: "stateAfterList"
      value: "cancelMeeting.confirmCancel"
    transitions:
      next: "cancelMeeting.setListType"
  cancelMeeting.setListType:
    component: "System.SetVariable"
    properties:
      variable: "listType"
      # Only show deletable meetings
      value: "DELETE"
    transitions:
      next: "cancelMeeting.setListPrompt"
  cancelMeeting.setListPrompt:
    component: "System.SetVariable"
    properties:
      variable: "listPrompt"
      value: "to cancel"
    transitions:
      next: "listMeetings.commonEntryPoint"

  # List meetings common code returns to this state
  cancelMeeting.confirmCancel:
    component: "System.ResetVariables"
    properties:
      variableList: "confirmAction"
    transitions:
      next: "cancelMeeting.askConfirm"      
  cancelMeeting.askConfirm:
    component: "System.CommonResponse"
    properties:
      processUserMessage: true
      metadata:
        responseItems:
          - type: "text"
            text: "Are you sure you want to cancel this meeting?"
            name: "confirmCcancel"
            separateBubbles: true
            actions:
              - label: "Yes"
                type: "postback"
                keyword: "yes"
                payload:
                  action: "yes"
                name: "Yes"
              - label: "No"
                keyword: "no"
                type: "postback"
                payload:
                  action: "no"
                name: "No"
    transitions:
      next: "intent"
      actions:
        yes: "cancelMeeting.performDelete"
        no: "allDone"
        textReceived: "intent"
  cancelMeeting.performDelete:
    component: "System.DeleteCalendarEvent"
    properties:
      eventId: "${eventId}"
      provider: "${system.config.calendarProvider}"
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      next: "cancelMeeting.printSuccessMessage"
  cancelMeeting.printSuccessMessage:
    component: "System.Output"
    properties:
      text: "I've cancelled the meeting"
    transitions:
      return: "doneCancel"
  ...

  ############################
  # List Meetings Shared Code
  ############################
  
  listMeetings.commonEntryPoint:
    component: "System.SetVariable"
    properties:
      variable: "inputDate"
      value: "${iResult.value.entityMatches['DATE'][0]}"
    transitions:
      next: "listMeetings.setDate"
  listMeetings.setDate:
    component: "System.SetVariable"
    properties:
      variable: "start"
      value: "${inputDate.value?has_content?then(inputDate.value.date?number_to_date?string['yyyy-MM-dd'], (.now?date?long - timezoneOffset?number?long)?number_to_date?string['yyyy-MM-dd'])}T00:00:00"
    transitions:
      next: "listMeetings.clearInputDate"  
  listMeetings.clearInputDate:
    component: "System.ResetVariables"
    properties:
      variableList: "inputDate"
    transitions:
      next: "listMeetings.filterByAttendees"
  listMeetings.filterByAttendees:
    component: "System.CommonResponse"
    properties:
      processUserMessage: true
      metadata:
        responseItems:
          - type: "text"
            text: "Do you want to list only meetings with a particular attendee?"
            name: "confirmFilter"
            separateBubbles: true
            actions:
              - label: "Yes"
                type: "postback"
                keyword: "yes"
                payload:
                  action: "yes"
                name: "Yes"
              - label: "No"
                keyword: "no"
                type: "postback"
                payload:
                  action: "no"
                name: "No"
    transitions:
      next: "intent"
      actions:
        yes: "listMeetings.resolveAttendeesFilter"
        no: "listMeetings.clearAttendeesFilter"
        textReceived: "intent"

  # clear filter 
  
  listMeetings.clearAttendeesFilter:
    component: "System.ResetVariables"
    properties:
      variableList: "attendees"
    transitions:
      next: "listMeetings.performList"

  # resolve filter

  listMeetings.resolveAttendeesFilter:
    component: "System.CommonResponse"
    properties:
      keepTurn: true
      processUserMessage: true
      variable: "attendees"
      nlpResultVariable: "iResult"
      metadata:
        responseItems:
          - type: "text"
            text: "Who is the attendee?"
    transitions:
      next: "listMeetings.performAttendeesList"
      actions:
        textReceived: "listMeetings.performAttendeesList"

  # perform attendees list 

  listMeetings.performAttendeesList:
    component: "System.SelectCalendarEvent"
    properties:
      listType: "${listType}"
      start: "${start}"
      attendees: "${attendees}"
      prompt: "Choose the ${start?datetime.iso?long?number_to_date?string['MMM d']} meeting ${listPrompt}:"
      eventIdVariableName: "eventId"
      provider: "${system.config.calendarProvider}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      actions:
        found: "${stateAfterList}"
        notfound: "listMeetings.printNotFoundMessage"
      next: "globalErrorHandler"

  # perform list 

  listMeetings.performList:
    component: "System.SelectCalendarEvent"
    properties:
      listType: "${listType}"
      start: "${start}"
      prompt: "Choose the ${start?datetime.iso?long?number_to_date?string['MMM d']} meeting ${listPrompt}:"
      eventIdVariableName: "eventId"
      provider: "${system.config.calendarProvider}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      actions:
        found: "${stateAfterList}"
        notfound: "listMeetings.printNotFoundMessage"
      next: "globalErrorHandler"

  listMeetings.printNotFoundMessage:
    component: "System.Output"
    properties:
      text: "There are no meetings on ${start?datetime.iso?long?number_to_date?string['MMM d']}"
    transitions:
      return: "doneListMeetings"
...
Remarque

Ce composant est pris en charge dans Oracle Digital Assistant version 21.02 et versions ultérieures.
Propriété Description Requis ?
provider Fournisseur de calendrier. Valeurs autorisées : Google et Outlook. Oui
calendarOwner ID utilisateur du propriétaire du calendrier. Il doit s'agir d'un ID de compte valide pour le fournisseur de calendrier, tel que la valeur de la variable identifiée par la propriété authenticatedUserVariable du composant System.OAuth2AccountLink, définie lors de l'authentification de l'utilisateur. Oui
calendarId Nom du calendrier. Pour le calendrier par défaut de l'utilisateur, définissez la même valeur que pour la propriété calendarOwner. Oui
credential Jeton d'accès du fournisseur. Il s'agit de la valeur de la variable identifiée par la propriété accessTokenVariableName du composant System.OAuth2AccountLink, définie lors de l'authentification de l'utilisateur. Oui
eventId ID de l'événement à supprimer. Vous pouvez utiliser System.ListCalendarEvents ou System.SelectCalendarEvent pour obtenir eventId. Oui

System.GetCalendarEventDetails

Utilisez ce composant pour obtenir les détails d'un événement à partir d'un calendrier Outlook ou Google.

L'utilisateur doit être connecté au fournisseur de calendrier pour accéder à ce composant. Vous pouvez utiliser la fonctionnalitéAutorisation requise pour gérer la connexion utilisateur, comme décrit dans Autorisation de calendrier.

Les détails sont renvoyés dans la variable spécifiée par la propriété eventDetailsVariableName au format JSON suivant :

{
  "isAllDay": boolean,
  "subject": string,
  "inviteResponse": string,
  "attendees": [
    "string",
      ...
  ],
  "start": format yyyy-MM-dd'T'HH:mm:ss.SSSZ,
  "end":  format yyyy-MM-dd'T'HH:mm:ss.SSSZ,
  "location": string,
  "isRecurring": boolean,
  "id": string
}

Les propriétés start et end sont des valeurs UTC. Pour découvrir comment convertir les valeurs start et end à l'heure locale, reportez-vous à Utilisation des dates et heures du calendrier.

Voici un exemple d'utilisation de ce composant.

  listMeetings.performGetDetails:
    component: "System.GetCalendarEventDetails"
    properties:
      eventId: "${eventId}"
      eventDetailsVariableName: "eventDetails"
      provider: "${system.config.calendarProvider}"
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      next: "listMeetings.checkIfResults"
  # In case the eventId is no longer valid
  listMeetings.checkIfResults:
    component: "System.ConditionExists"
    properties:
      variable: "eventDetails"
    transitions:
      actions:
        exists: "listMeetings.printEventDetails"
        notexists: "globalErrorHandler" 
  listMeetings.printEventDetails:
    component: "System.Output"
    properties:
      text: |
        ${eventDetails.value.subject}
        ${(eventDetails.value.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['MMM d']}
        ${(eventDetails.value.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}-${(eventDetails.value.end?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}
        Location: ${eventDetails.value.location}        
        Attendees: ${eventDetails.value.attendees?join(', ')} 
    transitions:
      return: "doneGetDetails"
Remarque

Ce composant est pris en charge dans Oracle Digital Assistant version 21.02 et versions ultérieures.
Propriété Description Requis ?
provider Fournisseur de calendrier. Valeurs autorisées : Google et Outlook. Oui
calendarOwner ID utilisateur du propriétaire du calendrier. Il doit s'agir d'un ID de compte valide pour le fournisseur de calendrier, tel que la valeur de la variable identifiée par la propriété authenticatedUserVariable du composant System.OAuth2AccountLink, définie lors de l'authentification de l'utilisateur. Oui
calendarId Nom du calendrier. Pour le calendrier par défaut de l'utilisateur, définissez la même valeur que pour la propriété calendarOwner. Oui
credential Jeton d'accès du fournisseur. Il s'agit de la valeur de la variable identifiée par la propriété accessTokenVariableName du composant System.OAuth2AccountLink, définie lors de l'authentification de l'utilisateur. Oui
eventId ID de l'événement à extraire. Vous pouvez utiliser System.ListCalendarEvents ou System.SelectCalendarEvent pour obtenir eventId. Oui
eventDetailsVariableName Nom de la variable de contexte dans laquelle stocker les détails. Oui

System.ListCalendarEvents

Utilisez ce composant afin d'obtenir un tableau des événements Outlook ou Google pour un propriétaire de calendrier nommé. Vous pouvez filtrer la liste sur les attributs suivants :

  • L'événement peut être supprimé
  • L'événement peut être mis à jour
  • L'utilisateur a été invité à l'événement
  • Réponse de l'utilisateur à une invitation
  • L'événement inclut des participants nommés
  • La réunion commence après une date et une heure données
  • La réunion se termine avant une date et une heure données

L'utilisateur doit être connecté au fournisseur de calendrier pour accéder à ce composant. Vous pouvez utiliser la fonctionnalitéAutorisation requise pour gérer la connexion utilisateur, comme décrit dans Autorisation de calendrier.

La liste est renvoyée dans la variable spécifiée par la propriété eventListVariableName au format JSON suivant :

[{
  "isAllDay": boolean,
  "subject": string,
  "inviteResponse": string,
  "start": format yyyy-MM-dd'T'HH:mm:ss.SSSZ,
  "end":  format yyyy-MM-dd'T'HH:mm:ss.SSSZ,
  "isRecurring": boolean,
  "id": string
}, …]

Pour découvrir comment définir les valeurs start et end, reportez-vous à Utilisation des dates et heures du calendrier. Cette rubrique explique également comment convertir les valeurs des propriétés JSON start et end à l'heure locale.

Voici un exemple d'utilisation de ce composant.

  ############################
  # List Invites
  ############################

  listInvites:
    component: "System.ListCalendarEvents"
    properties:
      provider: "${system.config.calendarProvider}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
      listType: "INVITED"
      response: "PENDING,ACCEPTED,TENTATIVE,DECLINED"
      eventListVariableName: "eventList"
      start: "${(.now?date?long - timezoneOffset?number?long)?number_to_date?string['yyyy-MM-dd']}T00:00:00"
    transitions:
      next: "globalErrorHandler"
      actions:
        found: "listInvites.printMeetings"
        notfound: "listInvites.notFound"
  listInvites.printMeetings:
    component: "System.CommonResponse"
    properties:
      keepTurn: true
      metadata:
        responseItems:
        - type: "text"
          # display the local time
          text: |
            ${eventList.subject} [${eventList.inviteResponse}]
            ${(eventList.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['MMM d hh:mm a']} to ${(eventList.end?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}           
          name: "event"
          separateBubbles: true
          iteratorVariable: "eventList"
      processUserMessage: false
    transitions:
      return: "listInvitesDone"
  listInvites.notFound:
    component: "System.Output"
    properties:
      keepTurn: true
      text: "You don't have any invitations for the next 14 days"
    transitions:
      return: "listInvitesDone"      
Remarque

Ce composant est pris en charge dans Oracle Digital Assistant version 21.02 et versions ultérieures.
Propriété Description Requis ?
provider Fournisseur de calendrier. Valeurs autorisées : Google et Outlook. Oui
calendarOwner ID utilisateur du propriétaire du calendrier. Il doit s'agir d'un ID de compte valide pour le fournisseur de calendrier, tel que la valeur de la variable identifiée par la propriété authenticatedUserVariable du composant System.OAuth2AccountLink, définie lors de l'authentification de l'utilisateur. Oui
calendarId Nom du calendrier. Pour le calendrier par défaut de l'utilisateur, définissez la même valeur que pour la propriété calendarOwner. Oui
credential Jeton d'accès du fournisseur. Il s'agit de la valeur de la variable identifiée par la propriété accessTokenVariableName du composant System.OAuth2AccountLink, définie lors de l'authentification de l'utilisateur. Oui
listType Indique le type de liste. Il doit s'agir de l'un des suivants :
  • ALL : tous les types de réunion du propriétaire du calendrier
  • DELETE : toutes les réunions que le propriétaire du calendrier peut supprimer
  • UPDATE : toutes les réunions que le propriétaire du calendrier peut mettre à jour
  • INVITED : toutes les réunions auxquelles le propriétaire du calendrier a été invité
Oui
eventListVariableName Nom de la variable de contexte dans laquelle stocker la liste des événements. Oui
start Date et heure les plus anciennes pour lesquelles les réunions doivent être incluses dans la liste (format : yyyy-MM-dd'T'HH:mm:ss). Par exemple, 2021-02-26T09:55:00. Oui
end Date et heure les plus récentes pour lesquelles les réunions doivent être incluses dans la liste (format : yyyy-MM-dd'T'HH:mm:ss). Par exemple, 2021-02-26T09:55:00.

Pour le type de liste INVITED, la valeur par défaut est 14 jours après la date et l'heure de début. Pour tous les autres types, la valeur par défaut est 24 heures après la date et l'heure de début.

Non
attendees Liste des chaînes, séparées par des virgules et sans distinction entre les majuscules et les minuscules, à utiliser pour filtrer la liste sur les participants. Seules les réunions pour lesquelles des valeurs de participant contiennent des chaînes de la liste sont incluses dans la sortie. Non
response Liste des statuts d'invitation, séparés par des virgules, sur lesquels filtrer la liste lorsque listType a la valeur INVITED. Les statuts possibles sont les suivants :
  • ACCEPTED
  • TENTATIVE
  • DECLINED
  • PENDING

La valeur par défaut est PENDING,TENTATIVE, qui affiche uniquement les invitations en attente de réponse ou acceptées provisoirement.

Non
timezoneOffset Durée en millisecondes à ajouter au temps universel (UTC) pour obtenir l'heure standard dans le fuseau horaire de l'utilisateur. Par exemple, si le fuseau horaire local est UTC-2, timezoneOffset est -7200000. La valeur par défaut est 0.
Remarque

Vous pouvez déduire la propriété timezoneOffset pour l'utilisateur en cours en fonction de la valeur de la variable de contexte utilisateur profile.timezoneOffset. Toutefois, dans ce cas, vous devez multiplier profile.timezoneOffset par -1.

Vous pouvez indiquer timezoneOffset ou timezone, mais pas les deux.

Non
timezone ID du fuseau horaire local identifié par https://www.iana.org/time-zones. Egalement appelé nom tz database. Par exemple : America/Los_Angeles. La valeur par défaut est UTC. Vous pouvez indiquer timezoneOffset ou timezone, mais pas les deux. Non

Ce composant peut renvoyer les actions suivantes :

Action Description
found Des événements ont été renvoyés.
notfound Aucun événement correspondant.

System.SelectCalendarEvent

Utilisez ce composant pour afficher la liste des événements Outlook ou Google que l'utilisateur peut sélectionner. Le composant enregistre l'ID de l'événement sélectionné dans la variable spécifiée par la propriété eventIdVariableName.

Vous pouvez filtrer la liste de sélection sur les attributs suivants :

  • L'événement peut être supprimé
  • L'événement peut être mis à jour
  • L'utilisateur a été invité à l'événement
  • Réponse de l'utilisateur à une invitation
  • L'événement inclut des participants nommés
  • La réunion commence après une date et une heure données
  • La réunion se termine avant une date et une heure données

L'utilisateur doit être connecté au fournisseur de calendrier pour accéder à ce composant. Vous pouvez utiliser la fonctionnalitéAutorisation requise pour gérer la connexion utilisateur, comme décrit dans Autorisation de calendrier.

Pour découvrir comment définir les valeurs start et end, reportez-vous à Utilisation des dates et heures du calendrier.

Voici un exemple d'utilisation de ce composant.

  ############################
  # Respond Invites
  ############################
      
  respondInvites.performList:
    component: "System.SelectCalendarEvent"
    properties:
      listType: "INVITED"
      response: "${inviteFilter}"
      # Note: For list type INVITED the default end date is 14 days after the start date and time.
      start: "${(.now?date?long - timezoneOffset?number?long)?number_to_date?string['yyyy-MM-dd']}T00:00:00"
      prompt: "Select the invitation to send the response to:"
      eventIdVariableName: "eventId"
      provider: "${system.config.calendarProvider}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      next: "globalErrorHandler"
      actions:
        found: "respondInvites.resolveInviteResponse"
        notfound: "respondInvites.printNotFoundMessage"

  respondInvites.printNotFoundMessage:
    component: "System.Output"
    properties:
      text: "There are no meeting invites."
    transitions:
      return: "allDone"
  ...

Remarque

Ce composant est pris en charge dans Oracle Digital Assistant version 21.02 et versions ultérieures.
Propriété Description Requis ?
provider Fournisseur de calendrier. Valeurs autorisées : Google et Outlook. Oui
calendarOwner ID utilisateur du propriétaire du calendrier. Il doit s'agir d'un ID de compte valide pour le fournisseur de calendrier, tel que la valeur de la variable identifiée par la propriété authenticatedUserVariable du composant System.OAuth2AccountLink, définie lors de l'authentification de l'utilisateur. Oui
calendarId Nom du calendrier. Pour le calendrier par défaut de l'utilisateur, définissez la même valeur que pour la propriété calendarOwner. Oui
credential Jeton d'accès du fournisseur. Il s'agit de la valeur de la variable identifiée par la propriété accessTokenVariableName du composant System.OAuth2AccountLink, définie lors de l'authentification de l'utilisateur. Oui
listType Indique le type de liste. Il doit s'agir de l'un des suivants :
  • ALL : tous les types de réunion du propriétaire du calendrier
  • DELETE : toutes les réunions que le propriétaire du calendrier peut supprimer
  • UPDATE : toutes les réunions que le propriétaire du calendrier peut mettre à jour
  • INVITED : toutes les réunions qui ne sont pas organisées par le propriétaire du calendrier, mais auxquelles il est invité à participer
Oui
eventIdVariableName Nom de la variable de contexte dans laquelle stocker l'ID de l'événement. Oui
start Date et heure les plus anciennes pour lesquelles les réunions doivent être incluses dans la liste (format : yyyy-MM-dd'T'HH:mm:ss). Par exemple, 2021-02-26T09:55:00. Oui
end Date et heure les plus récentes pour lesquelles les réunions doivent être incluses dans la liste (format : yyyy-MM-dd'T'HH:mm:ss). Par exemple, 2021-02-26T09:55:00.

Pour le type de liste INVITED, la valeur par défaut est 14 jours après la date et l'heure de début. Pour tous les autres types, la valeur par défaut est 24 heures après la date et l'heure de début.

Non
attendees Liste des chaînes, séparées par des virgules et sans distinction entre les majuscules et les minuscules, à utiliser pour filtrer la liste sur les participants. Seules les réunions pour lesquelles des valeurs de participant contiennent des chaînes de la liste sont incluses dans la sortie. Non
response Liste des statuts d'invitation, séparés par des virgules, sur lesquels filtrer la liste lorsque listType a la valeur INVITED. Les statuts possibles sont les suivants :
  • ACCEPTED
  • TENTATIVE
  • DECLINED
  • PENDING

La valeur par défaut est PENDING,TENTATIVE, qui affiche uniquement les invitations en attente de réponse ou acceptées provisoirement.

Non
prompt Texte qui apparaît avant la liste. La valeur par défaut est You have the following meeting(s):. Vous n'avez pas besoin d'inclure cette propriété, sauf si vous voulez remplacer la valeur par défaut.

Conseil :

Dans les briques avec les versions 21.04 et ultérieures de la plate-forme, la valeur par défaut est stockée dans le groupe de ressources de la brique. Pour modifier la valeur par défaut, ouvrez la page Groupe de ressources de la brique, cliquez sur Icône Groupes de ressources, sélectionnez l'onglet Configuration et modifiez le message de la clé SelectCalendarEvent - prompt.
Non
allDayLabel Texte indiquant les événements d'une journée entière. La valeur par défaut est All day. Non
recurringLabel Texte indiquant un événement récurrent. La valeur par défaut est Recurring. Non
acceptedLabel Texte indiquant que le propriétaire du calendrier a accepté l'invitation. La valeur par défaut est Accepted. Non
tentativeLabel Texte indiquant que le propriétaire du calendrier a accepté l'invitation provisoirement. La valeur par défaut est Tentative. Non
declinedLabel Texte indiquant que le propriétaire du calendrier a refusé l'invitation. La valeur par défaut est Declined. Non
pendingLabel Texte indiquant que le propriétaire du calendrier n'a pas encore répondu à l'invitation. La valeur par défaut est Pending. Non
timezoneOffset Durée en millisecondes à ajouter au temps universel (UTC) pour obtenir l'heure standard dans le fuseau horaire de l'utilisateur. Par exemple, si le fuseau horaire local est UTC-2, timezoneOffset est -7200000. La valeur par défaut est 0.
Remarque

Vous pouvez déduire la propriété timezoneOffset pour l'utilisateur en cours en fonction de la valeur de la variable de contexte utilisateur profile.timezoneOffset. Toutefois, dans ce cas, vous devez multiplier profile.timezoneOffset par -1.

Vous pouvez indiquer timezoneOffset ou timezone, mais pas les deux.

Non
timezone ID du fuseau horaire local identifié par https://www.iana.org/time-zones. Egalement appelé nom tz database. Par exemple : America/Los_Angeles. La valeur par défaut est UTC. Vous pouvez indiquer timezoneOffset ou timezone, mais pas les deux. Non

Ce composant peut renvoyer les actions suivantes :

Action Description
found Des événements ont été renvoyés.
notfound Aucun événement correspondant.

System.SendInviteResponse

Utilisez ce composant pour accepter, accepter provisoirement ou refuser une invitation à un événement de calendrier Outlook ou Google.

L'utilisateur doit être connecté au fournisseur de calendrier pour accéder à ce composant. Vous pouvez utiliser la fonctionnalitéAutorisation requise pour gérer la connexion utilisateur, comme décrit dans Autorisation de calendrier.

Voici un exemple d'utilisation de ce composant.


  ############################
  # Respond Invites
  ############################
      
  respondInvites:
    component: "System.CommonResponse"
    properties:
      processUserMessage: true
      metadata:
        responseItems:
          - type: "text"
            text: "Which types of meeting invitations do you want to respond to?"
            name: "getInviteFilter"
            separateBubbles: true
            actions:
              - label: "Pending and tentatively accepted invitations"
                type: "postback"
                keyword: "PENDING,TENTATIVE"
                payload:
                  variables: 
                    inviteFilter: "PENDING,TENTATIVE"
              - label: "All invitations"
                keyword: "PENDING,ACCEPTED,TENTATIVE,DECLINED"
                type: "postback"                
                payload:
                  variables: 
                    inviteFilter: "PENDING,ACCEPTED,TENTATIVE,DECLINED"
              - label: "Cancel"
                keyword: "cancel"
                type: "postback"                
                payload:
                  action: "allDone" 
    transitions:
      actions:
        allDone: "allDone"
        textReceived: "intent" 
      next: "respondInvites.performList"
  respondInvites.performList:
    component: "System.SelectCalendarEvent"
    properties:
      listType: "INVITED"
      response: "${inviteFilter}"
      # Note: For list type INVITED the default end date is 14 days after the start date and time.
      start: "${(.now?date?long - timezoneOffset?number?long)?number_to_date?string['yyyy-MM-dd']}T00:00:00"
      prompt: "Select the invitation to send the response to:"
      eventIdVariableName: "eventId"
      provider: "${system.config.calendarProvider}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      next: "globalErrorHandler"
      actions:
        found: "respondInvites.resolveInviteResponse"
        notfound: "respondInvites.printNotFoundMessage"
  respondInvites.printNotFoundMessage:
    component: "System.Output"
    properties:
      text: "There are no meeting invites."
    transitions:
      return: "allDone"

  ############################
  # Invite Response
  ############################
      
  respondInvites.resolveInviteResponse:
    component: "System.CommonResponse"
    properties:
      processUserMessage: true
      metadata:
        responseItems:
          - type: "text"
            text: "Choose a response:"
            name: "getInviteResponse"
            separateBubbles: true
            actions:
              - label: "Accept"
                type: "postback"
                keyword: "ACCEPTED"
                payload:
                  variables: 
                    inviteResponse: "ACCEPTED"
              - label: "Tentatively accept"
                keyword: "TENTATIVE"
                type: "postback"                
                payload:
                  variables: 
                    inviteResponse: "TENTATIVE"
              - label: "Decline"
                keyword: "DECLINED"
                type: "postback"                
                payload:
                  variables: 
                    inviteResponse: "DECLINED"
              - label: "Don't send a response"
                keyword: "CANCEL"
                type: "postback"                
                payload:
                  action: "allDone" 
    transitions:
      actions:
        allDone: "allDone"
        textReceived: "intent" 
      next: "respondInvites.performRespond"
  respondInvites.performRespond:
    component: "System.SendInviteResponse"
    properties:
      eventId: "${eventId}"
      response: "${inviteResponse}"
      provider: "${system.config.calendarProvider}"
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions: 
      next: "respondInvites.printSuccessMessage"
  respondInvites.printSuccessMessage:
    component: "System.Output"
    properties:
      text: "I've sent the meeting invitation response"
    transitions:
      return: "doneSendInviteResponse"
Remarque

Ce composant est pris en charge dans Oracle Digital Assistant version 21.02 et versions ultérieures.
Propriété Description Requis ?
provider Fournisseur de calendrier. Valeurs autorisées : Google et Outlook. Oui
calendarOwner ID utilisateur du propriétaire du calendrier. Il doit s'agir d'un ID de compte valide pour le fournisseur de calendrier, tel que la valeur de la variable identifiée par la propriété authenticatedUserVariable du composant System.OAuth2AccountLink, définie lors de l'authentification de l'utilisateur. Oui
calendarId Nom du calendrier. Pour le calendrier par défaut de l'utilisateur, définissez la même valeur que pour la propriété calendarOwner. Oui
credential Jeton d'accès du fournisseur. Il s'agit de la valeur de la variable identifiée par la propriété accessTokenVariableName du composant System.OAuth2AccountLink, définie lors de l'authentification de l'utilisateur. Oui
eventId ID de l'événement auquel envoyer la réponse. Vous pouvez utiliser System.ListCalendarEvents ou System.SelectCalendarEvent pour obtenir l'ID des événements de calendrier auxquels le propriétaire du calendrier a été invité. Oui
response Réponse à envoyer. Les réponses possibles sont les suivantes :
  • ACCEPTED
  • TENTATIVE
  • DECLINED
Oui

System.UpdateCalendarEvent

Utilisez ce composant pour apporter des modifications à un événement de calendrier Outlook ou Google. Vous ne pouvez pas mettre à jour des événements récurrents ou d'une journée entière.

L'utilisateur doit être connecté au fournisseur de calendrier pour accéder à ce composant. Vous pouvez utiliser la fonctionnalitéAutorisation requise pour gérer la connexion utilisateur, comme décrit dans Autorisation de calendrier.

Pour découvrir comment définir les valeurs start et end, reportez-vous à Utilisation des dates et heures du calendrier.

Voici un exemple d'utilisation de ce composant. Dans cet exemple, une entité de conteneur composite est utilisée pour obtenir la date, l'heure de début et l'heure de fin.


  ####################
  # Update Meeting 
  ####################
 
  updateMeeting:
    component: "System.SetVariable"
    properties:
      variable: "stateAfterList"
      value: "updateMeeting.performGetDetails"
    transitions:
      next: "updateMeeting.setListType"
  updateMeeting.setListType:
    component: "System.SetVariable"
    properties:
      variable: "listType"
      # Only show updateable meetings
      value: "UPDATE"
    transitions:
      next: "updateMeeting.setListPrompt"
  updateMeeting.setListPrompt:
    component: "System.SetVariable"
    properties:
      variable: "listPrompt"
      value: "to update"
    transitions:
      next: "listMeetings.commonEntryPoint"

  # List meetings common code returns to this state
  updateMeeting.performGetDetails:
    component: "System.GetCalendarEventDetails"
    properties:
      eventId: "${eventId}"
      eventDetailsVariableName: "eventDetails"
      provider: "${system.config.calendarProvider}"
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      next: "updateMeeting.checkIfResults"      
  updateMeeting.checkIfResults:
    component: "System.ConditionExists"
    properties:
      variable: "eventDetails"
    transitions:
      actions:
        exists: "updateMeeting.printEventDetails"
        notexists: "globalErrorHandler"  
  updateMeeting.printEventDetails:
    component: "System.Output"
    properties:
      keepTurn: true
      text: |
        You selected:
        ${eventDetails.value.subject}
        ${(eventDetails.value.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['MMM d']}
        ${(eventDetails.value.start?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}-${(eventDetails.value.end?datetime.iso?long - timezoneOffset?number?long)?number_to_date?string['hh:mm a']}
        Location: ${eventDetails.value.location}        
        Attendees: ${eventDetails.value.attendees?join(', ')}     
    transitions:
      next: "updateMeeting.updateTime"

  # Change meeting time
      
  updateMeeting.updateTime:
    component: "System.ResolveEntities"
    properties:
      variable: "meetingSlot"
      nlpResultVariable: "iResult"      
      maxPrompts: 5
      cancelPolicy: "immediate" 
    transitions:
      actions:
        cancel: "allDone"
      next: "updateMeeting.setStart"      
  updateMeeting.setStart:
    component: "System.SetVariable"
    properties:
      variable: "start"
      value: "${meetingSlot.value.date.date?number_to_date?string['yyyy-MM-dd']}T${meetingSlot.value.startTime.date?number_to_date?string['HH:mm:ss']}"
    transitions:
      next: "updateMeeting.setEnd"
  updateMeeting.setEnd:
    component: "System.SetVariable"
    properties:
      variable: "end"
      value: "${meetingSlot.value.date.date?number_to_date?string['yyyy-MM-dd']}T${meetingSlot.value.endTime.date?number_to_date?string['HH:mm:ss']}"
    transitions:
      next: "updateMeeting.updateTime.performUpdate"
  updateMeeting.updateTime.performUpdate:
    component: "System.UpdateCalendarEvent"
    properties:
      eventId: "${eventId}"
      start: "${start}"
      end: "${end}"
      provider: "${system.config.calendarProvider}"
      #timezone: "${system.config.timezoneID}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      next: "updateMeeting.printSuccessMessage"
      error: "handleUpdateCalendarError"
  ...

  ############################
  # List Meetings Shared Code
  ############################
  
  listMeetings.commonEntryPoint:
    component: "System.SetVariable"
    properties:
      variable: "inputDate"
      value: "${iResult.value.entityMatches['DATE'][0]}"
    transitions:
      next: "listMeetings.setDate"
  listMeetings.setDate:
    component: "System.SetVariable"
    properties:
      variable: "start"
      value: "${inputDate.value?has_content?then(inputDate.value.date?number_to_date?string['yyyy-MM-dd'], (.now?date?long - timezoneOffset?number?long)?number_to_date?string['yyyy-MM-dd'])}T00:00:00"
    transitions:
      next: "listMeetings.clearInputDate"  
  listMeetings.clearInputDate:
    component: "System.ResetVariables"
    properties:
      variableList: "inputDate"
    transitions:
      next: "listMeetings.filterByAttendees"
  listMeetings.filterByAttendees:
    component: "System.CommonResponse"
    properties:
      processUserMessage: true
      metadata:
        responseItems:
          - type: "text"
            text: "Do you want to list only meetings with a particular attendee?"
            name: "confirmFilter"
            separateBubbles: true
            actions:
              - label: "Yes"
                type: "postback"
                keyword: "yes"
                payload:
                  action: "yes"
                name: "Yes"
              - label: "No"
                keyword: "no"
                type: "postback"
                payload:
                  action: "no"
                name: "No"
    transitions:
      next: "intent"
      actions:
        yes: "listMeetings.resolveAttendeesFilter"
        no: "listMeetings.clearAttendeesFilter"
        textReceived: "intent"

  # clear filter 
  
  listMeetings.clearAttendeesFilter:
    component: "System.ResetVariables"
    properties:
      variableList: "attendees"
    transitions:
      next: "listMeetings.performList"

  # resolve filter

  listMeetings.resolveAttendeesFilter:
    component: "System.CommonResponse"
    properties:
      keepTurn: true
      processUserMessage: true
      variable: "attendees"
      nlpResultVariable: "iResult"
      metadata:
        responseItems:
          - type: "text"
            text: "Who is the attendee?"
    transitions:
      next: "listMeetings.performAttendeesList"
      actions:
        textReceived: "listMeetings.performAttendeesList"

  # perform attendees list 

  listMeetings.performAttendeesList:
    component: "System.SelectCalendarEvent"
    properties:
      listType: "${listType}"
      start: "${start}"
      attendees: "${attendees}"
      prompt: "Choose the ${start?datetime.iso?long?number_to_date?string['MMM d']} meeting ${listPrompt}:"
      eventIdVariableName: "eventId"
      provider: "${system.config.calendarProvider}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      actions:
        found: "${stateAfterList}"
        notfound: "listMeetings.printNotFoundMessage"
      next: "globalErrorHandler"

  # perform list 

  listMeetings.performList:
    component: "System.SelectCalendarEvent"
    properties:
      listType: "${listType}"
      start: "${start}"
      prompt: "Choose the ${start?datetime.iso?long?number_to_date?string['MMM d']} meeting ${listPrompt}:"
      eventIdVariableName: "eventId"
      provider: "${system.config.calendarProvider}"
      timezoneOffset: ${timezoneOffset?number * -1}
      calendarOwner: "${user.authenticatedUser}"
      calendarId: "${user.authenticatedUser}"
      credential: "${user.accessToken}"
    transitions:
      actions:
        found: "${stateAfterList}"
        notfound: "listMeetings.printNotFoundMessage"
      next: "globalErrorHandler"

  listMeetings.printNotFoundMessage:
    component: "System.Output"
    properties:
      text: "There are no meetings on ${start?datetime.iso?long?number_to_date?string['MMM d']}"
    transitions:
      return: "doneListMeetings"
...
Remarque

Ce composant est pris en charge dans Oracle Digital Assistant version 21.02 et versions ultérieures.
Propriété Description Requis ?
provider Fournisseur de calendrier. Valeurs autorisées : Google et Outlook. Oui
calendarOwner ID utilisateur du propriétaire du calendrier. Il doit s'agir d'un ID de compte valide pour le fournisseur de calendrier, tel que la valeur de la variable identifiée par la propriété authenticatedUserVariable du composant System.OAuth2AccountLink, définie lors de l'authentification de l'utilisateur. Oui
calendarId Nom du calendrier. Pour le calendrier par défaut de l'utilisateur, définissez la même valeur que pour la propriété calendarOwner. Oui
credential Jeton d'accès du fournisseur. Il s'agit de la valeur de la variable identifiée par la propriété accessTokenVariableName du composant System.OAuth2AccountLink, définie lors de l'authentification de l'utilisateur. Oui
eventId ID de l'événement à mettre à jour. Vous pouvez utiliser System.ListCalendarEvents ou System.SelectCalendarEvent pour obtenir eventId. Oui
start Nouvelles date et heure de début au format yyyy-MM-dd'T'HH:mm:ss. Par exemple, 2021-02-26T09:55:00. Non
end Nouvelles date et heure de fin au format yyyy-MM-dd'T'HH:mm:ss. Par exemple, 2021-02-26T09:55:00. Non
subject Nouvel objet de la réunion. Oui
attendees Liste des participants, séparés par des virgules. Cette liste remplace la liste précédente. Le fournisseur de calendrier ne peut pas envoyer de notification à un participant si l'ID n'est pas un ID de compte valide pour ce fournisseur. Oui
timezoneOffset Durée en millisecondes à ajouter au temps universel (UTC) pour obtenir l'heure standard dans le fuseau horaire de l'utilisateur. Par exemple, si le fuseau horaire local est UTC-2, timezoneOffset est -7200000. La valeur par défaut est 0.
Remarque

Vous pouvez déduire la propriété timezoneOffset pour l'utilisateur en cours en fonction de la valeur de la variable de contexte utilisateur profile.timezoneOffset. Toutefois, dans ce cas, vous devez multiplier profile.timezoneOffset par -1.

Vous pouvez indiquer timezoneOffset ou timezone, mais pas les deux.

Non
timezone ID du fuseau horaire local identifié par https://www.iana.org/time-zones. Egalement appelé nom tz database. Par exemple : America/Los_Angeles. La valeur par défaut est UTC. Vous pouvez indiquer timezoneOffset ou timezone, mais pas les deux. Non

Bas de page

Utilisez des pieds de page dans System.List et System.CommonResponse pour des indications utilisateur supplémentaires lors de l'exécution de votre bot sur des canaux de texte uniquement.
Image d'exécution du texte de pied de page.
Ce pied de page apparaît sur tous les canaux, y compris ceux qui prennent en charge les boutons tels que Facebook. Toutefois, vous pouvez configurer un affichage propre au canal pour le pied de page. La procédure est la suivante :
  • Définissez la variable autoNumberPostbackActions à l'aide de l'expression system.message.
    setAutoNumbering:
      component: "System.SetVariable"
      properties:
        variable: "autoNumberPostbackActions" 
        value: "${(system.channelType=='facebook')?then('true','false')}" 
  • Définissez la définition footerText avec une directive Apache FreeMarker if pour afficher ou masquer le pied de page en fonction du type de canal.
    footerText: <#if autoNumberPostbackActions.value>"Make your choice by entering the menu option number."</#if>
Remarque

Sur Facebook, System.CommonResponse affiche le texte de pied de page dans sa propre bulle de texte qui apparaît juste avant les actions globales (réponses rapides). Le pied de page ne peut pas s'afficher après ces actions, car cela nécessite une deuxième bulle de texte de pied de page qui entraîne la disparition des actions.

Propriété translate

L'interface utilisateur et les composants d'entrée basés sur YAML possèdent tous une propriété translate qui remplace le paramètre de variable autoTranslate global :
  • Si vous définissez la variable autoTranslate sur false (valeur par défaut), aucune traduction automatique n'est effectuée sur le composant, sauf si vous définissez la propriété translate sur true.

  • Si vous définissez la variable autoTranslate sur true, la propriété translate est également définie sur true de manière implicite, ce qui signifie que les chaînes de libellé, de titre, de description, d'invite et de texte seront traduites.

Par exemple, si vous avez activé autotranslate en la définissant sur true, la définition de la propriété translate d'un composant sur false exclut ses chaînes d'invite, de titre, de description, de libellé et de texte de la traduction. A l'inverse, si vous n'activez pas autotranslate mais que la propriété translate d'un composant est définie sur true, les chaînes d'invite, de titre, de description, de libellé et de texte du composant sont traduites dans la langue utilisateur détectée à l'aide du service de traduction configuré. (Les composants d'entrée traduisent la saisie utilisateur en anglais.)
La valeur autoTranslate est définie sur... ...et la propriété translate du composant est définie sur... ...donc la saisie utilisateur, l'invite, le libellé, le texte, le titre et la description sont traduits
true non défini oui
true true oui
true false non
false non défini non
false false non
false true oui
Remarque

Les flux conçus avec le concepteur de flux visuel ne disposent pas de la propriété translate ou de la variable de contexte autoTranslate. Pour configurer la traduction de ces briques, utilisez les propriétés Traduire le message d'entrée utilisateur et Traduire le message de réponse de bot.

System.Feedback

Remarque

Cette rubrique traite de l'utilisation de ce composant en mode YAML. Pour plus d'informations sur son utilisation dans le concepteur de flux visuel, reportez-vous à Commentaires utilisateur.

Le composant System.Feedback vous permet de collecter des données de retour pour Insights en présentant aux utilisateurs une échelle de notation une fois qu'ils ont terminé un flux transactionnel. Si vous utilisez le SDK 21.10 ou une version ultérieure, ce composant génère un système de classement horizontal par étoiles. Si vous utilisez un SDK antérieur, le composant affiche cette échelle de notation sous la forme d'une liste simple qui permet aux utilisateurs d'appuyer sur le bouton correspondant à leur évaluation.

Bien que vous puissiez modifier le comportement de ce composant à l'aide des propriétés du composant, vous pouvez modifier son apparence lorsque vous utilisez le SDK (version 21.10 ou ultérieure). Par exemple, vous pouvez remplacer les icônes en étoile par défaut utilisées pour les boutons de retour par une autre icône.

System.Feedback Propriétés de composant

Propriété Description
maxRating Notation maximale qu'un utilisateur peut soumettre. La valeur maximale est 5. Vous pouvez ajuster cette valeur vers le bas.
enableTextFeedback Une valeur booléenne, qui, si elle est définie sur true, permet à l'utilisateur de soumettre un retour au format texte si la notation est inférieure ou égale à la valeur threshold. La valeur par défaut de cette propriété est false (aucun retour n'est activé).
threshold Valeur permettant d'évaluer la transition entre les actions above et below. Par défaut, le seuil entre les retours positifs et négatifs est défini sur 2 pour la valeur maxRating par défaut, à savoir 5.
footerText Texte affiché en bas de la boîte de dialogue de retour.

System.FeedbackTransitions de composant

Chaque action de transition doit nommer un état dans le flux de dialogue qui met fin à la conversation avec une transition return: "done".
Action Description
above Défini lorsque l'entrée utilisateur est une valeur valide supérieure à la valeur threshold.
below Définie lorsque l'entrée utilisateur est une valeur valide égale ou inférieure à la valeur threshold. ).
cancel Définissez le moment où les utilisateurs refusent l'évaluation en cliquant sur Ignorer.
Vous pouvez utiliser les variables système suivantes pour les messages générés par les états de transition :
  • system.userFeedbackRating : renvoie la note de l'utilisateur.
  • system.userFeedbackText : lorsque enableTextFeedback est défini sur true, votre brique peut demander un retour lorsque les notations sont inférieures à la valeur threshold. system.userFeedbackText renvoie l'entrée de l'utilisateur (${system.userFeedbackText.value}).
...
  getUserFeedback:
    component: "System.Feedback"
    properties: 
      threshold: 2
      maxRating: 5
      enableTextFeedback: true
    transitions:
      actions:
        above: "positiveFeedback"
        below: "negativeFeedback"
        cancel: "cancelFeedback"
  positiveFeedback:
    component: "System.Output"
    properties:
      text: "Thank you for your rating of ${system.userFeedbackRating.value}."
    transitions:
      return: "done"
  negativeFeedback:
    component: "System.Output"
    properties:
      text: "You gave us a score of ${system.userFeedbackRating.value} and entered ${system.userFeedbackText.value}. We appreciate your feedback."
    transitions:
      return: "done"
  cancelFeedback:
    component: "System.Output"
    properties:
      text: "Feedback canceled."
    transitions:
      return: "done"
...

System.Text

Remarque

Ce composant est en phase d'abandon et il n'existe plus de modèle disponible. Au lieu de cela, vous pouvez utiliser l'un des nombreux modèles basés sur le composant de réponse commune proposé dans la section Messagerie utilisateur de la boîte de dialogue Ajouter un composant.

Le composant System.Text permet à votre bot de définir un contexte ou une variable utilisateur en demandant à l'utilisateur de saisir du texte.

Lorsque le moteur de dialogue entre dans l'état System.Text pour la première fois, il invite l'utilisateur à saisir du texte. Lorsque l'utilisateur saisit une valeur, le moteur de dialogue revient à cet état. Le composant traite la réponse de l'utilisateur et, s'il peut convertir la saisie utilisateur dans le type de variable, il stocke la valeur dans la variable. Le moteur de dialogue passe à un autre état lorsque cette variable a une valeur.
Remarque

Le moteur de dialogue ignore l'état System.Text de la variable ayant déjà une valeur.
Propriété Description Requis ?
prompt Chaîne de texte décrivant l'entrée requise par l'utilisateur. Vous pouvez lui ajouter des valeurs dynamiquement à l'aide d'une expression de valeur. Par exemple : Hello ${profile.firstName}, how many pizzas do you want? Oui
variable Nom de la variable, qui peut être une variable utilisateur ou l'une des variables déclarées dans le noeud context. Oui
nlpResultVariable Définit la propriété variable avec une valeur d'entité (si cette valeur d'entité n'a pas encore été définie pour la variable référencée). Vous pouvez permettre à nlpResultVariable de renvoyer une valeur lorsque vous la définissez à l'aide d'une variable contenant les résultats du traitement du langage naturel (par exemple, iresult: "nlpresult" qui est utilisé dans nos exemples de bots). Ainsi, la propriété nlpResultVariable peut toujours remplir la valeur lorsqu'elle est NULL si elle trouve une entité résolue correspondant à celle référencée par la variable. La boîte de dialogue passe à l'état suivant lorsque nlpResultVariable définit la valeur. Vous pouvez utiliser cette propriété à la place du composant System.SetVariable. Non
maxPrompts Nombre de fois où le composant invite l'utilisateur à saisir une entrée valide. Reportez-vous à Limitation du nombre d'invites utilisateur. Non
translate Utilisez cette propriété afin de remplacer la valeur booléenne que vous avez définie pour la variable de contexte autotranslate. Si vous n'avez pas défini cette variable ou si vous l'avez définie sur false, vous pouvez définir cette propriété sur true afin d'activer la traduction automatique pour ce composant uniquement. Si vous définissez la variable autotranslation sur true, vous pouvez définir cette propriété sur false pour exclure ce composant de la traduction automatique. Reportez-vous à Services de traduction dans les briques. Non

Reportez-vous à Transitions pour les composants de réponse communs pour connaître les types d'action prédéfinis que vous pouvez utiliser avec ce composant.

Comment utiliser le composant System.Text ?

Dans cet exemple, la variable type contient les valeurs attendues par l'entité PizzaType, comme cheese, Veggie Lover et Hawaiian. Lorsque cette information est manquante dans la saisie utilisateur, le bot peut tout de même l'obtenir, car son flux de dialogue passe à l'état type, dont le composant System.Text invite l'utilisateur à indiquer explicitement ce qu'il veut. Gardez à l'esprit que même à ce stade, la saisie utilisateur doit quand même être résolue en entité PizzaType pour passer à l'état suivant.

main: true
name: "PizzaBot"
parameters:
  age: 18
context:
  variables:
    size: "PizzaSize"
    type: "PizzaType"
    crust: "PizzaCrust"
    iResult: "nlpresult"

...

  type:
    component: "System.Text"
    properties:
      prompt: "What Type of Pizza do you want?"
      variable: "type"
    transitions:
      ...

System.List

Remarque

Ce composant est en phase d'abandon et il n'existe plus de modèle disponible. Au lieu de cela, vous pouvez utiliser l'un des nombreux modèles basés sur le composant de réponse commune proposé dans la section Messagerie utilisateur de la boîte de dialogue Ajouter un composant.

Le composant System.List est conçu pour générer une liste d'options. Selon qu'une valeur de variable a été définie (ou définie pour ce composant), la navigation à partir du composant peut être déclenchée par l'utilisateur, ou par la valeur définie pour la variable utilisateur ou de contexte

Propriété Description Requis ?
options Vous pouvez indiquer options en utilisant des chaînes de texte séparées par des virgules, des expressions Apache FreeMarker et une liste de correspondances. Les options Propriété et Listes d'actions fournissent des exemples de la dernière approche. Oui
prompt Chaîne de texte invitant l'utilisateur à effectuer une action. Oui
variable Nom de la variable dont la valeur est remplie par la saisie utilisateur. Le moteur de dialogue ignore cet état si la valeur de la variable a déjà été définie et ne génère pas les options de liste pour l'utilisateur. Non
nlpResultVariable Définit la propriété variable avec une valeur d'entité (si cette valeur d'entité n'a pas encore été définie pour la variable référencée). Vous pouvez activer la fonction nlpResultVariable pour renvoyer une valeur lorsque vous la définissez à l'aide de la variable contenant les résultats du traitement du langage naturel (par exemple, iResult: "nlpresult" qui est utilisé dans nos exemples de briques). Ainsi, la propriété nlpResultVariable peut toujours remplir la valeur lorsqu'elle est NULL si elle trouve une entité résolue correspondant à celle référencée par la variable. La boîte de dialogue passe à l'état suivant lorsque nlpResultVariable définit la valeur. Vous pouvez utiliser cette propriété à la place du composant System.SetVariable. L'option Listes d'actions décrit la façon dont vous pouvez utiliser les propriétés variable et nlpResultVariable pour modifier le comportement d'affichage de la liste. Non : utilisez cette propriété lorsque la propriété de variable nomme une variable de type entité.
maxPrompts Nombre de fois où le composant invite l'utilisateur à saisir une entrée valide. Reportez-vous à Limitation du nombre d'invites utilisateur. Non
translate Utilisez cette propriété afin de remplacer la valeur booléenne que vous avez définie pour la variable de contexte autotranslate. Si vous n'avez pas défini cette variable ou si vous l'avez définie sur false, vous pouvez définir cette propriété sur true afin d'activer la traduction automatique pour ce composant uniquement. Si vous définissez la variable autotranslation sur true, vous pouvez définir cette propriété sur false pour exclure ce composant de la traduction automatique. Reportez-vous à Services de traduction dans les briques. Non
autoNumberPostbackActions Lorsqu'elle est définie sur true, cette option ajoute des nombres en tant que préfixes à des options. Même si vous n'avez pas défini cette option sur true, la numérotation automatique peut être appliquée aux éléments de liste lorsque la configuration Activer la numérotation automatique sur les actions de postback de l'assistant numérique est définie sur true. La numérotation automatique propre au canal peut être appliquée à toute brique inscrite dans un assistant numérique : ${(system.channelType=='twilio')?then('true','false')} Non
footerText Améliore la sortie sur les canaux de texte uniquement. Comme décrit dans Pieds de page, vous pouvez utiliser des expressions FreeMarker afin d'appliquer des conditions au texte de pied de page pour les canaux de texte uniquement. Non
Reportez-vous à Transitions pour les composants de réponse communs pour connaître les types d'action prédéfinis que vous pouvez utiliser avec ce composant.

Listes de valeurs

Vous pouvez utiliser le composant System.List pour renvoyer une valeur qui remplit une variable de contexte définie comme primitive (comme greeting: "string" dans le modèle de flux de dialogue) ou comme entité, comme indiqué dans le fragment de code suivant. Dans ce flux de dialogue, la définition options: "Thick,Thin,Stuffed,Pan" renvoie une valeur qui correspond à la variable crust. La propriété options définie pour size est une expression de valeur (${size.type.enumValues}) qui renvoie les valeurs de liste Large, Medium, Small et Personal en tant qu'options. Reportez-vous à Syntaxe de langage de modèle Apache FreeMarker.

Cet exemple montre également comment la définition iResult de la propriété nlpResultVariable permet au composant de définir les valeurs d'entité des propriétés variable pour les états crust et size lorsque ces valeurs n'ont pas été définies. Comme pour le composant Text, le composant System.List ne requiert aucune transition.
main: true
name: "PizzaBot"

...

context:
  variables:
    size: "PizzaSize"
    crust: "PizzaCrust"
    iResult: "nlpresult"

...

states:

...

crust:
  component: "System.List"
  properties:
    options: "Thick,Thin,Stuffed,Pan"
    prompt: "What crust do you want for your pizza?"
    variable: "crust"
main: true
name: "PizzaBot"

...

context:
  variables:
    size: "PizzaSize"
    crust: "PizzaCrust"
    iResult: "nlpresult"
...

states:

...

crust:
   component: "System.List"
   properties:
     options: "Thick,Thin,Stuffed,Pan"
     prompt: "What crust do you want for your pizza?"
     variable: "crust"
     nlpResultVariable: "iresult"
   transitions:
     next: "size"
size:
   component: "System.List"
   properties:
     options: "${size.type.enumValues}"
       prompt: "What size Pizza do you want?"
       variable: "size"
       nlpResultVariable: "iresult"
    transitions:
      ...

Composant de liste dans une discussion en direct.
Remarque

Les utilisateurs ne sont pas limités aux options affichées dans la liste. Ils peuvent résoudre l'entité en saisissant un mot que l'entité reconnaît, comme un synonyme. Au lieu de choisir parmi les options de taille de pizza dans la liste, par exemple, les utilisateurs peuvent entrer big, un synonyme défini pour l'option Large de l'entité PizzaSize. Reportez-vous à Entités personnalisées.
Composant de liste avec saisie utilisateur.

Propriété options

Vous pouvez définir la propriété options à l'aide de l'une des méthodes suivantes :
  • Liste de correspondances : bien que vous puissiez définir la propriété options en tant qu'expression de chaîne de texte ou de valeur, vous pouvez également configurer la propriété options en tant que liste de correspondances. Chacune d'entre elles possède une propriété label, une propriété value et une propriété keyword facultative. Vous pouvez localiser vos options de liste lorsque vous suivez cette approche car, comme indiqué dans l'exemple suivant, vous pouvez référencer un groupe de ressources. Pour plus d'informations sur l'utilisation de la syntaxe par points, reportez-vous à Groupes de ressources pour les briques. Lorsque les utilisateurs saisissent une valeur qui correspond à l'une des valeurs spécifiées dans la propriété keyword, le bot réagit de la même façon que si l'utilisateur avait touché l'option de liste elle-même.
    askPizzaSize:
      component: "System.List" 
      properties:
        prompt: What size do you want?"
        options:
        - value: "small"
          label: "${rb.pizza_size_small}"
          keyword: "1"
        - value: "medium"
          label: "${rb.pizza_size_medium}"
          keyword: "2" 
        - value: "large"
          label: "${rb.pizza_size_large}"
          keyword: "3" 
       variable: "pizzaSize"
  • Chaîne de texte comprenant des options séparées par des virgules, comme "small, medium, large" dans le fragment de code suivant. Vous ne pouvez pas ajouter les propriétés label et value lorsque vous définissez options en tant que chaîne.
    askPizzaSize:
      component: "System.List"
      properties: 
        prompt: "What size do you want?"
        options: "small, medium, large"
        variable: "pizzaSize"
    
  • Expression de valeur Apache FreeMarker qui s'exécute en boucle sur une liste de chaînes ou une liste de correspondances, dans laquelle chaque correspondance doit contenir les propriétés label et value et éventuellement une propriété keyword.
    askPizzaSize:
      component: "System.List" 
      properties:
        prompt: "What size do you want?"
        options: "${pizzaSize.value.enumValues}"
        variable: "pizzaSize"
Reportez-vous au manuel Apache FreeMarker pour en savoir plus sur la syntaxe.

Liste d'actions

Au lieu d'utiliser le composant System.Switch pour la navigation conditionnelle, vous pouvez utiliser des listes d'actions. Les propriétés facultatives variable et nlpResultVariable de System.List définissent le comportement d'affichage de la liste et la transition suivante en fonction de l'entrée utilisateur.
  • Si vous ne configurez pas ces propriétés, l'action de transition repose sur l'option sélectionnée par l'utilisateur de la brique :
    showMenu:
      component: "System.List" 
      properties:
        prompt: "Hello, this is our menu today"  
        options:
    
        - value: "pasta"
          label: "Pasta"
        - value: "pizza"
          label: "Pizza"
    
      transitions:
        actions:
          pasta: "orderPasta"
          pizza: "orderPizza"
  • Lorsque vous ajoutez les propriétés variable et nlpResultVariable, l'affichage de la liste est contourné en cas de correspondance de l'entrée utilisateur. Dans le fragment de code suivant, la liste d'options est contournée lorsque nlpResultVariable définit la variable size de l'entrée utilisateur comme I want to order a large pizza. La transition appropriée à la valeur est alors déclenchée.
    getPizzaSize:
      component: "System.List"
      properties:
        prompt: "What size of pizza"
        variable: "size"
        nlpResultVariable: "iResult"
        options:
    
        - label: "Small"
          value: "Small"
        - label: "Large"
          value: "Large"
        transitions:
          actions:
            Large: "Large"
            Small: "Small"

System.Output

Utilisez le composant System.Output pour générer un message n'exigeant aucune réponse de l'utilisateur ou n'exigeant pas que votre brique traite la réponse de l'utilisateur.
Remarque

Ce composant est en phase d'abandon et il n'existe plus de modèle disponible. Au lieu de cela, vous pouvez utiliser l'un des nombreux modèles basés sur System.CommonResponse proposés dans la section Messagerie utilisateur de la boîte de dialogue Ajouter un composant.
Propriété Description Requis ?
text Chaîne de texte Oui. Ce champ requiert une valeur.
keepTurn Valeur booléenne permettant d'abandonner (false) ou de conserver le contrôle de la brique du flux de dialogue (true). Utilisez keepTurn: true lorsque vous voulez générer une séquence ininterrompue de messages de brique dans laquelle aucun message de l'utilisateur n'est accepté. Non
translate Utilisez cette propriété afin de remplacer la valeur booléenne que vous avez définie pour la variable de contexte autotranslate. Si vous n'avez pas défini cette variable ou que vous l'avez définie sur false, vous pouvez définir cette propriété sur true afin d'activer la traduction automatique pour ce composant uniquement. Si vous définissez la variable autotranslation sur true, vous pouvez définir cette propriété sur false pour exclure ce composant de la traduction automatique. Reportez-vous à Services de traduction dans les briques. Non

Utilisation du composant System.Output

Le composant System.Output requiert la définition de chaîne pour la propriété text. Comme illustré dans l'exemple de message de confirmation suivant, vous pouvez ajouter des expressions de valeur à cette chaîne.
done:
    component: "System.Output"
    properties:
      text: "Your ${size.value}, ${type.value} pizza with ${crust.value} crust is on its way. Thank you for your order."
Par défaut, le moteur de dialogue attend la saisie utilisateur après avoir généré une instruction à partir de votre brique. Si vous remplacez ce comportement, ajoutez la propriété facultative keepTurn et définissez-la sur true pour que le moteur de dialogue passe à l'état suivant défini par la propriététransitions. Si aucune transition n'est définie, le moteur de dialogue passe à l'état suivant dans la séquence.
  wait:
    component: "System.Output"
    properties:
      text: "Please wait, we're reviewing your order"
      keepTurn: true
    transitions:
      next: "ready"
 waitmore:
    component: "System.Output"
    properties:
      text: "Almost done..."
      keepTurn: true
    transitions:
      next: "done"
  done:
    component: "System.Output"
    properties:
      text: "Your ${size.value}, ${type.value} pizza with ${crust.value} crust is on its way. Thank you for your order."
    transitions:
      return: "done"

Définition des expressions de valeur pour le composant System.Output

Vous pouvez définir des expressions de valeur pour la propriété text. Par exemple, le fragment de code suivant utilise différentes expressions pour générer le texte dans le cadre d'une confirmation de commande (taille et type de pizza).
confirmation:
    component: "System.Output"
    properties:
      text: "Your ${size.value} ${type.value} pizza is on its way."
    transitions:
      return: "done" 
Chaque expression doit toujours renvoyer une valeur. Si une expression renvoie une valeur NULL, la brique génère un texte brut pour chaque expression dans la chaîne. Vos utilisateurs obtiennent donc la sortie suivante :
Your ${size.value} ${type.value} is on its way.
C'est tout ou rien. Pour que votre brique génère toujours du texte que vos utilisateurs comprennent, remplacez la valeur par défaut par une valeur NULL à l'aide de l'opérateur de valeur par défaut Apache FreeMarker : ${size.value!\”piping\”} ${type.value!\”hot\”}. Les guillemets indiquent que la valeur par défaut n'est pas une référence de variable, mais qu'il s'agit à la place de la valeur constante attendue par l'opérateur. Par exemple :
text: "Your ${size.value!\"piping\"} ${type.value!\"hot\"} pizza is on its way."
Remarque

Ajoutez toujours des caractères d'échappement aux guillemets (\"...\") qui entourent la valeur par défaut lorsque vous utilisez l'opérateur FreeMarker. La syntaxe OBotML de votre flux de dialogue ne sera pas valide, sauf si vous utilisez cette séquence d'échappement chaque fois que vous définissez une opération de valeur par défaut ou que vous désactivez du texte de sortie avec des guillemets. Par exemple, la définition de composant System.Output suivante permet aux utilisateurs de lire le message suivant : You said, “Cancel this order.”
confirmCancel:
    component: "System.Output"
    properties:
      text: "You said, \"Cancel this order.\""
    transitions:
      return: "cancelOrder"

Traduction du texte généré

Vous pouvez supprimer ou activer la traduction automatique du texte du composant System.Output selon le composant à l'aide de la propriété translate. Si vous la définissez sur false, comme dans le fragment de code suivant, les composants génèrent le texte tel quel, sans traduction. En définissant cette propriété sur true, vous pouvez activer la traduction automatique lorsque la variable autoTranslate est définie sur false ou n'est pas définie. Reportez-vous à Services de traduction dans les briques.
Remarque

En général, vous ne devez pas définir la variable autoTranslate sur true si vous traduisez du texte avec des groupes de ressources. Nous ne recommandons pas cette approche.
setAutoTranslate:
    component: "System.SetVariable"
    properties:
      variable: "autoTranslate"
      value: "true"
    transitions: 
      ...
...
pizzaType:
   component: "System.Output"
   properties:
     text: "What type of pizza do you want?"
     translate: false
   transitions:
     ...