Componentes da Interface do Usuário
Esses são os componentes disponíveis na categoria Interface do Usuário do editor de fluxo de caixas de diálogo baseado em YAML.
-
System.CommonResponse — Gera mensagens de conteúdo rico.
-
System.Webview — Integra seu bot com um aplicativo Web.
-
System.IncidentCreation — Cria um incidente para o Oracle B2C Service ou o Oracle Fusion Service.
-
System.IntelligentAdvisor — Integra sua habilidade com uma entrevista do Oracle Intelligent Advisor.
-
System.KnowledgeSearch — Pesquisa um serviço de conhecimento para obter informações sobre um assunto.
-
System.AgentTransfer — Permite que uma habilidade DA-as-agent transfira uma conversa de volta para o Oracle B2C Service ou o Oracle Fusion Service.
-
System.AgentTransferCondition - Permite que você verifique se os agentes estão disponíveis e obtenha o tempo de espera esperado.
-
System.AgentInitiation e System.AgentConversation—Permite transferir uma conversa para um agente ao vivo do Oracle B2C Service.
-
System.ResolveEntities — Resolve os valores das entidades membros de uma entidade composta.
- System.Feedback - Faz a saída de um componente de classificação de feedback.
System.CommonResponse
O componente System.CommonResponse
permite criar mensagens com recursos avançados de interface de usuário, como cenouras de cartão com imagens e botões de ação, ou formulários com tabelas e campos de entrada.
Este tópico abrange o uso desse componente no modo YAML. Para obter informações sobre como usá-lo no Designer de Fluxo Visual, consulte Modelos de Componentes de Resposta Comuns.
Os modelos para o System.CommonResponse
estão disponíveis na seção Mensagens do Usuário da caixa de diálogo Adicionar Componente.
System.CommonResponse
no CrcPizzaBot, um dos bots de amostra. Nessa volta do PizzaBot, você pode exibir um menu de imagem com os botões da ação rápida Order Now.
No contexto do componente System.CommonResponse
, os diferentes tipos de mensagens são conhecidos como tipos de resposta e o CrcPizzaBot mostra como, entre outras coisas, eles permitem que os usuários de bot respondam às solicitações usando botões de ação e exibam o menu de pizza como cascata de itens do cartão.
No menu Adicionar Componente, você pode selecionar outros modelos System.CommonResponse
para cartões, texto, respostas de anexo e para entidades compostas (demonstradas pelo CbPizzaBot). Esses modelos incluem as duas propriedades comuns a todas essas propriedades de tipo de resposta que são específicas dos tipos de resposta individuais. Embora o menu Adicionar Componente adicione estados distintos para cada tipo de resposta, você possa combinar um ou mais tipos de resposta em um único estado. O CrcPizzaBot mostra exemplos de ambos nos estados ShowMenu
(resposta de texto) e OrderPizza
(respostas de texto e cartão).
Teste antecipadamente cada habilidade em seus canais de destino no ciclo de desenvolvimento para ter certeza de que seus componentes sejam renderizados conforme desejado.
As Propriedades do Componente
A configuração de componentes System.CommonResponse
envolve a definição de propriedades que direcionam o Mecanismo de Caixa de Diálogo com as propriedades de metadados que descrevem não apenas como o componente entrega mensagens (como prompts de texto, cartões ou anexos), mas também define o conteúdo e o comportamento das mensagens propriamente ditas.
Nome | Descrição | 0brigatório? |
---|---|---|
metadata |
A resposta de chat criada por esse componente é orientada pelo conteúdo da propriedade metadata . Consulte A Propriedade de Metadados em Componentes de Resposta Comuns.
|
Sim |
processUserMessage |
Defina essa propriedade como true para direcionar o Mecanismo de Caixa de Diálogo a retornar ao estado após o usuário digitar texto ou tocar em um botão. Defina essa propriedade como false se nenhuma entrada do usuário for necessária (ou esperada).
Defina essa propriedade como |
Sim |
autoNumberPostbackActions |
Essa propriedade é usada para repositórios compostos, respostas de texto e respostas de cartão. Quando definido como true , essa opção prefixa números às opções. Mesmo quando você não tiver definido essa opção como true , a numeração automática poderá ser aplicada em itens de cartão quando a configuração Ativar Numeração Automática em Ações de Postback do assistente digital for definida como true . Conforme demonstrado por sua configuração padrão, a numeração automática específica do canal pode ser aplicada a qualquer bot de habilidades registrado em um assistente digital (${(system.channelType=='twilio')?then('true','false')} ):
|
Número |
variable |
Esta variável mantém o nome da variável de contexto ou do usuário que é preenchido quando um usuário responde digitando texto livre em vez de tocar em um botão. Esta propriedade é ignorada quando um usuário toca em um botão, porque o payload do botão determina quais valores de variáveis foram definidos. Se a propriedade da variável já tiver sido definida quando o Mecanismo de Caixa de Diálogo entrar nesse estado, o estado será ignorado. Para entidades compostas, mencione a variável da entidade composta. Os usuários são solicitados a fornecer valores de entidades individuais no repositório. Quando todos os valores de entidades forem definidos, o componente mudará para o próximo estado. |
Número |
nlpResultVariable |
Define a propriedade variable com um valor de entidade (quando o valor da entidade ainda não foi definido para a variável referenciada). Você pode ativar nlpResultVariable para retornar o valor ao defini-lo usando uma variável que armazena os resultados de NLP (como iResult: "nlpresult" , que é usado em nossos bots de amostra). Ao fazer isso, a propriedade nlpResultVariable ainda poderá preencher o valor quando ele for nulo se encontrar uma entidade resolvida que corresponda à referenciada pela variável. A caixa de diálogo muda para o próximo estado quando nlpResultVariable define o valor. Você pode usar essa propriedade no lugar do componente System.SetVariable.
|
Número |
useFullEntityMatches |
Quando definidos como true , os valores de entidade personalizados são armazenados como objetos JSON (semelhante aos valores de entidade incorporados). Isso permite que você crie expressões para acessar propriedades como value , primaryLanguageValue e originalString , que são particularmente importantes para habilidades multilíngues no momento ou que eventualmente poderão se tornar multilíngues.
|
Número |
maxPrompts |
Para que o componente System.CommonResponse possa preencher o valor da variável que você especificou para a propriedade variable com base no texto digitado pelo usuário, ele valida o valor conforme o tipo de variável. Essa pode ser a validação do tipo de entidade ou, no caso de um tipo primitivo, é um valor que pode ser convertido no tipo primitivo.
Quando o componente não pode validar o valor, o Mecanismo de Caixa de Diálogo envia o texto da mensagem e as opções novamente. (Você pode modificar essa mensagem para refletir a falha de validação.) Para evitar um loop infinito resultante da incapacidade contínua do usuário de informar um valor válido, use essa propriedade para definir um limite para o número de tentativas fornecidas ao usuário. Quando o usuário excede essa distribuição, o componente Conforme descrito em Criar uma Entidade Composta, entidades individuais no repositório composto podem substituir essa definição quando a opção Máximo de Tentativas de Entrada do Usuário é definida. |
Número |
keepTurn |
A propriedade keepTurn só se aplica quando você define a propriedade processUserMessage como false . Consulte System.Output para saber como definir essa propriedade.
|
Número |
translate |
Use essa propriedade para substituir o valor booliano que você definiu para a variável de contexto autotranslate . Se você não tiver definido essa variável ou se defini-la como false , poderá definir essa propriedade como true para ativar a tradução automática somente desse componente. Se você definir a variável autotranslation como true , poderá definir essa propriedade como false para excluir esse componente da tradução automática. Consulte Serviços de Tradução em Habilidades.
|
Número |
footerText |
Melhora a saída nos canais somente texto. Conforme descrito em Rodapés, você pode usar expressões do FreeMarker para condicionalizar o texto do rodapé para canais somente texto. | Número |
transitionAfterMatch (obsoleto)
|
Um booliano que, quando você o define como true , permite uma transição temporária da correspondência de entidade executada por esse componente para outro estado. Esta propriedade não é mais suportada. Para obter essa funcionalidade, use um processador de eventos de entidade |
Número |
cancelPolicy |
Determina o tempo da transição cancel :
maxPromptsReached de nível de item ou evento. |
Número |
Aqui está o YAML para um estado de exemplo com base no 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"
Dica:
A propriedadetext
nesse trecho de código é definida usando o Apache FTL (FreeMarker Template Language). Para saber como adicionar expressões FTL e usar operações incorporadas do FreeMarker para transformar valores de variáveis, consulte Sintaxe de Linguagem de Modelo do Apache FreeMarker.
Transições para o Componente System.CommonResponse
Transição | Descrição |
---|---|
cancel |
Acionado quando um usuário excede as tentativas permitidas definidas pela propriedade maxAttempts ou redirecione o fluxo.
|
textReceived |
Acionado quando um usuário envia texto ou emojis em vez de tocar em um botão ou link de ação. |
attachmentReceived |
Acionado quando um usuário envia imagem, áudio, vídeo ou anexo de arquivo. |
locationReceived |
Acionado quando o usuário envia uma localização. |
system.outOfOrderMessage |
Defina isso para contornar o comportamento inesperado do usuário. Especificamente, quando um usuário não toca em um item de ação na mensagem atual, mas toca em uma ação que pertence a uma mensagem mais antiga na sessão de chat. |
Transições de Repositório Composto no Componente System.CommonResponse
System.CommonResponse
acionam as ações match
e cancel
com base nos valores correspondidos da entrada do usuário e na configuração da propriedade cancelPolicy
.
Ação | Descrição | 0brigatório? |
---|---|---|
match |
O componente aciona essa ação para navegar até o estado especificado quando pelo menos uma entidade no repositório corresponder à entrada do usuário. | No |
cancel |
O componente aciona esta ação para navegar até o estado especificado com base na definição da propriedade cancelPolicy .
|
No |
System.Webview
Este tópico abrange o uso desse componente no modo YAML. Para obter informações sobre como usá-lo no Visual Flow Designer, consulte Componente Webview.
O componente System.Webview
abre uma webview na sua habilidade ou para habilidades que são executadas em um canal Web, em uma guia do browser.
Propriedades do Componente System.WebView
Propriedade | Descrição | 0brigatório? |
---|---|---|
sourceVariableList |
Uma lista separada por vírgulas de nomes de variáveis do contexto ou de usuário. Esses nomes de variáveis são os parâmetros enviados para a webview; são os parâmetros de entrada do seu bot. Você pode definir cada variável adicionando uma série de estados System.SetVariable antes do estado System.Webview .
|
Sim |
variable |
O nome da variável (um valor de string) que identifica o payload da webview que é retornado ao bot depois que o usuário conclui suas interações na webview.
Como o payload é armazenado nessa variável, pode acessá-la posteriormente em sua definição de fluxo de caixas de diálogo. Por exemplo, você pode mencionar isso em um componente de saída. |
Sim |
prompt |
Uma string de texto como “Toque para continuar". | No |
service |
O nome do serviço do componente webview. | No |
imageUrl |
O URL para a imagem que acompanha um prompt. | No |
linkLabel |
O label do botão que chama o aplicativo Web. | No |
cancelLabel |
O label do botão Cancelar que permite aos usuários sair do estado sem chamar o aplicativo web. | No |
autoNumberPostbackActions |
Permite a entrada do usuário em canais SMS, que não suportam botões, adicionando atalhos numéricos aos elementos da IU.
|
No |
translate |
Use essa propriedade para substituir o valor booliano que você definiu para a variável de contexto autotranslate . Se você não tiver definido essa variável ou se defini-la como false , poderá definir essa propriedade como true para ativar a tradução automática somente desse componente. Se você definir a variável autotranslation como true , poderá definir essa propriedade como false para excluir esse componente da tradução automática. Consulte Serviços de Tradução em Habilidades.
|
Número |
Transições para o Componente System.Webview
Transições | Descrição |
---|---|
next |
Nomeia o próximo estado no fluxo de caixas de diálogo após o callback bem-sucedido do aplicativo web. |
return |
Sai da conversa após o callback bem-sucedido do aplicativo web. |
error |
Nomeia o estado que trata erros. |
actions |
|
System.IncidentCreation
Você pode usar o componente System.IncidentCreation
para criar um incidente em um local de atendimento ao cliente. Observe que você deve criar uma integração de atendimento ao cliente na página Definições > Serviços Adicionais > Integração de Atendimento ao Cliente para poder usar esse componente em sua instância.
Este tópico abrange o uso desse componente no modo YAML. Para obter informações sobre como usá-lo no Designer de Fluxo Visual, consulte Criação de Incidente.
Este é um exemplo de uso desse componente para transferir a conversa de volta para um site do 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"
E aqui está um exemplo para o 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"
Propriedade | Descrição | 0brigatório? | |
---|---|---|---|
serviceName |
O nome da integração, conforme configurado em Definições > Serviços Adicionais > Integração de Atendimento ao Cliente. | Sim | |
subject |
O texto do assunto do incidente. | Sim | |
attachmentUrl |
O URL de um documento ou imagem relacionado ao incidente. Observe que a adição de anexos não é suportada para habilidades DA as Agent. | No | |
agentReportFilter |
(Para incidentes do Oracle Fusion Service), texto para filtrar os incidentes. O valor padrão é ODA .
|
No | |
addChatTranscript |
(Somente para incidentes do Oracle Fusion Service.) Quando definido como verdadeiro, a transcrição do chat é adicionada ao incidente. O padrão é falso.
Os insights devem ser ativados para a habilidade para que a transcrição do chat seja disponibilizada. Uma transcrição só pode ser adicionada ao incidente ao usar um DA como integração de Agente em combinação com o Web Chat for Service ou inlays do Oracle Inlay Toolkit. |
No | |
customFields |
Um mapa que contém description e, opcionalmente, contactInfo , que pode conter detalhes adicionais sobre o incidente.
O mapa é passado como uma versão de texto do objeto e inserido na mensagem de incidente como uma observação privada. |
No | |
contactProperties |
Um mapa de pares de nome/valor que contém as informações necessárias para pesquisar ou criar informações de contato de atendimento ao cliente. Ele deve conter email e, opcionalmente, pode conter firstName e lastName .
Se |
Somente para o Oracle B2C Service | |
incidentNumberVariable |
O nome da variável de contexto da string na qual armazenar o número do incidente. | No |
System.IntelligentAdvisor
Use esse componente para acessar uma entrevista do Oracle Intelligent Advisor de uma habilidade.
Este tópico abrange o uso desse componente no modo YAML. Para obter informações sobre como usá-lo no Visual Flow Designer, consulte Intelligent Advisor.
Crie uma integração de serviço do Intelligent Advisor para poder usar esse componente. Consulte Adicionar um Serviço do Intelligent Advisor. Além disso, a entrevista deve ter sido implantada no Intelligent Advisor Hub e ativada no canal de serviço de chat. A entrevista deve ser para usuários anônimos. Não é possível acessar entrevistas para usuários do portal ou usuários do agente.
Você pode usar as propriedades do componente para especificar as seguintes definições de entrevista:
- Se os títulos e a explicação serão exibidos
- Os labels dos botões sim, não e incerto
- As strings que o usuário digita para redefinir, retornar à pergunta anterior (desfazer) e sair da entrevista
- O texto a ser exibido no final da entrevista
- Como formar as frases da pergunta sobre se a explicação deve ser exibida
- A string que o usuário digita para indicar a conclusão do upload dos arquivos
- Os valores de atributo e os parâmetros de conector a serem transmitidos à entrevista
- A localidade do projeto a ser usada
Veja aqui um exemplo:
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 Usar o Componente do Intelligent Advisor em Sua Habilidade para obter um exemplo que use o componente em um fluxo de caixas de diálogo.
Dica:
Os valores padrão de todas as propriedades do label são armazenados no pacote de recursos da habilidade. Para alterar um padrão, abra a página Pacote de Recursos da habilidade, clique em
O pacote de recursos de configuração também permite que você altere as mensagens IntelligentAdvisor - defaultValue, IntelligentAdvisor - doneHelp, IntelligentAdvisor - maskLabel, IntelligentAdvisor - outOfOrderMessage, IntelligentAdvisor - resumeSessionPrompt, IntelligentAdvisor - numberMinMax, IntelligentAdvisor - outOfOrderMessage, IntelligentAdvisor - resumeSessionPrompt e IntelligentAdvisor - yesNoMessage. Por exemplo, a mensagem IntelligentAdvisor - doneHelp é a saída dos campos de anexo e padronizada como When you are done with the upload, say {0}.
Talvez você queira alterá-lo para algo como Say {0} to let me know that you are done uploading.
Propriedade | Descrição | 0brigatório? |
---|---|---|
currency |
O código da moeda ISO-4217 para a moeda usada na entrevista. Quando esse código é especificado, o usuário só pode inserir valores de moeda nos formatos permitidos para essa moeda. É possível definir esta propriedade como em branco ou excluí-la se a entrevista não solicitar valores de moeda ou não estiver esperando uma determinada moeda. | No |
deployment |
O nome do projeto de implantação ativo no Intelligent Advisor Hub. | Sim |
doneLabel |
O texto que os usuários digitam para indicar que fizeram o upload de um arquivo.
O padrão é |
No |
endLabel |
Texto a ser exibido no chat no final da entrevista.
O padrão é |
No |
exitLabel |
O texto que os usuários digitam para indicar que desejam sair da entrevista.
O padrão é |
No |
explanationAskLabel |
A pergunta a ser feita quando showExplanation é definido como ask .
O padrão é |
No |
hideScreenTitle |
Indica se todos os títulos de tela devem ser ocultados na entrevista.
O padrão é |
No |
intelligentAdvisorService |
O nome do serviço do Intelligent Advisor conforme configurado em Definições > Serviços Adicionais. | Sim |
interviewAttributes |
O nome de uma variável de contexto do tipo string na qual os valores de atributo da entrevista serão armazenados. Os valores de atributo são armazenados como uma matriz de pares de chave/valor. | No |
locale |
Essa propriedade afeta a entrevista de destino e a resolução de data e número. O componente inicia a versão da entrevista nomeada (implantação) associada ao idioma especificado pela propriedade Para entrada de data e número, os valores são resolvidos de acordo com as definições de entidade DATE e NUMBER. Quando a opção Considerar Localidade do Usuário Final for ativada para a entidade, o valor será resolvido para a localidade especificada por essa propriedade (ou o padrão, se não for especificado). Consulte Resolução de Entidade Baseada em Localidade. Essa propriedade assume como padrão o valor |
No |
noLabel |
O rótulo a ser usado para representar valores FALSE boolianos.
O padrão é |
No |
params |
Um mapa de parâmetros de conexão de valor-chave a serem transmitidos no início da entrevista. Isso geralmente é necessário para entrevistas com integração de dados externa. | No |
removeHtml |
Indica se a marcação HTML deve ser removida do texto. O padrão é false .
|
No |
resetLabel |
O texto que os usuários digitam para indicar que desejam voltar à primeira pergunta.
O padrão é |
No |
seedData |
Um mapa de nomes e valores de atributo do Intelligent Advisor a serem transmitidos à entrevista. Para atributos de data e hora, use os formatos padrão de data e hora do Intelligent Advisor. Por exemplo: start_date: "2010-01-31" .
O atributo ao qual você está transmitindo o valor deve ter a opção Implantar com base no parâmetro de URL ativada no Policy Modeling. |
No |
showExplanation |
Especifica se a explicação do Intelligent Advisor deve ser mostrada. Os valores permitidos são never , always e ask .
Se você definir como O padrão é |
No |
uncertainLabel |
O label que o usuário poderá digitar se não souber o valor. Esse label é exibido para os botões de opção boolianos opcionais.
O padrão é |
No |
undoLabel |
O texto que os usuários digitam para indicar que desejam voltar à pergunta anterior.
O padrão é |
No |
yesLabel |
O label a ser usado para representar valores boolianos TRUE.
O padrão é |
No |
Exemplo: Usar o Componente do Intelligent Advisor na Sua Qualificação
####################
# 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"
...
Exemplo: Acessar Atributos da Entrevista
Veja um exemplo simples de acessar os valores de atributo de uma 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
Este tópico abrange o uso desse componente no modo YAML. Para obter informações sobre como usá-lo no Designer de Fluxo Visual, consulte Pesquisa de Conhecimento.
Use este componente para pesquisar o Oracle B2C Service Knowledge Foundation ou o Oracle Fusion Service Knowledge Management para obter informações sobre um determinado termo de pesquisa e exibir os resultados.
Para o Oracle B2C Service, os resultados retornados pelo serviço dependem de as respostas serem públicas e de quais são as definições de nível de acesso, produto ou categoria.
Observe que você deve criar um serviço de pesquisa de conhecimento para poder usar este componente. Consulte Adicionar um Serviço de Pesquisa de Conhecimento.
Veja aqui um exemplo de como usar este componente. Ele pesquisa em um serviço de Gerenciamento de Conhecimento todas as informações relacionadas à última declaração do usuário. Para obter exemplos adicionais, consulte Usar o Componente de Pesquisa de Conhecimento.
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"
Dica:
Os valores padrão das propriedadesdefaultAttachmentLabel
, noResultText
e resultLinkLabel
são armazenados no pacote de recursos da habilidade. Para alterar um padrão, abra a página Pacote de Recursos da habilidade, clique em 
Propriedade | Descrição | 0brigatório? |
---|---|---|
cardLayout |
Especifica se os cartões de resultado devem ser exibidos na vertical ou na horizontal. O padrão é horizontal .
|
Número |
customFilters |
Uma lista de filtros de resultados de pesquisa apresentados como pares nome-valor. Os nomes de filtro permitidos são product e category . Cada um deles permite apenas uma declaração de filtro. Consulte Filtrar Resultados por Produto e Categoria.
|
Número |
customProperties |
Somente Oracle B2C Service: Um mapa de pares de chave/valor a serem enviados ao serviço de pesquisa. No momento, essa propriedade suporta apenas a chave word_connector . Use a propriedade word_connector definida como AND para pré-anexar cada palavra no termo de pesquisa com + .
|
Número |
defaultAttachmentLabel |
O label padrão a ser usado para a ação de URL do cartão de resultados vinculada a um anexo sempre que o anexo não tiver um nome para exibição configurado. Quando usado, ele é anexado por um número de índice. Por exemplo, se o segundo anexo não tiver um nome para exibição, o label do anexo padrão será anexado com O padrão é |
Número |
locale |
O padrão é o valor da variável profile.locale .
Para serviços de integração de conhecimento multiinterfacetado do Oracle B2C Service, o código de localidade ISO ou BCP de cinco caracteres que especifica qual interface usar para executar a pesquisa (exemplo: en_GB). Se não houver uma interface que suporte a localidade, a interface padrão será usada. Consulte Implementar Pesquisa de Conhecimento Multilíngue. Para o Oracle Fusion Service, ele extrai os artigos que estão associados à localidade especificada. Se não houver artigos correspondentes para a localidade, ele retornará |
No |
noResultText |
O texto a ser gerado quando nenhum resultado de pesquisa estiver disponível. O padrão é o texto da entrada do pacote de recursos KnowledgeSearch - noResultText |
No |
resultLinkLabel |
O label a ser usado para a ação de URL (botão) do cartão de resultados que vincula à versão Web das informações. O padrão é o texto da entrada do pacote de recursos KnowledgeSearch - resultLinkLabel Se você definir essa propriedade como |
No |
resultSizeLimit |
O número máximo de resultados a serem exibidos. O padrão é |
No |
resultVersion |
Somente Oracle B2C Service: A versão preferencial a ser retornada quando há várias versões para um resultado. Você pode definir essa propriedade como Você pode aproveitar respostas especiais para exibir saída especificamente personalizada para conversas de chat, em vez de páginas web. A versão padrão é |
No |
resultVersionExclusive |
Somente Oracle B2C Service: Especifica se somente os resultados disponíveis na versão preferencial devem ser exibidos. Quando O padrão é |
No |
searchLinkLabel |
Oracle B2C Service: O label a ser usado para a ação de payload da mensagem do cartão que está vinculada à página Web com a lista completa de resultados da pesquisa. Oracle Fusion Service: O label a ser usado para a ação de carga útil da mensagem do cartão vinculada à página de pesquisa inicial. Se esta propriedade não for definida, o payload da mensagem do cartão não exibirá a ação. |
No |
searchPrelude |
O texto a ser gerado antes que o resultado da pesquisa seja exibido. Se essa propriedade não for definida, o texto da entrada do pacote de recursos KnowledgeSearch - searchPrelude será gerado. Se você não quiser que o prelúdio de pesquisa seja exibido, defina essa propriedade como |
No |
searchServiceName |
O nome da integração de pesquisa de conhecimento conforme configurado em Definições. | Sim |
searchTerm |
O texto a ser usado como o termo de pesquisa para a chamada de pesquisa de conhecimento. Um termo de pesquisa é obrigatório para o Oracle Fusion Service Knowledge Management. Para o Oracle B2C Service Knowledge Foundation, ele retornará os artigos mais populares se nenhum termo de pesquisa for fornecido.
Para técnicas de termo de pesquisa, consulte Usar o Componente de Pesquisa de Conhecimento. |
Sim |
System.KnowledgeSearch Transições
Ação | Descrição |
---|---|
resultSent |
A pesquisa retornou pelo menos um resultado. |
noResult |
Não houve resultados para o termo de pesquisa. |
serverError |
Ocorreu um erro no servidor do serviço de pesquisa de conhecimento durante a chamada, como uma falha de erro do servidor ou uma falha de erro inesperada.
Quando esse erro ocorre, a mensagem de erro é armazenada em |
Exemplo: Associar Perguntas Relacionadas a um Termo de Pesquisa em um Fluxo de Caixas de Diálogo YAML
O diagrama a seguir ilustra como implementar o método de estado único se seu fluxo de caixas de diálogo for criado no modo YAML. 1) Use uma variável de contexto de mapa para associar as intenções de conhecimento aos termos de pesquisa. 2) Defina cada intenção de conhecimento ação no estado Intent
para fazer a transição para um fluxo de dados que usa o mapa para definir a variável de contexto searchTerm
como o termo de pesquisa da intenção. 3) Em seguida, faça a transição para um estado que pesquisa o valor searchTerm
na base de conhecimento.
Descrição da ilustração kf-assoc-intent-term.png
Veja um exemplo de fluxo de caixas de diálogo em que há intenções individuais para cada resposta da base de conhecimento.
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"
Exemplo: Utilizar Declaração do Usuário como Termo de Pesquisa
O exemplo a seguir mostra como definir o searchTerm
como a declaração do usuário em uma habilidade de caixa de diálogo YAML. Para uma habilidade de caixa de diálogo visual, use ${skill.system.nlpresult.value.query}
.
context:
variables:
iResult: "nlpresult"
someVariable: "string" # For the reset state
states:
intent:
component: "System.Intent"
properties:
variable: "iResult"
transitions:
actions:
system.Greeting: "welcome"
system.Unsatisfactory Response: "transferToAgent"
...
unresolvedIntent: "genericKnowledgeSearch"
#
# This state searches the knowledge base with the user input as the search term.
#
genericKnowledgeSearch:
component: "System.KnowledgeSearch"
properties:
# Set to the name of the search service that is configured in Settings
searchServiceName: "KnowledgeSearch"
searchTerm: "${iResult.value.query}"
searchPrelude: "I don't know the answer offhand. Let's see what articles we have..."
resultSizeLimit: 3 # Change to how many articles to show. Defaults to 10.
# resultVersion: Optional property. Defaults to "Answer".
# resultVersionExclusive: Optional property. Defaults to false.
resultLinkLabel: "Show More"
# defaultAttachmentLabel: Optional property. Defaults to "Download"
searchLinkLabel: "Open Page with All Answers"
noResultText: >
I couldn't find any articles about that. Try rephrasing your
question (or you can ask to speak to a live agent).
# cardLayout: Optional property. Defaults to "horizontal"
transitions:
actions:
resultSent: "offerMoreHelp"
noResult: "reset"
serverError: "handleSearchServerProblem"
error: "handleSearchError"
next: "reset"
#
# This state is called after knowledge search returns its results.
#
offerMoreHelp:
component: "System.Output"
properties:
text: >
You can ask me another question if there's something
else that I can help you with.
transitions:
return: "offerMoreHelp"
#
# This state is called when there's a problem accessing the knowledge base such
# as a server error fault or an unexpected error fault. When this error occurs,
# the error message is stored in system.state.<state-name>.serverError.message.
#
handleSearchServerProblem:
component: "System.Output"
properties:
text: >
I'm not able to get an answer for that question. Let me know
if there's anything else I can help you with.
transitions:
return: "handleSearchServerProblem"
#
# This state is called when there's a problem using the knowledge search component
# such as when there's a problem with the knowledge search integration configuration
#
handleSearchError:
component: "System.Output"
properties:
text: >
Oops, my answer mechanism for that isn't working properly.
You can ask a different question or ask to speak to an agent?
transitions:
return: "handleSearchError"
#
# This state ends the conversation
#
reset:
component: "System.SetVariable"
properties:
variable: "someVariable"
value: "x"
transitions:
return: "reset"
System.AgentTransfer
Use o componente System.AgentTransfer
em assistentes digitais DA-as-agent para transferir a conversa de volta para o serviço de chat. A conversa será roteada para um agente ao vivo de acordo com as regras de chat configuradas no serviço de chat.
Este tópico abrange o uso desse componente no modo YAML. Para obter informações sobre como usá-lo no Visual Flow Designer, consulte Transferência do Agente.
Esse componente se destina a conversas originadas em um chat de serviço, conforme descrito em O Digital Assistant as Agent Framework em Ação. Para conversas originadas na habilidade, use System.AgentConversation.
Veja um exemplo de como usar esse componente para transferir a conversa de volta para o serviço 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"
Dica:
Em habilidades com a versão 21.04 e mais recente da plataforma, os valores padrão das propriedadesacceptedMessage
, errorMessage
, rejectedMessage
e waitingMessage
são armazenados no pacote de recursos da habilidade. Para alterar um padrão, abra a página Pacote de Recursos da habilidade, clique em 
Propriedade | Descrição | 0brigatório? | |
---|---|---|---|
agentStatusVariable |
O nome da variável de contexto do tipo mapa a ser usado para armazenar as informações de status de disponibilidade do agente. Nenhuma informação é armazenada se a propriedade não for especificada. Para referenciar uma variável de mapa, use uma expressão de valor como esta: ${<mapVariableName>.value.<key>} . Por exemplo, agentStatus.value.expectedWaitMinutes .
Para saber mais sobre os valores retornados nessa variável, consulte System.AgentTransferCondition. |
No | |
allowTransferIf |
Especifica as condições em que a habilidade deve transferir a sessão de chat.
Se as condições especificadas não forem atendidas, a ação |
No | |
customProperties |
Um mapa que contém informações a serem transmitidas ao serviço. Consulte Transmitir Informações ao Serviço. | No | |
errorMessage |
A mensagem que é mostrada ao usuário quando ocorre um erro do sistema ao transferir a sessão de chat para um agente. O padrão é We were unable to transfer you because there was a system error . Você pode definir a propriedade como uma string vazia ou vazia para suprimir a saída da mensagem.
|
No | |
maxEngagementsInQueue |
O número máximo permitido de participações aguardando na fila de destino. Quando a solicitação de chat é enviada, o serviço de chat responde com o número atual de participações aguardando na fila. Se o valor exceder maxEngagementsInQueue , a ação rejected ocorrerá. O padrão é -1 , o que significa que não há limite de participação.
Observe que, para o Chat do Oracle Fusion Service, a resposta é sempre 0, portanto, essa propriedade não tem valor para o Oracle Fusion Service. |
No | |
maxWaitSeconds |
O número máximo de segundos de espera estimados permitidos. Quando o serviço de chat recebe a solicitação de transferência, ele responde com o tempo de espera estimado. Se esse valor exceder maxWaitSeconds , a ação rejected ocorrerá. O padrão dessa propriedade é -1 , o que significa que não há tempo máximo de espera. Quando definido como -1 , o assistente digital transfere o usuário para um agente humano independentemente do tempo de espera estimado.
Observe que a ação |
No | |
rejectedMessage |
A mensagem mostrada aos usuários sempre que ocorre uma das seguintes situações:
Agent rejected . Você pode definir a propriedade como uma string vazia ou vazia para suprimir a saída da mensagem.
|
No | |
waitingMessage |
A mensagem mostrada aos usuários quando eles são transferidos para uma fila. O padrão é Agent chat session established. Waiting for agent to join . Você pode definir a propriedade como uma string vazia ou vazia para suprimir a saída da mensagem.
|
Número |
Esse componente pode retornar as seguintes ações:
Ação | Descrição |
---|---|
accepted |
A transição accepted é definida quando o chat é transferido com sucesso para uma fila.
Observe que depois que uma solicitação de chat é aceita, a conversa deve terminar com
|
rejected |
A transição rejected é definida quando ocorre uma das seguintes situações:
|
error |
A transição error é definida quando há um erro do sistema que impede a transferência para um agente humano.
|
Exemplo: Transferir para um Agente Humano
Este é um exemplo de fluxo de caixas de diálogo que é transferido para um agente quando o cliente pede para falar com um 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"
Exemplo: Transmitir Informações ao Serviço
Ao transferir uma conversa de um assistente digital para um agente ao vivo, você pode usar propriedades personalizadas no componente System.AgentTransfer
para transmitir essas informações.
Esta é a estrutura do Oracle B2C Service:
customProperties:
- name:
value:
type:
A propriedade type
é obrigatória para campos personalizados; caso contrário, é opcional.
Esta é a estrutura do Oracle Fusion Service:
customProperties:
- name:
value:
Veja um exemplo de definição customProperties
para o 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"
Dica:
Para o Oracle Fusion Service, a avaliação de regras é interrompida na primeira regra em que todas as condições são atendidas. Quando você configurar suas regras, certifique-se de que a conversa transferida não seja roteada de volta para o agente do assistente digital. No exemplodoTransfer
, a propriedade personalizada TriagedByODA_c
é definida como Y
e as regras podem usar essa propriedade personalizada para garantir que, quando definida como Y
, a conversa não seja roteada para o agente do assistente digital. (Para Oracle B2C Service, a configuração Mudar Estado e parar determina o roteamento.)
System.AgentTransferCondition
Você pode usar o componente System.AgentTransferCondition
nos assistentes digitais DA-as-agent para determinar se os agentes estão disponíveis e, em caso afirmativo, o tempo de espera esperado.
Este tópico abrange o uso desse componente no modo YAML. Para obter informações sobre como usá-lo no Visual Flow Designer, consulte Condição de Transferência do Agente.
Você usa as propriedades do componente para especificar as condições de transferência e retorna uma ação que indica se as condições foram atendidas. Além disso, define os valores da variável de mapa de contexto nomeada da seguinte forma:
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.
Veja um exemplo de como usar esse componente para descobrir se os agentes estão disponíveis, relatar o tempo de espera e permitir que os usuários cancelem a solicitação de transferência se não quiserem esperar tanto tempo.
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"
Dica:
Aqui está uma definição de pacote de recursos sugerida que você pode usar para exibir o tempo 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?
Propriedade | Descrição | 0brigatório? | |
---|---|---|---|
agentStatusVariable |
O nome da variável de contexto do tipo mapa a ser usado para armazenar as informações de status de disponibilidade do agente. Nenhuma informação é armazenada se a propriedade não for especificada. Para referenciar uma variável de mapa, use uma expressão de valor como esta: ${<mapVariableName>.value.<key>} . Por exemplo, agentStatus.value.expectedWaitMinutes .
|
No | |
allowTransferIf |
Especifica o conjunto base de condições que devem ser atendidas.
Se as condições especificadas não forem atendidas, a ação |
No | |
customProperties |
Um mapa que contém informações a serem transmitidas ao serviço. Consulte Transmitir Informações ao Serviço. Essa propriedade é suportada na versão 21.04 e mais recente. | No | |
errorMessage |
A mensagem mostrada ao usuário quando o Digital Assistant apresenta problemas com o serviço de chat do agente. O padrão é We were unable to check the agent transfer conditions because there was a system error. Essa string padrão é armazenada no pacote de recursos de configuração na chave systemComponent_AgentTransferCondition_errorMessage. Você pode definir a propriedade como uma string vazia ou vazia para suprimir a saída da mensagem.
|
No | |
maxEngagementsInQueue |
O número máximo permitido de participações aguardando na fila de destino. Quando a solicitação é enviada, o serviço de chat responde com o número atual de participações aguardando na fila. Se o valor exceder maxEngagementsInQueue , a ação conditionsNotMet ocorrerá. O padrão é -1 , o que significa que não há limite de participação.
|
No | |
maxWaitSeconds |
O número máximo de segundos de espera estimados permitidos. Quando o serviço de chat recebe a solicitação, ele responde com o tempo de espera estimado. Se esse valor exceder maxWaitSeconds , a ação conditionsNotMet ocorrerá. O padrão dessa propriedade é -1 , o que significa que não há tempo máximo de espera.
Observe que a ação |
No |
Esse componente pode retornar as seguintes ações:
Ação | Descrição |
---|---|
conditionsMet |
A transição conditionsMet é definida quando está dentro do horário comercial e as condições maxWaitSeconds , maxEngagementsInQueue e allowTransferIf são atendidas.
|
conditionsNotMet |
A transição conditionsNotMet é definida quando ocorre uma das seguintes situações:
|
error |
A transição error é definida quando há um problema com a conexão com o serviço de chat do agente durante a verificação de condições do agente.
|
Exemplo: Obter Disponibilidade do Agente e Tempo de Espera
Veja um exemplo de fluxo de caixas de diálogo que chama o componente, exibe o tempo de espera e dá ao usuário a oportunidade de cancelar sua solicitação de transferência.
############################
# 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"
O estado askIfWillWait
usa uma entrada de pacote de recursos para formar a mensagem de tempo de espera, de modo que a mensagem faça sentido se o tempo é maior ou menor que um minuto e se um número é 0, um ou mais.
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?
Observe que este exemplo usa System.SetCustomMetrics para rastrear se os agentes estavam disponíveis e, em caso afirmativo, quantos usuários escolheram aguardar e quantos cancelaram a solicitação de transferência.
Componentes Live-Agent-Transfer
System.AgentInitiation
Se você quiser transferir a conversa de uma habilidade para um agente do Oracle B2C Service, adicione esse componente ao fluxo de caixas de diálogo para iniciar o handshake com o canal de integração do agente especificado pela propriedade agentChannel
. Chame esse componente antes de chamar o componente System.AgentConversation
.
Esse componente destina-se às conversas originadas na habilidade. Não use esse componente para conversas originadas no chat do Oracle B2C Service, conforme descrito em O Digital Assistant as Agent Framework em Ação.
Este é um exemplo de uso desse componente para iniciar o handshake com a instância do Oracle B2C Service definida pelo canal de integração do agente chamado 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"
Dica:
Em habilidades com a versão 21.04 e mais recente da plataforma, os valores padrão das propriedadesagentActionsMessage
, errorMessage
, rejectedMessage
, resumedMessage
e waitingMessage
são armazenados no pacote de recursos da habilidade. Para alterar um padrão, abra a página Pacote de Recursos da habilidade, clique em 
Propriedade | Descrição | 0brigatório? | |
---|---|---|---|
agentActions |
Uma lista de ações que o agente pode acionar para encerrar o chat e mover o fluxo para o estado definido para a ação de transição. Na console do representante de serviços ao cliente, essas ações são exibidas como comandos de barra quando a conversa do agente é iniciada, conforme mostrado neste exemplo:
Os nomes das ações devem corresponder às propriedades
Você pode definir os elementos da lista
|
No | |
agentActionsMessage |
Se a propriedade agentActions estiver definida, a console do agente exibirá esse valor em vez da mensagem padrão. Por exemplo :
|
No | |
agentChannel |
Nomeia o canal de Integração do Agente. Esse valor, o nome do canal de Integração do Agente e a propriedade agentChannel definida para o componente System.AgentConversation devem corresponder.
|
Sim | |
allowTransferIf |
Especifica as condições em que a habilidade deve transferir a sessão de chat. O componente usa o valor queueId para identificar a fila da qual obter as estatísticas. Verifique se as regras de chat irão realmente transferir a conversa para a fila identificada e não para alguma outra fila.
Se a condição especificada não for atendida, o componente retornará Ao incluir essa propriedade, inclua também a propriedade Esta propriedade só está disponível em instâncias do Oracle Digital Assistant provisionadas no Oracle Cloud Infrastructure (às vezes chamadas de infraestrutura de nuvem Geração 2). |
Número | |
chatResponseVariable |
Nomeia a variável de mapa que armazena as informações de resposta do agente. Depois que o componente System.AgentInitiation estabelece conexão com sucesso, o mapa contém as seguintes propriedades:
|
Número | |
customProperties |
Um mapa que contém o ID do incidente, a interface, o contato ou os campos personalizados (ou uma combinação deles) a serem transmitidos ao serviço. Para referenciar uma variável de mapa, use uma expressão de valor como esta: ${mapVariableName.value} . Consulte Transmitir Informações do Cliente a um Chat ao Vivo.
|
Número | |
errorMessage |
A mensagem a ser exibida quando há um problema ao estabelecer uma conexão com o Oracle B2C Service. Por exemplo, a senha no canal de Integração do Agente não é mais válida ou há um problema com o servidor. | Número | |
nlpResultVariable |
A variável que armazena a mensagem de consulta do cliente. | Número | |
rejectedMessage |
Uma mensagem exibida se o handshake AgentInitiation foi rejeitado, como se estivesse fora das horas operacionais configuradas. Por exemplo :
|
Número | |
resumedMessage |
Uma mensagem (como, Só um minuto... estamos conectando você a um agente.) que é exibida quando o chat do cliente com o representante de serviços ao cliente é retomado. A adição dessa propriedade impede que os clientes cujas solicitações já tenham sido enfileiradas recebam uma mensagem enganosa Retomando o chat com o agente quando solicitarem repetidamente um chat ao vivo. | Número | |
subject |
A linha de assunto que é exibida no console do agente após a entrega à plataforma do agente. Por padrão, esta é a última mensagem do cliente armazenada na propriedade nlpResultVariable , mas você também pode definir isso usando uma variável estabelecida anteriormente na definição do fluxo de caixas de diálogo. Por exemplo, você pode definir uma variável de contexto do tipo string cujo valor é definido antes do componente System.AgentInitiation :
|
Número | |
queueId |
O ID da fila que o componente deve usar para determinar se a condição allowTransferIf especificada foi atendida. Esse deve ser o ID da fila para a qual as regras de chat do Oracle B2C Service rotearão essa conversa.
Essa propriedade será ignorada se a propriedade |
Obrigatório quando a propriedade allowTransferIf está presente.
|
|
transcriptDateTimeFormat |
O formato da data e hora nas mensagens de transcrição de conversa encaminhadas ao agente. Consulte a classe Java DateTimeFormatter para obter os padrões válidos. Exemplo: dd/MM/yyyy HH:mm . O padrão é yyyy-mmm-ddThh:mm:ssZ .
|
Número | |
transcriptTimezoneName |
O nome da IANA (Internet Assigned Numbers Authority) do fuso horário a ser usado para formatar a transcrição da conversa usando a propriedade transcriptDateTimeFormat . Exemplo: America/Sao_Paulo . O padrão é Europe/London . Se você não incluir a propriedade transcriptDateTimeFormat , essa propriedade será ignorada.
|
No | |
waitingMessage |
Uma mensagem exibida enquanto os clientes aguardam a conexão com um agente. Por exemplo :
|
No |
System.AgentInitiation Transições
System.AgentInitiation
retorna as ações accepted
, rejected
e error
. Essas ações podem apontar para outro estado, com a ação accepted
geralmente nomeando o estado para o componente System.AgentConversation
: agentInitiation:
component: "System.AgentInitiation"
properties:
agentChannel: "ServiceCloudIntegration"
...
transitions:
actions:
accepted: "agentConversation"
rejected: "noAgentsAvailable"
error: "handshakeError"
Ação | Descrição |
---|---|
accepted |
O handshake foi concluído com sucesso e o estado pode fazer a transição para o estado com o componente System.AgentConversation .
|
error |
Há um problema ao estabelecer uma conexão com o Oracle B2C Service. Por exemplo, a senha no canal de Integração do Agente não é mais válida ou há um problema com o servidor do Service Cloud. |
rejected |
O Oracle B2C Service rejeitou a solicitação de conexão. Estes são alguns dos motivos para rejeitar uma solicitação de conexão:
Observe que, se você não definir |
Exemplo: Tratar Rejeição de Inicialização do Agente e Erros do Sistema
Veja um exemplo de como tratar erros do sistema e as ações error
e 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"
Exemplo: A Propriedade 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}"
Exemplo: O Objeto customerInformation Padrão
Este exemplo define o 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}"
Exemplo: O Objeto customerInformation Legado
Este exemplo define interfaceID
e contactID
.
Dica:
Como o WSDL especifica queinterfaceID
é do tipo NamedID
, nós podíamos ter usado name: "myInterfaceName"
em vez 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}"
Exemplo: O Objeto customFields Padrão
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}"
Exemplo: O Objeto customFields Legado
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}"
Exemplo: Montar o Objeto de Propriedades Personalizadas
Essas etapas descrevem como você pode declarar o objeto customProperties
e definir seus vários valores.
Etapa 1: Declarar a Variável de Propriedades Personalizadas
customProperties
no componente System.AgentInitiation
. É um objeto JSON que pode conter as informações do cliente de bate-papo e os valores de campos personalizados. No seguinte exemplo, essa variável é declarada como liveChatInfo
:context:
variables:
size: "PizzaSize"
type: "PizzaType"
crust: "PizzaCrust"
iResult: "nlpresult"
interfaceId: "string"
categoryId: "string"
skillType: "string"
liveChatInfo: "map"
Etapa 2: Definir os Valores para a Variável de Mapa customProperties
customProperties
no componente System.AgentInitiation
. É um objeto JSON que pode conter as informações do cliente de bate-papo e os valores de campos personalizados. No seguinte exemplo, essa variável é declarada como liveChatInfo
:context:
variables:
size: "PizzaSize"
type: "PizzaType"
crust: "PizzaCrust"
iResult: "nlpresult"
interfaceId: "string"
categoryId: "string"
skillType: "string"
liveChatInfo: "map"
Etapa 3: Definir os Campos da Variável de Mapa customProperties
setLiveChatInfo:
component: "System.SetVariable"
properties:
variable: "liveChatInfo"
value:
customerInformation:
categoryID:
id: "${categoryId}"
customFields:
- name: "c$skilltype"
type: "STRING"
value: "${skillType}"
transitions:
next: "agentInitiation"
Etapa 4: Adicionar customProperties ao Componente System.AgentInitiation
customProperties
ao componente System.AgentInitiation
e defina-a usando uma expressão que acesse o valor da variável de mapa. 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
Use esse componente para transferir a conversa de uma habilidade para um agente ao vivo do Oracle B2C Service e para gerenciar o intercâmbio entre a habilidade e o agente ao vivo. Observe que você deve chamar o componente System.AgentInitiation
para que possa usar esse componente.
O componente System.AgentConversation
destina-se às conversas originadas na habilidade. Não use esse componente para conversas originadas no chat do Oracle B2C Service, conforme descrito em O Digital Assistant as Agent Framework em Ação.
Este é um exemplo de uso desse componente para transferir a conversa para a instância do Oracle B2C Service definida pelo canal de integração do agente chamado 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"
Propriedade | Descrição | 0brigatório? |
---|---|---|
agentChannel |
Nomeia o canal de Integração do Agente. Esse valor, o nome do canal de Integração do Agente e a propriedade agentChannel definida para o componente System.AgentInitiation devem corresponder.
|
Sim |
conclusionMessage |
Uma mensagem automatizada enviada ao cliente quando o usuário digita uma palavra-chave de saída, a ação agentLeft é acionada ou o agente encerra a conversa sem enviar uma das propriedades agentActions . Por exemplo, Your chat with the agent has ended .
|
No |
errorMessage |
A mensagem que o chat exibe se houver um problema com a conexão com o Oracle B2C Service.
A mensagem padrão é Esta propriedade só funciona com instâncias do Oracle Digital Assistant provisionadas no Oracle Cloud Infrastructure (às vezes chamadas de infraestrutura de nuvem Geração 2). |
No |
exitKeywords |
Uma lista separada por vírgulas de palavras de saída típicas usadas por um cliente para encerrar a conversa com o agente ao vivo. Por exemplo :
O valor da propriedade assume como padrão |
No |
expiryMessage |
Uma mensagem que é exibida quando a ação expired é acionada. A mensagem padrão é Chat session expired. Thanks for chatting with us .
Observe que o A mensagem de expiração não é gerada quando a conversa é concluída porque o |
No |
nlpResultVariable |
A variável nlpResultVariable que contém a mensagem de consulta do cliente.
|
No |
waitExpiryMessage |
A mensagem que é mostrada ao usuário quando o chat expira enquanto aguarda um agente. A mensagem padrão é The request for live chat expired while waiting for an agent. |
No |
waitMessage |
Por padrão, depois que a transferência de conversa é iniciada, a habilidade exibe a mensagem de espera que o serviço de chat ao vivo envia para a habilidade, como a posição da fila e o tempo de espera. Use esta propriedade para personalizar a mensagem. Por exemplo :
|
No |
System.AgentConversation Transições
O componente System.AgentConversation
pode acionar a ação expired
, agentLeft
, error
ou waitExpired
. Além disso, ele pode acionar qualquer ação da propriedade System.AgentInitiation
do componente agentActions
. Adicione também uma transição next
, porque um cliente pode digitar uma das exitKeywords
para sair do chat para que qualquer uma dessas ações possa ser acionada.
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"
...
Ação | Descrição |
---|---|
agentActions |
Se o componente System.AgentInitiation tiver uma propriedade agentActions , esse componente deverá ter uma ação de transição para cada ação suportada que for especificada por agentActions .
|
agentLeft |
O agente encerrou a sessão sem usar uma ação de barra (por exemplo, /Order). Como alternativa, a sessão foi encerrada porque não houve atividade dentro do tempo especificado pela configuração CS_IDLE_TIMEOUT do Oracle B2C Service e essa configuração é inferior à definição Expiração da Sessão para o canal de integração do agente. Consulte a ação expired para obter mais informações.
Observe que esta ação não é retornada quando o usuário sai da conversa inserindo uma palavra-chave de saída. Nesse caso, o fluxo faz a transição para o estado nomeado pela transição |
error |
Ocorreu um problema ao estabelecer conexão com o serviço de agente ao vivo. Esta ação só funciona com instâncias do Oracle Digital Assistant provisionadas no Oracle Cloud Infrastructure (às vezes chamadas de infraestrutura de nuvem Geração 2). |
expired |
Se a definição Por padrão, a configuração A ação Para exibir ou alterar as definições da instância do Oracle B2C Service, abra a Console do Desktop, clique em Navegação, clique no primeiro item de Configuração no menu e clique em Definições de Configuração. Em seguida, procure a definição na pasta Chat. |
waitExpired |
A solicitação de chat expirou enquanto aguardava um agente. Isso acontece quando o tempo de espera excede o valor na definição USER_WAIT_QUEUE_TIMEOUT do cliente de chat.
|
Exemplo: Configurar o Fluxo de Caixas de Diálogo de Transferência para Agente
Neste exemplo, a intenção GetAgent
foi treinada para compreender chamadas de pedido de socorro, como help me please!
intent:
component: "System.Intent"
properties:
variable: "iResult"
transitions:
actions:
OrderPizza: "resolvesize"
CancelPizza: "cancelorder"
GetAgent: "agentInitiation"
unresolvedIntent: "agentInitiation"
Veja aqui as etapas básicas para configurar o fluxo de caixas de diálogo:
-
Inicie a transferência para agente ao vivo:
-
Adicione um estado para o componente
System.AgentInitiation
. -
Defina a propriedade
agentChannel
do estado com o nome do canal de Integração do Agente que você configurou para o sistema de agente ao vivo.
Depois que o canal de Integração do Agente estabelece uma conexão e o Oracle B2C Service envia a solicitação de chat para a fila (isto é, após criar um ticket de ajuda), o componenteSystem.AgentInitiation
permite a transição para o próximo estado, que geralmente é definido para o componenteSystem.AgentConversation
(agentConversation
no exemplo a seguir).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"
Dica:
Os clientes podem solicitar repetidamente um bate-papo ao vivo, mesmo que suas solicitações já tenham sido enfileiradas na console de bate-papo do agente. Adicione uma propriedaderesumedMessage
ao estadoSystem.AgentInitiation
para impedir que esses clientes recebam uma mensagem enganosa Retomando o bate-papo com o agente. -
-
Adicione e configure o componente
System.AgentConversation
. Embora o mecanismo de caixa de diálogo esteja no estado definido para esse componente, a habilidade transmite as mensagens para frente e para trás entre o cliente e o agente. A habilidade atende às palavras-chave de saída na entrada do cliente, comobye
. Quando a habilidade detecta uma dessas palavras-chave, o componenteSystem.AgentConversation
encerra a sessão de bate-papo ao vivo e aciona sua transiçãonext
.Veja aqui um exemplo:
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"
Exemplo: Obter Informações de Pesquisa
No exemplo a seguir que usa o formato padrão, o componente AgentConversation
gera um link de pesquisa após o término da conversa do agente. O link inclui o ID da sessão e da participação do mapa que foi nomeado pela propriedade 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"
Exemplo: Transferir o Chat para uma Fila Específica do Oracle B2C Service
-
Se não tiver feito isso ainda, no nó de contexto, defina uma variável de mapa a ser usada com a propriedade
customProperties
do componenteSystem.AgentInitiation
. Por exemplo :context: variables: greeting: "string" name: "string" liveChatInfo: "map"
-
Defina os campos da variável de mapa.
Aqui está um exemplo do formato padrão para canais de integração do agente que foram criados na versão 20.01 ou posterior e que estabelecem conexão com o Oracle B2C Service versão 19A ou posterior.
setLiveChatInfo: component: "System.SetVariable" properties: variable: "liveChatInfo" value: customFields: - name: "c$frombot" type: "BOOLEAN" value: 1 transitions: next: "agentInitiation"
Aqui está um exemplo do formato legado para canais de integração do agente que foram criados antes da versão 20.01 ou que estabelecem conexão com uma versão anterior à versão 19A do Oracle B2C Service.
setLiveChatInfo: component: "System.SetVariable" properties: variable: "liveChatInfo" value: customFields: - name: "c$frombot" dataType: "BOOLEAN" dataValue: booleanValue: true transitions: next: "agentInitiation"
-
Adicione a propriedade
customProperties
ao componenteSystem.AgentInitiation
e defina-a com o valor da variável de mapa. Por exemplo :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
Este tópico abrange o uso desse componente no modo YAML. Para obter informações sobre como usá-lo no Designer de Fluxo Visual, consulte Resolver Entidade.
Faz a iteração por todos os campos de entidade no repositório composto, conversa com o usuário e resolve todos os campos. O componente escolhe aleatoriamente os prompts que você fornece para cada entidade ao resolver essa entidade.
Propriedade | Descrição | Obrigatório | |
---|---|---|---|
variable |
Refere-se à variável de contexto da entidade composta que é preenchida por esse componente. Se todas as entidades filhas da variável de entidade composta já tiverem um valor, o fluxo de caixas de diálogo fará a transição para o próximo estado sem enviar uma mensagem ao usuário. | Sim | |
nlpResultVariable |
Preenche a propriedade variable (que menciona a variável de entidade composta) usando os valores armazenados na variável de contexto nlpresult . Você pode definir essa propriedade nomeando a variável nlpresult (normalmente, iResult ). Quando a estrutura resolve uma única entidade filha, a propriedade variable é preenchida apenas com esse valor de entidade. Quando a variável nlpresult mantém valores de todas as entidades filhas, o fluxo de caixas de diálogo muda para o próximo estado. Você pode usar essa propriedade no lugar dos estados SetVariable que preenchem os valores da entidade filha.
|
No | |
maxPrompts |
Especifica o número de tentativas permitidas ao usuário para digitar um valor válido que corresponda ao tipo de entidade filha. Se o número máximo de tentativas for excedido para a primeira entidade filha, essa propriedade será redefinida como 0 e o bot gerará a solicitação da próxima entidade filha. Conforme descrito em Criar uma Entidade Composta, entidades individuais no repositório composto podem substituir essa definição quando a opção Máximo de Tentativas de Entrada do Usuário é definida. | No | |
autoNumberPostbackActions |
Quando você define como true , essa opção prefixa números às opções. Mesmo quando você não definir essa opção como true , a numeração automática poderá ser aplicada em itens de lista quando a configuração Ativar Numeração Automática em Ações de Postback do assistente digital for definida como true . A numeração automática específica do canal pode ser aplicada a qualquer bot de habilidade registrado em um assistente digital:
|
No | |
useFullEntityMatches |
Quando definidos como true , os valores de entidade personalizados são armazenados como objetos JSON (semelhante aos valores de entidade incorporados). Isso permite que você crie expressões para acessar propriedades como value , primaryLanguageValue e originalString , que são particularmente importantes para habilidades multilíngues no momento ou que eventualmente poderão se tornar multilíngues.
|
||
footerText |
Melhora a saída nos canais somente texto. Conforme descrito em Rodapés, você pode usar expressões do FreeMarker para condicionalizar o texto do rodapé para canais somente texto. | No | |
headerText |
Uma mensagem que é exibida antes de o componente solicitar ao usuário o próximo item no repositório. Você pode usar esse cabeçalho para fornecer feedback sobre as entidades anteriores no repositório que foram correlacionadas (ou atualizadas).
|
No | |
transitionAfterMatch |
Um booliano que, quando você o define como true , permite uma transição temporária da correspondência de entidade executada por esse componente para um componente personalizado. Por padrão, isso é false . Se você registrou um handler de eventos de entidade, essa propriedade será ignorada (e a transição match não será acionada).
|
No | |
cancelPolicy |
Determina o tempo da transição cancel :
maxPromptsReached de nível de item ou evento. |
No |
Componentes do Calendário
Use estes componentes de calendário para interagir com calendários do Outlook e do Google:
-
System.CreateCalendarEvent: Criar um evento
-
System.DeleteCalendarEvent: Cancelar um evento
-
System.GetCalendarEventDetails: Obter detalhes sobre um evento
-
System.ListCalendarEvents: Obter dados de um conjunto filtrado de eventos
-
System.SelectCalendarEvent: Selecionar um evento em uma lista filtrada
-
System.SubmitInviteResponse: Alterar o status de resposta de um evento
-
System.UpdateCalendarEvent: Alterar um evento
Autorização do Calendário
Para ativar a interação entre uma habilidade e um provedor de calendário, configure um serviço e modificar a habilidades e o fluxo de caixas de diálogo para permitir que o usuário acesse o calendário por meio desse serviço.
Antes de usar qualquer componente do calendário, registre um aplicativo no provedor do calendário e crie um serviço de código de autorização. Consulte estes tópicos para saber como:
No seu fluxo de caixas de diálogo, você usa o componente System.OAuth2AccountLink
para solicitar que o usuário acesse o calendário por meio do serviço de código de autorização que você criou. Observe que não é possível definir a propriedade enableSingleSignOn
do componente como true
quando você usa o componente para autorização de componente do calendário.
Você pode aproveitar o recurso "exige autorização" para garantir automaticamente que o usuário tenha acessado (obtido um token de acesso) antes de chamar qualquer componente do calendário. Esse recurso só pedirá que o usuário acesse se ele ainda não tiver um token de acesso ou se tiver expirado e não puder ser atualizado. Você pode usar a configuração Exige Autorização da habilidade para definir o padrão para toda a habilidade e, em seguida, usar a definição requiresAuthorization
de nível de estado para substituir o padrão. Ou seja, você usa a definição da habilidade para definir o padrão e depois apenas inclui a definição requiresAuthorization
do componente nos estados cujo padrão não se aplica.
Para usar o recurso de autorização necessária, adicione uma ação system.authorizeUser
ao nó defaultTransitions
para nomear o estado que inicia o fluxo de autorização. Por exemplo :
defaultTransitions:
error: "globalErrorHandler"
actions:
system.authorizeUser: "userAuthN.performOAuth"
Antes da transição de uma habilidade para um estado que exige autorização, ela verifica se há um token de acesso válido para o serviço de calendário. Caso contrário, ela executará as seguintes ações:
-
Chama o estado que você definiu para a ação
system.authorizedUser
no nódefaultTransitions
. -
Pede ao usuário que acesse o sistema.
-
Faz a transição para o estado que exigiu a autorização (ou seja, o estado definido por
${system.requestedState}
).
Veja um exemplo de fluxo de caixas de diálogo de autorização:
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 uma habilidade que se concentra principalmente nos componentes do calendário, considere definir a configuração Exige Autorização da habilidade como true
e, em seguida, definir o valor como falso somente para os estados que não exigem autorização. Neste exemplo, qualquer usuário pode executar os estados initTimezoneOffset
e intent
. Portanto, requiresAuthorization
é definido como false
para esses estados. Os estados que funcionam com os componentes do calendário não precisam incluir requiresAuthorization
porque o padrão é 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"
Como Trabalhar com Datas e Horas do Calendário
Ao trabalhar com os componentes do calendário, é importante entender o relacionamento entre os horários inicial e final, as entidades DATE e TIME, e o fuso horário local.
Ao criar, atualizar ou recuperar eventos, você usa a data/hora local dos valores start
e end
e usa a propriedade timezoneOffset
ou timezone
para informar ao componente como calcular o horário universal (UTC).
O componente do calendário timezoneOffset
é diferente do profile.timezoneOffset
. Para componentes de calendário, timezoneOffset
é o valor que o componente deve adicionar aos valores start
e end
para obter o UTC. Você pode derivar o valor da propriedade timezoneOffset
do componente do calendário multiplicando profile.timezoneOffset
por -1.
O profile.timezoneOffset
pode nem sempre estar disponível. Isso depende de se o cliente forneceu o deslocamento. Por exemplo, alguém pode criar um aplicativo Oracle Web que não define profile.timezoneOffset
. Portanto, é uma boa ideia criar um fuso horário padrão para casos em que o profile.timezoneOffset
não foi definido. Por exemplo :
initTimezoneOffset:
requiresAuthorization: false
component: "System.SetVariable"
properties:
variable: "timezoneOffset"
value: <#attempt>${profile.timezoneOffset}<#recover>${system.config.defaultTimezoneOffset}</#attempt>
transitions:
next: "intent
Quando você recupera um evento, o componente retorna os valores de data e hora no formato UTC. Por exemplo: 2021-04-15T22:00:00.000Z
. Sua habilidade precisa converter o valor na 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"
Quando você usar as entidades DATE e TIME, considere o seguinte:
-
Se usar uma entidade composta que tenha uma entidade DATE e uma ou mais entidades TIME, desative Extração Fora da Ordem. Caso contrário, quando as entidades forem resolvidas, você não terá controle sobre quais valores são resolvidos como entidade DATE e quais são resolvidos como entidade TIME (ou ambos). Por exemplo, quando TIME for resolvido, poderá alterar o valor da entidade DATE.
-
Quando uma declaração contém texto, como "ontem", "hoje" ou "manhã", o parser não leva em consideração o fuso horário local. Portanto, é possível que, no início da manhã e no final da tarde, a data errada seja usada. Por esse motivo, é uma boa ideia refletir de volta a data resolvida para que o usuário possa verificá-la antes de a habilidade adicionar um evento ou atualizar a hora inicial ou final de um evento.
-
Para definir os valores de propriedade
start
eend
de um calendário, use a data da entidade DATE e o horário da entidade TIME. Por exemplo :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']}"
Tratando Erros do Calendário
O provedor de calendário pode rejeitar uma solicitação de evento. Por exemplo, ele poderá retornar um erro se o usuário tentar criar um evento que tenha um horário final anterior ao horário inicial. Na maioria dos casos, o provedor de calendário retorna um erro 400, que, por sua vez, faz a transição da habilidade para o handler de erro global.
Considere a validação dos valores para evitar que esses erros ocorram. Aqui estão exemplos de validações de entidade composta:
-
Entidade DATE: Para reuniões novas e atualizadas, confirme se a data é igual ou posterior à data atual.
${(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')}
-
Entidade TIME: Para reuniões novas e atualizadas, confirme se a data e o horário inicial são iguais ou posteriores à data e hora atuais.
${(((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 todos os horários finais, confirme se o horário final é posterior ao horário inicial.
${(newEvent.value.startTime.date?number_to_time < newEvent.value.endTime.date?number_to_time)?then('true','false')}
Para tratar as rejeições do provedor de calendário normalmente, adicione seu próprio handler de erro global. Por exemplo :
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"
Se preferir, use a transição de erro para criar handlers de erro apropriados 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
Use esse componente para adicionar um evento a um calendário do Outlook ou do Google. Observe que não é possível criar eventos recorrentes ou de dia inteiro.
O usuário deve ter acessado o provedor de calendário para acessar esse componente. Você pode usar o recurso "exige autorização" para gerenciar o acesso do usuário, conforme descrito em Autorização do Calendário.
Para saber como definir os valores start
e end
, consulte Como Trabalhar com Datas e Horas do Calendário.
Veja aqui um exemplo de como usar esse componente. Nesse exemplo, uma entidade composta é usada para obter a data, os horários inicial e final, o assunto, o local e os participantes.
####################
# 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"
...
Esse componente é suportado no Oracle Digital Assistant Versão 21.02 e mais recente.
Propriedade | Descrição | 0brigatório? |
---|---|---|
provider |
O provedor de calendário. Os valores permitidos são Google e Outlook .
|
Sim |
calendarOwner |
O ID do usuário do proprietário do calendário. Deve ser um ID de conta válido para o provedor de calendário, como o valor da variável identificada pela propriedade authenticatedUserVariable do componente System.OAuth2AccountLink , que é definida quando o usuário se autentica.
|
Sim |
calendarId |
O nome do calendário. Para o calendário padrão do usuário, defina com o mesmo valor da propriedade calendarOwner .
|
Sim |
credential |
O token de acesso do provedor. Esse é o valor da variável identificado pela propriedade accessTokenVariableName do componente System.OAuth2AccountLink , que é definida quando o usuário se autentica.
|
Sim |
start |
A data e hora iniciais da reunião no formato yyyy-MM-dd'T'HH:mm:ss Por exemplo, 2021-02-26T09:55:00 .
|
Sim |
end |
A data e hora finais da reunião no formato yyyy-MM-dd'T'HH:mm:ss . Por exemplo, 2021-02-26T09:55:00 .
|
Sim |
subject |
O assunto da reunião. | Sim |
attendees |
Uma lista de participantes separados por vírgulas. Observe que o provedor de calendário não poderá enviar uma notificação a um participante se o ID não for um ID de conta válido para esse provedor. | Sim |
timezoneOffset |
O tempo em milissegundos a ser adicionado ao horário universal (UTC) a fim de obter o horário padrão no fuso horário do usuário. Por exemplo, se o fuso horário local for UTC-2, o timezoneOffset será -7200000 . O valor padrão é 0.
Observação
Você pode derivar a propriedade timezoneOffset para o usuário atual com base no valor da variável de contexto do usuário profile.timezoneOffset . No entanto, se fizer isso, multiplique profile.timezoneOffset por -1.
Você pode especificar |
No |
timezone |
O ID do fuso horário local identificado por https://www.iana.org/time-zones. Também chamado de nome do banco de dados TZ. Por exemplo: |
No |
System.DeleteCalendarEvent
Use esse componente para excluir um evento de um calendário do Outlook ou do Google. Observe que não é possível excluir eventos recorrentes ou de dia inteiro.
O usuário deve ter acessado o provedor de calendário para acessar esse componente. Você pode usar o recurso "exige autorização" para gerenciar o acesso do usuário, conforme descrito em Autorização do Calendário.
Veja aqui um exemplo de como usar esse 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"
...
Esse componente é suportado no Oracle Digital Assistant Versão 21.02 e mais recente.
Propriedade | Descrição | 0brigatório? |
---|---|---|
provider |
O provedor de calendário. Os valores permitidos são Google e Outlook .
|
Sim |
calendarOwner |
O ID do usuário do proprietário do calendário. Deve ser um ID de conta válido para o provedor de calendário, como o valor da variável identificada pela propriedade authenticatedUserVariable do componente System.OAuth2AccountLink , que é definida quando o usuário se autentica.
|
Sim |
calendarId |
O nome do calendário. Para o calendário padrão do usuário, defina com o mesmo valor da propriedade calendarOwner .
|
Sim |
credential |
O token de acesso do provedor. Esse é o valor da variável identificado pela propriedade accessTokenVariableName do componente System.OAuth2AccountLink , que é definida quando o usuário se autentica.
|
Sim |
eventId |
O ID do evento a ser excluído. Você pode usar System.ListCalendarEvents ou System.SelectCalendarEvent para obter um eventId .
|
Sim |
System.GetCalendarEventDetails
Use esse componente para obter os detalhes de um evento do calendário do Outlook ou do Google.
O usuário deve ter acessado o provedor de calendário para acessar esse componente. Você pode usar o recurso "exige autorização" para gerenciar o acesso do usuário, conforme descrito em Autorização do Calendário.
Os detalhes são retornados na variável especificada pela propriedade eventDetailsVariableName
no seguinte 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
}
As propriedades start
e end
são valores do UTC. Para saber como converter os valores start
e end
em horário local, consulte Como Trabalhar com Datas e Horas do Calendário.
Veja aqui um exemplo de como usar esse 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"
Esse componente é suportado no Oracle Digital Assistant Versão 21.02 e mais recente.
Propriedade | Descrição | 0brigatório? |
---|---|---|
provider |
O provedor de calendário. Os valores permitidos são Google e Outlook .
|
Sim |
calendarOwner |
O ID do usuário do proprietário do calendário. Deve ser um ID de conta válido para o provedor de calendário, como o valor da variável identificada pela propriedade authenticatedUserVariable do componente System.OAuth2AccountLink , que é definida quando o usuário se autentica.
|
Sim |
calendarId |
O nome do calendário. Para o calendário padrão do usuário, defina com o mesmo valor da propriedade calendarOwner .
|
Sim |
credential |
O token de acesso do provedor. Esse é o valor da variável identificado pela propriedade accessTokenVariableName do componente System.OAuth2AccountLink , que é definida quando o usuário se autentica.
|
Sim |
eventId |
O ID do evento a ser recuperado. Você pode usar System.ListCalendarEvents ou System.SelectCalendarEvent para obter um eventId .
|
Sim |
eventDetailsVariableName |
O nome da variável de contexto na qual armazenar os detalhes. | Sim |
System.ListCalendarEvents
Use este componente para obter uma matriz de eventos do Outlook ou do Google para um proprietário de calendário nomeado. Você pode filtrar a lista por estes atributos:
- O evento pode ser excluído
- O evento pode ser atualizado
- O usuário foi convidado para o evento
- Como o usuário respondeu a um convite
- O evento inclui um ou mais participantes nomeados
- A reunião começa depois de uma data e hora
- A reunião termina antes de uma data e hora
O usuário deve ter acessado o provedor de calendário para acessar esse componente. Você pode usar o recurso "exige autorização" para gerenciar o acesso do usuário, conforme descrito em Autorização do Calendário.
A lista é retornada na variável especificada pela propriedade eventListVariableName
no seguinte 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 saber como definir os valores start
e end
, consulte Como Trabalhar com Datas e Horas do Calendário. Esse tópico também mostra como converter os valores de propriedade start
e end
JSON em horário local.
Veja aqui um exemplo de como usar esse 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"
Esse componente é suportado no Oracle Digital Assistant Versão 21.02 e mais recente.
Propriedade | Descrição | 0brigatório? |
---|---|---|
provider |
O provedor de calendário. Os valores permitidos são Google e Outlook .
|
Sim |
calendarOwner |
O ID do usuário do proprietário do calendário. Deve ser um ID de conta válido para o provedor de calendário, como o valor da variável identificada pela propriedade authenticatedUserVariable do componente System.OAuth2AccountLink , que é definida quando o usuário se autentica.
|
Sim |
calendarId |
O nome do calendário. Para o calendário padrão do usuário, defina com o mesmo valor da propriedade calendarOwner .
|
Sim |
credential |
O token de acesso do provedor. Esse é o valor da variável identificado pela propriedade accessTokenVariableName do componente System.OAuth2AccountLink , que é definida quando o usuário se autentica.
|
Sim |
listType |
Indica o tipo de lista. Deve ser um dos seguintes:
|
Sim |
eventListVariableName |
O nome da variável de contexto na qual armazenar a lista de eventos. | Sim |
start |
A data e hora mais antigas nas quais as reuniões devem ser incluídas na lista (formato: yyyy-MM-dd'T'HH:mm:ss ). Por exemplo, 2021-02-26T09:55:00 .
|
Sim |
end |
A data e hora mais recentes nas quais as reuniões devem ser incluídas na lista (formato: yyyy-MM-dd'T'HH:mm:ss ). Por exemplo, 2021-02-26T09:55:00 .
Para o tipo de lista |
No |
attendees |
Uma lista de strings separadas por vírgulas e sem distinção entre maiúsculas e minúsculas a serem usadas para filtrar a lista por participantes. Somente as reuniões em que um ou mais valores de participante contêm uma ou mais strings na lista são incluídas na saída. | No |
response |
Uma lista de status de convite separados por vírgulas para filtrar a lista quando listType for INVITED . Os status permitidos são:
O padrão é |
No |
timezoneOffset |
O tempo em milissegundos a ser adicionado ao horário universal (UTC) a fim de obter o horário padrão no fuso horário do usuário. Por exemplo, se o fuso horário local for UTC-2, o timezoneOffset será -7200000 . O valor padrão é 0.
Observação
Você pode derivar a propriedade timezoneOffset para o usuário atual com base no valor da variável de contexto do usuário profile.timezoneOffset . No entanto, se fizer isso, multiplique profile.timezoneOffset por -1.
Você pode especificar |
No |
timezone |
O ID do fuso horário local identificado por https://www.iana.org/time-zones. Também chamado de nome do banco de dados TZ. Por exemplo: America/Los_Angeles . O padrão é UTC . Você pode especificar timezoneOffset ou timezone , mas não ambos.
|
No |
Esse componente pode retornar as seguintes ações:
Ação | Descrição |
---|---|
found |
Um ou mais eventos foram retornados. |
notfound |
Não há eventos correspondentes. |
System.SelectCalendarEvent
Use esse componente para exibir uma lista de eventos do Outlook ou do Google entre os quais o usuário pode selecionar. O componente salva o ID do evento selecionado na variável especificada pela propriedade eventIdVariableName
.
Você pode filtrar a lista de seleção entre estes atributos:
- O evento pode ser excluído
- O evento pode ser atualizado
- O usuário foi convidado para o evento
- Como o usuário respondeu a um convite
- O evento inclui um ou mais participantes nomeados
- A reunião começa depois de uma data e hora
- A reunião termina antes de uma data e hora
O usuário deve ter acessado o provedor de calendário para acessar esse componente. Você pode usar o recurso "exige autorização" para gerenciar o acesso do usuário, conforme descrito em Autorização do Calendário.
Para saber como definir os valores start
e end
, consulte Como Trabalhar com Datas e Horas do Calendário.
Veja aqui um exemplo de como usar esse 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"
...
Esse componente é suportado no Oracle Digital Assistant Versão 21.02 e mais recente.
Propriedade | Descrição | 0brigatório? |
---|---|---|
provider |
O provedor de calendário. Os valores permitidos são Google e Outlook .
|
Sim |
calendarOwner |
O ID do usuário do proprietário do calendário. Deve ser um ID de conta válido para o provedor de calendário, como o valor da variável identificada pela propriedade authenticatedUserVariable do componente System.OAuth2AccountLink , que é definida quando o usuário se autentica.
|
Sim |
calendarId |
O nome do calendário. Para o calendário padrão do usuário, defina com o mesmo valor da propriedade calendarOwner .
|
Sim |
credential |
O token de acesso do provedor. Esse é o valor da variável identificado pela propriedade accessTokenVariableName do componente System.OAuth2AccountLink , que é definida quando o usuário se autentica.
|
Sim |
listType |
Indica o tipo de lista. Deve ser um dos seguintes:
|
Sim |
eventIdVariableName |
O nome da variável de contexto na qual armazenar o ID do evento. | Sim |
start |
A data e hora mais antigas nas quais as reuniões devem ser incluídas na lista (formato: yyyy-MM-dd'T'HH:mm:ss ). Por exemplo, 2021-02-26T09:55:00 .
|
Sim |
end |
A data e hora mais recentes nas quais as reuniões devem ser incluídas na lista (formato: yyyy-MM-dd'T'HH:mm:ss ). Por exemplo, 2021-02-26T09:55:00 .
Para o tipo de lista |
No |
attendees |
Uma lista de strings separadas por vírgulas e sem distinção entre maiúsculas e minúsculas a serem usadas para filtrar a lista por participantes. Somente as reuniões em que um ou mais valores de participante contêm uma ou mais strings na lista são incluídas na saída. | No |
response |
Uma lista de status de convite separados por vírgulas para filtrar a lista quando listType for INVITED . Os status permitidos são:
O padrão é |
Número |
prompt |
O texto que aparece antes da lista. O padrão é You have the following meeting(s): Não é necessário incluir essa propriedade, a menos que você queira substituir o padrão.
Dica: Em habilidades com a versão 21.04 e mais recente da plataforma, o valor padrão é armazenado no pacote de recursos da habilidade. Para alterar o padrão, abra a página Pacote de Recursos da habilidade, clique em![]() |
Número |
allDayLabel |
O texto para indicar eventos de dia inteiro. O padrão é All day .
|
Número |
recurringLabel |
O texto para indicar um evento recorrente. O padrão é Recurring .
|
Número |
acceptedLabel |
O texto para indicar que o proprietário do calendário aceitou o convite. O padrão é Accepted .
|
Número |
tentativeLabel |
O texto para indicar que o proprietário do calendário aceitou temporariamente o convite. O padrão é Tentative .
|
Número |
declinedLabel |
O texto para indicar que o proprietário do calendário recusou o convite. O padrão é Declined .
|
Número |
pendingLabel |
O texto para indicar que o proprietário do calendário não respondeu ao convite. O padrão é Pending .
|
Número |
timezoneOffset |
O tempo em milissegundos a ser adicionado ao horário universal (UTC) a fim de obter o horário padrão no fuso horário do usuário. Por exemplo, se o fuso horário local for UTC-2, o timezoneOffset será -7200000 . O valor padrão é 0.
Observação
Você pode derivar a propriedade timezoneOffset para o usuário atual com base no valor da variável de contexto do usuário profile.timezoneOffset . No entanto, se fizer isso, multiplique profile.timezoneOffset por -1.
Você pode especificar |
Número |
timezone |
O ID do fuso horário local identificado por https://www.iana.org/time-zones. Também chamado de nome do banco de dados TZ. Por exemplo: America/Los_Angeles . O padrão é UTC . Você pode especificar timezoneOffset ou timezone , mas não ambos.
|
Número |
Esse componente pode retornar as seguintes ações:
Ação | Descrição |
---|---|
found |
Um ou mais eventos foram retornados. |
notfound |
Não há eventos correspondentes. |
System.SendInviteResponse
Use este componente para aceitar, aceitar temporariamente ou recusar um convite para um evento de calendário do Outlook ou do Google.
O usuário deve ter acessado o provedor de calendário para acessar esse componente. Você pode usar o recurso "exige autorização" para gerenciar o acesso do usuário, conforme descrito em Autorização do Calendário.
Veja aqui um exemplo de como usar esse 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"
Esse componente é suportado no Oracle Digital Assistant Versão 21.02 e mais recente.
Propriedade | Descrição | 0brigatório? |
---|---|---|
provider |
O provedor de calendário. Os valores permitidos são Google e Outlook .
|
Sim |
calendarOwner |
O ID do usuário do proprietário do calendário. Deve ser um ID de conta válido para o provedor de calendário, como o valor da variável identificada pela propriedade authenticatedUserVariable do componente System.OAuth2AccountLink , que é definida quando o usuário se autentica.
|
Sim |
calendarId |
O nome do calendário. Para o calendário padrão do usuário, defina com o mesmo valor da propriedade calendarOwner .
|
Sim |
credential |
O token de acesso do provedor. Esse é o valor da variável identificado pela propriedade accessTokenVariableName do componente System.OAuth2AccountLink , que é definida quando o usuário se autentica.
|
Sim |
eventId |
O ID do evento ao qual enviar a resposta. Você pode usar System.ListCalendarEvents ou System.SelectCalendarEvent para obter o ID dos eventos do calendário cujo proprietário do calendário foi convidado.
|
Sim |
response |
A resposta a ser enviada. As respostas permitidas são:
|
Sim |
System.UpdateCalendarEvent
Use esse componente para fazer alterações em um evento de calendário do Outlook ou do Google. Observe que não é possível atualizar eventos recorrentes ou de dia inteiro.
O usuário deve ter acessado o provedor de calendário para acessar esse componente. Você pode usar o recurso "exige autorização" para gerenciar o acesso do usuário, conforme descrito em Autorização do Calendário.
Para saber como definir os valores start
e end
, consulte Como Trabalhar com Datas e Horas do Calendário.
Veja aqui um exemplo de como usar esse componente. Neste exemplo, uma entidade composta é usada para obter a data e os horários inicial e final.
####################
# 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"
...
Esse componente é suportado no Oracle Digital Assistant Versão 21.02 e mais recente.
Propriedade | Descrição | 0brigatório? |
---|---|---|
provider |
O provedor de calendário. Os valores permitidos são Google e Outlook .
|
Sim |
calendarOwner |
O ID do usuário do proprietário do calendário. Deve ser um ID de conta válido para o provedor de calendário, como o valor da variável identificada pela propriedade authenticatedUserVariable do componente System.OAuth2AccountLink , que é definida quando o usuário se autentica.
|
Sim |
calendarId |
O nome do calendário. Para o calendário padrão do usuário, defina com o mesmo valor da propriedade calendarOwner .
|
Sim |
credential |
O token de acesso do provedor. Esse é o valor da variável identificado pela propriedade accessTokenVariableName do componente System.OAuth2AccountLink , que é definida quando o usuário se autentica.
|
Sim |
eventId |
O ID do evento a ser atualizado. Você pode usar System.ListCalendarEvents ou System.SelectCalendarEvent para obter um eventId .
|
Sim |
start |
A nova data e hora iniciais no formato yyyy-MM-dd'T'HH:mm:ss Por exemplo, 2021-02-26T09:55:00 .
|
No |
end |
A nova data e hora finais no formato yyyy-MM-dd'T'HH:mm:ss Por exemplo, 2021-02-26T09:55:00 .
|
No |
subject |
O novo assunto da reunião. | Sim |
attendees |
Uma lista de participantes separados por vírgulas. Essa lista substitui a lista anterior. Observe que o provedor de calendário não poderá enviar uma notificação a um participante se o ID não for um ID de conta válido para esse provedor. | Sim |
timezoneOffset |
O tempo em milissegundos a ser adicionado ao horário universal (UTC) a fim de obter o horário padrão no fuso horário do usuário. Por exemplo, se o fuso horário local for UTC-2, o timezoneOffset será -7200000 . O valor padrão é 0.
Observação
Você pode derivar a propriedade timezoneOffset para o usuário atual com base no valor da variável de contexto do usuário profile.timezoneOffset . No entanto, se fizer isso, multiplique profile.timezoneOffset por -1.
Você pode especificar |
No |
timezone |
O ID do fuso horário local identificado por https://www.iana.org/time-zones. Também chamado de nome do banco de dados TZ. Por exemplo: America/Los_Angeles . O padrão é UTC . Você pode especificar timezoneOffset ou timezone , mas não ambos.
|
No |
Rodapés

Esse rodapé é exibido em todos os canais, mesmo naqueles que suportam botões como o Facebook. No entanto, você pode configurar a renderização específica do canal para o rodapé. Para isso:
-
Defina a variável
autoNumberPostbackActions
usando a expressãosystem.message
.setAutoNumbering: component: "System.SetVariable" properties: variable: "autoNumberPostbackActions" value: "${(system.channelType=='facebook')?then('true','false')}"
-
Defina a opção
footerText
com uma diretivaif
do Apache FreeMarker para exibir ou ocultar o rodapé com base no tipo de canal.footerText: <#if autoNumberPostbackActions.value>"Make your choice by entering the menu option number."</#if>
No Facebook, System.CommonResponse renderiza o texto de rodapé em sua própria bolha de texto que aparece um pouco antes das ações globais (as respostas rápidas). O rodapé não pode ser exibido após essas ações, porque isso exige uma segunda bolha de texto de rodapé que faz com que as ações desapareçam.
A Propriedade de tradução
translate
que substitui a definição de variável autoTranslate
global:
-
Se você definir a variável
autoTranslate
comofalse
(o padrão), nenhuma tradução automática ocorrerá no componente, a menos que você defina a propriedadetranslate
comotrue
. -
Se você definir a variável
autoTranslate
comotrue
, a propriedadetranslate
será implicitamente definida comotrue
também, o que significa que o label, o título, a descrição, o prompt e as strings de texto serão traduzidos.
autotranslate
definindo-a como true
, a definição da propriedade translate
de um componente como false
excluirá prompt, título, descrição, label e strings de texto da tradução. Por outro lado, se você não ativar autotranslate
, mas a propriedade translate
de um componente for definida como true
, o prompt, o título, a descrição, o label e a string de texto do componente serão traduzidos para o idioma do usuário detectado, usando o serviço de tradução configurado. (Os componentes de entrada traduzem a entrada do usuário para o inglês.)
autoTranslate é definido como... | ...e a propriedade translate do componente é definida como... | ...então, a entrada do usuário, o prompt, o label, o texto, o título e a descrição são traduzidos |
---|---|---|
true |
não definida | sim |
true |
true |
sim |
true |
false |
nenhum |
false |
não definida | nenhum |
false |
false |
nenhum |
false |
true |
sim |
Os fluxos projetados com o Designer de Fluxo Visual não têm a propriedade
translate
ou a variável de contexto autoTranslate
. Para configurar a conversão dessas habilidades, use as propriedades Traduzir Mensagem de Entrada do Usuário e Traduzir Mensagem de Resposta do Bot.
System.Feedback
Este tópico abrange o uso desse componente no modo YAML. Para obter informações sobre como usá-lo no Editor de Fluxo Visual, consulte Feedback do Usuário.
O componente System.Feedback
permite coletar dados de feedback para Insights apresentando aos usuários uma escala de classificação depois que eles concluírem um fluxo transacional. Se você estiver usando o SDK 21.10 ou posterior, esse componente gerará um sistema de classificação por estrelas horizontal. Se você estiver usando um SDK anterior, o componente gerará essa escala de classificação como uma lista simples que permite aos usuários tocar no botão que corresponde à classificação deles.
Embora seja possível alterar o comportamento desse componente usando as propriedades do componente, você pode alterar sua aparência ao usar o SDK (versão 21.10 ou posterior). Por exemplo, você pode substituir os ícones de estrela padrão usados para os botões de feedback por outro ícone.
System.Feedback Propriedades do Componente
Propriedade | Descrição |
---|---|
maxRating |
A classificação máxima que um usuário pode enviar. Por padrão, o valor máximo é 5 . Você pode ajustar esse valor para baixo.
|
enableTextFeedback |
Um booliano, que se definido como true , permite que o usuário envie feedback de texto se a classificação for menor ou igual ao valor threshold . Por padrão, essa propriedade é definida como false (nenhum feedback ativado).
|
threshold |
O valor para avaliar a transição entre as ações above e below . Por padrão, o limite entre feedback positivo e negativo é definido como 2 para o valor maxRating padrão, que é 5 .
|
footerText |
O texto que é exibido na parte inferior da caixa de diálogo de feedback. |
System.Feedback Transições de Componentes
return: "done"
.
Ação | Descrição |
---|---|
above |
Defina quando a entrada do usuário for um valor válido que esteja acima do valor threshold .
|
below |
Defina quando a entrada do usuário for um valor válido igual ou inferior ao valor threshold . ).
|
cancel |
Defina quando os usuários recusarem a classificação clicando em Ignorar. |
system.userFeedbackRating
- Retorna a classificação do usuário.system.userFeedbackText
- QuandoenableTextFeedback
é definido comotrue
, sua habilidade pode solicitar feedback quando as classificações ficam abaixo do valorthreshold
.system.userFeedbackText
retorna a entrada do usuário (${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á obsoleto e não há mais um modelo disponível para ele. Em vez disso, você pode usar um dos muitos modelos com base no componente Resposta Comum que são oferecidos na seção Mensagens do Usuário da caixa de diálogo Adicionar Componente.
O componente System.Text
permite que seu bot defina uma variável de contexto ou do usuário solicitando que o usuário digite um texto.
System.Text
pela primeira vez, ele solicita que o usuário digite um texto. Quando o usuário digita um valor, o Mecanismo de Caixa de Diálogo retorna para esse estado. O componente processa a resposta do usuário e, se for possível converter a entrada do usuário no tipo de variável, ele armazenará o valor na variável. O Mecanismo de Caixa de Diálogo é movido para outro estado quando essa variável tem um valor.
O Mecanismo de Caixa de Diálogo ignora o estado
System.Text
da variável que já tem um valor.
Propriedade | Descrição | 0brigatório? |
---|---|---|
prompt |
Uma string de texto que descreve a entrada exigida do usuário. É possível adicionar valores dinamicamente a ela usando uma expressão de valor. Por exemplo: Hello ${profile.firstName}, how many pizzas do you want? |
Sim |
variable |
O nome da variável, que pode ser de usuário ou uma das variáveis declaradas no nó context .
|
Sim |
nlpResultVariable |
Define a propriedade variable com um valor de entidade (quando o valor da entidade ainda não foi definido para a variável referenciada). Você pode ativar nlpResultVariable para retornar um valor usando uma variável que armazena os resultados de NLP (como iresult: "nlpresult" , que é usado em nossos bots de amostra). Ao fazer isso, a propriedade nlpResultVariable ainda poderá preencher o valor quando ele for nulo se encontrar uma entidade resolvida que corresponda à referenciada pela variável. A caixa de diálogo muda para o próximo estado quando nlpResultVariable define o valor. Você pode usar essa propriedade no lugar do componente System.SetVariable.
|
No |
maxPrompts |
O número de vezes que o componente solicita que o usuário insira uma entrada válida. Consulte Limitando o Número de Prompts do Usuário. | No |
translate |
Use essa propriedade para substituir o valor booliano que você definiu para a variável de contexto autotranslate . Se você não tiver definido essa variável ou se defini-la como false , poderá definir essa propriedade como true para ativar a tradução automática somente desse componente. Se você definir a variável autotranslation como true , poderá definir essa propriedade como false para excluir esse componente da tradução automática. Consulte Serviços de Tradução em Habilidades.
|
No |
Consulte Transições para Componentes de Resposta Comuns para os tipos de ação predefinidos que você pode usar com esse componente.
Como Uso o Componente System.Text?
Neste exemplo, a variável type
contém os valores esperados pela entidade PizzaType
, como cheese
, Veggie Lover
e Hawaiian
. Quando essas informações não estiverem presentes na entrada do usuário, o bot ainda poderá obtê-las porque o fluxo de caixas de diálogo muda para o estado type
, cujo componente System.Text
as solicita para informar explicitamente o que elas desejam. Lembre-se de que mesmo neste ponto, a entrada do usuário ainda precisa ser resolvida com a entidade PizzaType
para fazer a transição para o próximo 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á obsoleto e não há mais um modelo disponível para ele. Em vez disso, você pode usar um dos muitos modelos com base no componente Resposta Comum que são oferecidos na seção Mensagens do Usuário da caixa de diálogo Adicionar Componente.
O componente System.List
foi projetado para gerar uma lista de opções. Dependendo se um valor de variável tiver sido definido (ou mesmo definido para esse componente), a navegação do componente poderá ser acionada pela escolha do usuário ou pelo valor definido para o usuário ou a variável de contexto.
Propriedade | Descrição | 0brigatório? |
---|---|---|
options |
Você pode especificar options usando strings de texto separadas por vírgulas, expressões do Apache FreeMarker e como lista de mapas. As opções Propriedades e Listas de Ações fornecem exemplos da última abordagem.
|
Sim |
prompt |
A string de texto que solicita ação do usuário. | Sim |
variable |
O nome da variável cujo valor é preenchido pela entrada do usuário. O Mecanismo de Caixa de Diálogo vai ignorar esse estado se o valor da variável já tiver sido definido e não vai gerar as opções da lista para o usuário. | No |
nlpResultVariable |
Define a propriedade variable com um valor de entidade (quando o valor da entidade ainda não foi definido para a variável referenciada). Você pode ativar nlpResultVariable para retornar um valor ao defini-lo com a variável que armazena os resultados de NLP (como iResult: "nlpresult" , que é usado em nossas habilidades de amostra). Ao fazer isso, a propriedade nlpResultVariable ainda poderá preencher o valor quando ele for nulo se encontrar uma entidade resolvida que corresponda à referenciada pela variável. A caixa de diálogo muda para o próximo estado quando nlpResultVariable define o valor. Você pode usar essa propriedade no lugar do componente System.SetVariable. A opção Listas de Ações descreve como você pode usar as propriedades variable e nlpResultVariable para alterar o comportamento de exibição da lista.
|
Não — Use essa propriedade quando a propriedade de variável nomear uma variável de tipo de entidade. |
maxPrompts |
O número de vezes que o componente solicita que o usuário insira uma entrada válida. Consulte Limitando o Número de Prompts do Usuário. | No |
translate |
Use essa propriedade para substituir o valor booliano que você definiu para a variável de contexto autotranslate . Se você não tiver definido essa variável ou se defini-la como false , poderá definir essa propriedade como true para ativar a tradução automática somente desse componente. Se você definir a variável autotranslation como true , poderá definir essa propriedade como false para excluir esse componente da tradução automática. Consulte Serviços de Tradução em Habilidades.
|
No |
autoNumberPostbackActions |
Quando definido como true , essa opção prefixa números às opções. Mesmo quando você não definir essa opção como true , a numeração automática poderá ser aplicada em itens de lista quando a configuração Ativar Numeração Automática em Ações de Postback do assistente digital for definida como true . A numeração automática específica do canal pode ser aplicada a qualquer habilidade registrada em um assistente digital:${(system.channelType=='twilio')?then('true','false')} |
No |
footerText |
Melhora a saída nos canais somente texto. Conforme descrito em Rodapés, você pode usar expressões do FreeMarker para condicionalizar o texto do rodapé para canais somente texto. | No |
Listas de Valores
Você pode usar o componente System.List
para retornar um valor que atenda a uma variável de contexto definida como primitiva (como greeting: "string"
no modelo de fluxo de caixas de diálogo) ou como entidade, conforme mostrado no trecho de código a seguir. Nesse fluxo de caixas de diálogo, a definição options: "Thick,Thin,Stuffed,Pan"
retorna um valor que corresponde à variável crust
. A propriedade options
definida para o tamanho é uma expressão de valor (${size.type.enumValues}
) que retorna os valores da lista Grande, Médio, Pequeno e Pessoal como opções. Consulte Sintaxe de Linguagem de Modelo do FreeMarker Apache.
iResult
da propriedade nlpResultVariable
permite que o componente defina os valores da entidade para as propriedades variable
dos estados crust
e size
quando esses valores não foram definidos anteriormente. Assim como o componente Text
, o componente System.List
não exige transições.
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:
...

Os usuários não estão limitados às opções exibidas na lista. Eles podem resolver a entidade digitando uma palavra que a entidade reconheça, como um sinônimo. Em vez de escolher entre as opções de tamanho de pizza na lista, por exemplo, os usuários podem, em vez disso, digitar big, um sinônimo definido para a opção Large da entidade
PizzaSize
. Consulte Entidades Personalizadas.
A Propriedade options
options
usando qualquer uma das seguintes opções:
-
Uma lista de mapas — embora você possa definir a propriedade de opções como string de texto ou expressão de valor, você também pode configurar a propriedade
options
como lista de mapas. Cada uma tem uma propriedadelabel
, uma propriedadevalue
e uma propriedade opcionalkeyword
. Você pode localizar suas opções de lista quando segue essa abordagem porque, conforme indicado pelo exemplo a seguir, você pode mencionar um pacote de recursos. Consulte Pacotes de Recursos de Habilidades para obter mais informações sobre como usar a notação de ponto. Quando os usuários digitam um valor que corresponde a um dos valores especificados na propriedadekeyword
, o bot reage da mesma forma como se o usuário tocasse na própria opção da 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"
-
Uma string de texto de opções separadas por vírgulas, como
"small, medium, large"
no trecho de código a seguir. Não é possível adicionar as propriedadeslabel
evalue
ao definiroptions
como string.askPizzaSize: component: "System.List" properties: prompt: "What size do you want?" options: "small, medium, large" variable: "pizzaSize"
-
Uma expressão de valor do Apache FreeMarker que passa por uma lista de strings ou uma lista de mapas, em que cada mapa deve conter as propriedades
label
evalue
e opcionalmente uma propriedadekeyword
.askPizzaSize: component: "System.List" properties: prompt: "What size do you want?" options: "${pizzaSize.value.enumValues}" variable: "pizzaSize"
Listas de Ações
System.Switch
para navegação condicional, você pode usar listas de ações. As propriedades variable
e nlpResultVariable
opcionais do componente System.List
definem o comportamento de exibição da lista e a transição subsequente com base na entrada do usuário.
- Quando você não configura essas propriedades, a ação de transição é baseada na opção selecionada pelo usuário da habilidade:
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"
- Quando você adiciona as propriedades
variable
enlpResultVariable
, a exibição da lista é ignorada quando a entrada do usuário é correspondida. No trecho de código a seguir, a lista de opções é ignorada quandonlpResultVariable
define a variávelsize
da entrada do usuário como Quero pedir uma pizza grande. A transição apropriada ao valor é acionada.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 gerar uma mensagem que não exija uma resposta do usuário ou que sua habilidade processe a resposta do usuário.
Este componente está obsoleto e não há mais um modelo disponível para ele. Em vez disso, você pode usar um dos muitos modelos com base no
System.CommonResponse
oferecido na seção Mensagens do Usuário da caixa de diálogo Adicionar Componente.
Propriedade | Descrição | 0brigatório? |
---|---|---|
text |
Uma string de texto | Sim – Este campo requer um valor. |
keepTurn |
Um valor booliano para renunciar (false ) ou manter o controle da habilidade do fluxo de caixas de diálogo (true ). Use keepTurn: true quando quiser gerar uma sequência ininterrupta de mensagens de habilidade na qual nenhuma interposição do usuário é aceita.
|
No |
translate |
Use essa propriedade para substituir o valor booliano que você definiu para a variável de contexto autotranslate . Se você não tiver definido essa variável ou se defini-la como false , poderá definir essa propriedade como true para ativar a tradução automática somente desse componente. Se você definir a variável autotranslation como true , poderá definir essa propriedade como false para excluir esse componente da tradução automática. Consulte Serviços de Tradução em Habilidades.
|
No |
Como Faço para Usar o Componente System.Output
System.Output
requer a definição de string para a propriedade text
. Conforme ilustrado no exemplo a seguir de uma mensagem de confirmação, você pode adicionar expressões de valor a essa string.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 padrão, o Mecanismo de Caixa de Diálogo aguarda a entrada do usuário após gerar uma instrução da sua habilidade. Se você substituir esse comportamento, adicione a propriedade opcional keepTurn
e defina-a como true
para direcionar o Mecanismo de Caixa de Diálogo para o próximo estado definido pela propriedade transitions
. Quando nenhuma transição tiver sido definida, o Mecanismo de Caixa de Diálogo passará para o próximo estado na sequência.
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"
Definindo Expressões de Valor para o Componente System.Output
text
. Por exemplo, o seguinte trecho de código usa expressões diferentes para gerar o texto de uma confirmação de pedido (tamanho e tipo da pizza).confirmation:
component: "System.Output"
properties:
text: "Your ${size.value} ${type.value} pizza is on its way."
transitions:
return: "done"
Cada expressão deve sempre retornar um valor. Se apenas uma expressão retornar um valor nulo, a habilidade gerará texto bruto para cada expressão na string e exibirá aos seus usuários uma saída semelhante a esta: Your ${size.value} ${type.value} is on its way.
É tudo ou nada. Para se certificar de que sua habilidade sempre gere texto que os usuários possam entender, substitua um valor padrão por um valor nulo usando o operador de valor padrão do Apache Freemarker: ${size.value!\”piping\”} ${type.value!\”hot\”}
. As aspas duplas indicam que o valor padrão não é uma referência de variável, mas o valor constante que o operador espera. Por exemplo :text: "Your ${size.value!\"piping\"} ${type.value!\"hot\"} pizza is on its way."
Sempre escape as aspas (
\"...\"
) que delimitam o valor padrão quando você usar o operador do Freemarker. A sintaxe OBotML do fluxo de caixas de diálogo não será válida, a menos que você use essa sequência de escape sempre que definir uma operação de valor padrão ou ativar texto de saída com aspas duplas. Por exemplo, a definição do componente System.Output
a seguir permite que os usuários leiam a mensagem como Você disse, “Cancelar este pedido".confirmCancel:
component: "System.Output"
properties:
text: "You said, \"Cancel this order.\""
transitions:
return: "cancelOrder"
Traduzindo o Texto de Saída
System.Output
de acordo com o componente, usando a propriedade translate
. Definindo-a como false
, como no trecho de código a seguir, os componentes geram o texto como está, sem tradução. Definindo essa propriedade como true
, você poderá ativar a tradução automática quando a variável autoTranslate
estiver definida como false
ou não estiver definida. Consulte Serviços de Tradução em Habilidades.
Normalmente, você não definirá a variável
autoTranslate
como true
se estiver traduzindo texto com pacotes de recursos. Nós não recomendamos essa abordagem.
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:
...