Controladores de estado

Os controladores de estado, também denominados simplesmente controladores, são usados para controlar a conversa através da criação de respostas para os utilizadores finais e/ou da transição da página atual. Para cada interação de conversa, os processadores são avaliados e podem afetar a sessão. Os processadores têm três tipos gerais de dados:

Vigência Definição
Requisitos do controlador Estes são os requisitos que têm de ser cumpridos para que o controlador tenha algum efeito na sessão. Diz-se que um controlador é invocado quando cumpre os respetivos requisitos e afeta a sessão de alguma forma.
Execução pelo gestor Se for chamado um controlador, é usado um preenchimento opcional para criar respostas para os utilizadores finais. Estas respostas são definidas nos dados do agente estático ou obtidas dinamicamente a partir do seu serviço de webhook.
Destino de transição do controlador Se for chamado um controlador, é usado um destino de transição opcional para alterar a página atual. A página seguinte só pode ser uma página de início do fluxo ou uma página no fluxo atualmente ativo.

Existem dois tipos de controladores de estado com requisitos de controlador diferentes:

Vigência Definição
Trajetos Os trajetos são chamados quando uma entrada do utilizador final corresponde a uma intenção e/ou alguma condição no estado da sessão é cumprida. Um trajeto com um requisito de intenção também é denominado trajeto de intenção. Um trajeto com apenas um requisito de condição também é denominado trajeto de condição.
Controladores de eventos Os controladores de eventos são chamados quando um evento é invocado. Alguns eventos incorporados são acionados quando são recebidos dados inesperados do utilizador final ou quando ocorre um erro de webhook. Também pode definir eventos personalizados que invoca quando acontece algo fora da conversa.

Existem três passos para processar um controlador de estado:

Vigência Definição
1. Âmbito Um controlador tem de estar no âmbito para ter algum efeito na sessão. O âmbito é determinado consoante um controlador seja aplicado a um fluxo, a uma página ou a um parâmetro de formulário; e consoante o fluxo associado esteja ativo, a página associada esteja ativa ou o agente esteja atualmente a tentar preencher o parâmetro de formulário associado.
2. Avaliação Cada controlador no âmbito é avaliado por ordem. Se os requisitos de um controlador forem cumpridos, este passa na avaliação.
3. Ligar Se um controlador estiver no âmbito e passar na avaliação, é chamado. Qualquer preenchimento associado é chamado e qualquer alvo de transição associado é aplicado à sessão.

Âmbito

Para que um controlador seja avaliado, tem de estar no âmbito. O âmbito do controlador é uma ferramenta importante e poderosa que ajuda a controlar a conversa. Ao controlar o âmbito de um controlador, pode controlar:

X Item
Quando é possível encontrar uma intenção
Quando uma condição deve ser verificada
Quando um determinado evento pode ser processado
Quando pode ocorrer uma transição de página
Quando é fornecida uma resposta de processamento estática
Quando é chamada uma resposta dinâmica de processamento ativada por webhook

O âmbito é determinado consoante um controlador seja aplicado a um fluxo, a uma página ou a um parâmetro de formulário; e consoante o fluxo associado esteja ativo, a página associada esteja ativa ou o agente esteja atualmente a tentar preencher o parâmetro de formulário associado.

As regras de âmbito detalhadas são as seguintes:

  • Encaminhamentos aplicados ao fluxo ativo:
    • Se a página atual for a página inicial do fluxo, está no âmbito.
    • Se a página atual não for a página de início do fluxo, só estão no âmbito se tiverem um requisito de intenção.
  • As rotas aplicadas à página atual estão no âmbito.
  • Os controladores de eventos aplicados ao fluxo ativo estão no âmbito.
  • Os controladores de eventos aplicados à página atual estão no âmbito.
  • Os controladores de eventos aplicados a um parâmetro de formulário que o agente está atualmente a tentar preencher estão no âmbito.

Trajetos

As rotas têm dois requisitos, e um ou ambos têm de ser facultados. Se ambos os requisitos forem fornecidos, ambos têm de ser cumpridos para chamar a rota:

Vigência Definição
Requisito de intenção Uma intenção que tem de corresponder à entrada do utilizador final para a interação conversacional atual. Quando uma rota tem um requisito de intenção, denomina-se rota de intenção.
Requisito de condição Uma condição que tem de ser cumprida. Quando um trajeto tem um requisito de condição, denomina-se trajeto de condição.

Pode aplicar trajetos a fluxos (trajetos ao nível do fluxo) e páginas (trajetos ao nível da página). Por exemplo, pode usar rotas nas seguintes situações:

X Item
Quando a entrada do utilizador final corresponde a uma intenção, a correspondência deve acionar uma resposta de preenchimento estático.
Quando a entrada do utilizador final corresponde a uma intenção, a correspondência deve acionar um preenchimento ativado por webhook para uma resposta dinâmica.
Quando a entrada do utilizador final tiver fornecido o parâmetro do formulário obrigatório final, uma verificação de condição aciona uma transição de sessão para outra página.
Quando a entrada do utilizador final forneceu um parâmetro de formulário específico, uma verificação de condição aciona uma resposta de preenchimento estático.
Uma verificação de condição definida como true que força uma transição de página.

Propagação de intenções

Normalmente, quando um trajeto é chamado devido a uma intenção correspondente, a intenção é consumida. Não é possível fazer a correspondência de uma intenção consumida novamente, a menos que uma nova entrada do utilizador final acione uma nova correspondência de intenção. No entanto, é possível propagar uma correspondência de intenção de um fluxo para outro no seguinte cenário:

  • Uma rota em flow F1 tem intent I1 como requisito e flow F2 como alvo de transição.
  • Flow F2 tem uma rota que também tem intent I1 como requisito.

Neste caso, quando o trajeto em flow F1 é chamado, intent I1 é correspondido duas vezes para uma única entrada do utilizador final, e ambos os trajetos são chamados.

A propagação de intenções é útil para:

X Item
Altere a página atual para uma página específica noutro fluxo (a rota do fluxo de destino da transição tem uma página de destino da transição específica).
Crie uma mensagem de entrada para a página inicial de um fluxo (o percurso do fluxo de destino da transição tem um preenchimento).

Grupos de rotas

Ao criar um agente, pode descobrir que muitas páginas têm um conjunto comum de trajetos. Para tornar as rotas reutilizáveis, pode definir grupos de rotas. Pode criar estes recursos de grupo reutilizáveis no fluxo ou em todo o agente.

Por exemplo, pode querer que o seu fluxo processe as entradas do utilizador final, como "Quero adicionar um topping à minha pizza" e "Quero alterar o tamanho da minha bebida". Estas entradas devem ser processadas quando qualquer uma das várias páginas do fluxo estiver ativa. Pode definir dois percursos com intenções para processar estas entradas para todas as páginas relevantes, mas isto representa muito trabalho duplicado. Em alternativa, pode definir o grupo de rotas uma vez e adicionar uma referência ao grupo em todas as páginas relevantes.

Grupos de trajetos ao nível do fluxo

Os grupos de rotas ao nível do fluxo são recursos de grupos de rotas criados com um fluxo como principal. São reutilizáveis no fluxo.

Grupos de trajetos ao nível do agente

Os grupos de trajetos ao nível do agente são recursos de grupos de trajetos criados com um agente como principal. São reutilizáveis em todo o agente, mas não permitem rotas que façam a transição para uma página simbólica não como destino.

Trajetos ao nível do fluxo

As rotas ao nível do fluxo são rotas aplicadas a um fluxo adicionando-as à página de início do fluxo. Estes tipos de controladores têm os seguintes exemplos de utilização:

X Item
Handlers com um requisito de intenção ou condição no âmbito da página de início do fluxo.
Handlers com um requisito de intenção no âmbito de todas as páginas no fluxo.

Para criar trajetos ao nível do fluxo a partir da consola:

  1. Abra a página inicial do fluxo.
  2. Clique no botão adicionar no cabeçalho Rotas.
  3. É aberto o painel de edição de rotas.
  4. Forneça campos de trajeto.
  5. Clique em Guardar.

Para reordenar as rotas ao nível do fluxo a partir da consola:

  1. Abra a página inicial do fluxo.
  2. Clique no cabeçalho Trajetos.
  3. É aberto o painel da lista de trajetos.
  4. Arraste as rotas na ordem pretendida. Em alternativa, clique no menu de opções e, em seguida, selecione Mover para.

Para eliminar trajetos ao nível do fluxo da consola:

  1. Abra a página inicial do fluxo.
  2. Clique no cabeçalho Trajetos.
  3. É aberto o painel da lista de trajetos.
  4. Clique no menu de opções .
  5. Selecione Eliminar.

Rotas ao nível da página

As rotas ao nível da página são rotas aplicadas a uma página. Estes tipos de controladores têm os seguintes exemplos de utilização:

X Item
Controladores com um requisito de intenção ou condição no âmbito quando páginas específicas estão ativas.

Para criar rotas ao nível da página a partir da consola:

  1. Abra a página (não a página de início do fluxo).
  2. Clique no botão adicionar no cabeçalho Rotas.
  3. É aberto o painel de edição de rotas.
  4. Forneça campos de trajeto.
  5. Clique em Guardar.

Para reordenar as rotas ao nível da página a partir da consola:

  1. Abra a página (não a página de início do fluxo).
  2. Clique no cabeçalho Trajetos.
  3. É aberto o painel da lista de trajetos.
  4. Arraste as rotas na ordem pretendida. Em alternativa, clique no menu de opções e, em seguida, selecione Mover para.

Para eliminar trajetos ao nível da página a partir da consola:

  1. Abra a página (não a página de início do fluxo).
  2. Clique no cabeçalho Trajetos.
  3. É aberto o painel da lista de trajetos.
  4. Clique no menu de opções .
  5. Selecione Eliminar.

Controladores de eventos

Os controladores de eventos têm um requisito para serem chamados:

Vigência Definição
Requisito de evento Um evento que tem de ser invocado. Os eventos são identificados pelo respetivo nome. Alguns eventos incorporados são invocados quando é recebida uma entrada inesperada do utilizador final ou quando ocorre um erro de webhook. Também pode definir eventos personalizados que invoca quando algo acontece fora da conversa.

Pode aplicar controladores de eventos a fluxos (controladores de eventos ao nível do fluxo), páginas (controladores de eventos ao nível da página) e parâmetros (controladores de eventos ao nível do parâmetro). Por exemplo, pode usar controladores de eventos nas seguintes situações:

X Item
Quando a entrada do utilizador final não corresponde a nenhuma intenção, um controlador de eventos no-match fornece uma resposta de preenchimento estático específica.
Um temporizador expira no seu sistema e quer fornecer informações de lembrete ao utilizador final com uma resposta de preenchimento estático específica.

Controladores de eventos ao nível do fluxo

Os controladores de eventos ao nível do fluxo são controladores de eventos aplicados a um fluxo. Estes tipos de controladores têm os seguintes exemplos de utilização:

X Item
Handlers com um requisito de evento no âmbito da página de início do fluxo.
Handlers com um requisito de evento no âmbito de todas as páginas no fluxo.
Processamento de introdução inesperada do utilizador final, partilhada por todas as páginas num fluxo.
Processamento de erros de webhook, partilhados por todas as páginas num fluxo.
Processamento de eventos personalizados invocados pelo seu sistema, partilhados por todas as páginas num fluxo.

Cada fluxo tem controladores de eventos para os no-match e no-input eventos incorporados. Estes controladores de eventos são criados automaticamente quando cria um fluxo e não podem ser eliminados.

Para criar controladores de eventos ao nível do fluxo a partir da consola:

  1. Abra a página inicial do fluxo.
  2. Clique no botão de adição no cabeçalho Controladores de eventos.
  3. É aberto o painel do controlador de eventos.
  4. Forneça campos de controlador de eventos.
  5. Clique em Guardar.

Para eliminar controladores de eventos ao nível do fluxo da consola:

  1. Abra a página inicial do fluxo.
  2. Clique no cabeçalho Controladores de eventos.
  3. É aberto o painel da lista de controladores de eventos.
  4. Passe o cursor do rato sobre um controlador de eventos e, em seguida, clique no botão de eliminação .

Controladores de eventos ao nível da página

Os controladores de eventos ao nível da página são controladores de eventos aplicados a uma página. Estes tipos de controladores têm os seguintes exemplos de utilização:

X Item
Handlers com um requisito de evento no âmbito quando páginas específicas estão ativas.
Processamento de introdução inesperada do utilizador final, específica de uma página.
Processamento de erros de webhook, específicos de uma página.
Processamento de eventos personalizados invocados pelo seu sistema, específicos de uma página.

Para criar controladores de eventos ao nível da página a partir da consola:

  1. Abrir uma página (não a página de início do fluxo).
  2. Se não existir um cabeçalho Event handlers, clique em Add state handler, selecione Event handlers e, de seguida, clique em Apply.
  3. Clique no botão de adição no cabeçalho Controladores de eventos.
  4. É aberto o painel do controlador de eventos.
  5. Forneça campos de controlador de eventos.
  6. Clique em Guardar.

Para eliminar controladores de eventos ao nível da página a partir da consola:

  1. Abrir uma página (não a página de início do fluxo).
  2. Clique no cabeçalho Controladores de eventos.
  3. É aberto o painel da lista de controladores de eventos.
  4. Passe o cursor do rato sobre um controlador de eventos e, em seguida, clique no botão de eliminação .

Controladores de eventos ao nível do parâmetro

Os controladores de eventos ao nível do parâmetro são controladores de eventos que são aplicados a um parâmetro de formulário. Também são conhecidos como gestores de repetição. Estes controladores de eventos não permitem eventos personalizados, uma vez que se destinam especificamente a processar a entrada do utilizador final inválida durante o preenchimento de formulários.

Estes tipos de controladores têm os seguintes exemplos de utilização:

X Item
O utilizador final não forneceu uma entrada válida quando lhe foi pedido que preenchesse um parâmetro de formulário.

Para criar controladores de eventos ao nível do parâmetro a partir da consola:

  1. Abra uma página que contenha parâmetros de formulário.
  2. Clique num parâmetro.
  3. É aberto o painel de parâmetros.
  4. Desloque a página para baixo até à secção Reprompt event handlers e, de seguida, clique em Add event handler.
  5. É aberto o painel do controlador de eventos.
  6. Forneça campos de controlador de eventos.
  7. Clique em Guardar.

Para eliminar controladores de eventos ao nível do parâmetro da consola:

  1. Abra uma página que contenha parâmetros de formulário.
  2. Clique num parâmetro.
  3. É aberto o painel de parâmetros.
  4. Desloque a página para baixo até à secção Controladores de eventos de novo pedido.
  5. Passe o cursor do rato sobre um controlador de eventos e, em seguida, clique no botão de eliminação .

Eventos integrados

Os seguintes eventos são incorporados e são invocados por agentes conversacionais (Dialogflow CX). Alguns eventos estão restritos a determinados níveis.

Nome do evento
Ao nível do fluxo Ao nível da página Ao nível do parâmetro Invocado quando
sys.no-match-default
  • Para o nível de fluxo ou página: a entrada do utilizador final não corresponde a nenhuma intenção para os controladores que estão no âmbito.
  • Ao nível do parâmetro: a entrada do utilizador final não satisfaz o parâmetro do formulário.
sys.no-match-[1-6] Se fornecer controladores para qualquer um destes eventos ordenados numericamente, são invocados em vez de sys.no-match-default e por ordem: sys.no-match-1, sys.no-match-2, ...
sys.no-input-default Não foi recebida nenhuma entrada do utilizador final. Esta ação pode ser invocada quando:
  • Os agentes conversacionais (Dialogflow CX) recebem uma entrada de texto do utilizador final vazia.
  • Os agentes conversacionais (Dialogflow CX) recebem uma entrada de áudio do utilizador final vazia ou a entrada não contém nenhuma voz reconhecida.
  • Ocorre um limite de tempo sem voz antes de a entrada de áudio do utilizador final conter qualquer voz reconhecida.
sys.no-input-[1-6] Se fornecer controladores para qualquer um destes eventos ordenados numericamente, são invocados em vez de sys.no-input-default e por ordem: sys.no-input-1, sys.no-input-2, ...
sys.invalid-parameter É invocado quando uma resposta do webhook invalida o parâmetro definindo WebhookResponse.pageInfo.formInfo.parameterInfo.state como INVALID.
sys.long-utterance A entrada do utilizador final excede o comprimento máximo permitido (256 carateres) correspondente a intenções não generativas ou parâmetros. Se não for fornecido, os agentes conversacionais (Dialogflow CX) tratam a expressão longa do utilizador como no-match. Para entradas de áudio em streaming, este evento só é acionado depois de o cliente fechar a stream de áudio.
webhook.error A chamada do webhook devolveu um erro. Este evento só é invocado: 1) se não existir um controlador de eventos de webhook detalhado (por exemplo, webhook.error.timeout) que corresponda ao código de erro do webhook; 2) se não existir um destino de transição definido na rota original que chamou o preenchimento com o webhook com falhas. Consulte a secção Ordem de avaliação para ver detalhes.
webhook.error.timeout A chamada do webhook excedeu o tempo limite. Um evento de webhook só é invocado se não existir um destino de transição definido na rota original que chamou o preenchimento com o webhook com falhas. Consulte a secção Ordem de avaliação para ver detalhes.
webhook.error.bad-request O webhook devolveu 400 Pedido errado. Um evento de webhook só é invocado se não existir um destino de transição definido na rota original que chamou o preenchimento com o webhook com falhas. Consulte a secção Ordem de avaliação para ver detalhes.
webhook.error.rejected O webhook devolveu 401 Não autorizado ou 403 Proibido. Um evento de webhook só é invocado se não existir um destino de transição definido na rota original que chamou o preenchimento com o webhook com falhas. Consulte a secção Ordem de avaliação para ver detalhes.
webhook.error.unavailable O webhook devolveu 503 Serviço indisponível. Um evento de webhook só é invocado se não existir um destino de transição definido na rota original que chamou o preenchimento com o webhook com falhas. Consulte a secção Ordem de avaliação para ver detalhes.
webhook.error.not-found A chamada do webhook falhou porque o URL do webhook estava inacessível. Um evento de webhook só é invocado se não existir um destino de transição definido na rota original que chamou o preenchimento com o webhook com falhas. Consulte a secção Ordem de avaliação para ver detalhes.
flow-cancelled O utilizador final pediu o cancelamento do fluxo. Este evento é acionado pela página End Flow With Cancellation. Consulte o END_FLOW_WITH_CANCELLATION destino da transição simbólica.
flow-failed Este fluxo não conseguiu concluir a tarefa especificada. Este evento é acionado pela página End Flow With Failure. Consulte o END_FLOW_WITH_FAILURE alvo de transição simbólico.
flow-failed-human-escalation O utilizador final pediu para falar com agentes humanos. Este evento é acionado pela página End Flow With Human Escalation. Consulte o END_FLOW_WITH_HUMAN_ESCALATION alvo de transição simbólico.

Eventos personalizados

Pode criar eventos personalizados e controladores de eventos. Os eventos personalizados são usados para processar ações que ocorrem fora da conversa com o utilizador final. Por exemplo: o utilizador final clicou num botão, passou um determinado período, o inventário disponível mudou durante a conversa, e assim sucessivamente.

Os eventos são simplesmente identificados por nome. Deve evitar usar nomes de eventos que comecem por sys. ou webhook. para evitar conflitos com eventos incorporados.

Para invocar um evento com a API, consulte o campo queryInput.event do método detectIntent para o tipo Session.

Selecione um protocolo e uma versão para a referência da sessão:

Protocolo V3 V3beta1
REST Recurso de sessão Recurso de sessão
RPC Interface de sessão Interface de sessão
C++ SessionsClient Não disponível
C# SessionsClient Não disponível
Ir SessionsClient Não disponível
Java SessionsClient SessionsClient
Node.js SessionsClient SessionsClient
PHP Não disponível Não disponível
Python SessionsClient SessionsClient
Ruby Não disponível Não disponível

Ordem de avaliação

Os processadores são avaliados numa ordem específica. Aplicam-se as seguintes regras gerais:

  1. Apenas são avaliados os controladores no âmbito.
  2. Só é possível chamar os controladores cujos requisitos sejam satisfeitos.
  3. Se for chamado um controlador sem um destino de transição, a avaliação da lista de controladores continua. Devido a esta regra, várias execuções podem adicionar várias mensagens à fila de respostas.
  4. Se for chamado um controlador com um destino de transição, a avaliação da lista de controladores termina.
  5. Se for chamado um controlador com o preenchimento, e o preenchimento resultar num erro de webhook:
    • Se o controlador tiver um destino de transição definido, o webhook falha silenciosamente.
    • Se um controlador de eventos estiver no âmbito do evento, processa o evento e a avaliação da lista de controladores termina.
    • Se não existir nenhum controlador de eventos no âmbito do evento, o webhook falha silenciosamente.
  6. Quando um requisito de intenção é satisfeito, a intenção é consumida, pelo que só o primeiro controlador de encaminhamento encontrado para a intenção pode ser chamado (consulte a propagação de intenções para ver as exceções).
  7. Quando um requisito de condição é cumprido, a condição não é consumida, pelo que podem ser chamadas várias rotas com a condição.
  8. Quando um requisito de evento é cumprido, o evento é consumido, pelo que só é possível chamar o primeiro controlador de eventos encontrado para o evento.
  9. A pilha de chamadas do controlador pode afetar a ordem de avaliação.

A avaliação tem três fases:

  1. Os caminhos que têm um requisito de intenção são avaliados nesta ordem:
    1. Ao nível da página: rotas individuais aplicadas à página atual, pela ordem fornecida.
    2. Grupos ao nível da página: Grupos de rotas aplicados à página atual, pela ordem fornecida.
    3. Nível de fluxo: rotas aplicadas ao fluxo ativo, pela ordem fornecida.
    4. Grupos ao nível do fluxo: Grupos de rotas aplicados ao fluxo ativo, pela ordem fornecida.
  2. As rotas com apenas um requisito de condição são avaliadas nesta ordem:
    1. Ao nível da página: rotas individuais aplicadas à página atual, pela ordem fornecida.
    2. Grupos ao nível da página: Grupos de rotas aplicados à página atual, pela ordem fornecida.
    3. Nível do fluxo (apenas se a página atual for a página de início do fluxo): rotas aplicadas ao fluxo ativo, pela ordem fornecida.
    4. Grupos ao nível do fluxo (apenas se a página atual for a página de início do fluxo): Grupos de rotas aplicados ao fluxo ativo, pela ordem fornecida.
  3. Os controladores de eventos são avaliados nesta ordem:
    1. Nível do parâmetro: Controladores de eventos aplicados ao parâmetro do formulário da página atual que o agente está atualmente a tentar preencher (controladores de repetição), pela ordem fornecida.
    2. Ao nível da página: controladores de eventos aplicados à página atual, pela ordem fornecida.
    3. Nível do fluxo: Controladores de eventos aplicados ao fluxo ativo, pela ordem fornecida.

Alvos de transição simbólicos

Quando introduz um destino de transição para um controlador, pode introduzir fluxos ou páginas específicos, mas também pode introduzir destinos de transição simbólicos:

Alvo de transição simbólico
Descrição
START_PAGE Transição para a página de início do fluxo ativo com o mesmo nome.
END_FLOW Termine o fluxo atualmente ativo e volte à página que causou uma transição para o fluxo atual. Consulte também Pilha de chamadas do controlador e limite da pilha de fluxo.
END_FLOW_WITH_CANCELLATION Termine o fluxo atualmente ativo e volte à página que causou uma transição para o fluxo atual. A página de chamada pode processar esta transição com o flow-cancelled evento incorporado. Consulte também Pilha de chamadas do controlador e limite da pilha de fluxo.
END_FLOW_WITH_FAILURE Termine o fluxo atualmente ativo e volte à página que causou uma transição para o fluxo atual. A página de chamada pode processar esta transição com o flow-failed evento incorporado. Consulte também Pilha de chamadas do controlador e limite da pilha de fluxo.
END_FLOW_WITH_HUMAN_ESCALATION Termine o fluxo atualmente ativo e volte à página que causou uma transição para o fluxo atual. A página de chamada pode processar esta transição com o flow-failed-human-escalation evento incorporado. Consulte também Pilha de chamadas do controlador e limite da pilha de fluxo.
END_SESSION Limpe a sessão atual e faça a transição para a página especial denominada END_SESSION. A próxima entrada do utilizador reinicia a sessão na página inicial do fluxo de início predefinido.
PREVIOUS_PAGE Transição para a página anterior que causou uma transição para a página atual. O estado da página anterior é restaurado após a transição.
CURRENT_PAGE Voltar à página atual. Isto pode ser útil se quiser que o agente repita algo.

Pilha de chamadas do controlador e limite da pilha de fluxo

Quando uma sessão transita de fluxo para fluxo com alvos de transição específicos, cada fluxo é enviado para a pilha de fluxos.

Pilha de chamadas do controlador

Quando uma sessão transita para END_FLOW, regressa à página de chamadas que causou uma transição para o fluxo concluído. Nesta situação, a pilha de chamadas do controlador é preservada. Todos os controladores que foram avaliados anteriormente a partir da página de chamada são ignorados, e os controladores restantes são avaliados por ordem.

Por exemplo:

  1. A página P tem três processadores por esta ordem: H1, H2 e H3.
  2. H1 é avaliado, mas não provoca uma transição.
  3. H2 é avaliado e provoca uma transição para o fluxo F.
  4. Uma página no fluxo F transita para END_FLOW.
  5. A sessão regressa à página P, que volta a ficar ativa com um estado preservado.
  6. A avaliação do controlador na página P continua a partir do estado que preservou, pelo que H3 é avaliado.

Limite da pilha de fluxo

O limite máximo da pilha de fluxo é de 25. Exceder o limite máximo da pilha pode fazer com que os fluxos sejam removidos da pilha, o que leva a um comportamento inesperado quando usa a transição END_FLOW. Para evitar estes potenciais problemas, minimize o número de transições de fluxo para fluxo antes da transição END_FLOW.

Se a pilha de fluxo estiver vazia, a transição END_FLOW termina a sessão.

Defina condições

Para definir condições com a consola, fornece regras de condições com uma de três opções lógicas:

  • Corresponder PELO MENOS UMA regra (OU)
  • Corresponder a TODAS as regras (E)
  • Personalize a expressão

Para sua conveniência, pode usar as opções AND/OR para criar condições simples ou compostas para valores de parâmetros.

Pode usar a opção de formulário livre Personalizar expressão para todos os tipos de condições, incluindo funções do sistema e constantes booleanas.

Por exemplo, para definir uma condição que tenha uma probabilidade de 10% de passar na avaliação, selecione a opção Personalizar expressão e introduza $sys.func.rand() < 0.1 no campo Condição:

Captura de ecrã da definição de uma condição personalizada