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.
-
System.CommonResponse—Produit des messages riches en contenu.
-
System.Webview—Intègre votre robot à une application Web.
-
System.IncidentCreation - Crée un incident pour Oracle B2C Service ou Oracle Fusion Service.
-
System.IntelligentAdvisor—Intègre votre compétence à une entrevue Oracle Intelligent Advisor.
-
System.KnowledgeSearch—Recherche dans un service de connaissances pour obtenir des informations sur un sujet.
-
System.AgentTransfer-P permet à une compétence d'assistant numérique servant d'agent de retourner une conversation à Oracle B2C Service ou à Oracle Fusion Service.
-
System.AgentTransferCondition - Permet de vérifier si des agents sont disponibles et d'obtenir le temps d'attente attendu.
-
System.AgentInitiation et System.AgentConversation—Permettent de transférer une conversation à un agent humain Oracle B2C Service.
-
System.ResolveEntities—Résout les valeurs pour les membres d'une entité composite.
- System.Feedback-Sortit un composant de notation de rétroaction.
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.
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.
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).
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é à |
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 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 :
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
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
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
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.
|
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 |
|
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.
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 |
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.
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 sur
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 |
Non |
endLabel |
Texte à afficher dans le clavardage à la fin de l'entrevue.
La valeur par défaut est |
Non |
exitLabel |
Texte que les utilisateurs tapent pour indiquer qu'ils veulent quitter l'entrevue.
La valeur par défaut est |
Non |
explanationAskLabel |
Question à poser quand la propriété showExplication est réglée à ask .
La valeur par défaut est |
Non |
hideScreenTitle |
Indique s'il faut masquer tous les titres d'écran de l'entrevue.
La valeur par défaut |
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é 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 |
Non |
noLabel |
Étiquette à utiliser pour représenter les valeurs booléennes FALSE.
La valeur par défaut est |
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 |
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 La valeur par défaut est |
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 |
Non |
undoLabel |
Texte que les utilisateurs tapent pour indiquer qu'ils veulent revenir à la question précédente.
La valeur par défaut est |
Non |
yesLabel |
Étiquette à utiliser pour représenter les valeurs booléennes TRUE.
La valeur par défaut est |
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
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ésdefaultAttachmentLabel
, 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 sur
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, Affiche par défaut |
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, |
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é à |
Non |
resultSizeLimit |
Nombre maximal de résultats à afficher. La valeur par défaut est |
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é à 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 |
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 La valeur par défaut est |
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é à |
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 |
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.
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.
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ésacceptedMessage
, 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 sur
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.
Si les conditions spécifiées ne sont pas remplies, l'action |
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 |
Non | |
rejectedMessage |
Message présenté aux utilisateurs lorsque l'une des situations suivantes se produit :
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
|
rejected |
La transition rejected est définie lorsqu'une des situations suivantes se produit :
|
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'exempledoTransfer
, 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.
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.
Si les conditions spécifiées ne sont pas remplies, l'action |
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 |
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 :
|
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ésagentActionsMessage
, 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 sur
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 :
Les noms d'action doivent correspondre aux propriétés
Vous pouvez définir les éléments de liste
|
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 :
|
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.
Si la condition spécifiée n'est pas remplie, le composant retourne Lorsque vous incluez cette propriété, vous devez également inclure la propriété 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 :
|
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 :
|
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 :
|
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é |
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 :
|
Non |
System.AgentInitiation Transitions
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 :
Notez que si vous ne définissez pas |
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 queinterfaceID
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
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
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
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
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 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 :
La valeur de propriété est |
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 Le message d'expiration n'est pas sorti lorsque la conversation se termine, car le délai |
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 :
|
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 |
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 Par défaut, la valeur de L'action 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 :
-
Lancez le transfert à un agent humain.
-
Ajoutez un état pour le composant
System.AgentInitiation
. -
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 composantSystem.AgentInitiation
autorise la transition vers l'état suivant, généralement défini pour le composantSystem.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'étatSystem.AgentInitiation
pour empêcher ces clients de recevoir un message trompeur Resuming chat with agent (Reprise du clavardage avec l'agent). -
-
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 exemplebye
(au revoir). Lorsque la compétence détecte l'un de ces mots clés, le composantSystem.AgentConversation
met fin à la session en direct et déclenche la transitionnext
.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
-
Le cas échéant, dans le noeud de contexte, définissez une variable de mappage à utiliser avec la propriété
customProperties
du composantSystem.AgentInitiation
. Par exemple :context: variables: greeting: "string" name: "string" liveChatInfo: "map"
-
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"
-
Ajoutez la propriété
customProperties
au composantSystem.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
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 :
|
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).
|
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 :
maxPromptsReached de niveau article ou événement. |
Non |
Composants de calendrier
Utilisez ces composants de calendrier pour interagir avec les calendriers Outlook et Google :
-
System.CreateCalendarEvent : Créer un événement
-
System.DeleteCalendarEvent : Annuler un événement
-
System.GetCalendarEventDetails: Obtenir des détails relatifs à un événement
-
System.ListCalendarEvents : Obtenir des données d'un ensemble filtré d'événements
-
System.SelectCalendarEvent : Sélectionner un événement dans une liste filtrée
-
System.SendInviteResponse : Changer le statut de réponse d'un événement
-
System.UpdateCalendarEvent : Changer un événement
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 à :
-
Enregistrer une application avec l'autorisation Google OAuth2
-
Enregistrer une application avec la plate-forme d'identités Microsoft
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 :
-
Appelle l'état que vous avez défini pour l'action
system.authorizeUser
dans le noeuddefaultTransitions
. -
Demande à l'utilisateur de se connecter.
-
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
etend
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"
...
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 |
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 : |
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"
...
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"
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"
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 :
|
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 |
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 :
La valeur par défaut est |
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 |
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"
...
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 :
|
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 |
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 :
La valeur par défaut est |
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 sur![]() |
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 |
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"
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 :
|
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"
...
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 |
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

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'expressionsystem.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 FreeMarkerif
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>
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
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.
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 |
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
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
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. |
system.userFeedbackRating
- Retourne la notation de l'utilisateur.system.userFeedbackText
- LorsqueenableTextFeedback
est réglé àtrue
, votre compétence peut demander une rétroaction lorsque les notations sont inférieures à la valeurthreshold
.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
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.
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.
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
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 |
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.
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:
...

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.
Propriété "options"
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éslabel
etvalue
lorsque vous définissezoptions
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
etvalue
et, au besoin, une propriétékeyword
.askPizzaSize: component: "System.List" properties: prompt: "What size do you want?" options: "${pizzaSize.value.enumValues}" variable: "pizzaSize"
Liste d'actions
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
etnlpResultVariable
, 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 lorsquenlpResultVariable
définit la variablesize
à 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
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.
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
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
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."
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
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.
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:
...