Componentes de la interfaz de usuario
Estos son los componentes que están disponibles en la categoría Interfaz de usuario del editor de flujo de diálogo basado en YAML.
-
System.CommonResponse: devuelve mensajes de contenido enriquecido.
-
System.Webview: integra el bot con una aplicación web.
-
System.IncidentCreation: crea un incidente para Oracle B2C Service u Oracle Fusion Service.
-
System.IntelligentAdvisor: integra la aptitud con una entrevista de Oracle Intelligent Advisor.
-
System.KnowledgeSearch: realiza una búsqueda en un servicio de gestión del conocimiento para obtener información sobre un tema.
-
System.AgentTransfer: activa una aptitud de DA como agente para devolver una conversación a Oracle B2C Service u Oracle Fusion Service.
-
System.AgentTransferCondition: permite comprobar si los agentes están disponibles y obtener el tiempo de espera esperado.
-
System.AgentInitiation y System.AgentConversation: permiten transferir una conversación a un agente activo de Oracle B2C Service.
-
System.ResolveEntities: resuelve los valores para las entidades miembro de una entidad de bolsa compuesta.
- System.Feedback: genera un componente de calificación de comentarios.
System.CommonResponse
El componente System.CommonResponse
permite crear mensajes con funciones de interfaz de usuario enriquecidas, como carruseles de tarjetas con imágenes y botones de acción, o formularios con tablas y campos de entrada.
En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte Plantillas de componentes de respuesta común.
Las plantillas para System.CommonResponse
están disponibles en la sección Mensajería de usuario del cuadro de diálogo Agregar componente.
System.CommonResponse
en el CrcPizzaBot, uno de los bots de ejemplo. En este selector del PizzaBot, puede mostrar un menú con imágenes con los botones de acción rápida Order Now.
En el contexto del componente System.CommonResponse
, los diferentes tipos de mensajes se conocen como tipos de respuesta y CrcPizzaBot muestra cómo, entre otras cosas, permiten a los usuarios del bot responder a las peticiones de datos mediante botones de acción y ver el menú de pizza como una cascada de artículos de tarjeta.
En el menú Agregar componente, puede seleccionar plantillas System.CommonResponse
diferentes para las tarjetas, el texto o las respuestas de anexos y para las entidades de bolsa compuesta (demostradas por CbPizzaBot). Estas plantillas incluyen ambas propiedades comunes a todas estas propiedades de tipo de respuesta que son específicas de los tipos de respuesta individuales. Aunque el menú Agregar componente agrega estados independientes para cada tipo de respuesta, puede combinar uno o más tipos de respuesta en un único estado. CrcPizzaBot muestra ejemplos de ambas en los estados ShowMenu
(respuesta de texto) y OrderPizza
(respuestas de texto y tarjeta).
Debe probar cada una de las aptitudes en los canales de destino al principio del ciclo de desarrollo, a fin de asegurarse de que los componentes se representen como desee.
Propiedades Componente
La configuración de componentes System.CommonResponse
implica la definición de propiedades que dirigen el motor de diálogo junto con propiedades de metadatos que describen no solo cómo entrega los mensajes el componente (como peticiones de datos de texto, tarjetas o anexos), sino que también define el contenido y el comportamiento de los propios mensajes.
Nombre | Descripción | ¿Obligatoria? |
---|---|---|
metadata |
La respuesta de chat creada por este componente está controlada por el contenido de la propiedad metadata . Consulte Propiedad Metadatos en Componentes de Respuesta Comunes.
|
Sí |
processUserMessage |
Defina esta propiedad en true para indicar al motor de diálogo que vuelva al estado después de que el usuario introduzca texto o toque un botón. Defina esta propiedad en false si no se necesita ninguna entrada de usuario (o se espera).
Defina esta propiedad en |
Sí |
autoNumberPostbackActions |
Esta propiedad se utiliza para las bolsas compuestas, las respuestas de texto y las respuestas de tarjeta. Si se define en true , esta opción prefija números a las opciones. Aunque esta opción no se haya definido en true , se puede aplicar la numeración automática a elementos de tarjeta si la configuración de Activar numeración automática en acciones de devolución del asistente digital está definida en true . Tal y como demuestra su configuración por defecto, la numeración automática específica del canal se puede aplicar a cualquier bot de aptitud que se haya registrado en un asistente digital (${(system.channelType=='twilio')?then('true','false')} ):
|
No |
variable |
Esta variable contiene el nombre de la variable de contexto o usuario que se rellena cuando un usuario responde introduciendo texto libre, en lugar de pulsar un botón. Esta propiedad se ignora cuando un usuario pulsa un botón, ya que la carga útil del botón determina qué valores de variables se definen. Si la propiedad de la variable ya se ha definido cuando el motor de diálogo pasa a este estado, se omite el estado. Para entidades de bolsa compuesta, consulte la variable de entidad de bolsa compuesta. Se solicitan a los usuarios los valores de la entidad individual en la bolsa. Una vez establecidos todos los valores de entidad, el componente pasa al siguiente estado. |
No |
nlpResultVariable |
Establece la propiedad variable en un valor de entidad, si dicho valor de entidad no se ha establecido ya para la variable de referencia. Puede activar nlpResultVariable para que devuelva un valor si la define con una variable que contenga los resultados de NLP (como iResult: "nlpresult" , que se utiliza en nuestros bots de ejemplo). Al hacerlo, la propiedad nlpResultVariable sigue pudiendo rellenar el valor cuando es nula, si encuentra una entidad resuelta que coincida con aquella a la que hace referencia la variable. El cuadro de diálogo pasa al estado siguiente cuando nlpResultVariable define el valor. Puede utilizar esta propiedad en lugar del componente System.SetVariable.
|
No |
useFullEntityMatches |
Cuando se define en true , los valores de entidad personalizados se almacenan como objetos JSON (similar a los valores de entidad incorporados). Esto le permite crear expresiones para acceder a propiedades como value , primaryLanguageValue y originalString , que son especialmente importantes para las aptitudes que actualmente o eventualmente pueden convertirse en multilingües.
|
No |
maxPrompts |
Antes de que el componente System.CommonResponse pueda rellenar el valor de variable especificado para la propiedad variable a partir del texto introducido por el usuario, valida el valor con respecto al tipo de variable. Puede ser una validación de tipo de entidad o, en el caso de un tipo primitivo, un valor que se puede forzar en el tipo primitivo.
Si el componente no puede validar el valor, el motor de diálogo envía el texto del mensaje y las opciones de nuevo. (Puede modificar este mensaje para reflejar el fallo de validación.) Para evitar un bucle infinito resultante de la incapacidad continuada del usuario para introducir un valor válido, utilice esta propiedad para definir un límite en el número de intentos de los que dispone el usuario. Si el usuario excede esta asignación, el componente Como se describe en Creación de una entidad de bolsa compuesta, las entidades individuales de la bolsa compuesta pueden sustituir este valor cuando se define la opción Máximo de intentos de entrada de usuario. |
No |
keepTurn |
La propiedad keepTurn solo se aplica si se define la propiedad processUserMessage en false . Consulte System.Output para descubrir cómo definir esta propiedad.
|
No |
translate |
Utilice esta propiedad para sustituir el valor booleano definido para la variable de contexto autotranslate . Si no ha definido esta variable o si la ha definido en false , puede establecer esta propiedad en true para activar la traducción automática solo para este componente. Si define la variable autotranslation en true , puede establecer esta propiedad en false para excluir este componente de la traducción automática. Consulte Servicios de traducción en aptitudes.
|
No |
footerText |
Mejora la salida en canales de solo texto. Como se describe en Pies de página, puede utilizar expresiones de FreeMarker para condicionar el texto del pie de página en los canales de solo texto. | No |
transitionAfterMatch (en desuso)
|
Valor booleano que, al definirlo en true , activa una transición temporal desde el proceso de coincidencia de la entidad realizada por este componente a otro estado. Esta propiedad ya no está soportada. Para obtener esta funcionalidad, utilice un manejador de eventos de entidad |
No |
cancelPolicy |
Determina la temporización de la transición cancel :
maxPromptsReached de nivel de evento o elemento. |
No |
A continuación, se muestra el YAML para un estado de ejemplo basado en el componente 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"
Consejo:
La propiedadtext
en este fragmento se define mediante el lenguaje de plantilla de Apache FreeMarker (FTL). Para descubrir cómo agregar expresiones de FTL y usar operaciones incorporadas de FreeMarker para transformar los valores de las variables, consulte Sintaxis de lenguaje de plantilla de Apache FreeMarker.
Transiciones para el componente System.CommonResponse
Transición | Descripción |
---|---|
cancel |
Se dispara cuando un usuario supera los intentos asignados definidos por la propiedad maxAttempts , o bien cuando se redirecciona el flujo.
|
textReceived |
Se activa cuando un usuario envía texto o emojis en lugar de pulsar un botón o enlace de acción. |
attachmentReceived |
Se dispara cuando un usuario envía una imagen, audio, vídeo o anexo. |
locationReceived |
Se dispara cuando el usuario envía una ubicación. |
system.outOfOrderMessage |
Defínala para evitar comportamientos inesperados por parte del usuario. En concreto, que un usuario no pulse un elemento de acción del mensaje actual, sino que pulse una acción que pertenezca a un mensaje más antiguo de la sesión de chat. |
Transiciones de bolsa compuesta en el componente System.CommonResponse
System.CommonResponse
disparan las acciones match
y cancel
basándose en los valores coincidentes en la entrada de usuario y en la configuración de la propiedad cancelPolicy
.
Acción | Descripción | ¿Obligatoria? |
---|---|---|
match |
El componente dispara esta acción para navegar al estado especificado cuando al menos una entidad de la bolsa coincide con la entrada del usuario. | No |
cancel |
El componente dispara esta acción para navegar al estado especificado según la configuración de la propiedad cancelPolicy .
|
No |
System.Webview
En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte Componente de vista web.
El componente System.Webview
abre una vista web dentro de la aptitud o, en el caso de las aptitudes que se ejecutan en un canal web, en un separador del explorador.
Propiedades del componente System.WebView
Propiedad | Descripción | ¿Obligatoria? |
---|---|---|
sourceVariableList |
Lista separada por comas de nombres de variables de contexto o de usuario. Estos nombres de variable son los parámetros que se envían a la vista web; son los parámetros de entrada del bot. Puede definir cada variable agregando una serie de estados System.SetVariable antes del estado System.Webview .
|
Sí |
variable |
Nombre de la variable (valor de cadena) que identifica la carga útil de la vista web que se devuelve al bot una vez que el usuario completa su interacción en la vista web.
La carga útil se almacena en esta variable, a la que se puede acceder más adelante durante la definición del flujo de diálogo. Por ejemplo, puede hacer referencia a ella en un componente de salida. |
Sí |
prompt |
Cadena de texto como “Pulse para continuar" . | No |
service |
Nombre del servicio del componente de vista web. | No |
imageUrl |
URL de la imagen que acompaña una petición de datos. | No |
linkLabel |
Etiqueta del botón que llama a la aplicación web. | No |
cancelLabel |
Etiqueta del botón Cancelar que permite a los usuarios dejar el estado sin llamar a la aplicación web. | No |
autoNumberPostbackActions |
Permite la entrada de usuario en canales de SMS, que no admiten botones, al agregar equivalentes numéricos a los elementos de la interfaz de usuario.
|
No |
translate |
Utilice esta propiedad para sustituir el valor booleano definido para la variable de contexto autotranslate . Si no ha definido esta variable o si la ha definido en false , puede establecer esta propiedad en true para activar la traducción automática solo para este componente. Si define la variable autotranslation en true , puede establecer esta propiedad en false para excluir este componente de la traducción automática. Consulte Servicios de traducción en aptitudes.
|
No |
Transiciones para el componente System.Webview
Transiciones | Descripción |
---|---|
next |
Asigna un nombre al siguiente estado del flujo de diálogo después de una devolución de llamada correcta de la aplicación web. |
return |
Sale de la conversación después de una devolución de llamada correcta de la aplicación web. |
error |
Asigna un nombre al estado que maneja los errores. |
actions |
|
System.IncidentCreation
Puede utilizar el componente System.IncidentCreation
para crear un incidente en un sitio de servicio al cliente. Tenga en cuenta que debe crear una integración de servicio al cliente en la página Configuración > Servicios adicionales > Integración de servicio al cliente para poder utilizar este componente en la instancia.
En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte Creación de incidentes.
Este es un ejemplo del uso de este componente para devolver la conversación a un sitio de 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"
A continuación, se muestra un ejemplo de Oracle Fusion Service:
component: "System.IncidentCreation"
properties:
serviceName: "IncidentServiceB2BEndUserAuth"
subject: "${service.value.subject}"
attachmentUrl: <#if (service.value.Attachment.url)??>${service.value.Attachment.url}<#else></#if>
agentReportFilter: "ODAQueue"
addChatTranscript: "true"
customFields:
description: "${service.value.description}"
contactInfo: "<#if (profile.contactInfo)??>${profile.contactInfo}<#else></#if>"
contactProperties:
firstName: "${profile.firstName}"
lastName: "${profile.lastName}"
email: "<#if (profile.email)??>${profile.email}<#else></#if>"
incidentNumberVariable: "incidentNumber"
transitions:
error: "incidentError"
next: "exitIncident"
Propiedad | Descripción | ¿Obligatoria? | |
---|---|---|---|
serviceName |
Nombre de la integración según se ha configurado en Configuración > Servicios adicionales > Integración de servicio al cliente. | Sí | |
subject |
El texto del asunto del incidente. | Sí | |
attachmentUrl |
URL de un documento o imagen relacionado con el incidente. Tenga en cuenta que la adición de anexos no está soportada para las aptitudes de DA como agente. | No | |
agentReportFilter |
(Para incidentes de Oracle Fusion Service), texto para filtrar los incidentes. El valor por defecto es ODA .
|
No | |
addChatTranscript |
(Solo para incidentes de Oracle Fusion Service). Cuando se define en true, la transcripción del chat se agrega al incidente. El valor por defecto es false.
Las estadísticas deben estar activadas para la aptitud para que la transcripción de chat esté disponible. Una transcripción solo se puede agregar al incidente cuando se utiliza una integración de DA como agente en combinación con inserciones de Web Chat for Service u Oracle Inlay Toolkit. |
No | |
customFields |
Una asignación que contiene description y, opcionalmente, contactInfo , que puede contener detalles adicionales sobre el incidente.
El mapa se pasa sin validar como una versión de texto del objeto y se inserta en el mensaje de incidente como una nota privada. |
No | |
contactProperties |
Mapa de pares de nombre/valor que contiene la información necesaria para buscar o crear información de contacto de servicio al cliente. Debe contener email y, opcionalmente, puede contener firstName y lastName .
Si no se proporciona |
Solo para Oracle B2C Service | |
incidentNumberVariable |
Nombre de la variable de contexto de cadena en la que se almacena el número de incidente. | No |
System.IntelligentAdvisor
Utilice este componente para acceder a una entrevista de Oracle Intelligent Advisor desde una aptitud.
En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte Intelligent Advisor.
Debe crear una integración de servicio de Intelligent Advisor para poder utilizar este componente. Consulte Adición de un servicio de Intelligent Advisor. Además, la entrevista se debe haber desplegado en el hub de Intelligent Advisor y se debe activar en el canal de servicio de chat. La entrevista debe ser para usuarios anónimos. No puede acceder a entrevistas para usuarios de portal o usuarios de agente.
Puede utilizar las propiedades del componente para especificar la siguiente configuración de entrevista:
- Si se van a mostrar los títulos y la explicación
- Las etiquetas de los botones Sí, No y No lo tengo claro
- Las cadenas que el usuario introduce para restablecer, volver a la pregunta anterior (deshacer) y salir de la entrevista
- El texto que se mostrará al final de la entrevista
- Cómo formular la pregunta sobre si se va a mostrar la explicación
- La cadena que introduce el usuario para indicar que ha terminado de cargar los archivos
- Los valores de atributo y los parámetros de conector que se transferirán a la entrevista
- Configuración regional del proyecto que se va a utilizar
Ejemplo:
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"
Consulte Uso del componente Intelligent Advisor en la aptitud para ver un ejemplo que utiliza el componente en un flujo de diálogo.
Consejo:
Los valores por defecto de todas las propiedades de etiqueta se almacenan en el grupo de recursos de la aptitud. Para cambiar un valor por defecto, abra la página Grupo de recursos de la aptitud, haga clic en
El grupo de recursos de configuración también le permite cambiar los mensajes IntelligentAdvisor - defaultValue, IntelligentAdvisor - doneHelp, IntelligentAdvisor - maskLabel, IntelligentAdvisor - outOfOrderMessage, IntelligentAdvisor - resumeSessionPrompt, IntelligentAdvisor - numberMinMax, IntelligentAdvisor - outOfOrderMessage, IntelligentAdvisor - resumeSessionPrompt y IntelligentAdvisor - yesNoMessage. Por ejemplo, el mensaje IntelligentAdvisor - doneHelp se muestra para los campos de anexos y se define por defecto en When you are done with the upload, say {0}.
Puede que desee cambiarlo a un valor similar a Say {0} to let me know that you are done uploading.
Propiedad | Descripción | ¿Obligatoria? |
---|---|---|
currency |
Código de moneda ISO-4217 para la moneda que se usa en la entrevista. Cuando se especifica este código, el usuario sólo puede introducir valores de moneda en los formatos permitidos para esa moneda. Puede definir esta propiedad en blanco o excluirla si la entrevista no solicita importes de moneda o no espera ninguna moneda determinada. | No |
deployment |
Nombre del proyecto de despliegue activo en el hub de Intelligent Advisor. | Sí |
doneLabel |
Texto que los usuarios escriben para indicar que han terminado de cargar un archivo.
El valor por defecto es |
No |
endLabel |
Texto para mostrar en el chat al final de la entrevista.
El valor por defecto es |
No |
exitLabel |
Texto que los usuarios escriben para indicar que desean salir de la entrevista.
El valor por defecto es |
No |
explanationAskLabel |
Pregunta que se debe hacer cuando showExplanation se define en ask .
El valor por defecto es |
No |
hideScreenTitle |
Indica si se deben ocultar todos los títulos de pantalla de la entrevista.
El valor por defecto es |
No |
intelligentAdvisorService |
Nombre del servicio de Intelligent Advisor configurado en Configuración > Servicios adicionales. | Sí |
interviewAttributes |
Nombre de una variable de contexto de tipo cadena en la que se almacenan los valores de atributo de la entrevista. Los valores de atributo se almacenan como una matriz de pares clave/valor. | No |
locale |
Esta propiedad afecta tanto a la entrevista de destino como a la resolución de fecha y número. El componente inicia la versión de la entrevista con nombre (despliegue) asociada al idioma especificado por la propiedad Para la entrada de fecha y número, los valores se resuelven según la configuración de entidad FECHA y NÚMERO. Cuando Considerar configuración regional de usuario final se cambia a Activado para la entidad, el valor se resuelve para la configuración regional especificada por esta propiedad (o el valor por defecto si no se especifica). Consulte Resolución de entidad basada en configuración regional. Esta propiedad toma por defecto el valor |
No |
noLabel |
Etiqueta que se utiliza para representar los valores FALSE booleanos.
El valor por defecto es |
No |
params |
Asignación de parámetros de conexión de clave-valor para transferir al inicio de la entrevista. Esto suele ser necesario para entrevistas con integración de datos externos. | No |
removeHtml |
Indica si se debe eliminar el marcado HTML del texto. El valor por defecto es false .
|
No |
resetLabel |
Texto que los usuarios escriben para indicar que desean volver a la primera pregunta.
El valor por defecto es |
No |
seedData |
Asignación de nombres y valores de atributos de Intelligent Advisor que se transferirán a la entrevista. Para los atributos de fecha y hora, utilice los formatos de fecha y hora estándar de Intelligent Advisor. Por ejemplo: start_date: "2010-01-31" .
El atributo al que está transfiriendo el valor debe tener la opción Predefinir desde parámetro de URL activada en Policy Modeling. |
No |
showExplanation |
Especifica si se muestra la explicación de Intelligent Advisor. Los valores permitidos son never , always y ask .
Si se define en El valor por defecto es |
No |
uncertainLabel |
Etiqueta que el usuario puede escribir si no conoce el valor. Esta etiqueta aparece para los botones de radio booleanos opcionales.
El valor por defecto es |
No |
undoLabel |
Texto que los usuarios escriben para indicar que desean volver a la pregunta anterior.
El valor por defecto es |
No |
yesLabel |
Etiqueta que se utiliza para representar los valores de TRUE booleanos.
El valor por defecto es |
No |
Ejemplo: uso del componente Intelligent Advisor en la aptitud
####################
# 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"
...
Ejemplo: atributos de entrevista de acceso
A continuación, se muestra un ejemplo sencillo de acceso a los valores de atributo de una entrevista:
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
En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte Búsqueda de conocimientos.
Utilice este componente para buscar información sobre un término de búsqueda determinado en Oracle B2C Service Knowledge Foundation u Oracle Fusion Service Knowledge Management y mostrar los resultados.
Para Oracle B2C Service, los resultados que devuelve el servicio dependen de si las respuestas son públicas y de cuáles sean los valores de nivel de acceso, producto o categoría.
Tenga en cuenta que debe crear un servicio de búsqueda de conocimientos para poder utilizar este componente. Consulte Adición de un servicio de búsqueda de conocimientos.
A continuación se muestra un ejemplo de uso de este componente. Busca en un servicio de gestión de conocimientos toda la información relacionada con la última expresión del usuario. Para obtener ejemplos adicionales, consulte Uso del componente de búsqueda de conocimientos.
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"
Consejo:
Los valores por defecto para las propiedadesdefaultAttachmentLabel
, noResultText
y resultLinkLabel
se almacenan en el grupo de recursos de la aptitud. Para cambiar un valor por defecto, abra la página Grupo de recursos de la aptitud, haga clic en 
Propiedad | Descripción | ¿Obligatoria? |
---|---|---|
cardLayout |
Especifica si se deben mostrar las tarjetas de resultados en sentido vertical u horizontal. El valor por defecto es horizontal .
|
No |
customFilters |
Lista de filtros de resultados de búsqueda presentados como pares nombre-valor. Los nombres de filtro permitidos son product y category . Cada una de ellas permite una sola declaración de filtro. Consulte Filtrado de resultados por producto y categoría.
|
No |
customProperties |
Solo Oracle B2C Service: asignación de pares clave/valor para enviar al servicio de búsqueda. Actualmente, esta propiedad solo soporta la clave word_connector . Utilice la propiedad word_connector definida en AND para anteponer cada palabra del término de búsqueda con + .
|
No |
defaultAttachmentLabel |
Etiqueta por defecto que se va a utilizar para la acción URL de la tarjeta de resultados que se enlaza a un anexo cuando este no tiene un nombre mostrado configurado. Cuando se utiliza, se agrega con un número de índice. Por ejemplo, si el segundo anexo no tiene un nombre mostrado, la etiqueta de anexo por defecto se agrega con El valor por defecto es |
No |
locale |
El valor por defecto es el valor de la variable profile.locale .
Para los servicios de integración de conocimientos de varias interfaces de Oracle B2C Service, el código de configuración regional ISO o BCP de cinco caracteres que especifica qué interfaz utilizar para realizar la búsqueda (por ejemplo: en_GB). Si no hay una interfaz que admita la configuración regional, se utiliza la interfaz por defecto. Consulte Implementación de la búsqueda de conocimientos multilingüe. Para Oracle Fusion Service, recupera los artículos asociados a la configuración regional especificada. Si no existen artículos coincidentes para la configuración regional, devuelve |
No |
noResultText |
Texto de salida cuando no hay ningún resultado de búsqueda disponible. El valor predeterminado es el texto de la entrada del grupo de recursos KnowledgeSearch - noResultText |
No |
resultLinkLabel |
Etiqueta que se va a utilizar para la acción URL de la tarjeta de resultado (botón) que se enlaza a la versión web de la información. El valor predeterminado es el texto de la entrada del grupo de recursos KnowledgeSearch - resultLinkLabel Si define esta propiedad en |
No |
resultSizeLimit |
Número máximo de resultados que se mostrarán. El valor por defecto es |
No |
resultVersion |
Solo Oracle B2C Service: versión preferida que se va a devolver cuando hay varias versiones para un resultado. Puede definir esta propiedad en Puede aprovechar las respuestas especiales para mostrar la salida que está específicamente adaptada a las conversaciones de chat en lugar de a las páginas web. La versión por defecto es |
No |
resultVersionExclusive |
Oracle B2C Service únicamente: especifica si solo se deben mostrar los resultados disponibles en la versión preferida. Cuando el valor sea El valor por defecto es |
No |
searchLinkLabel |
Oracle B2C Service: etiqueta que se va a utilizar para la acción de carga útil del mensaje de tarjeta que se enlaza a la página web con la lista de resultados de búsqueda completa. Oracle Fusion Service: etiqueta que se utilizará para la acción de carga útil del mensaje de tarjeta que está enlazada a la página de búsqueda de inicio. Si esta propiedad no está definida, la carga útil del mensaje de tarjeta no muestra la acción. |
No |
searchPrelude |
Texto que se muestra antes de mostrar el resultado de la búsqueda. Si esta propiedad no está definida, se muestra el texto de la entrada del grupo de recursos KnowledgeSearch - searchPrelude. Si no desea que se muestre el preludio de búsqueda, defina esta propiedad en |
No |
searchServiceName |
Nombre de la integración con la búsqueda de conocimientos según se ha configurada en Configuración. | Sí |
searchTerm |
Texto que se utilizará como término de búsqueda para la llamada de búsqueda de conocimientos. Se necesita un término de búsqueda para Oracle Fusion Service Knowledge Management. Para Oracle B2C Service Knowledge Foundation, devuelve los artículos más populares si no se proporciona ningún término de búsqueda.
Para obtener información sobre las técnicas de términos de búsqueda, consulte Uso del componente de búsqueda de conocimientos. |
Sí |
System.KnowledgeSearch Transiciones
Acción | Descripción |
---|---|
resultSent |
La búsqueda ha devuelto al menos un resultado. |
noResult |
No hay ningún resultado para el término de búsqueda. |
serverError |
Se ha producido un error en el servidor del servicio de búsqueda de conocimientos durante la llamada, como puede ser un fallo de error del servidor o un fallo de error inesperado.
Cuando se produce este error, el mensaje de error se almacena en |
Ejemplo: asociación de preguntas relacionadas con un término de búsqueda en un flujo de diálogo YAML
En el siguiente diagrama se muestra cómo implantar el método de estado único si el flujo de diálogo se crea en modo YAML. 1) Utilice una variable de contexto de asignación para asociar las intenciones de conocimiento a los términos de búsqueda. 2) Defina cada intención de conocimiento acción en el estado Intent
para pasar a un flujo de datos que utilice la asignación para definir la variable de contexto searchTerm
en el término de búsqueda de la intención. 3) A continuación, realice la transición a un estado que busque en la base de conocimientos el valor searchTerm
.
Descripción de la ilustración KF-assoc-intent-term.png
A continuación, se muestra un ejemplo de un flujo de diálogo en el que hay intenciones individuales para cada respuesta de la base de conocimientos.
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"
Ejemplo: uso de la expresión de usuario como término de búsqueda
En el siguiente ejemplo se muestra cómo definir searchTerm
en la expresión del usuario en una aptitud de diálogo de YAML. Para una aptitud de cuadro de diálogo visual, utilice ${skill.system.nlpresult.value.query}
en su lugar.
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
Utilice el componente System.AgentTransfer
de los asistentes digitales de tipo asistente digital como agente para devolver la conversación al servicio de chat. La conversación se enrutará a un agente activo según las reglas del chat configuradas en el servicio de chat.
En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte Transferencia de agente.
Este componente es para conversaciones que se originan en un chat de servicio, como se describe en El marco del asistente digital como agente en acción. Para conversaciones originadas en la aptitud, utilice System.AgentConversation en su lugar.
A continuación, se muestra un ejemplo del uso de este componente para devolver la conversación al servicio de chat.
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"
Consejo:
En aptitudes con la versión 21.04 y posteriores de la plataforma, los valores por defecto para las propiedadesacceptedMessage
, errorMessage
, rejectedMessage
y waitingMessage
se almacenan en el grupo de recursos de la aptitud. Para cambiar un valor por defecto, abra la página Grupo de recursos de la aptitud, haga clic en 
Propiedad | Descripción | ¿Obligatoria? | |
---|---|---|---|
agentStatusVariable |
Nombre de la variable de contexto de tipo asignación que se utilizará para almacenar la información de estado de disponibilidad del agente. No se almacena información si no se especifica la propiedad. Para hacer referencia a una variable de mapa, utilice una expresión de valor como esta: ${<mapVariableName>.value.<key>} . Por ejemplo, agentStatus.value.expectedWaitMinutes .
Para obtener más información sobre los valores devueltos en esta variable, consulte System.AgentTransferCondition. |
No | |
allowTransferIf |
Especifica las condiciones en las que la aptitud debe transferir la sesión de chat.
Si no se cumplen las condiciones especificadas, se produce la acción |
No | |
customProperties |
Asignación que contiene información para transferir al servicio. Consulte Transferencia de información al servicio. | No | |
errorMessage |
El mensaje que se muestra al usuario cuando se produce un error del sistema al transferir la sesión de chat a un agente. Toma por defecto el valor We were unable to transfer you because there was a system error . Puede establecer la propiedad en una cadena vacía o en blanco para suprimir la salida del mensaje.
|
No | |
maxEngagementsInQueue |
Número máximo permitido de interacciones en espera en la cola de destino. Cuando se envía la solicitud de chat, el servicio de chat responde con el número actual de interacciones en espera en la cola. Si este valor supera maxEngagementsInQueue , se produce la acción rejected . El valor por defecto es -1 , lo que significa que no hay límite de interacciones.
Tenga en cuenta que para Oracle Fusion Service Chat, la respuesta siempre es 0, por lo que esta propiedad no tiene ningún valor para Oracle Fusion Service. |
No | |
maxWaitSeconds |
Número máximo de segundos de espera estimados permitidos. Cuando el servicio de chat recibe la solicitud de transferencia, responde con el tiempo de espera estimado. Si este valor excede maxWaitSeconds , se produce la acción rejected . Esta propiedad se define por defecto en -1 , lo que significa que no hay tiempo de espera máximo. Cuando está definido en -1 , el asistente digital transfiere el usuario a un agente humano, independientemente del tiempo de espera estimado.
Tenga en cuenta que la acción |
No | |
rejectedMessage |
Mensaje que se muestra a los usuarios siempre que se produce una de las siguientes situaciones:
Agent rejected . Puede establecer la propiedad en una cadena vacía o en blanco para suprimir la salida del mensaje.
|
No | |
waitingMessage |
Mensaje que se muestra a los usuarios cuando se transfieren a una cola. Toma como valor por defecto Agent chat session established. Waiting for agent to join . Puede establecer la propiedad en una cadena vacía o en blanco para suprimir la salida del mensaje.
|
No |
Este componente puede devolver las siguientes acciones:
Acción | Descripción |
---|---|
accepted |
La transición accepted se define cuando el chat se transfiere correctamente a una cola.
Tenga en cuenta que, una vez aceptada una solicitud de chat, la conversación debe finalizar con
|
rejected |
La transición rejected se define cuando se produce una de las siguientes situaciones:
|
error |
La transición error se establece cuando hay un error del sistema que impide la transferencia a un agente humano.
|
Ejemplo: transferencia a un agente humano
A continuación, se muestra un ejemplo de un flujo de diálogo que efectúa la transferencia a un agente cuando el cliente pide hablar con un agente:
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"
Ejemplo: transferencia de información al servicio
Al transferir una conversación de un asistente digital a un agente en directo, puede utilizar propiedades personalizadas en el componente System.AgentTransfer
para transferir esta información.
Esta es la estructura de Oracle B2C Service:
customProperties:
- name:
value:
type:
La propiedad type
es necesaria para los campos personalizados; de lo contrario, es opcional.
A continuación, se muestra la estructura de Oracle Fusion Service:
customProperties:
- name:
value:
A continuación, se muestra un ejemplo de configuración customProperties
para 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"
Consejo:
Para Oracle Fusion Service, la evaluación de reglas se detiene en la primera regla donde se cumplan todas las condiciones. Al configurar las reglas, asegúrese de que la conversación transferida no se enrute de vuelta al agente del asistente digital. En el ejemplo dedoTransfer
, la propiedad personalizada TriagedByODA_c
se define en Y
y las reglas pueden utilizar esta propiedad personalizada para garantizar que, cuando se define en Y
, la conversación no se enrute al agente del asistente digital. (Para Oracle B2C Service, la configuración Estado de transición y parada determina el enrutamiento).
System.AgentTransferCondition
Puede utilizar el componente System.AgentTransferCondition
de los asistentes digitales DA-as-agent para determinar si los agentes están disponibles y, si es así, el tiempo de espera esperado.
En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte Condición de transferencia de agente.
Las propiedades del componente se utilizan para especificar las condiciones de transferencia y devuelve una acción que indica si se han cumplido las condiciones. Además, define los valores de la variable de asignación de contexto con nombre de la siguiente manera:
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.
A continuación, se muestra un ejemplo del uso de este componente para averiguar si hay agentes disponibles, informar del tiempo de espera y permitir a los usuarios cancelar la solicitud de transferencia si no desean esperar tanto tiempo.
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"
Consejo:
A continuación, se muestra una definición de grupo de recursos sugerida que puede utilizar para mostrar el tiempo de espera esperado: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?
Propiedad | Descripción | ¿Obligatoria? | |
---|---|---|---|
agentStatusVariable |
Nombre de la variable de contexto de tipo asignación que se utilizará para almacenar la información de estado de disponibilidad del agente. No se almacena información si no se especifica la propiedad. Para hacer referencia a una variable de mapa, utilice una expresión de valor como esta: ${<mapVariableName>.value.<key>} . Por ejemplo, agentStatus.value.expectedWaitMinutes .
|
No | |
allowTransferIf |
Especifica el juego base de condiciones que se deben cumplir.
Si no se cumplen las condiciones especificadas, se produce la acción |
No | |
customProperties |
Asignación que contiene información para transferir al servicio. Consulte Transferencia de información al servicio. Esta propiedad está soportada en la versión 21.04 y posteriores. | No | |
errorMessage |
Mensaje que se muestra al usuario cuando Digital Assistant tiene problemas con el servicio de chat de agente. Toma por defecto el valor We were unable to check the agent transfer conditions because there was a system error. Esta cadena predeterminada se almacena en el grupo de recursos de configuración en la clave systemComponent_AgentTransferCondition_errorMessage. Puede establecer la propiedad en una cadena vacía o en blanco para suprimir la salida del mensaje.
|
No | |
maxEngagementsInQueue |
Número máximo permitido de interacciones en espera en la cola de destino. Cuando se envía la solicitud, el servicio de chat responde con el número actual de interacciones en espera en la cola. Si este valor supera maxEngagementsInQueue , se produce la acción conditionsNotMet . El valor por defecto es -1 , lo que significa que no hay límite de interacciones.
|
No | |
maxWaitSeconds |
Número máximo de segundos de espera estimados permitidos. Cuando el servicio de chat recibe la solicitud, responde con el tiempo de espera estimado. Si este valor excede maxWaitSeconds , se produce la acción conditionsNotMet . Esta propiedad se define por defecto en -1 , lo que significa que no hay tiempo de espera máximo.
Tenga en cuenta que la acción |
No |
Este componente puede devolver las siguientes acciones:
Acción | Descripción |
---|---|
conditionsMet |
La transición conditionsMet se define cuando se encuentra dentro del horario laboral y se cumplen las condiciones maxWaitSeconds , maxEngagementsInQueue y allowTransferIf .
|
conditionsNotMet |
La transición conditionsNotMet se define cuando se produce una de las siguientes situaciones:
|
error |
La transición error se define cuando hay un problema con la conexión al servicio de chat de agente durante la comprobación de condiciones del agente.
|
Ejemplo: obtención de disponibilidad de agente y tiempo de espera
A continuación, se muestra un ejemplo de un flujo de diálogo que llama al componente, muestra el tiempo de espera y ofrece al usuario la oportunidad de cancelar su solicitud de transferencia.
############################
# 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"
El estado askIfWillWait
utiliza una entrada de grupo de recursos para formar el mensaje de tiempo de espera, de modo que el mensaje tenga sentido si el tiempo es más o menos de un minuto y si un número es 0, uno o más.
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?
Tenga en cuenta que en este ejemplo se utiliza System.SetCustomMetrics para realizar un seguimiento de si los agentes estaban disponibles y, si es así, cuántos usuarios optaron por esperar y cuántos cancelaron la solicitud de transferencia.
Componentes de transferencia a agente en directo
System.AgentInitiation
Si desea transferir una conversación de aptitud a un agente de Oracle B2C Service, agregue este componente al flujo de diálogo para iniciar el establecimiento de comunicación con el canal de integración de agente especificado por la propiedad agentChannel
. Debe llamar a este componente antes de llamar al componente System.AgentConversation
.
Este componente es para conversaciones originadas en la aptitud. No utilice este componente para conversaciones originadas en el chat de Oracle B2C Service, como se describe en El marco del asistente digital como agente en acción.
A continuación, se muestra un ejemplo del uso de este componente para iniciar el establecimiento de comunicación con la instancia de Oracle B2C Service definida por el canal de integración del agente denominado 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"
Consejo:
En aptitudes con la versión 21.04 y posteriores de la plataforma, los valores por defecto para las propiedadesagentActionsMessage
, errorMessage
, rejectedMessage
, resumedMessage
y waitingMessage
se almacenan en el grupo de recursos de la aptitud. Para cambiar un valor por defecto, abra la página Grupo de recursos de la aptitud, haga clic en 
Propiedad | Descripción | ¿Obligatoria? | |
---|---|---|---|
agentActions |
Lista de acciones que el agente puede disparar para finalizar el chat y mover el flujo al estado definido para la acción de transición. En la consola del representante de servicios al cliente, estas acciones se muestran como comandos barra cuando se inicia la conversación del agente, como se muestra en este ejemplo:
Los nombres de acción deben corresponderse con las propiedades
Puede definir los elementos de la lista
|
No | |
agentActionsMessage |
Si se establece la propiedad agentActions , la consola del agente muestra este valor en lugar del mensaje por defecto. Por ejemplo:
|
No | |
agentChannel |
Asigna un nombre al canal de integración de agente. Este valor, el nombre del canal de integración de agente y la propiedad agentChannel definida para el componente System.AgentConversation deben coincidir.
|
Sí | |
allowTransferIf |
Especifica las condiciones en las que la aptitud debe transferir la sesión de chat. El componente utiliza el valor queueId para identificar la cola de la que se obtienen las estadísticas. Debe verificar que las reglas de chat realmente transferirán la conversación a la cola identificada, y no a otra cola.
Si la condición especificada no se cumple, el componente devuelve Al incluir esta propiedad, también debe incluir la propiedad Esta propiedad solo está disponible en instancias de Oracle Digital Assistant aprovisionadas en Oracle Cloud Infrastructure (a veces denominada infraestructura en la nube de 2ª generación). |
No | |
chatResponseVariable |
Asigna un nombre a la variable de asignación que contiene la información de respuesta del agente. Después de conectar correctamente el componente System.AgentInitiation , la asignación contiene las siguientes propiedades:
|
No | |
customProperties |
Asignación que contiene el ID del incidente, la interfaz, el contacto o los campos personalizados (o una combinación de ellos) para transferir al servicio. Para hacer referencia a una variable de mapa, utilice una expresión de valor como esta: ${mapVariableName.value} . Consulte Transferencia de la información del cliente a un chat en directo.
|
No | |
errorMessage |
Mensaje que se muestra cuando hay un problema al establecer una conexión con Oracle B2C Service. Por ejemplo, la contraseña del canal de integración de agente ya no es válida o hay un problema con el servidor. | No | |
nlpResultVariable |
Variable que almacena el mensaje de consulta del cliente. | No | |
rejectedMessage |
Mensaje que se muestra si se rechaza el establecimiento de comunicación de AgentInitiation , por ejemplo, si está fuera de las horas operativas configuradas. Por ejemplo:
|
No | |
resumedMessage |
Mensaje (como, por ejemplo, Un momento, vamos a pasarle con un agente.) que se muestra cuando el chat del cliente con el representante de servicios al cliente se reanuda. La agregación de esta propiedad impide que los clientes cuyas solicitudes ya se han puesto en cola reciban un mensaje equívoco, como Se va a reanudar el chat con el agente, cuando solicitan repetidamente un chat en directo. | No | |
subject |
La línea de asunto que se muestra en la consola del agente después de la entrega a la plataforma del agente. Por defecto, este es el último mensaje de cliente almacenado en la propiedad nlpResultVariable , pero también se puede definir con una variable que se haya establecido anteriormente en la definición del flujo de diálogo. Por ejemplo, puede definir una variable de contexto de tipo string cuyo valor se defina antes que el componente System.AgentInitiation :
|
No | |
queueId |
ID de la cola que debe utilizar el componente para determinar si se cumple la condición allowTransferIf especificada. Debe ser el ID de la cola a la que las reglas de chat de Oracle B2C Service enrutarán esa conversación.
Esta propiedad se ignora si la propiedad |
Se requiere cuando la propiedad allowTransferIf está presente.
|
|
transcriptDateTimeFormat |
Formato de la fecha y hora de los mensajes de transcripción de conversación enviados al agente. Consulte la clase Java DateTimeFormatter para conocer los patrones válidos. Ejemplo: dd/MM/yyyy HH:mm . El valor por defecto es yyyy-mmm-ddThh:mm:ssZ .
|
No | |
transcriptTimezoneName |
Nombre de la autoridad de números asignados de Internet (IANA) de la zona horaria que se debe utilizar para dar formato a la transcripción de conversación mediante la propiedad transcriptDateTimeFormat . Ejemplo: America/Sao_Paulo . El valor por defecto es Europe/London . Si no incluye la propiedad transcriptDateTimeFormat , esta propiedad se ignora.
|
No | |
waitingMessage |
Mensaje que se muestra mientras los clientes esperan a conectarse a un agente. Por ejemplo:
|
No |
System.AgentInitiation Transiciones
System.AgentInitiation
devuelve las acciones accepted
, rejected
y error
. Cada una de estas acciones puede apuntar a un estado diferente, si bien la acción accepted
suele asignar un nombre al estado del componente System.AgentConversation
: agentInitiation:
component: "System.AgentInitiation"
properties:
agentChannel: "ServiceCloudIntegration"
...
transitions:
actions:
accepted: "agentConversation"
rejected: "noAgentsAvailable"
error: "handshakeError"
Acción | Descripción |
---|---|
accepted |
El establecimiento de comunicación se ha realizado correctamente y el estado puede realizar la transición al estado con el componente System.AgentConversation .
|
error |
Se ha producido un problema al establecer una conexión con Oracle B2C Service. Por ejemplo, la contraseña del canal de integración de agente ya no es válida o hay un problema con el servidor de Service Cloud. |
rejected |
Oracle B2C Service ha rechazado la solicitud de conexión. Algunos de los motivos para rechazar una solicitud de conexión son:
Tenga en cuenta que si no define |
Ejemplo: manejo del rechazo de inicio de agente y de los errores del sistema
A continuación se muestra un ejemplo de gestión de errores del sistema y las acciones error
y 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"
Ejemplo: propiedad 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}"
Ejemplo: objeto customerInformation estándar
En este ejemplo se define 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}"
Ejemplo: objeto customerInformation heredado
En este ejemplo, se definen interfaceID
y contactID
.
Consejo:
Puesto que WSDL especifica queinterfaceID
es de tipo NamedID
, podríamos haber utilizado name: "myInterfaceName"
en lugar 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}"
Ejemplo: objeto customFields estándar
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}"
Ejemplo: objeto customFields heredado
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}"
Ejemplo: ensamblaje del objeto de propiedades personalizadas
En estos pasos se describe cómo puede declarar el objeto customProperties
y definir sus distintos valores.
Paso 1: declaración de la variable de propiedades personalizadas
customProperties
en el componente System.AgentInitiation
. Es un objeto JSON que puede contener la información del cliente de chat y los valores de campo personalizado. En el siguiente ejemplo, esta variable se declara como liveChatInfo
:context:
variables:
size: "PizzaSize"
type: "PizzaType"
crust: "PizzaCrust"
iResult: "nlpresult"
interfaceId: "string"
categoryId: "string"
skillType: "string"
liveChatInfo: "map"
Paso 2: definición de los valores de la variable de asignación customProperties
customProperties
en el componente System.AgentInitiation
. Es un objeto JSON que puede contener la información del cliente de chat y los valores de campo personalizado. En el siguiente ejemplo, esta variable se declara como liveChatInfo
:context:
variables:
size: "PizzaSize"
type: "PizzaType"
crust: "PizzaCrust"
iResult: "nlpresult"
interfaceId: "string"
categoryId: "string"
skillType: "string"
liveChatInfo: "map"
Paso 3: definición de los campos para la variable de asignación customProperties
setLiveChatInfo:
component: "System.SetVariable"
properties:
variable: "liveChatInfo"
value:
customerInformation:
categoryID:
id: "${categoryId}"
customFields:
- name: "c$skilltype"
type: "STRING"
value: "${skillType}"
transitions:
next: "agentInitiation"
Paso 4: adición de customProperties al componente System.AgentInitiation
customProperties
al componente System.AgentInitiation
y defínala utilizando una expresión que acceda al valor de la variable de asignación. 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
Utilice este componente para transferir la conversación de una aptitud a un agente activo de Oracle B2C Service y para gestionar el intercambio entre el agente activo y la aptitud. Tenga en cuenta que debe llamar al componente System.AgentInitiation
para poder utilizar este componente.
System.AgentConversation
está orientado a conversaciones originadas en la aptitud. No utilice este componente para conversaciones originadas en el chat de Oracle B2C Service, como se describe en El marco del asistente digital como agente en acción.
A continuación, se muestra un ejemplo del uso de este componente para transferir la conversación a la instancia de Oracle B2C Service definida por el canal de integración de agente denominado 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"
Propiedad | Descripción | ¿Obligatoria? |
---|---|---|
agentChannel |
Asigna un nombre al canal de integración de agente. Este valor, el nombre del canal de integración de agente y la propiedad agentChannel definida para el componente System.AgentInitiation deben coincidir.
|
Sí |
conclusionMessage |
Mensaje automatizado enviado al cliente cuando el usuario introduce una palabra clave de salida, se dispara la acción agentLeft o el agente termina la conversación sin enviar una de las agentActions . Por ejemplo, Your chat with the agent has ended .
|
No |
errorMessage |
Mensaje que muestra el chat si hay un problema con la conexión a Oracle B2C Service.
El mensaje por defecto es Esta propiedad solo funciona con instancias de Oracle Digital Assistant aprovisionadas en Oracle Cloud Infrastructure (a veces denominadas infraestructura en la nube de 2ª generación). |
No |
exitKeywords |
Lista delimitada por comas de palabras de salida típicas utilizadas por un cliente para finalizar la conversación con el agente en directo. Por ejemplo:
El valor por defecto de la propiedad es |
No |
expiryMessage |
Mensaje que aparece cuando se dispara la acción expired . El mensaje por defecto es Chat session expired. Thanks for chatting with us .
Tenga en cuenta que El mensaje de caducidad no se muestra cuando finaliza la conversación porque se ha superado el valor |
No |
nlpResultVariable |
Variable nlpResultVariable que contiene el mensaje de consulta del cliente.
|
No |
waitExpiryMessage |
Mensaje que se muestra al usuario cuando el chat caduca mientras espera a un agente. El mensaje por defecto es The request for live chat expired while waiting for an agent. |
No |
waitMessage |
Por defecto, una vez iniciada la transferencia de conversación, la aptitud muestra el mensaje de espera que le envía el servicio de chat en directo, como la posición en la cola y el tiempo de espera. Utilice esta propiedad para personalizar el mensaje. Por ejemplo:
|
No |
System.AgentConversation Transiciones
System.AgentConversation
puede disparar las acciones expired
, agentLeft
, error
o waitExpired
. Además, puede disparar cualquier acción desde la propiedad agentActions
del componente System.AgentInitiation
. También debe agregar una transición next
, ya que un cliente puede introducir uno de los valores exitKeywords
para dejar el chat antes de que se dispare cualquiera de estas acciones.
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"
...
Acción | Descripción |
---|---|
agentActions |
Si el componente System.AgentInitiation tiene una propiedad agentActions , este componente debe contener una acción de transición para cada acción admitida especificada por agentActions .
|
agentLeft |
El agente terminó la sesión sin utilizar una acción de barra diagonal (por ejemplo, /Order). Como alternativa, la sesión ha terminado porque no se ha producido ninguna actividad en el tiempo especificado por la configuración de CS_IDLE_TIMEOUT de Oracle B2C Service y dicha configuración es menor que el valor de Vencimiento de la sesión para el canal de integración de agente. Consulte la acción expired para obtener más información.
Tenga en cuenta que no se devuelve esta acción si el usuario abandona la conversación mediante la introducción de una palabra clave de salida. En ese caso, el flujo pasa al estado nombrado por la transición |
error |
Se ha producido un problema al conectarse al servicio de agente en vivo. Esta acción solo funciona con instancias de Oracle Digital Assistant aprovisionadas en Oracle Cloud Infrastructure (a veces denominada infraestructura en la nube de 2ª generación). |
expired |
Si Oracle B2C Service Por defecto, el valor de La acción Para ver o cambiar la configuración de la instancia de Oracle B2C Service, abra la consola de escritorio, haga clic en Navegación, haga clic en la primera opción Configuración del menú y haga clic en Configuración. A continuación, busque la configuración en la carpeta Chat. |
waitExpired |
La solicitud de chat ha caducado mientras se esperaba un agente. Esto ocurre cuando el tiempo de espera supera el valor de la opción USER_WAIT_QUEUE_TIMEOUT del cliente de chat.
|
Ejemplo: configurar el flujo de diálogo de transferencia al agente
En este ejemplo, la intención GetAgent
se ha entrenado para comprender llamadas de auxilio, como ¡ayuda, por favor!
intent:
component: "System.Intent"
properties:
variable: "iResult"
transitions:
actions:
OrderPizza: "resolvesize"
CancelPizza: "cancelorder"
GetAgent: "agentInitiation"
unresolvedIntent: "agentInitiation"
A continuación se muestran los pasos básicos para configurar el flujo de diálogo:
-
Inicie la transferencia al agente en vivo:
-
Agregue un estado para el componente
System.AgentInitiation
. -
Defina la propiedad
agentChannel
en el nombre del canal de integración de agente que haya configurado para el sistema del agente en vivo.
Después de que el canal de integración de agente establezca una conexión y Oracle B2C Service envíe la solicitud de chat a su cola (es decir, después de crear un ticket de ayuda), el componenteSystem.AgentInitiation
permite la transición al estado siguiente, que se define normalmente para el componenteSystem.AgentConversation
(agentConversation
en el siguiente ejemplo).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"
Consejo:
Los clientes pueden solicitar de forma repetida un chat en directo, aunque sus solicitudes ya se hayan puesto en cola en la consola de chat del agente. Agregue una propiedadresumedMessage
al estadoSystem.AgentInitiation
para evitar que dichos clientes reciban el mensaje equívoco Se va a reanudar el chat con el agente. -
-
Agregue y configure el componente
System.AgentConversation
. Mientras el motor de diálogo tiene el estado definido para este componente, la aptitud transfiere los mensajes del cliente al agente y viceversa. La aptitud escucha las palabras clave de salida de la entrada del usuario, comoadiós
. Cuando la aptitud detecta una de estas palabras clave, el componenteSystem.AgentConversation
termina la sesión de chat en directo y dispara la transiciónnext
.Ejemplo:
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"
Ejemplo: obtención de información de encuesta
En el siguiente ejemplo, que utiliza el formato estándar, el componente AgentConversation
genera un enlace a una encuesta una vez finalizada la conversación del agente. El enlace incluye los ID de sesión y de interacción de la asignación especificada por la propiedad 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"
Ejemplo: transferencia del chat a una cola específica de Oracle B2C Service
-
Si aún no lo ha hecho, en el nodo context, defina una variable de asignación para utilizarla con la propiedad
customProperties
del componenteSystem.AgentInitiation
. Por ejemplo:context: variables: greeting: "string" name: "string" liveChatInfo: "map"
-
Defina los campos para la variable de asignación.
Este es un ejemplo del formato estándar para los canales de integración de agente que se crearon en la versión 20.01 o posterior y que se conectan a la versión 19A o posterior de Oracle B2C Service.
setLiveChatInfo: component: "System.SetVariable" properties: variable: "liveChatInfo" value: customFields: - name: "c$frombot" type: "BOOLEAN" value: 1 transitions: next: "agentInitiation"
Este es un ejemplo del formato heredado para los canales de integración de agente que se crearon antes de la versión 20.01 o que se conectaron a una versión anterior a la versión 19A de Oracle B2C Service.
setLiveChatInfo: component: "System.SetVariable" properties: variable: "liveChatInfo" value: customFields: - name: "c$frombot" dataType: "BOOLEAN" dataValue: booleanValue: true transitions: next: "agentInitiation"
-
Agregue la propiedad
customProperties
al componenteSystem.AgentInitiation
y establézcala en el valor de la variable de asignación. Por ejemplo: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
En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte Resolver entidad.
Itera a través de todos los campos de entidad de la bolsa compuesta, dialoga con el usuario y resuelve todos los campos. El componente selecciona aleatoriamente las peticiones de datos que se proporcionan para cada entidad al resolver dicha entidad.
Propiedad | Descripción | Obligatoria | |
---|---|---|---|
variable |
Hace referencia a la variable de contexto de la entidad de bolsa compuesta que este componente rellena. Si todas las entidades secundarias de la variable de entidad compuesta ya tienen un valor, el flujo de diálogo pasa al estado siguiente sin enviar un mensaje al usuario. | Sí | |
nlpResultVariable |
Rellena la propiedad variable (que hace referencia a la variable de entidad de bolsa compuesta) con los valores almacenados en la variable de contexto nlpresult . Puede definir esta propiedad designando la variable nlpresult (normalmente, iResult ). Cuando el marco resuelve una única entidad secundaria, la propiedad variable se rellena solo con dicho valor de entidad. Cuando la variable nlpresult incluye valores para todas las entidades secundarias, el flujo de diálogo pasa al estado siguiente. Puede utilizar esta propiedad en lugar de los estados SetVariable que rellenan los valores de la entidad secundaria.
|
No | |
maxPrompts |
Especifica el número de intentos asignados al usuario para introducir un valor válido que coincida con el tipo de entidad secundaria. Si se supera el número máximo de intentos para la primera entidad secundaria, esta propiedad se restablece en 0 y el bot genera la petición de datos para la siguiente entidad secundaria. Como se describe en Creación de una entidad de bolsa compuesta, las entidades individuales de la bolsa compuesta pueden sustituir este valor cuando se define la opción Máximo de intentos de entrada de usuario. | No | |
autoNumberPostbackActions |
Cuando se establece en true , esta opción prefija números a las opciones. Aunque esta opción no se defina en true , la numeración automática se puede aplicar a elementos de lista cuando la configuración de Activar numeración automática en acciones de devolución del asistente digital está definida en true . La numeración automática específica del canal se puede aplicar a cualquier bot de aptitud registrado en un asistente digital:
|
No | |
useFullEntityMatches |
Cuando se define en true , los valores de entidad personalizados se almacenan como objetos JSON (similar a los valores de entidad incorporados). Esto le permite crear expresiones para acceder a propiedades como value , primaryLanguageValue y originalString , que son especialmente importantes para las aptitudes que actualmente o eventualmente pueden convertirse en multilingües.
|
||
footerText |
Mejora la salida en canales de solo texto. Como se describe en Pies de página, puede utilizar expresiones de FreeMarker para condicionar el texto del pie de página en los canales de solo texto. | No | |
headerText |
Mensaje que se muestra antes de que el componente solicite al usuario el siguiente elemento de la bolsa. Puede utilizar esta cabecera para proporcionar comentarios sobre las entidades anteriores de la bolsa que se hayan pareado (o se hayan actualizado).
|
No | |
transitionAfterMatch |
Valor booleano que, al definirlo en true , activa una transición temporal desde el proceso de paridad de la entidad realizada por este componente a un componente personalizado. Por defecto, se define en false . Esta propiedad se ignorará (y la transición match no se disparará) si ha registrado un manejador de eventos de entidades.
|
No | |
cancelPolicy |
Determina la temporización de la transición cancel :
maxPromptsReached de nivel de evento o elemento. |
No |
Componentes de calendario
Utilice estos componentes de calendario para interactuar con los calendarios de Outlook y Google:
-
System.CreateCalendarEvent: crear un evento
-
System.DeleteCalendarEvent: cancelar un evento
-
System.GetCalendarEventDetails: obtener detalles sobre un evento
-
System.ListCalendarEvents: obtener datos para un juego de eventos filtrado
-
System.SelectCalendarEvent: seleccionar un evento de una lista filtrada
-
System.SendInviteResponse: cambiar el estado de respuesta de un evento
-
System.UpdateCalendarEvent: cambiar un evento
Autorización de calendario
Para activar la interacción entre una aptitud y un proveedor de calendario, debe configurar un servicio y modificar el flujo de diálogo y la aptitud para que el usuario pueda iniciar sesión en su calendario a través de ese servicio.
Antes de utilizar cualquier componente de calendario, debe registrar una aplicación en el proveedor de calendario y crear un servicio de código de autorización. Consulte estos temas para saber cómo:
-
Registro de una aplicación con autorización de Google OAuth2
-
Registro de una aplicación con la plataforma de identidad de Microsoft
En el flujo de diálogo, utilice el componente System.OAuth2AccountLink
para solicitar al usuario que inicie sesión en su calendario mediante el servicio de código de autorización que ha creado. Tenga en cuenta que no puede definir la propiedad enableSingleSignOn
del componente en true
cuando utiliza el componente para la autorización de componentes de calendario.
Puede aprovechar la función "necesita autorización" para garantizar automáticamente que el usuario ha iniciado sesión (obtenido un token de acceso) antes de llamar a cualquier componente de calendario. Esta función solo solicita al usuario que inicie sesión si aún no tiene un token de acceso o si ha caducado y no se puede refrescar. Puede utilizar la configuración Necesita autorización de la aptitud para definir el valor por defecto para toda la aptitud y, a continuación, utilizar el valor requiresAuthorization
de nivel de estado para sustituir el valor por defecto. Es decir, utilice la configuración de aptitud para definir el valor por defecto y, a continuación, incluya solo la configuración requiresAuthorization
del componente en los estados para los que no se aplica el valor por defecto.
Para utilizar la función "necesita autorización", debe agregar una acción system.authorizeUser
al nodo defaultTransitions
para asignar un nombre al estado que inicia el flujo de autorización. Por ejemplo:
defaultTransitions:
error: "globalErrorHandler"
actions:
system.authorizeUser: "userAuthN.performOAuth"
Antes de que una aptitud pase a un estado que requiere autorización, comprueba si hay un token de acceso válido para el servicio de calendario. En caso contrario, realiza las siguientes acciones:
-
Llama al estado que ha definido para la acción
system.authorizedUser
en el nododefaultTransitions
. -
Solicita al usuario que inicie sesión.
-
Pasa al estado que requiere autorización (es decir, el estado definido por
${system.requestedState}
).
A continuación, se muestra un ejemplo de flujo de diálogo de autorización:
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"
Para una aptitud que se centra principalmente en los componentes de calendario, plantéese definir la configuración Necesita autorización de la aptitud en true
y, a continuación, defina el valor en false solo para aquellos estados que no requieren autorización. En este ejemplo, cualquier usuario puede ejecutar los estados initTimezoneOffset
e intent
. Por lo tanto, requiresAuthorization
se define en false
para esos estados. Los estados que funcionan con los componentes de calendario no necesitan incluir requiresAuthorization
porque el valor por defecto es 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"
Trabajar con fechas y horas de calendario
Al trabajar con los componentes del calendario, es importante comprender la relación entre las horas de inicio y finalización del calendario, las entidades DATE y TIME y la zona horaria local.
Cuando crea, actualiza o recupera eventos, utiliza la fecha y hora local para los valores start
y end
, y utiliza la propiedad timezoneOffset
o timezone
para indicar al componente cómo calcular la hora universal (UTC).
El valor timezoneOffset
de los componentes del calendario es diferente de profile.timezoneOffset
. Para los componentes de calendario, timezoneOffset
es el valor que el componente debe agregar a los valores start
y end
para obtener la UTC. Puede obtener el valor de la propiedad timezoneOffset
de un componente de calendario multiplicando profile.timezoneOffset
por -1.
Es posible que profile.timezoneOffset
no siempre esté disponible. Esto depende de si el cliente ha proporcionado el desfase. Por ejemplo, alguien podría crear una aplicación de Oracle Web que no defina profile.timezoneOffset
. Por lo tanto, es una buena idea crear una zona horaria por defecto para los casos en los que no se ha definido profile.timezoneOffset
. Por ejemplo:
initTimezoneOffset:
requiresAuthorization: false
component: "System.SetVariable"
properties:
variable: "timezoneOffset"
value: <#attempt>${profile.timezoneOffset}<#recover>${system.config.defaultTimezoneOffset}</#attempt>
transitions:
next: "intent
Al recuperar un evento, el componente devuelve los valores de fecha y hora en formato UTC. Por ejemplo: 2021-04-15T22:00:00.000Z
. La aptitud debe convertir el valor en la hora local.
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"
Al utilizar las entidades DATE y TIME, hay que tener en cuenta lo siguiente:
-
Si utiliza una bolsa compuesta que tenga una entidad DATE y una o varias entidades TIME, debe desactivar Extracción en secuencia incorrecta. De lo contrario, cuando se resuelvan las entidades, no tendrá control sobre qué valores se resuelven en la entidad DATE y cuáles se resuelven en la entidad TIME (o en ambas). Por ejemplo, cuando se resuelve el valor de TIME, puede cambiar el valor de la entidad DATE.
-
Cuando una expresión contiene texto como "ayer", "hoy" o "mañana", el analizador no tiene en cuenta la zona horaria local. Por lo tanto, es posible que, al comienzo de la mañana y al final de la tarde, se utilice la fecha incorrecta. Por ese motivo, es buena idea recuperar la fecha de resolución para que el usuario pueda verificarla antes de que la aptitud agregue un evento o actualice la hora de inicio o finalización de un evento.
-
Para definir los valores de las propiedades
start
yend
de un calendario, debe utilizar la fecha de la entidad DATE y la hora de la entidad TIME. Por ejemplo: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']}"
Gestión de errores de calendario
El proveedor del calendario puede rechazar una solicitud de evento. Por ejemplo, podría devolver un error si el usuario intenta crear un evento que tenga una hora de finalización anterior a la hora de inicio. En la mayoría de los casos, el proveedor del calendario devuelve un error 400, que, a su vez, transfiere la aptitud al manejador de errores globales.
Plantéese validar los valores para evitar que se produzcan estos errores. A continuación, se muestran ejemplos de validaciones de entidad de bolsa compuesta:
-
Entidad DATE: para reuniones nuevas y actualizadas, valide que la fecha sea igual o posterior a la fecha actual.
${(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')}
-
Entidad TIME: para reuniones nuevas y actualizadas, verifique que la fecha y la hora de inicio sean iguales o posteriores a la fecha y hora actuales.
${(((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')}
Para todas las horas de finalización, verifique que la hora de finalización sea posterior a la hora de inicio.
${(newEvent.value.startTime.date?number_to_time < newEvent.value.endTime.date?number_to_time)?then('true','false')}
Para manejar los rechazos del proveedor del calendario correctamente, agregue su propio manejador de errores globales. Por ejemplo:
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"
También puede utilizar la transición de errores para crear manejadores de errores adecuados para cada caso:
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
Utilice este componente para agregar un evento a un calendario de Outlook o Google. Tenga en cuenta que no puede crear eventos recurrentes o de todo el día.
El usuario debe iniciar sesión en el proveedor de calendario para acceder a este componente. Puede utilizar la función "necesita autorización" para gestionar el inicio de sesión de usuario, como se describe en Autorización de calendario.
Para obtener más información sobre cómo definir los valores start
y end
, consulte Trabajar con fechas y horas del calendario.
A continuación se muestra un ejemplo de cómo usar este componente. En este ejemplo, se utiliza una entidad de bolsa compuesta para obtener la fecha, las horas de inicio y finalización, el asunto, la ubicación y los asistentes.
####################
# 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"
...
Este componente está soportado en la versión 21.02 y posteriores de Oracle Digital Assistant.
Propiedad | Descripción | ¿Obligatoria? |
---|---|---|
provider |
Proveedor de calendario. Los valores permitidos son Google y Outlook .
|
Sí |
calendarOwner |
ID de usuario del responsable del calendario. Debe ser un ID de cuenta válido para el proveedor de calendario, como el valor de la variable identificado por la propiedad authenticatedUserVariable del componente System.OAuth2AccountLink , que se define cuando el usuario se autentica.
|
Sí |
calendarId |
Nombre del calendario. Para el calendario por defecto del usuario, defínalo en el mismo valor que la propiedad calendarOwner .
|
Sí |
credential |
Token de acceso del proveedor. Este es el valor de la variable que se identifica mediante la propiedad accessTokenVariableName del componente System.OAuth2AccountLink , que se define cuando el usuario se autentica.
|
Sí |
start |
Fecha y hora de inicio de la reunión con el formato yyyy-MM-dd'T'HH:mm:ss Por ejemplo, 2021-02-26T09:55:00 .
|
Sí |
end |
Fecha y hora de finalización de la reunión con el formato yyyy-MM-dd'T'HH:mm:ss . Por ejemplo, 2021-02-26T09:55:00 .
|
Sí |
subject |
Tema de la reunión. | Sí |
attendees |
Lista de asistentes separada por comas. Tenga en cuenta que el proveedor de calendario no puede enviar una notificación a un asistente si el ID no es un ID de cuenta válido para ese proveedor. | Sí |
timezoneOffset |
Cantidad de tiempo, en milisegundos, que se agrega a la hora universal (UTC) para obtener la hora estándar en la zona horaria del usuario. Por ejemplo, si la zona horaria local es UTC-2, el valor de timezoneOffset es -7200000 . El valor por defecto es 0.
Nota
Puede derivar la propiedad timezoneOffset para el usuario actual según el valor de la variable de contexto de usuario profile.timezoneOffset . Sin embargo, si lo hace, debe multiplicar profile.timezoneOffset por -1.
Puede especificar |
No |
timezone |
ID de zona horaria local identificado por https://www.iana.org/time-zones. También se denomina nombre de base de datos TZ. Por ejemplo: |
No |
System.DeleteCalendarEvent
Utilice este componente para suprimir un evento de un calendario de Outlook o Google. Tenga en cuenta que no puede suprimir eventos recurrentes o de todo el día.
El usuario debe iniciar sesión en el proveedor de calendario para acceder a este componente. Puede utilizar la función "necesita autorización" para gestionar el inicio de sesión de usuario, como se describe en Autorización de calendario.
A continuación se muestra un ejemplo de cómo usar este componente.
####################
# 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"
...
Este componente está soportado en la versión 21.02 y posteriores de Oracle Digital Assistant.
Propiedad | Descripción | ¿Obligatoria? |
---|---|---|
provider |
Proveedor de calendario. Los valores permitidos son Google y Outlook .
|
Sí |
calendarOwner |
ID de usuario del responsable del calendario. Debe ser un ID de cuenta válido para el proveedor de calendario, como el valor de la variable identificado por la propiedad authenticatedUserVariable del componente System.OAuth2AccountLink , que se define cuando el usuario se autentica.
|
Sí |
calendarId |
Nombre del calendario. Para el calendario por defecto del usuario, defínalo en el mismo valor que la propiedad calendarOwner .
|
Sí |
credential |
Token de acceso del proveedor. Este es el valor de la variable que se identifica mediante la propiedad accessTokenVariableName del componente System.OAuth2AccountLink , que se define cuando el usuario se autentica.
|
Sí |
eventId |
ID del evento que se va a suprimir. Puede utilizar System.ListCalendarEvents o System.SelectCalendarEvent para obtener un eventId .
|
Sí |
System.GetCalendarEventDetails
Utilice este componente para obtener los detalles de un evento de un calendario de Outlook o Google.
El usuario debe iniciar sesión en el proveedor de calendario para acceder a este componente. Puede utilizar la función "necesita autorización" para gestionar el inicio de sesión de usuario, como se describe en Autorización de calendario.
Los detalles se devuelven en la variable especificada por la propiedad eventDetailsVariableName
en el siguiente formato JSON:
{
"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
}
Las propiedades start
y end
son valores UTC. Para obtener más información sobre cómo convertir los valores start
y end
en la hora local, consulte Trabajar con fechas y horas de calendario.
A continuación se muestra un ejemplo de cómo usar este componente.
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"
Este componente está soportado en la versión 21.02 y posteriores de Oracle Digital Assistant.
Propiedad | Descripción | ¿Obligatoria? |
---|---|---|
provider |
Proveedor de calendario. Los valores permitidos son Google y Outlook .
|
Sí |
calendarOwner |
ID de usuario del responsable del calendario. Debe ser un ID de cuenta válido para el proveedor de calendario, como el valor de la variable identificado por la propiedad authenticatedUserVariable del componente System.OAuth2AccountLink , que se define cuando el usuario se autentica.
|
Sí |
calendarId |
Nombre del calendario. Para el calendario por defecto del usuario, defínalo en el mismo valor que la propiedad calendarOwner .
|
Sí |
credential |
Token de acceso del proveedor. Este es el valor de la variable que se identifica mediante la propiedad accessTokenVariableName del componente System.OAuth2AccountLink , que se define cuando el usuario se autentica.
|
Sí |
eventId |
ID del evento que se va a recuperar. Puede utilizar System.ListCalendarEvents o System.SelectCalendarEvent para obtener un eventId .
|
Sí |
eventDetailsVariableName |
Nombre de la variable de contexto en la que se almacenan los detalles. | Sí |
System.ListCalendarEvents
Utilice este componente para obtener una matriz de eventos de Outlook o Google para un responsable de calendario con nombre. Puede filtrar la lista por estos atributos:
- El evento se puede suprimir
- El evento se puede actualizar
- Se ha invitado al usuario al evento
- Cómo ha respondido el usuario a una invitación
- El evento incluye uno o varios asistentes con nombre
- La reunión comienza después de una fecha y hora
- La reunión finaliza antes de una fecha y hora
El usuario debe iniciar sesión en el proveedor de calendario para acceder a este componente. Puede utilizar la función "necesita autorización" para gestionar el inicio de sesión de usuario, como se describe en Autorización de calendario.
La lista se devuelve en la variable especificada por la propiedad eventListVariableName
con el siguiente formato JSON:
[{
"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
}, …]
Para obtener más información sobre cómo definir los valores start
y end
, consulte Trabajar con fechas y horas del calendario. Dicho tema también muestra cómo convertir los valores de las propiedades JSON start
y end
en hora local.
A continuación se muestra un ejemplo de cómo usar este componente.
############################
# 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"
Este componente está soportado en la versión 21.02 y posteriores de Oracle Digital Assistant.
Propiedad | Descripción | ¿Obligatoria? |
---|---|---|
provider |
Proveedor de calendario. Los valores permitidos son Google y Outlook .
|
Sí |
calendarOwner |
ID de usuario del responsable del calendario. Debe ser un ID de cuenta válido para el proveedor de calendario, como el valor de la variable identificado por la propiedad authenticatedUserVariable del componente System.OAuth2AccountLink , que se define cuando el usuario se autentica.
|
Sí |
calendarId |
Nombre del calendario. Para el calendario por defecto del usuario, defínalo en el mismo valor que la propiedad calendarOwner .
|
Sí |
credential |
Token de acceso del proveedor. Este es el valor de la variable que se identifica mediante la propiedad accessTokenVariableName del componente System.OAuth2AccountLink , que se define cuando el usuario se autentica.
|
Sí |
listType |
Indica el tipo de lista. El valor debe ser uno de los siguientes:
|
Sí |
eventListVariableName |
Nombre de la variable de contexto en la que se almacenará la lista de eventos. | Sí |
start |
Primera fecha y hora para las que deben incluirse las reuniones en la lista (formato: yyyy-MM-dd'T'HH:mm:ss ). Por ejemplo, 2021-02-26T09:55:00 .
|
Sí |
end |
Última fecha y hora para las que deben incluirse las reuniones en la lista (formato: yyyy-MM-dd'T'HH:mm:ss ). Por ejemplo, 2021-02-26T09:55:00 .
Para el tipo de lista |
No |
attendees |
Lista separada por comas y no sensible a mayúsculas/minúsculas de cadenas que se utiliza para filtrar la lista por asistentes. En la salida solo se incluyen las reuniones en las que uno o varios valores de asistente contienen una o varias cadenas de la lista. | No |
response |
Lista separada por comas de estados de invitación para filtrar la lista cuando el valor de listType sea INVITED . Los estados permitidos son:
El valor por defecto es |
No |
timezoneOffset |
Cantidad de tiempo, en milisegundos, que se agrega a la hora universal (UTC) para obtener la hora estándar en la zona horaria del usuario. Por ejemplo, si la zona horaria local es UTC-2, el valor de timezoneOffset es -7200000 . El valor por defecto es 0.
Nota
Puede derivar la propiedad timezoneOffset para el usuario actual según el valor de la variable de contexto de usuario profile.timezoneOffset . Sin embargo, si lo hace, debe multiplicar profile.timezoneOffset por -1.
Puede especificar |
No |
timezone |
ID de zona horaria local identificado por https://www.iana.org/time-zones. También se denomina nombre de base de datos TZ. Por ejemplo: America/Los_Angeles . El valor por defecto es UTC . Puede especificar timezoneOffset o timezone , pero no ambos.
|
No |
Este componente puede devolver las siguientes acciones:
Acción | Descripción |
---|---|
found |
Se han devuelto uno o varios eventos. |
notfound |
No hay ningún evento que coincida. |
System.SelectCalendarEvent
Utilice este componente para mostrar una lista de eventos de Outlook o Google que el usuario puede seleccionar. El componente guarda el ID del evento seleccionado en la variable especificada por la propiedad eventIdVariableName
.
Puede filtrar la lista para permitir la selección por los siguientes atributos:
- El evento se puede suprimir
- El evento se puede actualizar
- Se ha invitado al usuario al evento
- Cómo ha respondido el usuario a una invitación
- El evento incluye uno o varios asistentes con nombre
- La reunión comienza después de una fecha y hora
- La reunión finaliza antes de una fecha y hora
El usuario debe iniciar sesión en el proveedor de calendario para acceder a este componente. Puede utilizar la función "necesita autorización" para gestionar el inicio de sesión de usuario, como se describe en Autorización de calendario.
Para obtener más información sobre cómo definir los valores start
y end
, consulte Trabajar con fechas y horas del calendario.
A continuación se muestra un ejemplo de cómo usar este componente.
############################
# 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"
...
Este componente está soportado en la versión 21.02 y posteriores de Oracle Digital Assistant.
Propiedad | Descripción | ¿Obligatoria? |
---|---|---|
provider |
Proveedor de calendario. Los valores permitidos son Google y Outlook .
|
Sí |
calendarOwner |
ID de usuario del responsable del calendario. Debe ser un ID de cuenta válido para el proveedor de calendario, como el valor de la variable identificado por la propiedad authenticatedUserVariable del componente System.OAuth2AccountLink , que se define cuando el usuario se autentica.
|
Sí |
calendarId |
Nombre del calendario. Para el calendario por defecto del usuario, defínalo en el mismo valor que la propiedad calendarOwner .
|
Sí |
credential |
Token de acceso del proveedor. Este es el valor de la variable que se identifica mediante la propiedad accessTokenVariableName del componente System.OAuth2AccountLink , que se define cuando el usuario se autentica.
|
Sí |
listType |
Indica el tipo de lista. El valor debe ser uno de los siguientes:
|
Sí |
eventIdVariableName |
Nombre de la variable de contexto en la que se almacenará el ID del evento. | Sí |
start |
Primera fecha y hora para las que deben incluirse las reuniones en la lista (formato: yyyy-MM-dd'T'HH:mm:ss ). Por ejemplo, 2021-02-26T09:55:00 .
|
Sí |
end |
Última fecha y hora para las que deben incluirse las reuniones en la lista (formato: yyyy-MM-dd'T'HH:mm:ss ). Por ejemplo, 2021-02-26T09:55:00 .
Para el tipo de lista |
No |
attendees |
Lista separada por comas y no sensible a mayúsculas/minúsculas de cadenas que se utiliza para filtrar la lista por asistentes. En la salida solo se incluyen las reuniones en las que uno o varios valores de asistente contienen una o varias cadenas de la lista. | No |
response |
Lista separada por comas de estados de invitación para filtrar la lista cuando el valor de listType sea INVITED . Los estados permitidos son:
El valor por defecto es |
No |
prompt |
Texto que aparece antes de la lista. El valor por defecto es You have the following meeting(s): no es necesario incluir esta propiedad, a menos que desee sustituir el valor por defecto.
Consejo: En aptitudes con la versión 21.04 y posteriores de la plataforma, el valor por defecto se almacena en el grupo de recursos de la aptitud. Para cambiar el valor por defecto, abra la página Grupo de recursos de la aptitud, haga clic en![]() |
No |
allDayLabel |
Texto para indicar eventos de todo el día. El valor por defecto es Todo el día .
|
No |
recurringLabel |
Texto para indicar un evento recurrente. El valor por defecto es Recurring .
|
No |
acceptedLabel |
Texto para indicar que el responsable del calendario ha aceptado la invitación. El valor por defecto es Accepted .
|
No |
tentativeLabel |
Texto para indicar que el responsable del calendario ha aceptado provisionalmente la invitación. El valor por defecto es Tentative .
|
No |
declinedLabel |
Texto para indicar que el responsable de calendario ha rechazado la invitación. El valor por defecto es Declined .
|
No |
pendingLabel |
Texto para indicar que el responsable del calendario no ha respondido a la invitación. El valor por defecto es Pending .
|
No |
timezoneOffset |
Cantidad de tiempo, en milisegundos, que se agrega a la hora universal (UTC) para obtener la hora estándar en la zona horaria del usuario. Por ejemplo, si la zona horaria local es UTC-2, el valor de timezoneOffset es -7200000 . El valor por defecto es 0.
Nota
Puede derivar la propiedad timezoneOffset para el usuario actual según el valor de la variable de contexto de usuario profile.timezoneOffset . Sin embargo, si lo hace, debe multiplicar profile.timezoneOffset por -1.
Puede especificar |
No |
timezone |
ID de zona horaria local identificado por https://www.iana.org/time-zones. También se denomina nombre de base de datos TZ. Por ejemplo: America/Los_Angeles . El valor por defecto es UTC . Puede especificar timezoneOffset o timezone , pero no ambos.
|
No |
Este componente puede devolver las siguientes acciones:
Acción | Descripción |
---|---|
found |
Se han devuelto uno o varios eventos. |
notfound |
No hay ningún evento que coincida. |
System.SendInviteResponse
Utilice este componente para aceptar, aceptar provisionalmente o rechazar una invitación para un evento de calendario de Outlook o Google.
El usuario debe iniciar sesión en el proveedor de calendario para acceder a este componente. Puede utilizar la función "necesita autorización" para gestionar el inicio de sesión de usuario, como se describe en Autorización de calendario.
A continuación se muestra un ejemplo de cómo usar este componente.
############################
# 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"
Este componente está soportado en la versión 21.02 y posteriores de Oracle Digital Assistant.
Propiedad | Descripción | ¿Obligatoria? |
---|---|---|
provider |
Proveedor de calendario. Los valores permitidos son Google y Outlook .
|
Sí |
calendarOwner |
ID de usuario del responsable del calendario. Debe ser un ID de cuenta válido para el proveedor de calendario, como el valor de la variable identificado por la propiedad authenticatedUserVariable del componente System.OAuth2AccountLink , que se define cuando el usuario se autentica.
|
Sí |
calendarId |
Nombre del calendario. Para el calendario por defecto del usuario, defínalo en el mismo valor que la propiedad calendarOwner .
|
Sí |
credential |
Token de acceso del proveedor. Este es el valor de la variable que se identifica mediante la propiedad accessTokenVariableName del componente System.OAuth2AccountLink , que se define cuando el usuario se autentica.
|
Sí |
eventId |
ID del evento al que enviar la respuesta. Puede utilizar System.ListCalendarEvents o System.SelectCalendarEvent para obtener el ID de los eventos de calendario a los que se ha invitado al responsable del calendario.
|
Sí |
response |
Respuesta que se debe enviar. Las respuestas permitidas son:
|
Sí |
System.UpdateCalendarEvent
Utilice este componente para realizar cambios en un evento de calendario de Outlook o Google. Tenga en cuenta que no puede actualizar eventos recurrentes o de todo el día.
El usuario debe iniciar sesión en el proveedor de calendario para acceder a este componente. Puede utilizar la función "necesita autorización" para gestionar el inicio de sesión de usuario, como se describe en Autorización de calendario.
Para obtener más información sobre cómo definir los valores start
y end
, consulte Trabajar con fechas y horas del calendario.
A continuación se muestra un ejemplo de cómo usar este componente. En este ejemplo, se utiliza una entidad de bolsa compuesta para obtener la fecha, la hora de inicio y la hora de finalización.
####################
# 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"
...
Este componente está soportado en la versión 21.02 y posteriores de Oracle Digital Assistant.
Propiedad | Descripción | ¿Obligatoria? |
---|---|---|
provider |
Proveedor de calendario. Los valores permitidos son Google y Outlook .
|
Sí |
calendarOwner |
ID de usuario del responsable del calendario. Debe ser un ID de cuenta válido para el proveedor de calendario, como el valor de la variable identificado por la propiedad authenticatedUserVariable del componente System.OAuth2AccountLink , que se define cuando el usuario se autentica.
|
Sí |
calendarId |
Nombre del calendario. Para el calendario por defecto del usuario, defínalo en el mismo valor que la propiedad calendarOwner .
|
Sí |
credential |
Token de acceso del proveedor. Este es el valor de la variable que se identifica mediante la propiedad accessTokenVariableName del componente System.OAuth2AccountLink , que se define cuando el usuario se autentica.
|
Sí |
eventId |
ID del evento que se va a actualizar. Puede utilizar System.ListCalendarEvents o System.SelectCalendarEvent para obtener un eventId .
|
Sí |
start |
La nueva fecha y hora de inicio con el formato yyyy-MM-dd'T'HH:mm:ss , por ejemplo, 2021-02-26T09:55:00 .
|
No |
end |
La nueva fecha y hora de finalización con el formato yyyy-MM-dd'T'HH:mm:ss , por ejemplo, 2021-02-26T09:55:00 .
|
No |
subject |
Nuevo tema de la reunión. | Sí |
attendees |
Lista de asistentes separada por comas. Esta lista sustituye a la lista anterior. Tenga en cuenta que el proveedor de calendario no puede enviar una notificación a un asistente si el ID no es un ID de cuenta válido para ese proveedor. | Sí |
timezoneOffset |
Cantidad de tiempo, en milisegundos, que se agrega a la hora universal (UTC) para obtener la hora estándar en la zona horaria del usuario. Por ejemplo, si la zona horaria local es UTC-2, el valor de timezoneOffset es -7200000 . El valor por defecto es 0.
Nota
Puede derivar la propiedad timezoneOffset para el usuario actual según el valor de la variable de contexto de usuario profile.timezoneOffset . Sin embargo, si lo hace, debe multiplicar profile.timezoneOffset por -1.
Puede especificar |
No |
timezone |
ID de zona horaria local identificado por https://www.iana.org/time-zones. También se denomina nombre de base de datos TZ. Por ejemplo: America/Los_Angeles . El valor por defecto es UTC . Puede especificar timezoneOffset o timezone , pero no ambos.
|
No |
Pies de Página

Este pie de página se muestra en todos los canales, incluso los que admiten botones como Facebook. Sin embargo, puede configurar una presentación específica del canal para el pie de página. Para ello:
-
Defina la variable
autoNumberPostbackActions
utilizando la expresiónsystem.message
.setAutoNumbering: component: "System.SetVariable" properties: variable: "autoNumberPostbackActions" value: "${(system.channelType=='facebook')?then('true','false')}"
-
Establezca la definición
footerText
con una directivaif
de Apache FreeMarker para mostrar u ocultar el pie de página según el tipo de canal.footerText: <#if autoNumberPostbackActions.value>"Make your choice by entering the menu option number."</#if>
En Facebook, System.CommonResponse presenta el texto del pie de página en su propia burbuja de texto, que aparece justo antes de las acciones globales (las respuestas rápidas). El pie de página no se puede mostrar después de estas acciones, porque se necesita una segunda burbuja de texto de pie de página que provoca que las acciones desaparezcan.
Propiedad translate
translate
que sustituye la configuración de la variable global autoTranslate
:
-
Si se define la variable
autoTranslate
enfalse
(valor por defecto), no se produce ninguna traducción automática en el componente, a menos que se defina la propiedadtranslate
entrue
. -
Si se define la variable
autoTranslate
entrue
, la propiedadtranslate
también se define implícitamente entrue
, lo que significa que se traducen la etiqueta, el título, la descripción, la petición de datos y las cadenas de texto.
autotranslate
definiendo el valor en true
, y se define la propiedad translate
de un componente en false
, quedan excluidos de la traducción la petición de datos, el título, la descripción, la etiqueta y las cadenas de texto. Por otro lado, si no se activa autotranslate
, pero la propiedad translate
de un componente se define en true
, la petición de datos, el título, la descripción, la etiqueta y la cadena de texto del componente se traducen al idioma de usuario detectado con el servicio de traducción configurado. (Los componentes de entrada traducen la entrada del usuario al inglés.)
Si autoTranslate se ha definido en... | ... y la propiedad translate del componente está definida en... | ... la entrada del usuario, la petición de datos, la etiqueta, el texto, el título y la descripción se traducen |
---|---|---|
true |
no definido | si |
true |
true |
si |
true |
false |
no |
false |
no definido | no |
false |
false |
no |
false |
true |
si |
Los flujos diseñados con el diseñador de flujos visual no tienen la propiedad
translate
ni la variable de contexto autoTranslate
. Para configurar la traducción de esas aptitudes, utilice las propiedades Mensaje de entrada de usuario de conversión y Mensaje de respuesta de bot de conversión.
System.Feedback
En este tema se trata el uso de este componente en modo YAML. Para obtener información sobre su uso en el diseñador de flujos visuales, consulte Comentarios del usuario.
El componente System.Feedback
permite recopilar datos de comentarios para Estadísticas presentando a los usuarios una escala de calificación después de que hayan completado un flujo transaccional. Si utiliza el SDK de la versión 21.10 o posterior, este componente genera un sistema de clasificación por estrellas horizontal. Si utiliza un SDK anterior, el componente genera esta escala de calificación como una lista sencilla que permite a los usuarios tocar el botón que corresponde a su calificación.
Aunque puede cambiar el comportamiento de este componente mediante las propiedades del componente, puede cambiar su aspecto al utilizar el SDK (versión 21.10 o posterior). Por ejemplo, puede sustituir los iconos de estrella por defecto utilizados para los botones de comentarios por otro icono.
System.Feedback Propiedades de Componente
Propiedad | Descripción |
---|---|
maxRating |
Calificación máxima que puede enviar un usuario. Por defecto, el valor máximo es 5 . Puede ajustar este valor hacia abajo.
|
enableTextFeedback |
Un valor booleano, que si se define en true , permite al usuario enviar comentarios de texto si la calificación es menor o igual que el valor threshold . Por defecto, esta propiedad está definida en false (no hay comentarios activados).
|
threshold |
Valor para evaluar la transición entre las acciones above y below . Por defecto, el umbral entre los comentarios positivos y negativos se define como 2 para el valor maxRating por defecto, que es 5 .
|
footerText |
Texto que se muestra en la parte inferior del cuadro de diálogo de comentarios. |
System.Feedback Transiciones de componentes
return: "done"
.
Acción | Descripción |
---|---|
above |
Se define cuando la entrada de usuario es un valor válido que está por encima del valor threshold .
|
below |
Se define cuando la entrada de usuario es un valor válido que es igual o inferior al valor threshold . ).
|
cancel |
Defina esta opción cuando los usuarios rechacen la calificación haciendo clic en Omitir. |
system.userFeedbackRating
: devuelve la calificación del usuario.system.userFeedbackText
: cuandoenableTextFeedback
está definido entrue
, la aptitud puede solicitar comentarios cuando las calificaciones están por debajo del valorthreshold
.system.userFeedbackText
devuelve la entrada del usuario (${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
Este componente está en desuso y ya no hay una plantilla disponible para él. En su lugar, puede utilizar una de las muchas plantillas basadas en el componente Respuesta común que se ofrece en la sección Mensajería de usuario del cuadro de diálogo Agregar componente.
El componente System.Text
permite al bot configurar una variable de usuario o contexto solicitando al usuario que introduzca texto.
System.Text
por primera vez, solicita al usuario que introduzca texto. Cuando el usuario introduce un valor, el motor de diálogo vuelve a este estado. El componente procesa la respuesta del usuario y, si puede convertir la entrada de usuario en el tipo de variable, almacena el valor en la variable. El motor de diálogo pasa a otro estado cuando esta variable tiene un valor.
El motor de diálogo omite el estado
System.Text
si la variable ya tiene un valor.
Propiedad | Descripción | ¿Obligatoria? |
---|---|---|
prompt |
Cadena de texto que describe la entrada necesaria del usuario. Puede agregarle valores de forma dinámica con una expresión de valor. Por ejemplo: Hello ${profile.firstName}, how many pizzas do you want? |
Sí |
variable |
Nombre de la variable, que puede ser una variable de usuario o una de las variables declaradas en el nodo context .
|
Sí |
nlpResultVariable |
Establece la propiedad variable en un valor de entidad, si dicho valor de entidad no se ha establecido ya para la variable de referencia. Puede activar nlpResultVariable para que devuelva un valor si la define con una variable que contenga los resultados de NLP (como iresult: "nlpresult" , que se utiliza en nuestros bots de ejemplo). Al hacerlo, la propiedad nlpResultVariable sigue pudiendo rellenar el valor cuando es nula, si encuentra una entidad resuelta que coincida con aquella a la que hace referencia la variable. El cuadro de diálogo pasa al estado siguiente cuando nlpResultVariable define el valor. Puede utilizar esta propiedad en lugar del componente System.SetVariable.
|
No |
maxPrompts |
Número de veces que el componente solicita una entrada válida al usuario. Consulte Limitación del número de peticiones de datos de usuario. | No |
translate |
Utilice esta propiedad para sustituir el valor booleano definido para la variable de contexto autotranslate . Si no ha definido esta variable o si la ha definido en false , puede establecer esta propiedad en true para activar la traducción automática solo para este componente. Si define la variable autotranslation en true , puede establecer esta propiedad en false para excluir este componente de la traducción automática. Consulte Servicios de traducción en aptitudes.
|
No |
Consulte Transiciones para componentes de respuesta común para conocer los tipos de acción predefinidos que se pueden utilizar con este componente.
¿Cómo se utiliza el componente System.Text?
En este ejemplo, la variable type
contiene los valores esperados por la entidad PizzaType
, como cheese
, Veggie Lover
y Hawaiian
. Cuando falta esta información en la entrada de usuario, el bot puede obtenerla porque su flujo de diálogo pasa al estado type
, cuyo componente System.Text
solicita que se indiquen explícitamente las preferencias. Tenga en cuenta que, incluso en este punto, la entrada de usuario aún debe resolverse en la entidad PizzaType
para pasar al siguiente estado.
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
Este componente está en desuso y ya no hay una plantilla disponible para él. En su lugar, puede utilizar una de las muchas plantillas basadas en el componente Respuesta común que se ofrece en la sección Mensajería de usuario del cuadro de diálogo Agregar componente.
El componente System.List
está diseñado para generar una lista de opciones. En función de si se ha definido un valor de variable (o incluso definido para este componente), la navegación desde el componente se puede disparar mediante la selección del usuario o mediante el valor definido para la variable de usuario o de contexto.
Propiedad | Descripción | ¿Obligatoria? |
---|---|---|
options |
Puede especificar la propiedad options utilizando cadenas de texto separadas por comas, expresiones de Apache FreeMarker y en forma de lista de asignaciones. Las opciones Propiedad y Listas de acciones proporcionan ejemplos del último enfoque.
|
Sí |
prompt |
Cadena de texto de solicitud para el usuario. | Sí |
variable |
Nombre de la variable cuyo valor rellena la entrada de usuario. El motor de diálogo omite este estado si el valor de la variable ya se ha definido y no muestra las opciones de lista para el usuario. | No |
nlpResultVariable |
Establece la propiedad variable en un valor de entidad, si dicho valor de entidad no se ha establecido ya para la variable de referencia. Puede activar nlpResultVariable para que devuelva un valor si la define con la variable que contiene los resultados de NLP (como iResult: "nlpresult" que se utiliza en nuestras aptitudes de ejemplo). Al hacerlo, la propiedad nlpResultVariable sigue pudiendo rellenar el valor cuando es nula, si encuentra una entidad resuelta que coincida con aquella a la que hace referencia la variable. El cuadro de diálogo pasa al estado siguiente cuando nlpResultVariable define el valor. Puede utilizar esta propiedad en lugar del componente System.SetVariable. Las listas de acciones describen cómo puede utilizar las propiedades variable y nlpResultVariable para cambiar el comportamiento de visualización de la lista.
|
No: utilice esta propiedad si la propiedad de variable nombra una variable de tipo de entidad. |
maxPrompts |
Número de veces que el componente solicita una entrada válida al usuario. Consulte Limitación del número de peticiones de datos de usuario. | No |
translate |
Utilice esta propiedad para sustituir el valor booleano definido para la variable de contexto autotranslate . Si no ha definido esta variable o si la ha definido en false , puede establecer esta propiedad en true para activar la traducción automática solo para este componente. Si define la variable autotranslation en true , puede establecer esta propiedad en false para excluir este componente de la traducción automática. Consulte Servicios de traducción en aptitudes.
|
No |
autoNumberPostbackActions |
Si se define en true , esta opción prefija números a las opciones. Aunque esta opción no se defina en true , la numeración automática se puede aplicar a elementos de lista cuando la configuración de Activar numeración automática en acciones de devolución del asistente digital está definida en true . La numeración automática específica del canal se puede aplicar a cualquier aptitud registrada en un asistente digital: ${(system.channelType=='twilio')?then('true','false')} |
No |
footerText |
Mejora la salida en canales de solo texto. Como se describe en Pies de página, puede utilizar expresiones de FreeMarker para condicionar el texto del pie de página en los canales de solo texto. | No |
Listas de valores
Puede utilizar el componente System.List
para devolver un valor que satisfaga una variable de contexto definida como primitiva (como greeting: "string"
en la plantilla de flujo de diálogo) o como entidad, como se muestra en el siguiente fragmento. En este flujo de diálogo, la definición de options: "Thick,Thin,Stuffed,Pan"
devuelve un valor que coincide con la variable crust
. La propiedad options
definida para size es una expresión de valor (${size.type.enumValues}
) que devuelve los valores de lista Large, Medium, Small y Personal como opciones. Consulte Sintaxis de lenguaje de plantilla de Apache FreeMarker.
iResult
de la propiedad nlpResultVariable
permite al componente establecer los valores de entidad para las propiedades variable
de los estados crust
y size
si estos valores no se han definido previamente. Como el componente Text
, el componente System.List
no requiere ninguna transición.
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:
...

Los usuarios no están limitados a las opciones incluidas en la lista. Pueden resolver la entidad introduciendo una palabra que la entidad reconozca, como un sinónimo. En lugar de elegir entre las opciones de tamaño de pizza de la lista, por ejemplo, los usuarios pueden introducir big, un sinónimo definido para la opción Large de la entidad
PizzaSize
. Consulte Entidades personalizadas.
Propiedad options
options
mediante alguna de las siguientes opciones:
-
Una lista de asignaciones: si bien puede definir la propiedad options como una cadena de texto o una expresión de valor, también puede configurar la propiedad
options
como una lista de asignaciones. Cada una tiene una propiedadlabel
, una propiedadvalue
y una propiedadkeyword
opcional. Si sigue este enfoque, puede localizar las opciones de lista, ya que, como se indica en el ejemplo siguiente, puede hacer referencia a un grupo de recursos. Consulte Grupos de recursos para aptitudes para obtener más información sobre el uso de la notación de puntos. Cuando los usuarios introducen un valor que coincide con uno de los valores especificados en la propiedadkeyword
, el bot reacciona de la misma manera en que lo haría si el usuario tocara la opción de lista.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"
-
Cadena de texto de opciones separadas por comas, como
"small, medium, large"
en el siguiente fragmento. No puede agregar las propiedadeslabel
yvalue
si defineoptions
como cadena.askPizzaSize: component: "System.List" properties: prompt: "What size do you want?" options: "small, medium, large" variable: "pizzaSize"
-
Expresión de valor de Apache FreeMarker que realiza un bucle en una lista de cadenas o una lista de asignaciones, donde cada asignación debe contener las propiedades
label
yvalue
y, opcionalmente, una propiedadkeyword
.askPizzaSize: component: "System.List" properties: prompt: "What size do you want?" options: "${pizzaSize.value.enumValues}" variable: "pizzaSize"
Listas de Acción
System.Switch
para la navegación condicional, puede utilizar listas de acciones. Las propiedades opcionales variable
y nlpResultVariable
de System.List
definen el comportamiento de visualización de la lista y la transición posterior en función de la entrada del usuario.
- Cuando no configure estas propiedades, la acción de transición se basa en la opción seleccionada por el usuario de la aptitud:
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"
- Al agregar las propiedades
variable
ynlpResultVariable
, la visualización de la lista se omite cuando se hace coincidir la entrada de usuario. En el siguiente fragmento, la lista de opciones se omite cuandonlpResultVariable
define la variablesize
de la entrada de usuario, como Quiero una pizza grande. Se dispara la transición adecuada al valor.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
para mostrar un mensaje que no requiera una respuesta del usuario o que no requiera que la aptitud procese la respuesta del usuario.
Este componente está en desuso y ya no hay una plantilla disponible para él. En su lugar, puede utilizar una de las muchas plantillas basadas en
System.CommonResponse
que se ofrecen en la sección Mensajería de usuario del cuadro de diálogo Agregar componente.
Propiedad | Descripción | ¿Obligatoria? |
---|---|---|
text |
Cadena de texto | Sí: este campo necesita un valor. |
keepTurn |
Valor booleano para renunciar (false ) o retener el control de la aptitud del flujo de diálogo (true ). Utilice keepTurn: true cuando desee obtener una secuencia de mensajes de aptitud no rota en la que no se aceptan interjecciones del usuario.
|
No |
translate |
Utilice esta propiedad para sustituir el valor booleano definido para la variable de contexto autotranslate . Si no ha definido esa variable o si la ha definido en false , puede definir esta propiedad en true para activar la traducción automática solo para este componente. Si define la variable autotranslation en true , puede definir esta propiedad en false para excluir este componente de la traducción automática. Consulte Servicios de traducción en aptitudes.
|
No |
¿Cómo se utiliza el componente System.Output?
System.Output
requiere la definición de cadena para la propiedad text
. Tal y como se ilustra en el siguiente ejemplo de un mensaje de confirmación, puede agregar expresiones de valor a esta cadena.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."
Por defecto, el motor de diálogo espera la entrada de usuario tras generar una sentencia a partir de la aptitud. Si sustituye este comportamiento, agregue la propiedad opcional keepTurn
y defínala en true
para dirigir el motor de diálogo al siguiente estado definido por la propiedad transitions
. Si no se ha definido ninguna transición, el motor de diálogo pasa al siguiente estado de la secuencia.
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"
Definición de expresiones de valor para el componente System.Output
text
. Por ejemplo, el siguiente fragmento utiliza diferentes expresiones para mostrar el texto para una confirmación de orden (tamaño y tipo de pizza).confirmation:
component: "System.Output"
properties:
text: "Your ${size.value} ${type.value} pizza is on its way."
transitions:
return: "done"
Cada expresión siempre debe devolver un valor. Si incluso una expresión devuelve un valor nulo, la aptitud genera texto sin formato para cada expresión de la cadena, ofreciendo a los usuarios una salida como esta: Your ${size.value} ${type.value} is on its way.
Es todo o nada. Para asegurarse de que la aptitud muestre siempre texto que los usuarios puedan comprender, sustituya un valor por defecto por un valor nulo mediante el operador de valor por defecto de Apache Freemarker: ${size.value!\”piping\”} ${type.value!\”hot\”}
. Las comillas dobles indican que el valor por defecto no es una referencia de variable, sino que es el valor constante que espera el operador. Por ejemplo:text: "Your ${size.value!\"piping\"} ${type.value!\"hot\"} pizza is on its way."
No olvide incluir el carácter de escape de las comillas (
\"...\"
) que delimitan el valor por defecto cuando utilice el operador de Freemarker. La sintaxis OBotML del flujo de diálogo no será válida a menos que utilice esta secuencia de escape cada vez que defina una operación de valor por defecto o delimite el texto de salida con comillas dobles. Por ejemplo, la siguiente definición de componente System.Output
permite a los usuarios leer el mensaje tal como Ha dicho “Cancelar esta orden”.confirmCancel:
component: "System.Output"
properties:
text: "You said, \"Cancel this order.\""
transitions:
return: "cancelOrder"
Traducción del texto de salida
System.Output
en cada componente utilizando la propiedad translate
. Si la define en false
, como en el siguiente fragmento, los componentes muestran el texto tal cual, sin traducirlo. Si define esta propiedad en true
, podrá activar la traducción automática cuando la variable autoTranslate
esté definida en false
o no esté definida. Consulte Servicios de traducción en aptitudes.
Normalmente, la variable
autoTranslate
no se establece en true
si se va a traducir texto con grupos de recursos. No se recomienda esta metodología.
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:
...