Composants de l'interface utilisateur

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

Utilisez ces composants pour afficher le texte et l'interface avec l'utilisateur :

System.CommonResponse

Le composant System.CommonResponse vous permet de créer des messages avec des fonctions 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.

Note

Cette rubrique décrit l'utilisation de ce composant en mode YAML. Pour plus d'informations sur son utilisation dans Visual Flow Designer, voir Modèles de composants de réponse commune.

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 compétence. 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 d'utilisateur basés sur le composant Réponse commune. Pour les compétences basées sur YAML, vous pouvez voir un exemple d'utilisation du composant System.CommonResponse dans CrcPizzaBot, un des exemples de robots. Dans ce dérivé de PizzaBot, vous pouvez afficher un menu riche en images comportant des boutons d'action rapide Commandez maintenant. Dans le contexte du composant System.CommonResponse, les différents types de message sont appelés types de réponse et CrcPizzaBot vous explique comment, entre autres, ils permettent aux utilisateurs du robot de répondre aux invites à l'aide de boutons d'action et d'afficher le menu de pizzas sous forme de cartes en cascade.

Dans le menu Add Component (Ajouter un composant), vous pouvez sélectionner différents modèles System.CommonResponse pour les cartes, le texte, les réponses avec fichier joint et les entités composites (illustré par CbPizzaBot). Ces modèles incluent les deux propriétés communes à toutes ces propriétés de type de réponse spécifiques aux différents types de réponse. Le menu Add Component (Ajouter un composant) ajoute des états distincts pour chaque type de réponse, mais vous pouvez combiner un ou plusieurs types de réponse en un seul état. CrcPizzaBot présente un exemple de ces deux situations avec les états ShowMenu (réponse texte) et OrderPizza (réponses textuelles et réponses avec carte).

Note

Vous devez tester chaque compétence sur les canaux cibles au début du cycle de développement pour vous assurer que vos composants sont rendus comme vous le souhaitez.

Propriétés du composant

La configuration des composants System.CommonResponse nécessite de définir des propriétés qui dirigent le moteur de dialogue, ainsi que des propriétés de métadonnées qui décrivent non seulement la façon dont le composant transmet des messages (invites de texte, cartes ou fichiers joints), mais également le contenu et le comportement des messages eux-mêmes.

Le nom Description Obligatoire?
metadata La réponse au clavardage créée par ce composant est déterminée par le contenu de la propriété metadata. Voir Propriété de métadonnées dans les composants de réponse communs. Oui
processUserMessage Réglez cette propriété à true pour indiquer au moteur de dialogue de revenir à cet état après que l'utilisateur entre du texte ou touche un bouton. Réglez cette propriété à false si aucune entrée utilisateur n'est requise (ou attendue).

Réglez cette propriété à true lors de la définition d'un emplacement.

Oui
autoNumberPostbackActions Cette propriété est utilisée pour les entités composites, les réponses textuelles et les réponses avec carte. Lorsqu'elle est réglée à true, cette option ajoute un préfixe numérique aux options. Même si cette option n'est pas réglée à true, la numérotation automatique peut être appliquée aux éléments avec carte lorsque la configuration Enable Auto Numbering on Postback Actions (Activer la numérotation automatique pour les actions de republication) de l'assistant numérique est réglée à true. Comme le montre par sa configuration par défaut, une numérotation automatique spécifique au canal peut être appliquée à toute compétence enregistrée dans un assistant numérique(${(system.channelType=='twilio')?then('true','false')}) : Non
variable

Cette variable contient le nom de la variable de contexte ou d'utilisateur qui est alimentée lorsqu'un utilisateur répond en entrant du texte libre au lieu de toucher un bouton. Cette propriété est ignorée lorsqu'un utilisateur touche un bouton, car les données utiles du bouton déterminent quelles valeurs des variables sont définies. Si la propriété de variable a déjà été définie lorsque le moteur de dialogue passe à cet état, l'état est ignoré.

Pour les entités composites, référencez la variable de l'entité membre de l'entité composite. Les utilisateurs sont invités à entrer les valeurs pour cette entité. 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é (lorsque cette dernière n'a pas encore été définie pour la variable référencée). Vous pouvez activer nlpResultVariable pour qu'elle retourne une valeur lorsque vous la définissez à l'aide d'une variable qui contient les résultats TLN (par exemple, iResult: "nlpresult" utilisé dans nos exemples de robots). En procédant ainsi, la propriété nlpResultVariable peut toujours charger la valeur lorsqu'elle est nulle 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 la valeur true est définie, les valeurs d'entité personnalisée sont stockées en tant qu'objets JSON (comme les valeurs d'entité intégrées). Vous pouvez ainsi créer des expressions pour accéder à des propriétés telles que value, primaryLanguageValue et originalString, qui sont particulièrement importantes pour les compétences qui sont actuellement ou pourraient éventuellement devenir multilingues. Non
maxPrompts Avant que le composant System.CommonResponse ne charge la valeur de variable que vous avez spécifiée pour la propriété variable à partir du texte entré par l'utilisateur, il valide cette valeur par rapport au type de variable. Ceci peut être une validation de type d'entité ou, dans le cas d'un type primitif, il s'agit d'une valeur qui peut être contrainte par le type primitif.

Lorsque le composant ne peut pas valider la valeur, le moteur de dialogue envoie de nouveau le texte et les options de message. (Vous pouvez modifier ce message pour refléter l'échec de la validation.) Pour éviter une boucle sans fin résultant de l'incapacité de l'utilisateur à entrer une valeur valide, utilisez cette propriété pour régler une limite au nombre de tentatives accordées à l'utilisateur. Lorsque l'utilisateur dépasse cette limite, le composant System.CommonResponse passe à l'action cancel. Voir Limitation du nombre d'invites utilisateur.

Comme indiqué dans la rubrique Créer une entité composite, chaque entité composite peut remplacer ce paramètre lorsque l'option Maximum User Input Attempts (Nombre maximum de tentatives d'entrée utilisateur) est définie.

Non
keepTurn La propriété keepTurn s'applique seulement lorsque vous réglez la propriété processUserMessage à false. Voir System.Output pour savoir comment définir cette propriété. Non
translate Utilisez cette propriété pour 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 réglée à false, vous pouvez régler cette propriété à true afin d'activer la traduction automatique pour ce composant uniquement. Si vous avez réglé la variable autotranslation à true, vous pouvez régler cette propriété à false pour exclure ce composant de la traduction automatique. Voir Services de traduction dans les compétences. Non
footerText Améliore la sortie sur les canaux textuels. Comme indiqué dans la rubrique Pieds de page, vous pouvez utiliser des expressions FreeMarker pour définir le texte du pied de page pour les canaux textuels. Non
transitionAfterMatch (obsolète) Expression booléenne qui, lorsque vous la réglez à true, permet une transition temporaire de la mise en correspondance d'entité exécutée par ce composant vers un autre état. Cette propriété n'est plus prise en charge. Pour obtenir cette fonctionnalité, utilisez un programme de traitement d'événements d'entité Non
cancelPolicy Détermine le moment de la transition cancel :
  • immediate—Lorsque le nombre de tentatives d'entrée utilisateur atteint la valeur Maximum User Input Attempts (Nombre maximum de tentatives d'entrée utilisateur) définie pour l'entité. Si cette valeur n'a pas été définie, le composant déclenche cette transition lorsque sa propre valeur maxPrompts est atteinte.

  • lastEntity—Lorsque la dernière entité de l'entité composite a été mise en correspondance avec une valeur.

Cette propriété est ignorée si vous avez enregistré un programme de traitement d'événements d'entité avec un programme maxPromptsReached de niveau article ou événement.
Non

Voici 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 de cet extrait de code est définie dans le langage du modèle Apache FreeMarker (FTL). Pour savoir comment ajouter des expressions FTL et utiliser les opérations intégrées FreeMarker pour transformer les valeurs de variable, voir Syntaxe du langage Apache FTL.

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 les tentatives permises définies par la propriété maxAttempts ou réacheminer le flux.
textReceived Déclenché lorsqu'un utilisateur envoie du texte ou des émoticônes au lieu d'appuyer sur un bouton ou un lien d'action.
attachmentReceived Déclenché lorsqu'un utilisateur envoie une image, un fichier audio, une vidéo ou un fichier joint.
locationReceived Déclenché lorsque l'utilisateur envoie un emplacement.
system.outOfOrderMessage Définissez cette transition pour contourner un comportement d'utilisateur inattendu. Plus précisément, lorsqu'un utilisateur ne touche pas un élément d'action dans le message courant, mais touche à la place une action appartenant à un ancien message de la session de clavardage.

Transitions d'entité 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 l'entrée utilisateur et de la configuration de la propriété cancelPolicy.
Action Description Obligatoire?
match Le composant déclenche cette action pour naviguer jusqu'à l'état spécifié lorsqu'au moins une entité de l'entité composite a mis en correspondance l'entrée utilisateur. Non
cancel Le composant déclenche cette action pour naviguer jusqu'à l'état spécifié en fonction du paramètre de la propriété cancelPolicy. Non

System.Webview

Note

Cette rubrique décrit l'utilisation de ce composant en mode YAML. Pour plus d'informations sur son utilisation dans le concepteur de flux visuel, voir Composant Webview.

Le composant System.Webview ouvre une vue Web dans votre compétence, ou pour celles exécutées sur un canal Web, dans un onglet du navigateur.

Propriétés du composant System.WebView

Propriété Description Obligatoire?
sourceVariableList Liste séparée par des virgules de noms de variables de contexte ou d'utilisateur. Ces noms de variable sont des paramètres envoyés à la vue Web. Il s'agit des paramètres d'entrée de votre robot. 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) qui identifie les données utiles de la vue Web retournées au robot une fois que l'utilisateur a terminé ses interactions dans la vue Web.

Puisque les données utiles sont stockées dans cette variable, vous pouvez y accéder ultérieurement dans votre définition de flux de dialogue. Par exemple, vous pouvez les référencer dans un composant de sortie.

Oui
prompt Chaîne de texte comme "Tap to continue. (Toucher pour continuer)". Non
service Nom du service de composants Webview. Non
imageUrl URL de l'image qui accompagne une invite. Non
linkLabel Étiquette du bouton qui appelle l'application Web. Non
cancelLabel Étiquette du bouton Cancel (Annuler) qui permet aux utilisateurs de quitter l'état sans appeler l'application Web. Non
autoNumberPostbackActions Permet les entrées de l'utilisateur dans les canaux SMS, qui ne prennent pas en charge les boutons, en ajoutant des équivalents de nombre aux éléments de l'interface utilisateur.
  • false—Remplace la variable globale autoNumberPostbackActions.

  • true

    Ajoute un préfixe numérique au bouton Cancel (Annuler), qui lorsqu'il est entré, exécute les données utiles de republication du bouton comme si l'utilisateur avait touché ce bouton au lieu d'entrer le nombre qui lui correspond.
Non
translate Utilisez cette propriété pour 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 réglée à false, vous pouvez régler cette propriété à true afin d'activer la traduction automatique pour ce composant uniquement. Si vous avez réglé la variable autotranslation à true, vous pouvez régler cette propriété à false pour exclure ce composant de la traduction automatique. Voir Services de traduction dans les compétences. Non

Transitions pour le composant System.Webview

Transitions Description
next Nomme l'état suivant dans le flux de dialogue après le rappel réussi depuis l'application Web.
return Quitte la conversation après le rappel réussi à partir de l'application Web.
error Nomme l'état qui traite les erreurs.
actions
  • cancel—Nomme l'état qui traite le scénario "user taps cancel" (l'utilisateur touche Annuler).
  • textReceived—Indique l'état lorsque les utilisateurs entrent du texte plutôt que de taper sur l'un des boutons.

System.IncidentCreation

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

Note

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

Voici un exemple d'utilisation de ce composant pour faire revenir 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 le service Oracle Fusion :

  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 Obligatoire?
serviceName Nom de l'intégration tel que configuré dans Paramètres > Services supplémentaires > Intégration du service à la clientèle. Oui
subject Texte de l'objet de l'incident. Oui
attachmentUrl URL d'un document ou d'une image associé à l'incident. Notez que l'ajout de fichiers joints n'est pas pris en charge pour les compétences d'assistant numérique utilisé comme 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 du service Oracle Fusion uniquement.) Lorsque cette option est réglée à Vrai, la transcription du clavardage est ajoutée à l'incident. La valeur par défaut est false.

Les données clés doivent être activées pour la compétence afin que la transcription du clavardage soit disponible.

Une transcription ne peut être ajoutée à l'incident que lors de l'utilisation d'une intégration d'assistant numérique utilisé comme agent en combinaison avec le clavardage Web pour le service ou les incrustations Oracle Inlay Toolkit.

Non
customFields Mappage contenant description et, facultativement, 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 Mappage de paires nom/valeur contenant les informations requises pour rechercher ou créer des informations sur le contact du service à la clientèle. Il doit contenir email et peut éventuellement contenir firstName et lastName.

Si email n'est pas indiqué, 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 entrevue Oracle Intelligent Advisor à partir d'une compétence.

Note

Cette rubrique décrit 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 avant de pouvoir utiliser ce composant. Voir Ajouter un service Intelligent Advisor. En outre, l'entrevue doit avoir été déployée sur le centre de gestion Intelligent Advisor et activée sur le canal de service de clavardage. L'entrevue doit être destinée aux utilisateurs anonymes. Vous ne pouvez pas accéder aux entrevues pour les utilisateurs du portail ou les utilisateurs d'agent.

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

  • L'affichage ou non des titres et de l'explication
  • Les étiquettes des boutons oui, non et incertain
  • Les chaînes que l'utilisateur entre pour réinitialiser, revenir à la question précédente (annuler) et quitter l'entrevue
  • Le texte à afficher à la fin de l'entrevue
  • La formulation de la question relative à l'affichage ou non de l'explication
  • La chaîne que l'utilisateur entre pour indiquer qu'il a terminé le chargement des fichiers
  • Les valeurs d'attribut et les paramètres de connecteur à transmettre à l'entrevue
  • 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"
      

Voir Utiliser le composant Intelligent Advisor dans votre compétence pour consulter un exemple qui utilise le composant dans un flux de dialogue.

Conseil :

Les valeurs par défaut de toutes les propriétés d'étiquette sont stockées dans l'ensemble de ressources de la compétence. Pour modifier une valeur par défaut, ouvrez la page Ensembles de ressources de la compétence, cliquez surIcône Ensembles de ressources, sélectionnez l'onglet Configuration et modifiez le message de la clé IntelligentAdvisor - <nom de propriété>. Si vous utilisez l'ensemble de ressources de la compétence pour modifier la valeur par défaut, vous n'avez pas à inclure la propriété d'étiquette dans le composant, sauf si vous voulez remplacer la valeur par défaut.

L'ensemble de ressources de configuration vous 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 est la sortie pour les champs de fichier joint, et il indique par défaut 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 Obligatoire?
currency Code de devise ISO-4217 pour la devise utilisée dans l'entrevue. Lorsque ce code est spécifié, l'utilisateur ne peut entrer des valeurs de devise que dans les formats autorisés pour cette devise. Vous pouvez régler cette propriété à vide ou à l'exclure si l'entrevue ne demande pas de montants en devise ou si elle n'attend pas une certaine devise. Non
deployment Nom du projet de déploiement actif sur le centre de gestion Intelligent Advisor. Oui
doneLabel Texte que les utilisateurs tapent pour indiquer qu'ils ont terminé le chargement d'un fichier.

La valeur par défaut est /done.

Non
endLabel Texte à afficher dans le clavardage à la fin de l'entrevue.

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

Non
exitLabel Texte que les utilisateurs tapent pour indiquer qu'ils veulent quitter l'entrevue.

La valeur par défaut est /exit.

Non
explanationAskLabel Question à poser quand la propriété showExplication est réglée à ask.

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

Non
hideScreenTitle Indique s'il faut masquer tous les titres d'écran de l'entrevue.

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

Non
intelligentAdvisorService Nom du service Intelligent Advisor tel que 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'entrevue. 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'entrevue cible et la date et la résolution des numéros.

Le composant lance la version de l'entrevue nommée (déploiement) associée à la langue spécifiée par la propriété locale du composant. S'il n'y a pas de déploiement de concentrateur pour les paramètres régionaux spécifiés, le composant utilise les paramètres régionaux par défaut associés 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 End User Locale (Considérer les paramètres régionaux de l'utilisateur final) est activée pour l'entité, la valeur est résolue pour les paramètres régionaux spécifiés par cette propriété (ou la valeur par défaut si elle n'est pas spécifiée). Voir Résolution d'entité basée sur des paramètres régionaux.

La valeur par défaut de cette propriété est profile.locale. Si profile.locale n'a pas de valeur, il utilise les paramètres régionaux du canal.

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

La valeur par défaut est Non.

Non
params Mappage des paramètres de connexion clé-valeur à transmettre au début de l'entrevue. Cela est généralement nécessaire pour les entrevues avec l'intégration de données externes. Non
removeHtml Indique s'il faut supprimer le balisage HTML du texte. La valeur par défaut est false. Non
resetLabel Texte que les utilisateurs tapent pour indiquer qu'ils veulent revenir à la première question.

La valeur par défaut est /reset.

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

L'option Seed from URL parameter (Données de départ du paramètre d'URL) dans la modélisation de politique doit être activée pour l'attribut auquel vous transmettez la valeur.

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

Si vous définissez la valeur ask, utilisez la propriété explanationAskLabel pour spécifier le texte demandant à l'utilisateur s'il veut voir l'explication.

La valeur par défaut est never.

Non
uncertainLabel Étiquette que l'utilisateur peut taper s'il ne connaît pas la valeur. Cette étiquette s'affiche pour les boutons radio booléens facultatifs.

La valeur par défaut est Uncertain.

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

La valeur par défaut est /back.

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

La valeur par défaut est Oui.

Non

Exemple : Utiliser le composant Intelligent Advisor dans votre compétence

  ####################    
  # 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'entrevue

Voici un exemple simple d'accès aux valeurs d'attribut d'une entrevue :

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

Note

Cette rubrique décrit l'utilisation de ce composant en mode YAML. Pour plus d'informations sur son utilisation dans le concepteur de flux visuel, voir Recherche de connaissances.

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

Pour Oracle B2C Service, les résultats retournés par le service dépendent du fait que les réponses sont publiques et des paramètres de niveau d'accès, de produit ou de catégorie.

Notez que vous devez créer un service de recherche de connaissances avant de pouvoir utiliser ce composant. Voir Ajouter un service de recherche de connaissances.

Voici un exemple d'utilisation de ce composant. Il recherche dans un service de gestion des connaissances toutes les informations liées au dernier énoncé de l'utilisateur. Pour obtenir d'autres exemples, voir Utiliser le composant de recherche 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 l'ensemble de ressources de la compétence. Pour modifier une valeur par défaut, ouvrez la page Ensembles de ressources de la compétence, cliquez surIcône Ensembles de ressources, sélectionnez l'onglet Configuration et modifiez le message de la clé KnowledgeSearch - <nom de propriété>. Si vous utilisez l'ensemble de ressources de la compétence pour modifier la valeur par défaut, vous n'avez pas à inclure la propriété dans le composant, sauf si vous voulez remplacer la valeur par défaut.
Propriété Description Obligatoire?
cardLayout Indique si les cartes de résultats 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 n'autorise qu'une seule déclaration de filtre. Voir Filtrer les résultats par produit et par catégorie. Non
customProperties Oracle B2C Service seulement : Mappage des paires clé-valeur à envoyer au service de recherche. Actuellement, cette propriété prend uniquement en charge la clé word_connector. Vous utilisez la propriété word_connector réglée à AND pour ajouter au début de chaque mot du terme de recherche +. Non
defaultAttachmentLabel

Étiquette par défaut à utiliser pour l'action URL de la carte de résultats liée à un fichier joint chaque fois que le nom d'affichage de ce dernier n'est pas configuré. Lorsqu'elle est utilisée, un numéro d'index lui est ajouté. Par exemple, si le deuxième fichier joint n'a pas de nom d'affichage, 2 est ajouté à l'étiquette par défaut.

Affiche par défaut Download.

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

Pour les services d'intégration des connaissances à interfaces multiples d'Oracle B2C Service, code des paramètres régionaux ISO ou BCP à cinq caractères qui spécifie l'interface à utiliser pour effectuer la recherche (exemple : en_GB). S'il n'y a pas d'interface prenant en charge les paramètres régionaux, l'interface par défaut est utilisée. Voir Mettre en oeuvre la recherche de connaissances multilingues.

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

Non
noResultText

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

La valeur par défaut correspond au texte de l'entrée d'ensemble de ressources KnowledgeSearch - noResultText

Non
resultLinkLabel

Étiquette à utiliser pour l'URL de la carte de résultats (bouton) qui renvoie à la version Web des informations.

La valeur par défaut correspond au texte de l'entrée d'ensemble de ressources KnowledgeSearch - resultLinkLabel

Si vous réglez cette propriété à ${r""}, le bouton de lien de résultat n'est pas affiché et le texte intégral est affiché. 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.

La valeur par défaut est 10.

Non
resultVersion

Oracle B2C Service seulement : Version privilégiée à retourner lorsqu'il y a plusieurs versions pour un résultat.

Vous pouvez régler cette propriété à Answer ou à Special Response.

Vous pouvez exploiter des réponses spéciales pour afficher la sortie adaptée spécifiquement aux conversations de clavardage, et non aux pages Web.

La version par défaut est Answer. La valeur par défaut peut changer dans une version ultérieure.

Non
resultVersionExclusive

Oracle B2C Service uniquement : Indique si seuls les résultats disponibles dans la version privilégiée doivent être affichés.

Si elle indique false, elle inclut d'abord toutes les réponses correspondantes disponibles avec la version privilégiée (resultVersion). Si leur nombre est inférieur à la limite, les réponses de la version non privilégiée sont ensuite incluses jusqu'à ce que la limite soit atteinte.

La valeur par défaut est false.

Non
searchLinkLabel

Oracle B2C Service : Étiquette à utiliser pour l'action de données utiles de message de carte qui est liée à la page Web avec la liste complète des résultats de recherche.

Service Oracle Fusion : Étiquette à utiliser pour l'action de données utiles de message de carte liée à la page d'accueil de recherche.

Si cette propriété n'est pas définie, les données utiles du message de carte n'affichent pas l'action.

Non
searchPrelude

Texte à produire lorsque le résultat de la recherche est affiché.

Si cette propriété n'est pas définie, le texte de l'entrée d'ensemble de ressources KnowledgeSearch - searchPrelude est généré.

Si vous ne voulez pas que le prélude de recherche s'affiche, réglez cette propriété à ${r""}.

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

Pour les techniques de terme de recherche, voir Utiliser le composant de recherche de connaissances.

Oui

System.KnowledgeSearch Transitions

Action Description
resultSent La recherche a retourné au moins un résultat.
noResult Aucun résultat n'a été trouvé pour le terme de recherche.
serverError Une erreur est survenue sur le serveur du service de recherche de connaissances lors de l'appel, par exemple une erreur de serveur ou une erreur inattendue.

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

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

Le diagramme suivant illustre comment mettre en oeuvre la méthode à état unique si votre flux de dialogue est créé en mode YAML. 1) Vous utilisez une variable de contexte de mappage pour associer les intentions de connaissances à des termes de recherche. 2) Vous définissez les intentions de chaque connaissance une action dans l'état Intent pour effectuer une transition vers un flux de données qui utilise le mappage pour régler la variable de contexte searchTerm au terme de recherche de l'intention. 3) Vous passez ensuite à un état qui recherche la valeur searchTerm dans la base de connaissances.

Une description de kf-assoc-intent-term.png suit
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 : Énoncé d'utilisateur d'emploi comme terme de recherche

L'exemple suivant montre comment régler searchTerm à l'énoncé de l'utilisateur dans une compétence de dialogue YAML. Pour une compétence de dialogue visuel, vous 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

Vous utilisez le composant System.AgentTransfer dans les assistants numériques utilisés comme agents pour faire revenir la conversation au service de clavardage. La conversation sera transférée à un agent humain selon les règles de clavardage configurées dans le service correspondant.

Note

Cette rubrique décrit l'utilisation de ce composant en mode YAML. Pour plus d'informations sur son utilisation dans le concepteur de flux visuel, voir Transfert d'agent.

Ce composant est destiné aux conversations provenant du clavardage d'un service, comme décrit dans la rubrique Vue d'ensemble de l'utilisation d'un assistant numérique comme agent. Pour les conversations provenant de la compétence, utilisez plutôt System.AgentConversation.

Voici un exemple d'utilisation de ce composant pour faire revenir la conversation au service de clavardage.

  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 compétences de la plate-forme versions 21.04 et ultérieures, les valeurs par défaut des propriétés acceptedMessage, errorMessage, rejectedMessage et waitingMessage sont stockées dans l'ensemble de ressources de la compétence. Pour modifier une valeur par défaut, ouvrez la page Ensembles de ressources de la compétence, cliquez surIcône Ensembles de ressources, sélectionnez l'onglet Configuration et modifiez le message de la clé AgentTransfer - <nom de propriété>. Si vous utilisez l'ensemble de ressources de la compétence 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 la valeur par défaut.
Propriété Description Obligatoire?
agentStatusVariable Nom de la variable de contexte de type mappage à 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 spécifiée. Pour référencer une variable de mappage, utilisez une expression de valeur comme celle-ci : ${<mapVariableName>.value.<key>}. Par exemple : agentStatus.value.expectedWaitMinutes.

Pour en savoir plus sur les valeurs retournées dans cette variable, voir System.AgentTransferCondition.

Non
allowTransferIf Indique les conditions dans lesquelles la compétence doit transférer la session de clavardage.
  • agentsAreRequestingNewEngagements : (par défaut) Pour les agents Oracle B2C Service qui doivent extraire des clavardages (demander de nouveaux engagements), il s'agit du jeu de conditions le plus restrictif, et l'utilisateur n'a pas à attendre trop longtemps avant de parler à un agent. La compétence ne tente de transférer la conversation que si des agents ont demandé de nouveaux engagements. Dans tous les autres cas, cette option se comporte comme agentSessionsAreAvailable. N'utilisez pas cette option forOracle Fusion Service Chat, car le nombre total d'agents du service Oracle Fusion demandant de nouveaux engagements est toujours de 0.
  • agentSessionsAreAvailable : La compétence tente de transférer la conversation si l'un des agents disponibles n'a pas atteint le nombre maximal de clavardages qu'il est autorisé à traiter en même temps. L'utilisateur peut devoir attendre si les agents sont engagés dans des conversations prolongées ou s'ils effectuent un suivi après le clavardage.
  • agentsAreAvailable : La compétence tente de transférer la conversation si des agents sont en ligne, qu'ils aient atteint leur nombre maximal de clavardages ou qu'ils demandent de nouveaux engagements. Avec cette option, les utilisateurs risquent de devoir attendre plus longtemps.

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

Non
customProperties Mappage qui contient des informations à transmettre au service. Voir Transmettre des informations au service. Non
errorMessage Message présenté à l'utilisateur lorsqu'une erreur de système survient lors du transfert d'une session de clavardage à un agent. Affiche par défaut We were unable to transfer you because there was a system error (Nous n'avons pas pu vous transférer à cause d'une erreur de système). 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é pour les engagements en attente dans la file d'attente de destination. Lorsque la demande de clavardage est envoyée, le service de clavardage répond en indiquant le nombre d'engagements en attente actuellement dans la file. Si cette valeur est supérieure à maxEngagementsInQueue, l'action rejected se produit. La valeur par défaut -1 signifie qu'il n'y a pas de limite d'engagement.

Notez que pour le clavardage du service Oracle Fusion, la réponse est toujours 0. Cette propriété n'a donc aucune valeur pour le service Oracle Fusion.

Non
maxWaitSeconds Nombre maximum de secondes d'attente estimatives autorisées. Lorsque le service de clavardage reçoit la demande de transfert, il répond en indiquant le délai d'attente estimatif. Si cette valeur est supérieure à maxWaitSeconds, l'action rejected se produit. Cette propriété prend par défaut la valeur -1, ce qui signifie qu'il n'y a pas de délai d'attente maximum. Lorsque cette option est réglée à -1, l'assistant numérique transfère l'utilisateur à un agent humain, peu importe le délai d'attente estimatif.

Notez que l'action rejected est basée sur le délai d'attente estimatif et non sur le délai d'attente réel. Une fois la conversation transférée, l'assistant numérique ne la contrôle plus et n'a plus accès aux informations la concernant. Par conséquent, il est possible que le délai d'attente réel dépasse le délai estimatif.

Non
rejectedMessage Message présenté aux utilisateurs lorsque l'une des situations suivantes se produit :
  • Les conditions allowTransferIf n'ont pas été satisfaites.
  • Le délai d'attente estimatif dépasse maxWaitSeconds.
  • Le nombre d'engagements dans la file d'attente dépasse maxEngagementsInQueue.
Affiche par défaut Agent rejected (Rejet par l'agent). 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 lors qu'ils sont transférés à une file d'attente. La valeur par défaut est Agent chat session established. Waiting for agent to join (Session de clavardage avec un agent établie. En attente d'un agent). Vous pouvez définir la propriété sur une chaîne vide ou vide pour supprimer la sortie du message. Non

Ce composant peut retourner les actions suivantes :

Action Description
accepted La transition accepted est définie lorsque le clavardage est transféré dans une file d'attente.

Notez qu'après l'acceptation d'une demande de clavardage, la conversation doit se terminer par return. Par exemple, vous pouvez naviguer jusqu'à un état qui émet une chaîne (non vue 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 lorsqu'une des situations suivantes se produit :
  • Les conditions allowTransferIf n'ont pas été satisfaites.
  • Le délai d'attente estimatif dépasse maxWaitSeconds
  • Le nombre d'engagements dans la file d'attente dépasse maxEngagementsInQueue.
error La transition error est définie lorsqu'une erreur de système empêche le transfert à un agent humain.

Exemple : Transfert à un agent humain

Voici un exemple de flux de dialogue qui transfère la conversation à un agent lorsque le client le demande :

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 : transmettre des informations au service

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

La structure pour Oracle B2C Service est la suivante :


      customProperties:
        - name: 
          value: 
          type:

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

Voici la structure du service Oracle Fusion :


      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 où toutes les conditions sont remplies. Lorsque vous configurez vos règles, assurez-vous que la conversation transférée n'est pas renvoyée à l'assistant numérique. Dans l'exemple doTransfer, la propriété personnalisée TriagedByODA_c est réglée à Y, et les règles peuvent l'utiliser pour garantir que, dans ce cas, la conversation n'est pas acheminée vers l'assistant numérique utilisé comme agent. (Pour Oracle B2C Service, la configuration Transition State and stop (État de transition et arrêt) détermine le routage.)

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.

Note

Cette rubrique décrit l'utilisation de ce composant en mode YAML. Pour plus d'informations sur son utilisation dans le concepteur de flux visuel, voir 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 qui indique si les conditions ont été remplies. En outre, il définit les valeurs de la variable de mappage 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 d'ensemble 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 Obligatoire?
agentStatusVariable Nom de la variable de contexte de type mappage à 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 spécifiée. Pour référencer une variable de mappage, utilisez une expression de valeur comme celle-ci : ${<mapVariableName>.value.<key>}. Par exemple : agentStatus.value.expectedWaitMinutes. Non
allowTransferIf Spécifie le jeu de base de conditions qui doivent être remplies.
  • agentsAreRequestingNewEngagements : (par défaut) Pour les agents B2C qui doivent extraire des clavardages (demander de nouveaux engagements), les agents doivent avoir extrait des clavardages. Dans tous les autres cas, cette option se comporte comme agentSessionsAreAvailable.
  • agentSessionsAreAvailable : Nécessite que les agents demandent des clavardages.
  • agentsAreAvailable : Nécessite qu'au moins un agent soit actif, qu'il ait atteint son nombre maximal de clavardages ou qu'il demande de nouveaux engagements.

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

Non
customProperties Mappage qui contient des informations à transmettre au service. Voir Transmettre des 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 clavardage de l'agent. Affiche par défaut 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 l'ensemble 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é pour les engagements en attente dans la file d'attente de destination. Lorsque la demande est envoyée, le service de clavardage répond en indiquant le nombre d'engagements en attente actuellement dans la file. Si cette valeur est supérieure à maxEngagementsInQueue, l'action conditionsNotMet se produit. La valeur par défaut -1 signifie qu'il n'y a pas de limite d'engagement. Non
maxWaitSeconds Nombre maximum de secondes d'attente estimatives autorisées. Lorsque le service de clavardage reçoit la demande, il répond en indiquant le délai d'attente estimatif. Si cette valeur est supérieure à maxWaitSeconds, l'action conditionsNotMet se produit. Cette propriété prend par défaut la valeur -1, ce qui signifie qu'il n'y a pas de délai d'attente maximum.

Notez que l'action conditionsNotMet est basée sur le délai d'attente estimatif et non sur le délai d'attente réel.

Non

Ce composant peut retourner les actions suivantes :

Action Description
conditionsMet La transition conditionsMet est définie lorsqu'elle est en dehors des heures d'ouverture et que les conditions maxWaitSeconds, maxEngagementsInQueue et allowTransferIf sont remplies.
conditionsNotMet La transition conditionsNotMet est définie lorsqu'une des situations suivantes se produit :
  • C'est en dehors des heures de bureau.
  • Les conditions allowTransferIf n'ont pas été satisfaites.
  • Le délai d'attente estimatif dépasse maxWaitSeconds
  • Le nombre d'engagements 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 clavardage de l'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 d'ensemble de ressources pour former le message de temps d'attente afin 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, dans l'affirmative, combien d'utilisateurs ont choisi d'attendre et combien ont annulé la demande de transfert.

Composants de transfert à un agent humain

System.AgentInitiation

Pour transférer la conversation d'une compétence à un agent Oracle B2C Service, ajoutez ce composant au flux de dialogue afin de lancer l'établissement d'une liaison avec le canal Intégration d'agent spécifié par la propriété agentChannel. Vous devez appeler ce composant avant le composant System.AgentConversation.

Ce composant est destiné aux conversations provenant de la compétence. Ne l'utilisez pas pour les conversations provenant du clavardage Oracle B2C Service, comme décrit dans la rubrique Vue d'ensemble de l'utilisation d'un assistant numérique comme agent.

Voici un exemple d'utilisation de ce composant pour lancer l'établissement d'une liaison avec l'instance d'Oracle B2C Service définie par le canal 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 compétences de la plate-forme versions 21.04 et ultérieures, les valeurs par défaut des propriétés agentActionsMessage, errorMessage, rejectedMessage, resumedMessage et waitingMessage sont stockées dans l'ensemble de ressources de la compétence. Pour modifier une valeur par défaut, ouvrez la page Ensembles de ressources de la compétence, cliquez surIcône Ensembles de ressources, sélectionnez l'onglet Configuration et modifiez le message de la clé AgentInitiation - <nom de propriété>. Si vous utilisez l'ensemble de ressources de la compétence 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 la valeur par défaut.
Propriété Description Obligatoire?
agentActions Liste des actions que l'agent peut déclencher pour interrompre le clavardage et placer le flux à l'état défini pour l'action de transition. Dans la console du représentant du service à la clientèle, ces actions sont affichées sous forme de commandes à barre oblique lorsque la conversation de l'agent est lancée, comme illustré dans cet exemple :
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 de 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 :

  • Sous forme de liste des mappages, où chaque mappage doit contenir une propriété d'action, une propriété de valeur et, facultativement, une propriété de description. Par exemple :
          - action: "action1"
            label: "label1"
            description: "description1"
          - action: "action2" 
            label: "label2"
            description: "description2"
  • Sous forme de tableau JSON, où chaque objet doit contenir une propriété d'action, une propriété de valeur et, facultativement, une propriété de description. Par exemple :
          [
          {action: "action1",
          label: "label1",
          description: "description1"},
          {action: "action2",
          label: "label2",
          description: "description2"}      
          ]
  • Sous forme de chaîne délimitée par des virgules de valeurs d'action. L'étiquette 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 d'agent affiche cette valeur au lieu 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 Intégration d'agent. Cette valeur, le nom du canal Intégration d'agent et la propriété agentChannel définis pour le composant System.AgentConversation doivent tous correspondre. Oui
allowTransferIf Indique les conditions dans lesquelles la compétence doit transférer la session de clavardage. Le composant utilise la valeur queueId pour identifier la file d'attente à partir de laquelle obtenir les statistiques. Vous devez vérifier que les règles de clavardage transfèrent réellement la conversation à la file d'attente identifiée, et non à une autre.
  • agentsAreRequestingNewEngagements : Il s'agit de l'ensemble de conditions le plus restrictif. La compétence tente de transférer la conversation uniquement si des agents ont demandé de nouveaux engagements (extrait des clavardages) et sont affectés à la file d'attente spécifiée, ou, si le serveur de clavardage pousse automatiquement les clavardages vers les agents, des agents sont disponibles pour les recevoir, qui n'ont pas atteint leur nombre maximal de clavardages et sont affectés à la file d'attente spécifiée. Avec cette option, l'utilisateur n'a pas à attendre trop longtemps avant de parler à l'agent.
  • agentSessionsAreAvailable : La compétence tente de transférer la conversation si des agents sont disponibles qui n'ont pas atteint leur nombre maximum de clavardages et sont affectés à la file d'attente spécifiée. L'utilisateur peut devoir attendre si les agents sont engagés dans des conversations prolongées ou s'ils effectuent un suivi après le clavardage.
  • agentsAreAvailable : La compétence tente de transférer la conversation si des agents en ligne sont affectés à la file d'attente spécifiée, qu'ils aient atteint leur nombre maximal de clavardages ou qu'ils demandent de nouveaux engagements. Avec cette option, les utilisateurs risquent de devoir attendre plus longtemps.

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

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

Cette propriété est disponible uniquement dans des instances d'Oracle Digital Assistant provisionnées dans Oracle Cloud Infrastructure (parfois appelée infrastructure en nuage de 2e génération).

Non
chatResponseVariable Nomme la variable de mappage contenant les informations de réponse de l'agent. Après la connexion du composant System.AgentInitiation, le mappage contient les propriétés suivantes :
{
  "sessionID": "string", // agent session id

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

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

  "cancelledSurveyID": {
    "id": "int"
  }
}
Non
customProperties Mappage qui contient l'ID 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 mappage, utilisez une expression de valeur comme celle-ci : ${mapVariableName.value}. Voir Transmettre des informations sur le client à un clavardage en direct. Non
errorMessage Message à afficher en cas de problème pour établir une connexion avec Oracle B2C Service. Par exemple, le mot de passe du canal Intégration d'agent n'est plus valide ou il y a un problème avec le serveur. Non
nlpResultVariable Variable qui stocke le message d'interrogation du client. Non
rejectedMessage Message qui s'affiche si l'établissement d'une liaison AgentInitiation a été rejeté, par exemple s'il se produit en dehors des heures d'ouverture configurées. Par exemple :

rejectedMessaage: "Sorry, no agents are available at this time." (Nous sommes désolés, aucun agent n'est disponible pour le moment.)

Non
resumedMessage Message (par exemple,Just a minute...we're connecting you to an agent. (Un moment. Nous vous connectons à un agent)) qui s'affiche lorsque le clavardage du client avec le représentant 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 le message erroné Resuming chat with agent (Reprise du clavardage avec un agent) lorsqu'ils demandent de façon répétée un clavardage en direct. Non
subject Ligne d'objet qui s'affiche dans la console de l'agent après le transfert vers la plate-forme d'agents. Par défaut, il s'agit du dernier message du client stocké dans la propriété nlpResultVariable, mais vous pouvez également la créer à l'aide d'une variable réglée précédemment dans la définition du flux de dialogue. Par exemple, vous pouvez définir une variable de contexte de type string dont la valeur est définie avant le composant System.AgentInitiation :

subject: "A customer needs help regarding ${context_variable.value} (Un client a besoin d'aide concernant...)"

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 à laquelle les règles de clavardage Oracle B2C Service achemineront la conversation.

Cette propriété est ignorée si la propriété allowTransferIf est absente.

Obligatoire 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. Consultez la classe Java DateTimeFormatter pour obtenir des modèles valides. Exemple : dd/MM/yyyy HH:mm. La valeur par défaut est yyyy-mmm-ddThh:mm:ssZ. Non
transcriptTimezoneName Nom de l'autorité chargée des numéros affectés à Internet (IANA) 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'être connectés à un agent. Par exemple :

waitingMessage: "You’ve joined the chat session. An agent will be right with you. (Vous avez rejoint la session de clavardage. Un agent va prendre votre appel)

Non

System.AgentInitiation Transitions

Le composant System.AgentInitiation retourne les actions accepted, rejected et error. Ces actions peuvent pointer chacune vers un état différent, avec l'action accepted qui 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 est réalisé et l'état peut passer à l'état avec le composant System.AgentConversation.
error Un problème est survenu lors de l'établissement d'une connexion avec Oracle B2C Service. Par exemple, le mot de passe du canal Intégration d'agent n'est plus valide ou il y a un problème avec le serveur Service Cloud.
rejected Oracle B2C Service a rejeté la demande de connexion. Voici quelques-uns des motifs de rejet d'une demande de connexion :
  • Aucun agent n'est disponible (requiert les propriétés allowTransferIf et queueId)
  • Elle se produit 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 clavardage

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

Exemple : Gérer les erreurs de rejet et de système lors du rejet du lancement de l'agent

Voici un exemple de traitement des systèmes d'erreur 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 existant

Cet exemple définit interfaceID et contactID.

Conseil :

Puisque le WSDL indique que interfaceID est de type NamedID, nous aurions pu 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 existant

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 : Assembler l'objet de propriétés personnalisées

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

Étape 1 : Déclarer la variable Propriétés personnalisées
Dans le noeud de contexte, définissez une variable de mappage pour la propriété customProperties du composant System.AgentInitiation. Il s'agit d'un objet JSON pouvant contenir les informations de clavardage du client et les valeurs de champ personnalisé. Dans l'exemple suivant, cette variable est déclarée comme liveChatInfo :
context:
  variables:
    size: "PizzaSize"
    type: "PizzaType"
    crust: "PizzaCrust"
    iResult: "nlpresult"
    interfaceId: "string"
    categoryId: "string"
    skillType: "string"
    liveChatInfo: "map"
Étape 2 : Définir les valeurs de la variable de mappage customProperties
Dans le noeud de contexte, définissez une variable de mappage pour la propriété customProperties du composant System.AgentInitiation. Il s'agit d'un objet JSON pouvant contenir les informations de clavardage du client et les valeurs de champ personnalisé. Dans l'exemple suivant, cette variable est déclarée comme liveChatInfo :
context:
  variables:
    size: "PizzaSize"
    type: "PizzaType"
    crust: "PizzaCrust"
    iResult: "nlpresult"
    interfaceId: "string"
    categoryId: "string"
    skillType: "string"
    liveChatInfo: "map"
Étape 3 : Définir les champs de la variable de mappage customProperties
Que vous définissiez les valeurs de mappage au moyen d'un composant personnalisé ou du flux de dialogue, vous devez structurer l'objet de mappage. Utilisez les formats d'objet standard sauf si le canal Intégration d'agent a été créé avant la version 20.1 ou si le canal se connecte à une version d'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"
Étape 4 : Ajouter 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 la variable de mappage.
  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

Utilisez ce composant pour transférer la conversation d'une compétence vers un agent humain Oracle B2C Service et pour gérer l'échange entre la compétence et l'agent. Notez que vous devez appeler le composant System.AgentInitiation avant de pouvoir utiliser ce composant-ci.

System.AgentConversation est destiné aux conversations provenant de la compétence. Ne l'utilisez pas pour les conversations provenant du clavardage Oracle B2C Service, comme décrit dans la rubrique Vue d'ensemble de l'utilisation d'un assistant numérique comme agent.

Voici un exemple d'utilisation de ce composant pour transférer la conversation vers l'instance d'Oracle B2C Service définie par le canal 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 Obligatoire?
agentChannel Nomme le canal Intégration d'agent. Cette valeur, le nom du canal 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 (Votre conversation avec l'agent a pris fin). Non
errorMessage Message affiché par le clavardage 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é ne fonctionne qu'avec des instances Oracle Digital Assistant qui ont été provisionnées dans Oracle Cloud Infrastructure (parfois appelée infrastructure en nuage de 2e génération).

Non
exitKeywords Liste délimitée par des virgules de mots de sortie habituellement utilisés par un client pour mettre fin à la conversation avec l'agent humain. Par exemple :

exitKeywords: "bye, exit, take care, goodbye, quit" (bye, sortir, cordialement, au revoir, quitter)

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

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. (Session de clavardage expirée. Merci d'avoir communiqué avec nous.)

Notez que conclusionMessage n'est pas affiché si expiryMessage l'est.

Le message d'expiration n'est pas sorti lorsque la conversation se termine, car le délai USER_WAIT_QUEUE_TIMEOUT du service en nuage a été dépassé.

Non
nlpResultVariable Variable nlpResultVariable contenant le message d'interrogation du client. Non
waitExpiryMessage Message affiché à l'utilisateur lorsque le clavardage expire alors que celui-ci attend 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 compétence affiche le message d'attente que le service de clavardage en direct lui envoie, comme la position en 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')}." (Vous êtes numéro ... dans la file d'attente. Votre temps d'attente est de ...)

Non

System.AgentConversation Transitions

Le composant System.AgentConversation peut déclencher l'action expired, agentLeft, error ou waitExpired. De plus, il peut déclencher toute action à partir de la propriété agentActions du composant System.AgentInitiation. Vous devez également ajouter une transition next, car un client peut entrer l'un des mots exitKeywords pour qu'une de ces actions soient déclenchées.


  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 comporte une propriété agentActions, alors ce composant doit avoir une action de transition pour chaque action prise en charge spécifiée par agentActions.
agentLeft L'agent a interrompu la session sans utiliser d'action à barre oblique (par exemple, /Order). Sinon, la session s'est terminée parce qu'il n'y a pas eu d'activité dans le délai spécifié par la configuration CS_IDLE_TIMEOUT d'Oracle B2C Service et que cette configuration est inférieure au paramètre Session Expiration (expiration de la session) du canal Intégration d'agent. Pour plus d'informations, voir l'action expired.

Notez que cette action n'est pas retournée lorsque l'utilisateur quitte la conversation en entrant un mot clé de sortie. Dans ce cas, les transitions de flux vers l'état qui est nommé par la transition next, ou, s'il n'y a pas de transition next, vers l'état suivant du flux.

error

Problème de connexion au service d'agent humain.

Cette action ne fonctionne qu'avec les instances Oracle Digital Assistant qui ont été provisionnées sur Oracle Cloud Infrastructure (parfois appelée infrastructure en nuage de 2e génération).

expired

Si la valeur CS_IDLE_TIMEOUT dans Oracle B2C Service est égale ou supérieure au paramètre Session Expiration (Expiration de session) pour le canal Intégration d'agent, cette action est déclenchée lorsque ni l'utilisateur ni l'agent n'envoie de message avant la fin de la session. Si la valeur CS_IDLE_TIMEOUT est inférieure au paramètre Session Expiration (expiration de session) du canal Intégration d'agent et qu'il n'y a aucune activité, Oracle B2C Service met fin au clavardage et l'action agentLeft est déclenchée.

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

L'action expired n'est pas retournée lorsque la conversation se termine, car le délai USER_WAIT_QUEUE_TIMEOUT du service en nuage a été dépassé. Envisagez de régler cette configuration à une valeur élevée, par exemple 7200 secondes (2 heures).

Pour voir ou modifier les paramètres de votre instance Oracle B2C Service, ouvrez la console du bureau, cliquez sur Navigation, sur le premier élément Configuration dans le menu, puis sur Paramètres de configuration. Recherchez ensuite le paramètre dans le dossier Chat.

waitExpired La demande de clavardage a expiré pendant que l'utilisateur était en 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 clavardage.

Exemple : Configurer le flux de dialogue de transfert à un agent

Dans cet exemple, l'intention GetAgent est entraînée pour comprendre les appels de détresse tels que help me please! (à l'aide).

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 à un agent humain.

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

    2. Affectez à la propriété agentChannel de l'état le nom du canal Intégration d'agent configuré pour le système d'agents humains.

    Une fois que le canal Intégration d'agent établit une connexion et qu'Oracle B2C Service envoie la demande de clavardage à sa file d'attente (c'est-à-dire après avoir créé un ticket), le composant System.AgentInitiation autorise la transition vers l'état suivant, 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 reprises un clavardage en direct même si leur demande est déjà en file d'attente dans la console de clavardage de l'agent. Ajoutez une propriété resumedMessage à l'état System.AgentInitiation pour empêcher ces clients de recevoir un message trompeur Resuming chat with agent (Reprise du clavardage avec l'agent).
  2. Ajoutez et configurez le composant System.AgentConversation. Lorsque le moteur de dialogue est à l'état défini pour ce composant, la compétence transmet les messages entre le client et l'agent. La compétence est à l'écoute de mots clés de sortie dans l'entrée du client; par exemple bye (au revoir). Lorsque la compétence détecte l'un de ces mots clés, le composant System.AgentConversation met fin à la session en direct 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 de sondage

Dans l'exemple suivant qui utilise le format standard, le composant AgentConversation produit un lien de sondage à la fin de la conversation avec l'agent. Le lien inclut les ID session et engagement provenant du mappage qui a été nommé 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 : Transférer le clavardage à une file d'attente Oracle B2C Service spécifique

  1. Le cas échéant, dans le noeud de contexte, définissez une variable de mappage à 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 pour la variable de mappage.

    Voici un exemple de format standard pour les canaux Intégration d'agent créés dans la version 20.01 ou ultérieure et qui se connectent à 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 existant pour les canaux Intégration d'agent créés avant la version 20.01 ou qui se connectent à une version d'Oracle B2C Service antérieure à 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 réglez-la à la valeur de la variable de mappage. 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

Note

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

Passe en boucle dans tous les champs de l'entité composite, a une conversation avec l'utilisateur et résout tous les champs. Le composant sélectionne aléatoirement les invites que vous fournissez pour chaque entité lors de la résolution de cette dernière.

Propriété Description Obligatoire
variable Référence la variable de contexte d'entité composite alimentée par ce composant. Si toutes les entités enfants 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 Alimente la propriété variable (qui référence la variable d'entité 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 le cadre résout une entité enfant unique, la propriété variable est alimentée avec cette valeur uniquement. Lorsque la variable nlpresult contient des valeurs pour toutes les entités enfants, le flux de dialogue passe à l'état suivant. Vous pouvez utiliser cette propriété à la place des états SetVariable qui alimentent les valeurs d'entité enfant. Non
maxPrompts Indique le nombre de tentatives attribuées à l'utilisateur pour entrer une valeur valide qui correspond au type d'entité enfant. Si le nombre maximum de tentatives est dépassé pour la première entité enfant, cette propriété est réinitialisée à 0 et le robot présente l'invite de l'entité enfant suivante. Comme indiqué dans la rubrique Créer une entité composite, chaque entité composite peut remplacer ce paramètre lorsque l'option Maximum User Input Attempts (Nombre maximum de tentatives d'entrée utilisateur) est définie. Non
autoNumberPostbackActions Lorsque vous réglez à true, cette option ajoute un préfixe numérique aux options. Même si cette option n'est pas réglée à true, la numérotation automatique peut être appliquée aux éléments de liste lorsque la configuration Enable Auto Numbering on Postback Actions (Activer la numérotation automatique pour les actions de republication) de l'assistant numérique est réglée à true. La numérotation automatique spécifique au canal peut être appliquée à tout robot de compétence enregistré dans un assistant numérique :
${(system.channelType=='twilio')?then('true','false')}
Non
useFullEntityMatches Lorsque la valeur true est définie, les valeurs d'entité personnalisée sont stockées en tant qu'objets JSON (comme les valeurs d'entité intégrées). Vous pouvez ainsi créer des expressions pour accéder à des propriétés telles que value, primaryLanguageValue et originalString, qui sont particulièrement importantes pour les compétences qui sont actuellement ou pourraient éventuellement devenir multilingues.  
footerText Améliore la sortie sur les canaux textuels. Comme indiqué dans la rubrique Pieds de page, vous pouvez utiliser des expressions FreeMarker pour définir le texte du pied de page pour les canaux textuels. Non
headerText Message qui s'affiche avant que le composant invite l'utilisateur à entrer l'élément suivant de l'entité composite. Vous pouvez utiliser cet en-tête pour fournir des commentaires sur les entités précédentes de l'entité composite qui ont é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 Expression booléenne qui, lorsque vous la réglez à true, permet une transition temporaire de la correspondance d'entité exécutée par ce composant vers un composant personnalisé. Par défaut, elles est réglée à false. Cette propriété est ignorée (et la transition match n'est pas déclenchée) si vous avez enregistré un programme de traitement d'événements d'entité. Non
cancelPolicy Détermine le moment de la transition cancel :
  • immediate—Immédiatement après que toutes les tentatives maxPrompts attribuées ont été exécutées pour une entité de l'entité composite.

  • lastEntity-Lorsque la dernière entité de l'entité composite a été mise en correspondance avec une valeur.

Cette propriété est ignorée si vous avez enregistré un programme de traitement d'événements d'entité avec un programme maxPromptsReached de niveau article ou événement.
Non

Composants de calendrier

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

Autorisation de calendrier

Pour activer l'interaction entre une compétence et un fournisseur de calendrier, vous devez configurer un service et modifier la compétences et le flux de dialogue pour permettre à l'utilisateur de se connecter à son calendrier au moyen de ce service.

Avant d'utiliser un composant de calendrier, vous devez enregistrer une application auprès du fournisseur de calendrier et créer un service de code d'autorisation. Voir ces rubriques pour apprendre à :

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

Vous pouvez utiliser la fonctionnalité "requiert une autorisation" pour vous assurer automatiquement que l'utilisateur s'est connecté (a obtenu un jeton d'accès) avant d'appeler des composants de calendrier. Cette fonctionnalité demande seulement à l'utilisateur de se connecter s'il n'a pas encore de jeton d'accès, ou si ce dernier a expiré et ne peut pas être actualisé. Vous pouvez utiliser la configuration Requires Authorization (Requiert une autorisation) de la compétence pour définir la valeur par défaut pour l'ensemble de celle-ci, puis utiliser le paramètre requiresAuthorization au niveau de l'état pour remplacer la valeur par défaut. Autrement dit, vous utilisez le paramètre de compétence pour définir la valeur par défaut, puis incluez uniquement le paramètre requiresAuthorization dans les états pour lesquels la valeur par défaut ne s'applique pas.

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

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

Avant qu'une compétence ne passe à un état requérant une autorisation, elle vérifie s'il existe un jeton d'accès valide pour le service de calendrier. Sinon, elle effectue les actions suivantes :

  1. Appelle l'état que vous avez défini pour l'action system.authorizeUser dans le noeud defaultTransitions.

  2. Demande à l'utilisateur de se connecter.

  3. Passe à l'état qui requérait 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 compétence principalement axée sur les composants de calendrier, envisagez de régler la configuration Requires Authorization (Requiert une autorisation) de la compétence à true, puis de définir la valeur false uniquement pour les états qui ne nécessitent pas d'autorisation. Dans cet exemple, tout utilisateur peut exécuter les états initTimezoneOffset et intent. Par conséquent, requiresAutorisation est réglé à false pour ces états. Les états qui fonctionnent avec les composants de calendrier n'ont pas à 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 des heures du calendrier

Lorsque vous travaillez avec les composants du 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 vous utilisez la propriété timezoneOffset ou timezone pour indiquer au composant comment calculer l'heure universelle (UTC).

timezoneOffset des composants du calendrier est différent 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'UTC. Vous pouvez calculer la valeur de propriété timezoneOffset d'un composant de calendrier en multipliant profile.timezoneOffset par -1.

profile.timezoneOffset n'est pas toujours disponible. Cela dépend de si le client a indiqué ce décalage. Par exemple, une personne peut créer une application Oracle Web 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ù 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 extrayez un événement, le composant retourne les valeurs de date et d'heure au format UTC. Par exemple : 2021-04-15T22:00:00.000Z. Votre compétence doit convertir la valeur en 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 à considérer :

  • Si vous utilisez une entité composite comportant à la fois une entité DATE et une ou plusieurs entités TIME, vous devez désactiver Out of Order Extraction (Extraction dans le désordre). Sinon, lorsque les entités sont résolues, vous ne pouvez pas contrôler les valeurs résolues en entité DATE et celles résolues en entité TIME (ou les deux). Par exemple, une résolution en TIME peut changer la valeur de l'entité DATE.

  • Lorsqu'un énoncé contient du texte comme "hier", "aujourd'hui" ou "demain", l'analyseur ne tient pas compte du fuseau horaire local. Par conséquent, il est possible que, tôt le matin et en fin d'après-midi, une date incorrecte soit utilisée. Pour cette raison, il est recommandé d'effectuer un retour d'écho de la date résolue afin que l'utilisateur puisse la vérifier avant que la compétence 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 de propriété 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']}"

Traitement 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 retourne une erreur 400 qui transfère à son tour la compétence au programme de traitement des erreurs global.

Vous devriez envisager de valider les valeurs pour éviter que ces erreurs ne se produisent. Voici des exemples de validations d'entités composites :

  • Entité DATE : Pour les réunions nouvelles et mises à jour, validez que la date est identique ou postérieure à la date courante.

    ${(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 aux date et heure courantes.

    ${(((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 qu'elles sont postérieures aux heures de début.

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

Pour traiter aimablement les rejets des fournisseurs de calendriers, ajoutez votre propre programme global de traitement des erreurs. 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"

Sinon, vous pouvez utiliser la transition d'erreur pour créer des programmes de traitement appropriés pour 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. Notez que vous ne pouvez pas créer d'événements récurrents ou sur toute la journée.

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

Pour savoir comment définir les valeurs start et end, voir Utilisation des dates et des heures du calendrier.

Voici un exemple d'utilisation de ce composant. Dans cet exemple, une entité composite est utilisée pour obtenir la date, les heures de début et de fin, l'objet, l'emplacement 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"
...
Note

Ce composant est pris en charge dans Oracle Digital Assistant versions 21.02 et ultérieures.
Propriété Description Obligatoire?
provider Fournisseur de calendrier. Les valeurs autorisées sont Google et Outlook. Oui
calendarOwner ID utilisateur du responsable du calendrier. Il doit s'agir d'un ID compte valide pour le fournisseur de calendrier, comme la valeur de la variable identifiée par la propriété authenticatedUserVariable du composant System.OAuth2AccountLink, qui est définie lorsque l'utilisateur s'authentifie. Oui
calendarId Nom du calendrier. Pour le calendrier par défaut de l'utilisateur, définissez la même valeur que 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, qui est définie lorsque l'utilisateur s'authentifie. Oui
start Date et heure de début de la réunion dans le 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 dans le 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 de participants séparée par des virgules. Notez que le fournisseur de calendrier ne peut pas envoyer d'avis à un participant si l'ID n'appartient pas à un compte valide pour ce fournisseur. Oui
timezoneOffset Quantité de temps 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, alors timezoneOffset est -7200000. La valeur par défaut est 0.
Note

Vous pouvez calculer la propriété timezoneOffset pour l'utilisateur courant 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 spécifier timezoneOffset ou timezone mais pas les deux.

Non
timezone

ID du fuseau horaire local identifié par https://www.iana.org/time-zones. Aussi appelé nom de la base de données TZ. Par exemple : America/Los_Angeles. La valeur par défaut est UTC. Vous pouvez spécifier timezoneOffset ou timezone mais pas les deux.

Non

System.DeleteCalendarEvent

Utilisez ce composant pour supprimer un événement d'un calendrier Outlook ou Google. Notez que vous ne pouvez pas supprimer les événements récurrents ou sur toute la journée.

L'utilisateur doit être connecté au fournisseur de calendrier pour accéder à ce composant. Vous pouvez utiliser la fonctionnalité "requiert une autorisation" pour gérer la connexion de l'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"
...
Note

Ce composant est pris en charge dans Oracle Digital Assistant versions 21.02 et ultérieures.
Propriété Description Obligatoire?
provider Fournisseur de calendrier. Les valeurs autorisées sont Google et Outlook. Oui
calendarOwner ID utilisateur du responsable du calendrier. Il doit s'agir d'un ID compte valide pour le fournisseur de calendrier, comme la valeur de la variable identifiée par la propriété authenticatedUserVariable du composant System.OAuth2AccountLink, qui est définie lorsque l'utilisateur s'authentifie. Oui
calendarId Nom du calendrier. Pour le calendrier par défaut de l'utilisateur, définissez la même valeur que 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, qui est définie lorsque l'utilisateur s'authentifie. Oui
eventId ID de l'événement à supprimer. Vous pouvez utiliser System.ListCalendarEvents ou System.SelectCalendarEvent pour obtenir un 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é "requiert une autorisation" pour gérer la connexion de l'utilisateur, comme décrit dans Autorisation de calendrier.

Les détails sont retourné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 savoir comment convertir les valeurs start et end en heure locale, voir Utilisation des dates et des 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"
Note

Ce composant est pris en charge dans Oracle Digital Assistant versions 21.02 et ultérieures.
Propriété Description Obligatoire?
provider Fournisseur de calendrier. Les valeurs autorisées sont Google et Outlook. Oui
calendarOwner ID utilisateur du responsable du calendrier. Il doit s'agir d'un ID compte valide pour le fournisseur de calendrier, comme la valeur de la variable identifiée par la propriété authenticatedUserVariable du composant System.OAuth2AccountLink, qui est définie lorsque l'utilisateur s'authentifie. Oui
calendarId Nom du calendrier. Pour le calendrier par défaut de l'utilisateur, définissez la même valeur que 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, qui est définie lorsque l'utilisateur s'authentifie. Oui
eventId ID de l'événement à extraire. Vous pouvez utiliser System.ListCalendarEvents ou System.SelectCalendarEvent pour obtenir un eventId. Oui
eventDetailsVariableName Nom de la variable de contexte dans laquelle stocker les détails. Oui

System.ListCalendarEvents

Utilisez ce composant pour obtenir un tableau d'événements Outlook ou Google pour un responsable de calendrier nommé. Vous pouvez filtrer la liste par ces attributs :

  • L'événement peut être supprimé
  • L'événement peut être mis à jour
  • L'utilisateur a été invité à l'événement
  • Comment l'utilisateur a répondu à une invitation
  • L'événement comprend un ou plusieurs participants nommés
  • La réunion commence après une date et une heure
  • La réunion se termine avant une date et une heure

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

La liste est retourné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 savoir comment définir les valeurs start et end, voir Utilisation des dates et des heures du calendrier. Cette rubrique montre également comment convertir les valeurs de propriété JSON start et end en 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"      
Note

Ce composant est pris en charge dans Oracle Digital Assistant versions 21.02 et ultérieures.
Propriété Description Obligatoire?
provider Fournisseur de calendrier. Les valeurs autorisées sont Google et Outlook. Oui
calendarOwner ID utilisateur du responsable du calendrier. Il doit s'agir d'un ID compte valide pour le fournisseur de calendrier, comme la valeur de la variable identifiée par la propriété authenticatedUserVariable du composant System.OAuth2AccountLink, qui est définie lorsque l'utilisateur s'authentifie. Oui
calendarId Nom du calendrier. Pour le calendrier par défaut de l'utilisateur, définissez la même valeur que 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, qui est définie lorsque l'utilisateur s'authentifie. Oui
listType Indique le type de liste. Il doit s'agir d'une des valeurs suivantes :
  • ALL : Tous les types de réunion du responsable du calendrier
  • DELETE : Toutes les réunions que le responsable du calendrier peut supprimer
  • UPDATE : Toutes les réunions que le responsable du calendrier peut mettre à jour
  • INVITED : Toutes les réunions auxquelles le responsable 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 au plus tôt 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 au plus tard 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 de 14 jours après la date et l'heure de début. Pour tous les autres types, la valeur par défaut est de 24 heures après la date et l'heure de début.

Non
attendees Liste de chaînes séparées par des virgules et non sensibles à la casse à utiliser pour filtrer la liste par participants. Seules les réunions où une ou plusieurs valeurs de participant contiennent une ou plusieurs chaînes figurant dans la liste sont incluses dans le résultat. Non
response Liste séparée par des virgules des statuts d'invitation pour filtrer la liste sur listType INVITED. Les statuts autorisés sont les suivants :
  • ACCEPTED
  • TENTATIVE
  • DECLINED
  • PENDING

La valeur par défaut est PENDING, TENTATIVE, qui n'extrait que les invitations en attente d'une réponse ou qui ont été acceptées provisoirement.

Non
timezoneOffset Quantité de temps 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, alors timezoneOffset est -7200000. La valeur par défaut est 0.
Note

Vous pouvez calculer la propriété timezoneOffset pour l'utilisateur courant 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 spécifier timezoneOffset ou timezone mais pas les deux.

Non
timezone ID du fuseau horaire local identifié par https://www.iana.org/time-zones. Aussi appelé nom de la base de données TZ. Par exemple : America/Los_Angeles. La valeur par défaut est UTC. Vous pouvez spécifier timezoneOffset ou timezone mais pas les deux. Non

Ce composant peut retourner les actions suivantes :

Action Description
found Un ou plusieurs événements ont été retournés.
notfound Aucun événement correspondant n'existe.

System.SelectCalendarEvent

Utilisez ce composant pour afficher la liste des événements Outlook ou Google parmi lesquels l'utilisateur peut effectuer une sélection. 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 par ces attributs :

  • L'événement peut être supprimé
  • L'événement peut être mis à jour
  • L'utilisateur a été invité à l'événement
  • Comment l'utilisateur a répondu à une invitation
  • L'événement comprend un ou plusieurs participants nommés
  • La réunion commence après une date et une heure
  • La réunion se termine avant une date et une heure

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

Pour savoir comment définir les valeurs start et end, voir Utilisation des dates et des 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"
  ...

Note

Ce composant est pris en charge dans Oracle Digital Assistant versions 21.02 et ultérieures.
Propriété Description Obligatoire?
provider Fournisseur de calendrier. Les valeurs autorisées sont Google et Outlook. Oui
calendarOwner ID utilisateur du responsable du calendrier. Il doit s'agir d'un ID compte valide pour le fournisseur de calendrier, comme la valeur de la variable identifiée par la propriété authenticatedUserVariable du composant System.OAuth2AccountLink, qui est définie lorsque l'utilisateur s'authentifie. Oui
calendarId Nom du calendrier. Pour le calendrier par défaut de l'utilisateur, définissez la même valeur que 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, qui est définie lorsque l'utilisateur s'authentifie. Oui
listType Indique le type de liste. Il doit s'agir d'une des valeurs suivantes :
  • ALL : Tous les types de réunion du responsable du calendrier
  • DELETE : Toutes les réunions que le responsable du calendrier peut supprimer
  • UPDATE : Toutes les réunions que le responsable du calendrier peut mettre à jour
  • INVITED : Toutes les réunions qui ne sont pas organisées par le responsable du calendrier, mais auquel il est invité à assister.
Oui
eventIdVariableName Nom de la variable de contexte dans laquelle stocker l'ID de l'événement. Oui
start Date et heure au plus tôt 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 au plus tard 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 de 14 jours après la date et l'heure de début. Pour tous les autres types, la valeur par défaut est de 24 heures après la date et l'heure de début.

Non
attendees Liste de chaînes séparées par des virgules et non sensibles à la casse à utiliser pour filtrer la liste par participants. Seules les réunions où une ou plusieurs valeurs de participant contiennent une ou plusieurs chaînes figurant dans la liste sont incluses dans le résultat. Non
response Liste séparée par des virgules des statuts d'invitation pour filtrer la liste sur listType INVITED. Les statuts autorisés sont les suivants :
  • ACCEPTED
  • TENTATIVE
  • DECLINED
  • PENDING

La valeur par défaut est PENDING, TENTATIVE, qui n'extrait que les invitations en attente d'une réponse ou qui ont été 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 compétences de la plate-forme versions 21.04 et ultérieures, la valeur par défaut est stockée dans l'ensemble de ressources de la compétence. Pour modifier la valeur par défaut, ouvrez la page Ensembles de ressources de la compétence, cliquez surIcône Ensembles de ressources, sélectionnez l'onglet Configuration et modifiez le message de la clé SelectCalendarEvent - prompt.
Non
allDayLabel Texte pour indiquer les événements sur toute la journée. 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 responsable du calendrier a accepté l'invitation. La valeur par défaut est Accepted. Non
tentativeLabel Texte indiquant que le responsable du calendrier a accepté provisoirement l'invitation. La valeur par défaut est Tentative. Non
declinedLabel Texte indiquant que le responsable du calendrier a refusé l'invitation. La valeur par défaut est Declined. Non
pendingLabel Texte indiquant que le responsable du calendrier n'a pas répondu à l'invitation. La valeur par défaut est Pending. Non
timezoneOffset Quantité de temps 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, alors timezoneOffset est -7200000. La valeur par défaut est 0.
Note

Vous pouvez calculer la propriété timezoneOffset pour l'utilisateur courant 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 spécifier timezoneOffset ou timezone mais pas les deux.

Non
timezone ID du fuseau horaire local identifié par https://www.iana.org/time-zones. Aussi appelé nom de la base de données TZ. Par exemple : America/Los_Angeles. La valeur par défaut est UTC. Vous pouvez spécifier timezoneOffset ou timezone mais pas les deux. Non

Ce composant peut retourner les actions suivantes :

Action Description
found Un ou plusieurs événements ont été retournés.
notfound Aucun événement correspondant n'existe.

System.SendInviteResponse

Utilisez ce composant pour accepter, accepter provisoirement ou refuser une invitation pour 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é "requiert une autorisation" pour gérer la connexion de l'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"
Note

Ce composant est pris en charge dans Oracle Digital Assistant versions 21.02 et ultérieures.
Propriété Description Obligatoire?
provider Fournisseur de calendrier. Les valeurs autorisées sont Google et Outlook. Oui
calendarOwner ID utilisateur du responsable du calendrier. Il doit s'agir d'un ID compte valide pour le fournisseur de calendrier, comme la valeur de la variable identifiée par la propriété authenticatedUserVariable du composant System.OAuth2AccountLink, qui est définie lorsque l'utilisateur s'authentifie. Oui
calendarId Nom du calendrier. Pour le calendrier par défaut de l'utilisateur, définissez la même valeur que 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, qui est définie lorsque l'utilisateur s'authentifie. 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 responsable du calendrier a été invité. Oui
response Réponse à envoyer. Les réponses autorisées sont les suivantes :
  • ACCEPTED
  • TENTATIVE
  • DECLINED
Oui

System.UpdateCalendarEvent

Utilisez ce composant pour apporter des modifications à un événement de calendrier Outlook ou Google. Notez que vous ne pouvez pas mettre à jour des événements récurrents ou sur toute la journée.

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

Pour savoir comment définir les valeurs start et end, voir Utilisation des dates et des heures du calendrier.

Voici un exemple d'utilisation de ce composant. Dans cet exemple, une entité composite est utilisée pour obtenir la date, et les heures de début et 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"
...
Note

Ce composant est pris en charge dans Oracle Digital Assistant versions 21.02 et ultérieures.
Propriété Description Obligatoire?
provider Fournisseur de calendrier. Les valeurs autorisées sont Google et Outlook. Oui
calendarOwner ID utilisateur du responsable du calendrier. Il doit s'agir d'un ID compte valide pour le fournisseur de calendrier, comme la valeur de la variable identifiée par la propriété authenticatedUserVariable du composant System.OAuth2AccountLink, qui est définie lorsque l'utilisateur s'authentifie. Oui
calendarId Nom du calendrier. Pour le calendrier par défaut de l'utilisateur, définissez la même valeur que 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, qui est définie lorsque l'utilisateur s'authentifie. Oui
eventId ID de l'événement à mettre à jour. Vous pouvez utiliser System.ListCalendarEvents ou System.SelectCalendarEvent pour obtenir un eventId. Oui
start Nouvelles date et heure de début dans le format yyyy-MM-dd'T'HH:mm:ss. Par exemple, 2021-02-26T09:55:00. Non
end Nouvelles date et heure de fin dans le 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 de participants séparée par des virgules. Cette liste remplace la liste précédente. Notez que le fournisseur de calendrier ne peut pas envoyer d'avis à un participant si l'ID n'appartient pas à un compte valide pour ce fournisseur. Oui
timezoneOffset Quantité de temps 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, alors timezoneOffset est -7200000. La valeur par défaut est 0.
Note

Vous pouvez calculer la propriété timezoneOffset pour l'utilisateur courant 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 spécifier timezoneOffset ou timezone mais pas les deux.

Non
timezone ID du fuseau horaire local identifié par https://www.iana.org/time-zones. Aussi appelé nom de la base de données TZ. Par exemple : America/Los_Angeles. La valeur par défaut est UTC. Vous pouvez spécifier timezoneOffset ou timezone mais pas les deux. Non

Pieds de page

Utilisez les pieds de page dans System.List et System.CommonResponse pour fournir obtenir des conseils supplémentaires à l'utilisateur lors de l'exécution de votre robot sur des canaux textuels.
Image d'exécution du texte de pied de page.
Ce pied de page s'affiche sur tous les canaux, même ceux qui prennent en charge les boutons tels que Facebook. Cependant, vous pouvez configurer un rendu propre au canal pour le pied de page. Pour ce faire :
  • 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')}" 
  • Créez 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>
Note

Sur Facebook, System.CommonResponse rend le texte de pied de page dans une bulle 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 ont tous une propriété translate qui remplace le paramètre de variable autoTranslate global :
  • Si vous réglez la variable autoTranslate à false (valeur par défaut), aucune traduction automatique ne se produit sur le composant, à moins que vous n'ayez réglé la propriété translate à true.

  • Si vous réglez la variable autoTranslate à true, la propriété translate est alors réglée de manière implicite à true. L'étiquette, le titre, la description, l'invite et les chaînes de texte sont donc traduits.

Par exemple, si vous activez la variable autotranslate en la réglant à true, réglez la propriété translate d'un composant à false pour empêcher la traduction de son invite, de son titre, de sa description, de son étiquette et de ses chaînes de texte. Inversement, si vous n'activez pas autotranslate, mais que la propriété translate d'un composant est réglée à true, l'invite, le titre, la description, l'étiquette et la chaîne de texte du composant sont traduits dans la langue de l'utilisateur détectée à l'aide du service de traduction configuré. (Les composants d'entrée traduisent l'entrée de l'utilisateur en anglais.)
autoTranslate est réglée à... ...et la propriété translate du composant est réglée à... ...alors l'entrée de l'utilisateur, l'invite, l'étiquette, le texte, le titre et la description sont traduits
true non réglée oui
true true oui
true false non
false non réglée non
false false non
false true oui
Note

Les flux conçus avec Visual Flow Designer n'ont pas la propriété translate ou la variable de contexte autoTranslate. Pour configurer la traduction pour ces compétences, vous utilisez les propriétés Translate User Input Message (Message d'entrée utilisateur de traduction) et Translate Bot Response Message (Message de réponse du robot de traduction).

System.Feedback

Note

Cette rubrique décrit l'utilisation de ce composant en mode YAML. Pour plus d'informations sur son utilisation dans le concepteur de flux visuel, voir Rétroaction de l'utilisateur.

Le composant System.Feedback vous permet de collecter des données de rétroaction pour les données clés en présentant aux utilisateurs une échelle de notation une fois qu'ils ont terminé un flux transactionnel. Si vous utilisez la trousse SDK 21.10 ou une version ultérieure, ce composant produit un système de notation en étoile horizontal. Si vous utilisez une trousse SDK antérieure, le composant affiche cette échelle de notation sous forme de liste simple qui permet aux utilisateurs d'appuyer sur le bouton correspondant à leur notation.

Bien que vous puissiez modifier le comportement de ce composant à l'aide des propriétés du composant, vous pouvez en modifier l'aspect lorsque vous utilisez la trousse 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 rétroaction par une autre icône.

Propriétés du composant System.Feedback

Propriété Description
maxRating Notation maximale qu'un utilisateur peut soumettre. Par défaut, la valeur maximale est 5. Vous pouvez ajuster cette valeur à la baisse.
enableTextFeedback Une valeur booléenne, qui, si elle est réglée à true, permet à l'utilisateur de soumettre une rétroaction texte si la notation est inférieure ou égale à la valeur threshold. Par défaut, cette propriété est réglée à false (aucune rétroaction activée).
threshold Valeur pour évaluer la transition entre les actions above et below. Par défaut, le seuil entre la rétroaction positive et la rétroaction négative est réglé à 2 pour la valeur maxRating par défaut, qui est 5.
footerText Texte affiché au bas de la boîte de dialogue de rétroaction.

System.Feedback Transitions 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éfinissez lorsque l'entrée utilisateur est une valeur valide supérieure à la valeur threshold.
below Définissez 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 la notation 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 - Retourne la notation de l'utilisateur.
  • system.userFeedbackText - Lorsque enableTextFeedback est réglé à true, votre compétence peut demander une rétroaction lorsque les notations sont inférieures à la valeur threshold. system.userFeedbackText retourne 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

Note

Ce composant est obsolète et il n'y a plus de modèle disponible pour ce composant. Vous pouvez plutôt utiliser l'un des nombreux modèles basés sur le composant Réponse commune qui sont offerts dans la section Messagerie utilisateur de la boîte de dialogue Ajouter un composant.

Le composant System.Text permet au robot de définir une variable de contexte ou d'utilisateur en demandant à l'utilisateur d'entrer du texte.

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

Le moteur de dialogue ignore l'état System.Text si la variable a déjà une valeur.
Propriété Description Obligatoire?
prompt Chaîne de texte décrivant l'entrée requise de l'utilisateur. Vous pouvez ajouter des valeurs de manière dynamique à l'aide d'une expression de valeur. Par exemple : Hello ${profile.firstName}, how many pizzas do you want? (Bonjour ${prénom.profil}, combien de pizzas voulez-vous?) Oui
variable Nom de la variable, qui peut être une variable d'utilisateur ou une des variables déclarées dans le noeud context. Oui
nlpResultVariable Définit la propriété variable avec une valeur d'entité (lorsque cette dernière n'a pas encore été définie pour la variable référencée). Vous pouvez permettre à nlpResultVariable de retourner une valeur lorsque vous la définissez à l'aide d'une variable qui contient les résultats TLN (iresult: "nlpresult", par exemple, utilisé dans nos exemples de robots). En procédant ainsi, la propriété nlpResultVariable peut toujours charger la valeur lorsqu'elle est nulle 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 à entrer une valeur valide. Voir Limitation du nombre d'invites utilisateur. Non
translate Utilisez cette propriété pour 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 réglée à false, vous pouvez régler cette propriété à true afin d'activer la traduction automatique pour ce composant uniquement. Si vous avez réglé la variable autotranslation à true, vous pouvez régler cette propriété à false pour exclure ce composant de la traduction automatique. Voir Services de traduction dans les compétences. Non

Voir Transitions pour les composants de réponse communs pour les types d'action prédéfinis utilisables avec ce composant.

Utilisation du composant System.Text

Dans cet exemple, la variable type contient les valeurs attendues par l'entité PizzaType (Type de pizza), telles que cheese (fromage), Veggie Lover (Végétarienne) et Hawaiian (Hawaïenne). Lorsque ces informations sont absentes de l'entrée utilisateur, le robot peut quand même les récupérer car son flux de dialogue passe à l'état type, où le composant System.Text invite l'utilisateur à indiquer clairement ce qu'il veut. Gardez à l'esprit que même à ce stade, l'entrée de l'utilisateur doit être résolue en entité PizzaType pour le passage à 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

Note

Ce composant est obsolète et il n'y a plus de modèle disponible pour ce composant. Vous pouvez plutôt utiliser l'un des nombreux modèles basés sur le composant Réponse commune qui sont offerts dans la section Messagerie utilisateur de la boîte de dialogue Ajouter un composant.

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

Propriété Description Obligatoire?
options Vous pouvez spécifier les éléments options à l'aide de chaînes de texte séparées par des virgules, d'expressions Apache FreeMarker, et comme liste de mappages. Les rubriques Propriété "options" et Listes d'actions fournissent des exemples de la dernière approche. Oui
prompt Chaîne de texte qui invite l'utilisateur. Oui
variable Nom de la variable dont la valeur est alimentée par l'entrée de l'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 d'options de liste pour l'utilisateur. Non
nlpResultVariable Définit la propriété variable avec une valeur d'entité (lorsque cette dernière n'a pas encore été définie pour la variable référencée). Vous pouvez activer nlpResultVariable pour qu'elle retourne une valeur lorsque vous la définissez avec la variable qui contient les résultats TLN (par exemple, iResult: "nlpresult" utilisé dans nos exemples de compétences). En procédant ainsi, la propriété nlpResultVariable peut toujours charger la valeur lorsqu'elle est nulle 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. La rubrique Listes d'actions décrit comment utiliser les propriétés variable et nlpResultVariable pour modifier le comportement d'affichage des listes. Non—Utilisez cette propriété lorsque la propriété variable nomme une variable de type d'entité.
maxPrompts Nombre de fois où le composant invite l'utilisateur à entrer une valeur valide. Voir Limitation du nombre d'invites utilisateur. Non
translate Utilisez cette propriété pour 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 réglée à false, vous pouvez régler cette propriété à true afin d'activer la traduction automatique pour ce composant uniquement. Si vous avez réglé la variable autotranslation à true, vous pouvez régler cette propriété à false pour exclure ce composant de la traduction automatique. Voir Services de traduction dans les compétences. Non
autoNumberPostbackActions Lorsqu'elle est réglée à true, cette option ajoute un préfixe numérique aux options. Même si cette option n'est pas réglée à true, la numérotation automatique peut être appliquée aux éléments de liste lorsque la configuration Enable Auto Numbering on Postback Actions (Activer la numérotation automatique pour les actions de republication) de l'assistant numérique est réglée à true. La numérotation automatique spécifique au canal peut être appliquée à toute compétence enregistrée dans un assistant numérique : ${(system.channelType=='twilio')?then('true','false')} Non
footerText Améliore la sortie sur les canaux textuels. Comme indiqué dans la rubrique Pieds de page, vous pouvez utiliser des expressions FreeMarker pour définir le texte du pied de page pour les canaux textuels. Non
Voir Transitions pour les composants de réponse communs pour les types d'action prédéfinis utilisables avec ce composant.

Liste de valeurs

Vous pouvez utiliser le composant System.List pour retourner une valeur respectant une variable de contexte définie comme primitive (telle que greeting: "chaîne" dans le modèle de flux de dialogue) ou comme entité, comme illustré dans l'extrait de code suivant. Dans ce flux de dialogue, la définition options: "Thick,Thin,Stuffed,Pan (options : épaisse, mince, farcie, pan)" retourne une valeur qui correspond à la variable crust (croûte). La propriété options définie pour la taille (size) est une expression de valeur (${size.type.enumValues}) qui retourne les valeurs de liste Large, Medium, Small, and Personal (Grande, Moyenne, Petite et Personnelle) en tant qu'options. Voir Syntaxe du langage Apache FTL.

Cet exemple montre comment la définition iResult de la propriété nlpResultVariable permet également au composant de définir les valeurs d'entité pour les propriétés de variable des états crust (croûte) et size (taille) lorsqu'elles ne l'ont pas encore été. Comme le composant Text, le composant System.List ne nécessite 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 un clavardage en direct.
Note

Les utilisateurs ne sont pas limités aux options affichées dans la liste. Ils peuvent résoudre l'entité en entrant un mot qu'elle identifie, comme un synonyme. Par exemple, au lieu de choisir une taille de pizza dans la liste, les utilisateurs peuvent entrer big (grosse), synonyme défini pour l'option Large (grande) de l'entité PizzaSize (taille de pizza). Voir Entités personnalisées.
Composant de liste avec entrée utilisateur.

Propriété "options"

Vous pouvez définir la propriété options de l'une des façons suivantes :
  • Liste de mappages—Vous pouvez définir la propriété options en tant que chaîne de texte ou expression de valeur, mais également en tant que liste de mappages. Chaque mappage a une propriété label, une propriété value et une propriété keyword facultative. Vous pouvez localiser les options de la liste lorsque vous suivez cette approche car, comme l'indique l'exemple suivant, vous pouvez référencer un ensemble de ressources. Voir Ensembles de ressources pour les compétences pour plus d'informations sur l'utilisation de la notation avec point. Lorsque les utilisateurs entrent une valeur qui correspond à l'une des valeurs spécifiées dans la propriété keyword, le robot réagit comme 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 d'options séparées par des virgules, comme "small, medium, large" dans l'extrait 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 effectue une boucle sur une liste de chaînes ou une liste de mappages où chaque mappage doit contenir les propriétés label et value et, au besoin, une propriété keyword.
    askPizzaSize:
      component: "System.List" 
      properties:
        prompt: "What size do you want?"
        options: "${pizzaSize.value.enumValues}"
        variable: "pizzaSize"
Consultez le 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 variable et nlpResultVariable facultatives de System.List définissent le comportement d'affichage des listes et la transition ultérieure, en fonction de l'entrée de l'utilisateur.
  • Si vous ne configurez pas ces propriétés, l'action de transition est basée sur l'option sélectionnée par l'utilisateur de la compétence :
    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 ignoré en cas de correspondance de l'entrée de l'utilisateur. Dans l'extrait de code suivant, la liste d'options est ignorée lorsque nlpResultVariable définit la variable size à partir de l'entrée de l'utilisateur, par exemple I want to order a large pizza (Je veux commander une grande pizza). La transition correspondant à la valeur est ensuite 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 qui ne nécessite pas de réponse de l'utilisateur ou n'implique pas un traitement de la réponse de l'utilisateur par la compétence.
Note

Ce composant est obsolète et il n'y a plus de modèle disponible pour ce composant. Vous pouvez plutôt utiliser l'un des nombreux modèles basés sur System.CommonResponse offerts dans la section Messagerie utilisateur de la boîte de dialogue Ajouter un composant.
Propriété Description Obligatoire?
text Chaîne de texte Oui – Ce champ requiert une valeur.
keepTurn Valeur booléenne pour abandonner (false) ou conserver (true) le contrôle du flux de dialogue de la compétence. Utilisez keepTurn: true pour produire une séquence continue de messages de compétence où aucune interruption de l'utilisateur n'est acceptée. Non
translate Utilisez cette propriété pour 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 l'avez réglée à false, vous pouvez régler cette propriété à true afin d'activer la traduction automatique pour ce composant uniquement. Si vous avez réglé la variable autotranslation à true, vous pouvez régler cette propriété à false pour exclure ce composant de la traduction automatique. Voir Services de traduction dans les compétences. Non

Utilisation du composant System.Output

Le composant System.Output requiert la définition de la chaîne de la propriété text. Comme illustré dans l'exemple suivant de message de confirmation, 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 une entrée utilisateur après l'affichage d'un énoncé de la compétence. Si vous modifiez ce comportement, ajoutez la propriété facultative keepTurn et réglez-là à true pour diriger le moteur de dialogue vers l'état suivant tel que défini par la propriété transitions. Lorsqu'aucune transition n'a été définie, le moteur de dialogue passe à l'état suivant de 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 d'expressions de valeur pour le composant System.Output

Vous pouvez définir une ou plusieurs expressions de valeur pour la propriété text. Par exemple, l'extrait de code suivant utilise différentes expressions pour afficher le texte 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 retourner une valeur. Si une expression retourne une valeur nulle, la compétence affiche du texte brut pour chaque expression de la chaîne, et vos utilisateurs voient donc ce qui suit :
Your ${size.value} ${type.value} is on its way.
It’s all or nothing. (C'est tout ou rien.) Pour vous assurer que votre compétence présente toujours un texte compréhensible à vos utilisateurs, remplacez la valeur nulle par une valeur par défaut à 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 la valeur constante attendue par l'opérateur. Par exemple :
text: "Your ${size.value!\"piping\"} ${type.value!\"hot\"} pizza is on its way."
Note

Faites toujours précéder d'un caractère d'échappement les guillemets (\"...\") qui encadrent la valeur par défaut lorsque vous utilisez l'opérateur Freemarker. La syntaxe OBotML de votre flux de dialogue ne sera valide que 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 entourez le texte de sortie de guillemets doubles. Par exemple, la définition suivante du composant System.Output permet aux utilisateurs de lire le message suivant : You said, "Cancel this order." (Vous avez dit, "Annulez cette commande.")
confirmCancel:
    component: "System.Output"
    properties:
      text: "You said, \"Cancel this order.\""
    transitions:
      return: "cancelOrder"

Traduction du texte de sortie

Vous pouvez supprimer ou activer la traduction automatique de texte du composant System.Output à l'aide de la propriété translate. Si elle est réglée à false, comme dans l'extrait de code suivant, les composants produisent le texte tel quel, sans traduction. Si vous réglez cette propriété à true, vous pouvez activer la traduction automatique lorsque la variable autoTranslate est réglée à false ou non définie. Voir Services de traduction dans les compétences.
Note

Généralement, vous ne réglez pas la variable autoTranslate à true si vous traduisez du texte avec des ensembles 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:
     ...