Dialogflow CX: crie um agente virtual de varejo

1. Antes de começar

Neste codelab, você vai aprender a criar um chatbot de varejo com o Dialogflow CX, uma plataforma de IA de conversação (CAIP, na sigla em inglês) para criar interfaces de conversação. O Dialogflow CX pode implementar agentes virtuais, como bots de chat, bots de voz, gateways telefônicos e pode oferecer suporte a vários canais em mais de 50 idiomas diferentes.

Neste codelab, vamos orientar você a criar um chatbot de site para um varejo. O negócio fictício para o qual estamos criando o chatbot se chama: G-Records. A G-Records é uma gravadora de rock com sede na Califórnia. A gravadora tem quatro bandas de rock contratadas: Alice Googler, G's N' Roses, The Goo Fighters e The Google Dolls. A G-Records vende produtos de bandas para todos os fãs de rock.

Ao final deste codelab, você poderá usar o chatbot para pedir camisetas ou músicas ou perguntar sobre seu pedido.

Resultado final

O que você vai aprender

Você vai aprender os benefícios do Dialogflow CX em comparação com o Dialogflow ES. Ele inclui os seguintes conceitos:

  • Como criar um agente virtual do Dialogflow CX no Google Cloud
  • Saiba como criar fluxos
  • Saiba como criar entidades
  • Saiba como criar intents
  • Saiba como criar páginas e páginas de transição com manipuladores de estado
  • Aprenda a fazer a transição de páginas com rotas de intent
  • Aprenda a fazer a transição de páginas com parâmetros e rotas de condição
  • Saiba como retornar respostas condicionais com funções do sistema
  • Saiba como criar mensagens alternativas
  • Aprenda a usar o simulador
  • Aprenda a criar casos de teste e cobertura de teste

O design final do agente do Dialogflow CX vai ficar assim:

Resultado final

O que é necessário

  • Você vai precisar de um endereço do Google Identity / Gmail para criar um agente do Dialogflow CX.
  • Acesso ao Google Cloud.

2. Configuração do ambiente

Criar um projeto do Google Cloud

Como o Dialogflow CX é executado no Google Cloud, é necessário criar um projeto do Google Cloud. Um projeto organiza todos os seus recursos do Google Cloud. Ele consiste em um conjunto de colaboradores, APIs ativadas (e outros recursos), ferramentas de monitoramento, informações de faturamento e controles de autenticação e acesso.

Ao criar um novo projeto, é preciso digitar o Nome do projeto. Além disso, será preciso vinculá-la a uma conta de faturamento e a uma organização.

Uma conta de faturamento é usada para definir quem paga por determinado conjunto de recursos e pode ser vinculada a um ou mais projetos. O uso do projeto é cobrado na conta de faturamento vinculada. Na maioria dos casos, você configura o faturamento ao criar um projeto. Para mais informações, consulte a documentação do faturamento. Verifique se o faturamento está ativado para seu projeto do Cloud.

Criar um novo projeto

ativar a API Dialogflow

Para usar o Dialogflow, você precisa ativar a API Dialogflow para seu projeto.

  1. Selecione o projeto em que você quer ativar a API e clique em Continuar.
  2. Contraia o menu de APIs e serviços e clique em Criar credenciais.
  3. Clique em Dados do app.
  4. Responda Não, não estou usando, porque você não está usando o Kubernetes Engine, o App Engine ou o Cloud Functions.
  5. Clique em Concluir.

Configurar credenciais

Criar um agente do Dialogflow CX

Para criar um novo agente do Dialogflow CX, abra o Console do Dialogflow CX:

  1. Escolha o projeto do Google Cloud criado anteriormente.
  2. Clique em Criar agente.

Preencha o formulário para as configurações básicas do agente:

  • Você pode escolher qualquer nome de exibição.
  • Como local, escolha: us-central1
  • Selecione o fuso horário.
  • Selecione en - English como idioma padrão

Clique em Criar.

Criar agente

Tudo pronto! Finalmente, podemos começar a modelar nosso agente virtual.

3. Fluxos

Caixas de diálogo complexas geralmente envolvem vários tópicos de conversa. No caso do chatbot que estamos criando para a G-Records, para vender produtos da banda, teríamos diálogos sobre o catálogo de produtos, pagamento, status do pedido e perguntas de atendimento ao cliente. Podemos dividir esses tópicos de conversa em fluxos.

Fluxo do varejo

Os fluxos permitem que as equipes trabalhem em caminhos de conversa individuais. Uma boa prática seria simplificar o fluxo para que ele se encaixe facilmente em uma tela e seja mais modular.

Os fluxos são um conceito novo no Dialogflow CX. O Dialogflow Essentials tem o conceito de megaagentes, que são semelhantes aos fluxos. No entanto, você usaria fluxos com muito mais frequência.

Mais adiante neste laboratório, vamos usar gerenciadores de estado que podem encerrar um fluxo (para que ele volte para um fluxo anterior ou seguinte) ou encerrar a sessão completa do agente.

Vamos criar alguns fluxos.

Como criar fluxos

  1. No Dialogflow CX, clique no ícone + > Criar fluxo.
  2. Especifique o nome: Catalog e pressione Enter.

criar um fluxo

Seu primeiro fluxo, Catalog, foi criado. Agora, crie os outros fluxos:

  • Order Process
  • My Order
  • Customer Care

Fluxos

Mais adiante neste laboratório, vamos definir processadores de estado da página. Isso vai garantir que a visualização fique assim:

Fluxos

Simulador

No lado direito do console do Dialogflow CX, você pode testar o agente virtual com o simulador integrado. Você pode testar a conversa desde o início ou em um fluxo específico.

  1. Clique no botão Test Agent no canto superior direito da tela.
  2. No campo "Fale com o agente", escreva: Hello O agente virtual vai responder com uma mensagem de boas-vindas padrão: Olá! Como posso ajudar?

Simulador

Vamos modificar esse texto de boas-vindas padrão.

Fluxo inicial padrão

Vamos começar criando uma Rota de intent que será acionada quando você cumprimentar o agente virtual.

  1. Na barra lateral Build > Flows à esquerda, clique em Default Start Flow e selecione o nó da árvore Start.

A página Início será aberta. Ela selecionava automaticamente a página inicial na seção da barra lateral Build > Pages.

  1. Em Iniciar > Rotas, clique em Intent de boas-vindas padrão.

Uma intent categoriza a intenção do usuário final em cada conversa. No Dialogflow CX, as intenções podem fazer parte de um manipulador de estado para encaminhar a próxima página ativa ou fulfillment

  1. Remova todas as entradas Agente diz e adicione este novo texto:

Welcome, I am the virtual agent of G-Records, a fictional rock label. You can order artists merchandise, ask questions about your order or shipping, and I can tell you more which artists are currently signed with us. How can I help?

Para agilizar a conversa, também precisamos de alguns botões de resposta rápida / ícones de sugestão.

  1. Clique em Adicionar opção de diálogo > Payload personalizado e use o snippet de código abaixo.
  2. Use o snippet de código abaixo como um payload personalizado e clique em Salvar.

Para saber mais sobre payloads personalizados, consulte a documentação.

{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Which artists?"
            },
            {
              "text": "Which products?"
            },
            {
              "text": "About my order..."
            }
          ]
        }
      ]
    ]
  }

Intent de boas-vindas padrão

  1. Teste a intent de boas-vindas no simulador.

Você provavelmente está se perguntando por que não consegue acessar o conteúdo rico. Isso ocorre porque o conteúdo rico, como os ícones de sugestão, depende de uma integração. As etapas a seguir exigem uma conta de faturamento, mas você pode pular se não tiver uma.

  1. Na barra lateral esquerda, clique em Gerenciar > Integrações.
  2. Escolha Dialogflow Messenger e clique em Conectar.
  3. No pop-up, clique em Ativar.

Ativação da integração

Outro pop-up será mostrado, desta vez com o código JavaScript de integração que você pode colar no site para integrar o componente do Dialogflow Messenger. Como ainda não temos um site, vamos testar o agente virtual diretamente na ferramenta.

Testar agora o Dialogflow Messenger

  1. Clique no link Quero testar.
  2. Clique no ícone do chatbot no canto inferior direito para abrir a janela de chat. Escreva Hello para iniciar a conversa.

Testar agora o Dialogflow Messenger

Por enquanto, quando você clica nos ícones de sugestão, o agente virtual não entende o que você quer dizer. Isso ocorre porque nosso agente virtual ainda não está alternando entre estados. Isso pode ser feito no Dialogflow CX com páginas. Para continuar o laboratório, primeiro vamos criar algumas Entities e Intents.

4. Tipos de entidade

Os tipos de entidade são usados para controlar como os dados da entrada do usuário final são extraídos. Os tipos de entidade do Dialogflow CX são muito semelhantes aos tipos de entidade do Dialogflow ES. O Dialogflow fornece entidades predefinidas do sistema que podem corresponder a muitos tipos comuns de dados. Por exemplo, há entidades do sistema que correspondem a datas, horários, cores, endereços de e-mail e assim por diante. Também é possível criar entidades personalizadas para corresponder a dados específicos.

Vamos começar preparando todas as entidades personalizadas antes de projetar as páginas em um fluxo. Vamos criar as seguintes entidades:

Entidades do Dialogflow

Como criar entidades

Vamos criar uma entidade Artist.

  1. Clique em Gerenciar > Tipos de entidade.
  2. Clique em + Criar.
  • Nome de exibição: Artist
  • Entidades:
  • The Google Dolls (com o sinônimo: Google Dolls)
  • The Goo Fighters (com sinônimo: Goo Fighters)
  • G's N' Roses (com sinônimo: Gs and Roses)
  • Alice Googler
  • Clique em "Opções avançadas" e marque a caixa de seleção Correspondência parcial. Se você digitar o nome da banda errado, é possível que ele ainda corresponda à entidade correta.
  • Nas opções avançadas, marque também Reescrever no registro. (Se você digitar o nome da banda errado, o nome no registro será corrigido.)
  1. Clique em Salvar.

Também vamos precisar de uma entidade para o item Merch:

  1. Clique em Gerenciar > Tipos de entidade.
  2. Clique em + Criar.
  • Nome de exibição: Merch
  • Entidades:
  • T-shirt
  • Longsleeve (com sinônimo: Longsleeve shirt)
  • Tour Movie
  • Digital Album (com sinônimo: MP3 Album, MP3)
  • CD (com sinônimos Disc, Physical CD)
  1. Clique em Salvar.

Também vamos precisar de uma entidade para o álbum:

  1. Clique em Gerenciar > Tipos de entidade.
  2. Clique em + Criar.
  • Nome de exibição: Album
  • Entidades:
  • Live
  • Greatest Hits (com o sinônimo: Hits)
  1. Clique em Salvar.

Também vamos precisar de uma entidade para os tamanhos de roupas:

  1. Clique em Gerenciar > Tipos de entidade.
  2. Clique em + Criar.
  • Nome de exibição: ShirtSize
  • Entidades:
  • XS (com sinônimo: Extra Small)
  • S (com o sinônimo: Small)
  • M (com o sinônimo: Medium)
  • L (com sinônimo: Large)
  • XL (com o sinônimo: Extra Large)
  • 2XL (com sinônimo: Extra Extra Large)
  • 3XL
  1. Clique em Salvar.

E uma entidade para números de pedidos, que geralmente são quatro dígitos alfanuméricos e três números. (como ABCD123)

  1. Clique em Gerenciar > Tipos de entidade.
  2. Clique em + Criar.
  • Nome de exibição: OrderNumber
  • Entidades regexp
  • Entidade: [A-Z]{4}[0-9]{3}
  1. Clique em Salvar.

A configuração da entidade vai ser semelhante a esta:

@Artist: @Artist Entity Type

@Merch: @Merch Entity Type

@Album: @Album Entity Type

@ShirtSize: @ShirtSize Entity Type

@OrderNumber: @OrderNumber Entity Type

Depois que as entidades personalizadas forem preparadas, poderemos preparar as intents. Vamos continuar o laboratório.

5. Intents

Uma intent categoriza a intenção do usuário final em cada conversa. Elas foram simplificadas drasticamente no Dialogflow CX, que não é mais um bloco de construção para o controle de conversação. O Dialogflow CX usa apenas intents para corresponder ao que os usuários estão dizendo. No Dialogflow ES, você precisava vincular tudo a uma intent (parâmetros, eventos, fulfillment etc.). As intents no Dialogflow CX contêm apenas frases de treinamento e, portanto, são reutilizáveis. Ele não controla mais a conversa. O processo de criação de intents é simples:

As frases de treinamento nas intents podem usar Entidades para extrair a entrada de "variável". Por isso, é uma prática recomendada criar os tipos de entidade com antecedência, como fizemos na página anterior das etapas do laboratório.

Como criar intents

Vamos começar preparando todas as intents antes de projetar as páginas em um fluxo.

  1. Clique em Gerenciar > Intents.
  2. Clique em + Criar.

Use os seguintes detalhes:

  • Nome de exibição: redirect.artists.overview
  • Descrição Artists overview: The bands supported by the label

Nova intent

Role para baixo e crie as seguintes frases de treinamento:

  • Which bands are signed?
  • Which bands
  • Which artists
  • Which artists are part of the record label
  • Who is part of the label
  • From which bands can I buy merchandise
  • Band merchandise
  • Which music do you have?
  • I would like to know who are signed to the label
  • Who are supported by the label
  • From who can I buy shirts
  • What music can I order
  • Can I get an overview of all the artists

Frases de treinamento

  1. Clique em Salvar.
  1. Agora vamos continuar e criar todas as outras intents. Use sua própria imaginação para criar mais frases de treinamento. Uma prática recomendada é ter pelo menos 10 frases de treinamento por intent para cobrir as diferentes maneiras de acionar essa intent. Para os fins deste laboratório, ter menos também é aceitável.

Confira alguns pontos importantes:

  • Ao inserir a frase de treinamento, o Dialogflow CX vai anotar automaticamente as entidades. Se não fizer isso, talvez seja necessário atualizar sua entidade (adicionando um sinônimo) ou anotando manualmente a frase de treinamento.
  • Frases de treinamento mais curtas: o sistema PLN do Dialogflow também funciona com frases de treinamento mais curtas, e aqui estão alguns exemplos.
  • Excesso de treinamento: muitas frases de treinamento para uma intent podem causar treinamento excessivo e um resultado menos desejável. É recomendável usar testes iterativos e incrementais e adicionar frases de treinamento no caso de não haver uma intent correspondente.

Nome de exibição

Frases de treinamento

redirect.product.overview

"Which products do you sell?", "What merchandise items do you have?", "What are you selling?", "What are the items?", "Which products?" "What merchandise?", "Please tell me what you have"

confirm.artists.overview

"Yeah, let me buy merchandise", "Yes, I want to purchase something", "Yes, I would like to order merchandise from Alice Googler" (Observação: Alice Googler precisa ser reconhecida como uma entidade @Artist!), "Ok, let's buy stuff."

redirect.price

"How much does a t-shirt cost?", "What's the price for the tour movie?", "The album is how much?", "I want to know the price of a longsleeve shirt", "What's the price difference?", "What does each product costs?", "What does it cost?", "What is the price?"

redirect.product

"Tour movie", "I am interested in a t-shirt", "Can I buy a digital album?", "I want the CD", "I want to buy something", "Can I purchase a record?", "I want to buy a t-shirt size M of The Google Dolls", "Can I purchase the Alice Googler digital album?"

redirect.product.of.artist

"Yeah, let's shop", "Give me merch of Alice Googler", "Shirts of The Google Dolls that would be nice.", "Yes", "I want The Goo Fighters stuff", "Yes, I want to order merchandise", "Yep, give me items of G's N' Roses", "Go for it", "Anything Alice Googler", "I am a G's N' Roses fan!", "Google Dolls", "Yes of The Google Dolls"

redirect.shirts

"Shirts", "I want to buy shirts", "I am interested in shirts", "I want a shirt", "Shirts of G's N' Roses please", "Give me shirts of the Google Dolls", "I want to buy shirts of Alice Googler"

redirect.music

"Music", "I want to buy music", "I am interested in music", "Give me music of the Goo Fighters", "Music of Goo Fighters please", "Interested in buying the Alice Googler album", "Purchase Alice Googler music"

redirect.album

"Hits", "Live Album", "I want the Greatest Hits Digital Album", "Give me the Greatest Hits CD", "Hits on MP3"

redirect.shirt.size

"XS", "I have M", "I want Large", "My size is 3XL", "Extra Large is the size"

redirect.my.order

"About my order", "I have a question about my order", "My order is ABCD123, I have a question about my order."

status

redirect.my.order.status

redirect.my.order.canceled

"I want to cancel my order", "I want to cancel order ABCD123", "Please cancel order ABCD123", "Undo my order", "Stop my order", "Cancel"

redirect.shipping.info

"How long will it take?", "How long is shipping?", "How long does shipping take?", "When will I receive it?"

redirect.refund.info

"I want a refund.", "Can I get a refund", "I want to return the CD", "I want to return my t-shirt"

redirect.swapping.info

"I want to swap my item", "Can I change my t-shirt for a larger size?", "Can I change my product?", "I want to swap the CD"

redirect.order.process

"I want to buy a t-shirt of the Google Dolls, size S", "Let me buy the digital CD of Alice Googler", "Get me the tour movie of G's N' Roses", "Buy a longsleeve shirt of The Goo Fighters", "Purchase the Alice Googler t-shirt", "Please order me the Google Dolls CD"

confirm.proceed.order

"Yes", "Yes, please continue", "Yes order", "I want to order", "Yeah", "Yep", "I confirm", "Agree", "Go ahead", "Order", "Buy it", "Purchase", "Okay"

decline.proceed.order

"No", "I rather not", "I don't want it anymore", "Don't order", "Stop", "Not anymore", "Nope", "Go back", "Reset", "Decline", "I don't need it"

redirect.home

"Go back", "Home", "Help", "What else can I ask", "Restart", "Can you tell me what I can order?", "What questions can I ask", "I need help", "Advice please", "Hi", "Hello", "Good day!"

redirect.end

"No that's it, goodbye", "Bye", "Cheers", "End", "That's it", "No more questions", "Exit", "Have a good day", "End Call", "Close"

Agora que nossos elementos reutilizáveis (fluxos, entidades e intents) estão preparados, podemos criar páginas e processadores de estado.

6. Páginas e manipuladores de estado

Uma conversa do Dialogflow CX (uma sessão) pode ser descrita e visualizada como uma máquina de estado finita. Por exemplo, uma máquina de venda automática pode ser modelada como uma máquina de estados finitos. Ele tem os seguintes estados: "Aguardando moedas", "Selecionar doces", "Dar doces" e, segundo um conjunto de entradas, ele se move entre esses estados. Por exemplo, inserir uma moeda muda a máquina de venda automática de "Esperando moedas" para "Selecione a bala". Páginas são como podemos modelar esses estados para um agente virtual do Dialogflow CX.

À medida que um usuário final interage com o Dialogflow CX em uma conversa, ela passa de página para página. Portanto, a qualquer momento, exatamente uma página é a página atual, a página atual é considerada ativa e o fluxo associado a essa página também é considerado ativo.

Para cada fluxo, você define muitas páginas. As páginas combinadas podem processar uma conversa completa sobre os tópicos para os quais o fluxo foi projetado. Cada fluxo tem uma página inicial especial. Quando um fluxo se torna ativo inicialmente, a página inicial se torna a página atual. Para cada turno de conversa, a página atual permanecerá a mesma ou fará a transição para outra. Com esse conceito, você poderá criar agentes maiores com muitas páginas e várias conversas.

As páginas contêm fulfillments (caixas de diálogo de entrada estáticas e/ou webhooks), parâmetros e gerenciadores de estado. O controle de conversas acontece com gerenciadores de estado, que permitem criar várias rotas de transição para fazer a transição para outra página do Dialogflow CX, inclusive tornando-as condicionais (para ramificações de conversas).

O estado de uma conversa é controlado processando transições entre páginas com três tipos diferentes de rotas:

  • Rotas de intent: quando uma intent precisa ser correspondida (por exemplo, mudança de página com base no que um usuário final diz). (Linhas azuis no diagrama visual.)
  • Rotas de condição: quando uma condição precisa ser verificada (por exemplo, mudar a página com base em determinados parâmetros armazenados na sessão) (linhas laranja no diagrama visual).
  • Manipuladores de evento: quando um determinado evento substituto precisa ser manipulado (por exemplo, processando sem entrada ou sem correspondência, para remover a ambiguidade do usuário final para uma rota de intent ou condição) (linhas verdes no diagrama visual).

Os enunciados de conversa (ou seja, o conteúdo ou a resposta ao usuário) são definidos pelo fulfillment, que pode ser estático ou dinâmico:

  • Fulfillment estático: quando uma resposta de fulfillment estática é fornecida.
  • Fulfillment dinâmico: quando um webhook de fulfillment é chamado para respostas dinâmicas.

Para o bot de varejo, vamos criar algumas rotas de intent e fornecer algumas respostas de preenchimento de entrada estática, que serão apresentadas ao usuário assim que uma página for ativada. Mais tarde, criaremos parâmetros com rotas de condição para coletar as informações necessárias para fazer um pedido de mercadoria.

Rotas de intent da página

Como criar as páginas no fluxo inicial padrão

Confira um fluxograma do fluxo de início padrão:

Páginas conectadas do catálogo

Vamos clicar juntos:

  1. Clique em Build > Default Start Flow.
  2. Clique na Página inicial.
  3. Clique no ícone + ao lado de Rotas.
  4. Adicionar redirect.artists.overview
  5. Role para baixo até Transition e faça a transição para o fluxo Catalog.
  6. Clique em Salvar.
  7. Repita as etapas acima para redirect.product.overview e as outras 11 linhas desta tabela:

Página (in-flow)

Rotas > Intent

Rotas > Transição para

Iniciar

Default Welcome Intent

-

Iniciar

redirect.artists.overview

Fluxo: catálogo

Iniciar

redirect.product.overview

Fluxo: catálogo

Iniciar

redirect.shirts

Fluxo: catálogo

Iniciar

redirect.music

Fluxo: catálogo

Iniciar

redirect.product

Fluxo: catálogo

Iniciar

redirect.product.of.artist

Fluxo: catálogo

Iniciar

redirect.refund.info

Fluxo: atendimento ao cliente

Iniciar

redirect.shipping.info

Fluxo: atendimento ao cliente

Iniciar

redirect.swapping.info

Fluxo: atendimento ao cliente

Iniciar

redirect.my.order

Fluxo: minha ordem

Iniciar

redirect.my.order.canceled

Fluxo: minha ordem

Iniciar

redirect.my.order.status

Fluxo: minha ordem

Iniciar

redirect.end

Página: Encerrar sessão

Rotas da página inicial padrão

O fluxo inicial padrão vai funcionar como um menu de opções ao ligar para um call center. No entanto, nesse agente virtual, ele é treinado com o Natural Language, com as frases de treinamento em intents. Portanto, a interação é orientada pela conversa e não pelas opções DTMF, sendo mais natural e humana.

Rotas padrão da página inicial

Como criar as páginas no fluxo do catálogo

A transcrição do chat a seguir pertence ao fluxo do catálogo:

> "Hi"
"Welcome, I am the virtual agent of G-Records, a fictional rock label.
You can order artists merchandise, ask questions about your order or shipping,
and I can tell you more which artists are currently signed with us. How can I help?"
> "Which bands are signed with this record label?"
"The following bands are signed with G-Records:
Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.

From which of these artists would you like to order merchandise?"
> "Alice Googler"
"You want to rock with Alice Googler merchandise. Awesome!

We sell shirts, music or the tour movie.

Which merchandise item do you want?"
"(Suggestion chips: [Shirts] [Music] [Tour Movie])"
> "I would like to buy a Shirt"
"Do you want a longsleeve or a t-shirt?"
"(Suggestion chips: [T-shirt, Longsleeve, Price?])"
> "What's the price difference?"
"A t-shirt costs $25 and a longsleeve costs $30.

Do you want a longsleeve or a t-shirt?"
> "A t-shirt",
"What shirt size do you want?"
"(Suggestion chips: [XS, S, M, L, XL, 2XL, 3XL])"
> "M"
"A T-shirt of Alice Googler size: M costs $25. Shall I continue to order?"

A caixa de diálogo será diferente quando você escolher Música ou Tour Movie: para Música, a caixa de diálogo vai ser assim:

 > "Music"
"We have a Greatest Hits Album or the Live Album. Which one do you want?"
"(Suggestion chips: [Greatest Hits, Live, Price?])"
> "The Live Album"
"Do you want this album on CD or MP3?"
"(Suggestion chips: [CD, MP3])"
> "What's the price difference?"
"A CD costs $15. The digital album on MP3 costs $10.
Do you want this album on CD or MP3?"
> "Digital Album",
"The Digital Album: Alice Googler - Live costs $10. Shall I continue to order?"

Para o Tour Movie, a caixa de diálogo vai ficar assim:

 > "Tour Movie"
"The Tour Movie of G's N' Roses costs $25. Shall I continue to order?

Confira um fluxograma de todas as páginas no fluxo do catálogo:

Páginas conectadas do catálogo

Observe a complexidade desse fluxo:

  • Eu poderia pular a pergunta Quais artistas? e perguntar imediatamente "Quais itens de merchandising estão disponíveis?".
  • No fluxo inicial padrão, eu poderia perguntar: "Quero comprar uma camiseta do The Google Dolls" ou "Quero comprar algo". Isso significa que o agente virtual fará perguntas complementares para preencher os slots desses parâmetros obrigatórios. Ele vai diretamente para a página do produto.
  • A caixa de diálogo "Price" vem da página de preço que será reutilizada.
  • Embora o diálogo do vídeo do tour pareça o mais simples, vamos fazer algo especial com ele. Vamos reutilizar essa parte do diálogo para que os usuários finais também possam inseri-la diretamente em um dos outros produtos, se eles especializarem todas as informações de uma vez:
 > "I want The Goo Fighters longsleeve size S."
"The longsleeve of The Goo Fighters size S costs $30. Shall I continue to order?"

Primeiro, vamos conectar as páginas.

  1. Clique em Build > Catalog.
  2. Clique na Página inicial.
  3. Clique no ícone + ao lado de Rotas.
  4. Adicionar redirect.artists.overview
  5. Role para baixo até Transição, selecione Página e escolha: + nova página
  6. Use o nome da página: Artist Overview e clique em Salvar.

Agora vamos concluir o restante do fluxo:

  1. As etapas anteriores podem ser repetidas com as páginas, intents e fulfillments a seguir. Assuma esta tabela. Página é a página que você vai selecionar no fluxo. Rotas > Fazer transição para é o novo fluxo ou a página para a qual você vai fazer a transição.

Página (in-flow)

Rotas > Intent

Rotas > Transição para

Início do catálogo

redirect.artists.overview

Visão geral do artista

Início do catálogo

redirect.product

Produto

Início do catálogo

redirect.product.overview

Visão geral do produto

Início do catálogo

redirect.product.of.artist

Visão geral do produto

Início do catálogo

redirect.shirts

Camisas

Início do catálogo

redirect.music

Música

Início do catálogo

redirect.end

Encerrar sessão

Início do catálogo

redirect.home

Fluxo final

Visão geral do artista

redirect.product.of.artist

Visão geral do produto

Agora vamos continuar e adicionar mais fulfillments estáticos.

  1. No fluxo do catálogo, clique na página Visão geral do artista.
  2. Clique em Editar fulfillment na seção Fulfillment de entrada.
  3. Use as seguintes fulfillments estáticas (Agente diz):
  • The following bands are signed with G-Records: Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
  1. Clique em Salvar.
  2. No fluxo do catálogo, clique na página Visão geral do produto.
  3. Clique em Editar fulfillment na seção Fulfillment da entrada.
  4. Use o atendimento estático a seguir (Agente diz):
  • We sell shirts, music or the tour movie.
  1. Clique em Salvar.

Parâmetros de página

Os parâmetros são usados para capturar e fazer referência a valores fornecidos pelo usuário final durante uma sessão. Cada parâmetro tem um nome e um tipo de entidade. @Artist e @Merch são os parâmetros mínimos que precisamos coletar para fazer um pedido de produtos. Para camisetas ou camisas de manga comprida, você também precisa coletar @ShirtSize. Caso queira pedir músicas, também precisará de um nome @Carrier e @Album.

Esses parâmetros precisam ser marcados como obrigatórios. Quando necessário, você pode fornecer comandos personalizados para lembrar do usuário final e fornecer as respostas corretas para que esses parâmetros possam ser coletados. Há alguns mecanismos no Dialogflow CX que podem ajudar você com isso.

Por exemplo, forneça mensagens de fulfillment estático personalizadas na seção Parâmetro. Se o parâmetro for obrigatório, esses fulfillments serão mostrados. Essas mensagens de resposta serão adicionadas à fila de respostas. Durante a rodada de um agente, é possível (e às vezes desejável) chamar vários fulfillments, e cada um deles pode gerar uma mensagem de resposta. O Dialogflow mantém essas respostas em uma fila de respostas. Para saber mais sobre o ciclo de vida da página e a ordem em que esses fulfillments serão adicionados à fila de respostas, leia as documentações da página do Dialogflow CX.

Criar os parâmetros na página "Visão geral do artista"

Vamos definir alguns parâmetros de página:

  1. No fluxo Catálogo, clique na página Visão geral do artista.
  2. Clique em + no bloco Parâmetros. Adicione o parâmetro artist:
  • Nome de exibição: artist
  • Tipo de entidade: @Artist
  • Obrigatório: marque a caixa
  • Editar no registro: verificar
  1. Agora vamos adicionar algumas mensagens de atendimento de parâmetro personalizado. Se o parâmetro artist ainda não tiver sido coletado pelo agente virtual, o usuário final receberá esta resposta do agente adicionada à fila:

From which of these artists would you like to order merchandise?

  1. Adicione uma segunda opção de diálogo que ofereça ícones de sugestão avançados. Clique em Adicionar opção de diálogo e use este código (em JSON):
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}

É possível processar diferentes solicitações de fulfillment substituto com base na quantidade de tentativas que o usuário final fez para responder. Isso é feito com manipuladores de eventos de parâmetros. Existem vários manipuladores de eventos integrados para você escolher, como Parâmetros inválidos, Enunciados muito longos, Sem entrada, Nenhuma entrada, 2a tentativa ou Sem correspondência. A diferença entre "sem entrada" e "sem correspondência" é que, com "sem entrada", o usuário nunca forneceu uma resposta, enquanto com "sem correspondência", o usuário forneceu uma resposta, mas o Dialogflow CX não conseguiu fazer a correspondência com uma página.

  1. Role para baixo até a seção Gerenciadores de eventos de nova solicitação.
  2. Clique em Adicionar manipulador de eventos e selecione o evento: No-match default
  3. Use o seguinte envio de texto estático de evento:

I missed that. Please, specify the artist. You can choose between: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?

  1. Clique em Salvar.
  2. Clique em Adicionar manipulador de eventos e selecione o evento: No-input default
  3. Use o seguinte fulfillment de texto estático de evento:

I am sorry, I could understand the artist's name. You can choose between Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?

  1. Clique em Salvar.

Rotas de condição da página

Os parâmetros são muito eficientes em combinação com as Rotas condicionais de página. Quando uma condição é avaliada como verdadeira, a rota de página associada é chamada. Por exemplo, um parâmetro é igual a um valor específico, um parâmetro não pode estar ausente, um formulário que foi preenchido e muito mais. Confira mais informações sobre parâmetros e condições na documentação do Dialogflow CX.

Para nosso agente virtual de varejo, é necessário coletar uma sequência de parâmetros. Portanto, precisamos criar uma condição para verificar se um "formulário" foi preenchido. Um formulário é uma lista de parâmetros que precisam ser coletados do usuário final para a página. O agente virtual interage com o usuário final em várias rodadas de conversas até coletar todos os parâmetros obrigatórios do formulário, também conhecidos como parâmetros de página.

O Dialogflow CX define automaticamente os valores de parâmetro fornecidos pelo usuário final durante o preenchimento do formulário. Para verificar se o formulário completo da página atual está preenchido, use a seguinte condição: $page.params.status = "FINAL"

Criar as rotas condicionais na página "Visão geral do artista"

Vamos criar uma rota condicional, que passará para a próxima página, assim que o artista for conhecido:

  1. Na página Visão geral do artista, clique no ícone + na seção Rotas.
  2. Role a tela para baixo até a seção Condição.
  3. Selecione Pelo menos uma (OU)
  4. Em seguida, vamos escrever uma expressão que
  • Parâmetro: $page.params.status
  • Operador: =
  • Valor: "FINAL"
  1. Agora, vamos criar uma mensagem de conclusão estática específica na rota, confirmando a escolha do usuário final. Role para baixo até o bloco Fulfillment e escreva as seguintes mensagens de fulfillment:
  • $session.params.artist, great choice! Rock on!
  • You want to rock with $session.params.artist merchandise. Awesome!
  1. Quando a condição for verdadeira, você vai precisar fazer a transição para a página Visão geral do produto. Role para baixo até a seção Transition e use a página a seguir: Product Overview
  2. Clique em Salvar.

Parâmetros

Como criar as rotas na página "Visão geral do produto"

Agora que sabemos como criar parâmetros e rotas condicionais, vamos criar mais parâmetros para as seguintes páginas:

Visão geral do produto

  1. Crie o parâmetro artist na página Visão geral do produto:
  • Nome de exibição: artist
  • Tipo de entidade: @Artist
  • Obrigatório: marque a caixa
  • Editar no registro: verificar
  • Fulfillment da solicitação inicial: From which of these artists would you like to order merchandise?
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  • Gerenciador de eventos > No-match default: To buy merchandise you can choose between the following artists: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?
  • Payload personalizado:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  • Gerenciador de eventos > No-input default: To buy merchandise you can choose between the following artists: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist were you trying to mention?
  • Payload personalizado:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "The Google Dolls"
          },
          {
            "text": "The Goo Fighters"
          },
          {
            "text": "Alice Googler"
          },
          {
            "text": "G's N' Roses"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  1. Crie o parâmetro merch:
  • Nome de exibição: merch
  • Tipo de entidade: @Merch
  • Obrigatório: marque a caixa
  • Editar no registro: verificar
  • Fulfillment: Which merchandise item do you want?
  • Clique em: Adicionar opção de diálogo > Payload personalizado:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Shirts"
            },
            {
              "text": "Music"
            },
            {
              "text": "Tour movie"
            }
          ]
        }
      ]
    ]
  }
  • Manipulador de eventos > No-match default
  • Fulfillment do manipulador de eventos: We sell Shirts, Music or the Tour movie. Which of these items do you want?
  • Payload personalizado:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Shirts"
            },
            {
              "text": "Music"
            },
            {
              "text": "Tour movie"
            }
          ]
        }
      ]
    ]
  }
  • Manipulador de eventos > No-input default
  • Fulfillment do manipulador de eventos: I couldn't understand which merchandise item you wanted to buy. You can choose between: Shirts, Music or the Tour movie. Which item do you want?
  • Payload personalizado:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Shirts"
            },
            {
              "text": "Music"
            },
            {
              "text": "Tour movie"
            }
          ]
        }
      ]
    ]
  }
  1. Crie uma rota que fará a transição para a página Product (produto) quando o artist e o item merch forem fornecidos.
  • Condição:
  • Corresponder a todas as regras (AND)
  • Expressão: $session.params.artist != null
  • Expressão: $session.params.merch != null
  • Fulfillment: Alright! $session.params.merch of $session.params.artist, let's go!
  • Transição: página: Product
  1. Criar uma rota para quando o usuário disser "Camisetas"
  • Intenção: redirect.shirts
  • Transição: página: Shirts
  1. Criar uma rota para quando o usuário disser "Música"
  • Intent: redirect.music
  • Transição: página: Music
  1. Criar uma rota para quando o usuário pedir informações de preço
  • Intent: redirect.price
  • Transição: criar nova página: Price

Depois de definir a configuração acima, você vai ver uma visualização semelhante à imagem abaixo. As rotas de intent são azuis no diagrama, e as rotas de condição são laranja. Embora não estejam representados, os manipuladores de eventos são verdes e, quando vários tipos de rota fazem a transição para uma página, a linha fica cinza.

O início do fluxo do catálogo

Até agora, você aprendeu a criar fluxos, entidades, intents e páginas com gerenciadores de estado, como Rotas de intent e Rotas condicionais com base em parâmetros. Mais adiante neste laboratório, vamos usar a ramificação condicional no fulfillment para fornecer diferentes diálogos com base na entrada.

Use as configurações a seguir para finalizar o agente virtual.

Página de camisas:

  1. Crie as seguintes configurações na página Shirts:
  • Fulfillment de entrada: Do you want a longsleeve or a t-shirt?
  • Payload personalizado de fulfillment de entrada:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
  1. Crie uma rota de intent: redirect.price com uma transição para a página Price
  2. Crie o seguinte parâmetro:
  • Parâmetro: merch: tipo de entidade: @Merch, Required e Redact in log
  • Parâmetro > Gerador de eventos > No-match default
  • Parâmetro > Fulfillment do manipulador de eventos: You can choose between a t-shirt or a longsleeve. Which of these do you want?
  • Parâmetro > Fulfillment do gerenciador de eventos: payload personalizado:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            }
          ]
        }
      ]
    ]
  }
  • Parâmetro > Gerador de eventos > No-input default
  • Parâmetro > Fulfillment do manipulador de eventos: I couldn't understand if you want the t-shirt or the longsleeve. Which of these do you want?
  • Parâmetro > Fulfillment do gerenciador de eventos: payload personalizado:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "T-shirt"
            },
            {
              "text": "Longsleeve"
            }
          ]
        }
      ]
    ]
  }
  1. Clique no preenchimento de entrada e role a tela até Predefinições de parâmetros. Sempre que a página "Shirts" for ativada, o parâmetro de categoria será definido como shirts:

Parâmetro

Valor

category

shirts

  1. Adicionar uma rota condicional:
  • Corresponder pelo menos uma regra (OU)
  • Expressão: $session.params.merch = "T-shirt"
  • Expressão: $session.params.merch = "Longsleeve"
  • Transição para uma nova página: Shirt Size

Página de preços:

Como as mensagens de preços dependem do item ou da categoria de produtos escolhidos (música ou camisetas), vamos corrigir essa parte mais tarde no laboratório. Por enquanto, basta inserir um marcador de posição.

  1. Crie as seguintes configurações na página Preço:
  • Fulfillment de entrada: PRICE TODO

Como você pode solicitar o preço de vários lugares da conversa, ele precisa sempre fornecer uma resposta e transferir de volta à parte anterior do diálogo para continuar o pedido. Há cinco lugares na árvore de diálogo em que você pode fazer ramificações para receber informações de preço. (Shirt, Shirt Size, Music, Carrier e também direto por uma rota de intent), então vamos precisar de algumas rotas condicionais para voltar:

  1. Adicione uma rota condicional:
  • Corresponder a todas as regras (AND)
  • Expressão: $session.params.category = "shirts"
  • Expressão: $session.params.merch = "null"
  • Transição para uma nova página: Shirts
  1. Adicionar uma rota condicional:
  • Corresponder a todas as regras (AND)
  • Expressão: $session.params.category = "shirts"
  • Expressão: $session.params.size = "null"
  • Transição para uma nova página: Shirt Size
  1. Adicionar uma rota condicional:
  • Corresponder a todas as regras (AND)
  • Expressão: $session.params.category = "music"
  • Expressão: $session.params.album = "null"
  • Transição para uma nova página: Music
  1. Adicionar uma rota condicional:
  • Corresponder a todas as regras (AND)
  • Expressão: $session.params.category = "music"
  • Expressão: $session.params.merch = "null"
  • Transição para uma nova página: Carrier
  1. Adicionar uma rota condicional:
  • Corresponder a todas as regras (AND)
  • Expressão: $session.params.category = "null"
  • Transição para uma nova página: Product Overview

Página de tamanho de camisa:

  1. Crie as seguintes configurações na página Tamanho da camisa:
  • Fulfillment de entrada: What shirt size do you want?
  • Payload personalizado de fulfillment de entrada:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "XS"
            },
            {
              "text": "S"
            },
            {
              "text": "M"
            },
            {
              "text": "L"
            },
            {
              "text": "XL"
            },
            {
              "text": "2XL"
            },
            {
              "text": "3XL"
            }
          ]
        }
      ]
    ]
  }
  1. Crie uma rota de intent: redirect.price com uma transição para a página Price.
  2. Crie o seguinte parâmetro:
  • Parâmetro: shirtsize - Tipo de entidade: @ShirtSize - Required, Redact In Log
  • Parâmetro > Gerador de eventos > No-match default
  • Parâmetro > Fulfillment do manipulador de eventos: Please tell me the shirt size, such as XL.
  • Parâmetro > Fulfillment do gerenciador de eventos: payload personalizado:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "XS"
            },
            {
              "text": "S"
            },
            {
              "text": "M"
            },
            {
              "text": "L"
            },
            {
              "text": "XL"
            },
            {
              "text": "2XL"
            },
            {
              "text": "3XL"
            }
          ]
        }
      ]
    ]
  }
  • Parâmetro > Gerador de eventos > No-input default
  • Parâmetro > Fulfillment do manipulador de eventos: I couldn't understand the shirt size. What size do you want?
  • Parâmetro > Fulfillment do manipulador de eventos Payload personalizado:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "XS"
            },
            {
              "text": "S"
            },
            {
              "text": "M"
            },
            {
              "text": "L"
            },
            {
              "text": "XL"
            },
            {
              "text": "2XL"
            },
            {
              "text": "3XL"
            }
          ]
        }
      ]
    ]
  }
  1. Adicionar uma rota condicional:
  • Corresponder a todas as regras (AND)
  • Expressão: $page.params.shirtsize != "null"
  • Transição para a página: Product

Página de música:

  1. Crie as seguintes configurações na página Música:
  • Fulfillment de entrada: We have a Greatest Hits Album or the Live Album. Which one do you want?
  • Payload personalizado de fulfillment de entrada:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Greatest Hits"
            },
            {
              "text": "Live"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
  1. Crie uma Rota de intent: redirect.price com uma transição para a página Price.
  2. Crie o seguinte parâmetro:
  • Parâmetro: album - Tipo de entidade: @Album - Required, Redact In Log
  • Parâmetro > Gerador de eventos > No-match default
  • Parâmetro > Fulfillment do manipulador de eventos: You can choose between Greatest Hits and Live Album. Which of these do you want?
  • Parâmetro > Fulfillment do gerenciador de eventos: payload personalizado:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Greatest Hits"
            },
            {
              "text": "Live"
            }
          ]
        }
      ]
    ]
  }
  • Parâmetro > Gerador de eventos > No-input default
  • Parâmetro > Fulfillment do manipulador de eventos: I couldn't understand if you want the album: Greatest Hit or Live. Which of these do you want?
  • Parâmetro > Fulfillment do gerenciador de eventos: payload personalizado:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Greatest Hits"
            },
            {
              "text": "Live"
            }
          ]
        }
      ]
    ]
  }
  1. Clique no preenchimento de entrada e role a tela até Pré-configurações de parâmetro. Sempre que a página "Música" for ativada, o parâmetro de categoria será definido como música:

Parâmetro

Valor

category

music

  1. Adicionar uma rota condicional:
  • Corresponder a todas as regras (AND)
  • Expressão: $page.params.album != "null"
  • Transição para a página: Carrier

Página da operadora:

  1. Crie as configurações a seguir na página Transportadora:
  • Fulfillment de entrada: Do you want this album on CD or MP3?
  • Payload personalizado de fulfillment de entrada:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "CD"
            },
            {
              "text": "MP3"
            },
            {
              "text": "Price?"
            }
          ]
        }
      ]
    ]
  }
  1. Crie uma rota de intent: redirect.price, que faz a transição para a página Price.
  2. Crie o seguinte parâmetro:
  • Parâmetro: merch - Tipo de entidade: @Merch - Required, Redact In Log
  • Parâmetro > Gerador de eventos > No-match default
  • Parâmetro > Fulfillment do manipulador de eventos: Do you want a physical CD or the digital album?
  • Parâmetro > Fulfillment do gerenciador de eventos: payload personalizado:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "CD"
            },
            {
              "text": "Digital Album"
            }
          ]
        }
      ]
    ]
  }
  • Parâmetro > Manipulador de eventos > No-input default
  • Parâmetro > Fulfillment do manipulador de eventos: I couldn't understand if you mean CD or MP3. Which one do you want?
  • Parâmetro > Fulfillment do manipulador de eventos: payload personalizado:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "CD"
            },
            {
              "text": "MP3"
            }
          ]
        }
      ]
    ]
  }
  1. Adicionar uma rota condicional:
  • Corresponder a todas as regras (AND)
  • Expressão: $page.params.merch != "null"
  • Transição para a página: Product

Página do produto:

  1. Crie os parâmetros a seguir:

Nome de exibição do parâmetro

Tipo de entidade do parâmetro

Verificações

artist

@Artist

Obrigatório, Editar no registro

merch

@Merch

Obrigatório, edite no registro

  1. O parâmetro artist precisa do seguinte fulfillment inicial, que será mostrado quando o artista não for conhecido. You didn't mention which artist you are interested in. You can ask me to buy the $session.params.merch of the artist you like or ask which artists we signed. How can I help?
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "Which artists?"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  • Também adicione um manipulador de eventos No-input default com fulfillment: I couldn't understand what you just said. Ask me which artists are signed.
  • E um manipulador de eventos No-match default com fulfillment: I missed that. Please ask me which artists are signed.
  1. O parâmetro merch também precisa de manipuladores de eventos de reprompt.
  • Adicionar um manipulador de eventos No-input default com fulfillment: I couldn't understand what you just said. Which merchandise item do you want?
  • E um manipulador de eventos No-match default com fulfillment: I missed that. Which merchandise item do you want?

A próxima rota vai fazer a transição para a página de confirmação quando o artista for conhecido e o usuário escolher um "Tour Movie".

  1. Adicionar uma rota condicional:
  • Corresponder a todas as regras (AND)
  • Expressão: $session.params.artist != null
  • Expressão: $session.params.merch = "Tour Movie"
  • Predefinições de parâmetros Adicionar parâmetro > price = 25
  • Transição para uma nova página: Confirmation

O próximo trajeto passará para a página de confirmação quando o artista for conhecido e o usuário escolher uma "Camiseta" e o tamanho da camisa.

  1. Adicionar uma rota condicional:
  • Expressão personalizada: $session.params.artist != null AND $session.params.merch = "T-shirt" AND $session.params.shirtsize != null
  • Predefinições de parâmetro > Adicionar parâmetro > price = 25
  • Transição para a página: Confirmation

A próxima rota vai fazer a transição para a página de confirmação quando o artista for conhecido e o usuário escolher uma "Longa" e o tamanho da camisa.

  1. Adicionar uma rota condicional:
  • Expressão personalizada: $session.params.artist != null AND $session.params.merch = "Longsleeve" AND $session.params.shirtsize != null
  • Predefinições de parâmetro > Adicionar parâmetro > price = 30
  • Transição para a página: Confirmation

A próxima rota vai fazer a transição para a página de confirmação quando o artista for conhecido e o usuário escolher um "CD" e o nome do álbum.

  1. Adicionar uma rota condicional:
  • Expressão personalizada: $session.params.artist != null AND $session.params.merch = "CD" AND $session.params.album != null
  • Predefinições de parâmetro > Adicionar parâmetro > price = 15
  • Transição para a página: Confirmation

A próxima rota vai fazer a transição para a página de confirmação quando o artista for conhecido e o usuário escolher um "Álbum digital" e o nome do álbum.

  1. Adicionar uma rota condicional:
  • Expressão personalizada: $session.params.artist != null AND $session.params.merch = "Digital Album" AND $session.params.album != null
  • Predefinições de parâmetros Adicionar parâmetro > price = 10
  • Transição para a página: Confirmation

Em seguida, vamos criar algumas condições avançadas com avisos que detectam informações ausentes. A próxima rota vai voltar para a página da música quando o artista for conhecido e o usuário escolher um "CD" ou um "Álbum digital", mas o nome do álbum não for escolhido.

  1. Adicionar uma rota condicional:
  • Expressão personalizada: $session.params.artist != null AND ($session.params.merch = "CD" OR $session.params.merch = "Digital Album") AND $session.params.album = null
  • Fulfillment: I would also need to know which album you would like to buy!
  • Transição para a página: Music

E a última rota vai fazer a transição para a página de confirmação quando o artista for conhecido e o usuário escolher uma "camiseta" ou uma "manga longa", mas quando o tamanho da camiseta não for escolhido.

  1. Adicione uma rota condicional:
  • Expressão personalizada: $session.params.artist != null AND ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve") AND $session.params.shirtsize = null
  • Fulfillment: I would also need to know which shirt size you need!
  • Transição para a página: Shirt Size

Na próxima parte do laboratório, vamos usar fulfillments condicionais para enviar mensagens de fulfillment diferentes dependendo da entrada.

7. Respostas condicionais

Algumas respostas vão retornar uma conversa diferente com base na entrada. Os diálogos vão se ramificar, e chamamos isso de respostas condicionais. Isso pode ser interessante quando você não usa fulfillments de webhook, em que as respostas condicionais foram determinadas no back-end. Um exemplo pode ser:

if [condition]
  [response]
elif [condition]
  [response]
elif [condition]
  [response]
else
  [response]
endif
  • Um exemplo de [condition] pode ser: $session.params.user-age >= 21. Ele usa uma formatação semelhante às condições nas rotas.
  • Uma [resposta] usa a resposta de texto estático
  • As respostas condicionais sempre começam com if
  • Os blocos elif e else são opcionais

O Dialogflow CX também pode usar funções do sistema integradas. Por exemplo, para formatar uma data ou hora ou mostrar a hora atual ($sys.func.NOW()).

Vamos finalizar o fluxo do catálogo corrigindo as páginas de Confirmação e Preço.

Página de confirmação:

Agora vamos criar a página de confirmação. Ele tem os seguintes requisitos:

  • Se o merch for CD ou álbum digital. Os seguintes campos serão mostrados na confirmação: artista, merch, álbum e preço.
  • Se o produto for camiseta ou manga longa. Vamos mostrar os seguintes campos na confirmação: artista, merch, tamanho e preço.
  • Caso contrário (e, portanto, se merch for Filme da turnê). Os seguintes campos serão mostrados na confirmação: artista, merch e preço.
  1. Clique na página de Confirmação.
  2. Clique em Editar atendimento > Respostas do agente > opção Adicionar diálogo > Resposta condicional:
if ($session.params.merch = "CD" OR $session.params.merch = "Digital Album")
  The $session.params.merch: $session.params.artist - $session.params.album costs $$session.params.price. Shall I continue to order?
elif ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve")
  A $session.params.merch of $session.params.artist size: $session.params.shirtsize costs $$session.params.price. Shall I continue to order?
elif $session.params.merch = "Tour Movie"
  The $session.params.merch of $session.params.artist costs $$session.params.price. Shall I continue to order?
else
  It looks like something went wrong with your order. You can say "Reset", to restart the order process.
endif
  1. Create the following Custom payload:
  • Custom payload:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "Yes, confirm"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}

Next, create two intent routes:

  1. confirm.proceed.order transitions to: Order Process Flow.
  2. decline.proceed.order transitions to End Flow

When the user declines the order, and does not want to proceed the order process, we will have to transition back to the welcome page, but all the parameters have to be cleared. We can do this by specifically setting null to all the possible parameters. You can do this with Parameter presets.

  1. In the decline.proceed.order intent route, scroll down to Parameter presets and add the following parameters:

Parameter

Value

artist

null

merch

null

shirtsize

null

category

null

album

null

price

null

restart

true

Notice that we have created an additional parameter called restart. If this parameter is present, the Default Start Flow, should know to continue the conversation by showing a customized message.

  1. Click on the Default Start Flow, Start Page, and create another Conditional Route:
  • $session.params.restart = "true"
  • Fulfillment: "Welcome back, as the virtual agent of G-Records, I can help you order artists merchandise, you can ask questions about your order or shipping, and I can tell you more which artists are currently signed with us. How can I help?"
  • Custom payload:
{
    "richContent": [
      [
        {
          "type": "chips",
          "options": [
            {
              "text": "Which artists?"
            },
            {
              "text": "Which products?"
            },
            {
              "text": "About my order..."
            }
          ]
        }
      ]
    ]
  }
  1. Select the Start Page and click on the redirect.end intent. Create the following fulfillment: Thank you for contacting G-Records! Have a nice day!

Price Page:

Let's also fix the Price TODOs. The price information will be static for now. Click on the Price Page in the Catalog Flow, and use the following entry fulfillment:

  • Delete the Agent Says entry fulfillment.
  • Create a new Conditional Response:
if $session.params.category = "shirts"
  A t-shirt costs $25 and a longsleeve costs $30.
elif $session.params.category = "music"
  A CD costs $15. The digital album on MP3 costs $10.
else
  A t-shirt costs $25 and a longsleeve costs $30. A CD costs $15 and a digital album on MP3 $10. In case you are interested in the Tour Movie, that one is $25.
endif

Conditional Responses

Well done, by now you completed the Catalog flow. Your flow should look similar to this diagram:

8. Wrapping up the agent

We are almost at the end of this lab. Let's configure the last flows together, and take in practice all the new things that we have learned.

Creating the My Order Flow

  1. Go to the My Order Flow, and create the following intent transitions:

Page (In Flow)

Routes > Intent

Routes > Transition To

My Order Start

redirect.my.order

My Order

My Order Start

redirect.my.order.status

My Order Status

My Order Start

redirect.my.order.canceled

My Order Cancellation

My Order Start

redirect.end

End Session

My Order Start

redirect.home

End Flow

My Order

redirect.my.order.status

My Order Status

My Order

redirect.my.order.canceled

My Order Cancellation

Default Start Flow

redirect.my.order.canceled

Flow: My Order

Default Start Flow

redirect.my.order.status

Flow: My Order

  1. Let's create the following entry fulfillment for the My Order Page:
  • Entry fulfillment: I can look up the status of your order, or I can cancel an order.
  1. In the My Order Page create the following parameter:
  • Displayname: ordernumber
  • Entity Type: @OrderNumber
  • Required: checked
  • Initial prompt fulfillment: What's the order number? For example ABCD123.
  • Event Handler: No-match default: To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
  • Event Handler: No-input default: I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
  1. Create the following conditional route:
  • Customize Expression: $page.params.status = "FINAL"
  • Fulfillment: And do you want to Cancel your order, or should I look up the status?
  1. Click on Add state handler > Event Handlers and create the Event Handler: No-input default
  • Fulfillment: I'm sorry, what was that? Would you like me to cancel an order or look up the status?
  • Custom payload:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "Status"
          },
          {
            "text": "Cancel"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  1. Create the Event Handler: No-match default
  • Fulfillment: Would you like me to cancel an order or lookup the status?
  • Custom payload:
{
  "richContent": [
    [
      {
        "options": [
          {
            "text": "Status"
          },
          {
            "text": "Cancel"
          }
        ],
        "type": "chips"
      }
    ]
  ]
}
  1. In the My Order Status Page create the following parameter:
  • Displayname: ordernumber
  • Entity Type: @OrderNumber
  • Required checked
  • Initial prompt fulfillment: What's the order number? For example ABCD123.
  • Event Handler: No-match default: To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
  • Event Handler: No-input default: I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
  1. In the My Order Status Page create the following conditional route:
  • Customize Expression: $session.params.ordernumber != null
  • Fulfillment: Your order $session.params.ordernumber has been shipped, it can take up to approx 2 weeks before you will receive your items.
  • Add dialogue option > Text: Is there anything else I can help you with?
  1. In the My Order Cancelation Page create the following parameter:
  • Displayname: ordernumber
  • Entity Type: @OrderNumber
  • Required checked
  • Initial prompt fulfillment: What's the order number? For example ABCD123.
  • Event Handler: No-match default: To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
  • Event Handler: No-input default: I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
  1. In the My Order Cancelation Page create the following conditional route:
  • Customize Expression: $session.params.ordernumber != null
  • Fulfillment: Your order $session.params.ordernumber has been canceled.
  • Add dialogue option > Text: Is there anything else I can help you with?
  1. Test the flow and create the following two test scenarios:
>"About my order"
>"ABCD123"
>"Status"

And:

>"What's the status of order DEFG222"
  1. Select the Start Page and click on the redirect.end intent. Create the following fulfillment: Thank you for contacting G-Records! Have a nice day!
  2. Select the Start Page and click on the redirect.home intent. Create the following parameter preset: restart = true

Default Negative intents (Fallback)

When you create a virtual agent, a default negative intent is created for you. You can add training phrases to this intent that act as negative examples that will trigger a No-match event. There may be cases where end-user input has a slight resemblance to training phrases in normal intents, but you do not want these inputs to match any normal intents.

  1. Try in the simulator: I don't like Alice Googler.

You will see that the virtual agent answers with the Product Overview Page, to continue ordering Alice Googler merchandise. However, your end user does not like that artist. Let's use the Default Negative Intent for this.

  1. Go to Manage > Intents and select the Default Negative Intent.
  2. Add the following training phrases that will trigger the No-match event.
  • I don't like Alice Googler
  • I am not a fan of G's N' Roses
  • I can't stand the music of the Google Dolls
  1. Hit Save and test the following sentence in the simulator: I am really not a fan of the Goo Fighters

This time the No-match event was triggered, you stayed on the Start Page.

Default Fallback Messages

  1. Click the Default Start Flow, select the sys.no-input-default event handler.

The No-input fallback basically means: No text or speech answers were detected. Likely no answers were given, or the system couldn't hear it. Therefore, let's make the fallback messages more specific. Use the tab key, to create alternative dialogues:

  1. Remove all answers, and add these text dialogues:
  • I'm sorry, I didn't receive an answer. Can you say it again?
  • I missed your answer, can you say it again?
  • Sorry, I didn't hear anything. Can you say it again?
  • I couldn't hear what you were saying, what was that?
  • I'm sorry, I missed your answer. What were you trying to say?

Don't forget to click Save.

  1. Click the Default Start Flow, select the sys.no-match-default event handler.

The No Match fallback basically means: Text or speech answers were detected but nothing in Dialogflow CX got matched.

  1. Remove all answers, and add these text dialogues:
  • Sorry, I didn't get that. Can you please rephrase?
  • I'm sorry, I don't understand. Can you please rephrase?
  • I don't understand, please rephrase.
  • Sorry, I didn't get that. What was that?
  • I didn't get that, can you please rephrase?

Don't forget to click Save.

  1. It's advised to repeat these steps for the Catalog, My Order, Order Process and Customer Care flows.

Here's a tip: when creating fallback messages, make them more explicit, by rephrasing the previous question or by mentioning an example. You could create these type of No-match and No-input events on Page level when creating parameters. In our labs, we have already done this.

Creating the Order Process Flow

  1. Go to the Order Process Flow, and create the following intent transitions:

Page (In Flow)

Routes > Intent

Routes > Transition To

Order Process Start

redirect.end

End Session

Order Process Start

redirect.home

End Flow

Order Process Start

confirm.proceed.order

New Page: Shipping Details

  1. Let's create the following entry fulfillment for the Shipping Details Page:
  • Entry fulfillment: To complete your order I will first need to collect your shipping details.
  1. Create the following parameters:

These parameters will make use of built-in system entities. System entity support differs for each language. See the docs for more information.

Parameter Display name

Entity

Required?

Initial prompt fulfillment

No-match default

No-input default

firstname

@sys.person

Required

What's your first name?

I'm sorry I missed that. What's the first name?

I'm sorry, I didn't understand. What's the first name?

lastname

@sys.person

Required

What's your last name?

I'm sorry I missed that. What's the last name?

I'm sorry, I didn't understand. What's the last name?

address

@sys.address

Required

What's your address?

I missed that. What's the address?

I'm sorry, I didn't understand. What's the address?

zipcode

@sys.any

Required

What postal code or zipcode do you have?

I'm sorry, what's the zip or postal code? For example: 1234AB or 10001.

I'm sorry, I didn't understand. What's the zip or postal code? For example: 1234AB or 10001.

city

@sys.geo-city

Required

What's the name of the city?

I missed that, what's the name of the city?

I'm sorry, I didn't understand. What's the name of the city?

country

@sys.geo-country

Required

What's the name of the country?

I missed that, what's the name of the country?

I'm sorry, I didn't understand. What's the name of the country?

email

@sys.email

Required

Lastly, what's your email address?

I am sorry. What's the email address? For example name@domain.com.

I am sorry, I didn't understand. What's the email address? For example name@domain.com.

  1. Create the following conditional route:
  • Customize Expression: $page.params.status = "FINAL"
  • Transition to new Page: Payment Details
  1. Create the following entry fulfillment.

Let's fake it that this virtual agent makes use of Google Pay. Don't worry this tutorial won't make real transactions. Create the following entry dialogues:

  • Agent Says:
Alright $session.params.firstname! We will make use of Google Pay, that's connected to your email account: $session.params.email.
  • Conditional Response
if $session.params.merch != "Digital Album"
  Shipping costs an additional 5 dollars. This will make the total price $$sys.func.TO_TEXT($sys.func.ADD($session.params.price, 5)).
  Your merchandise will be shipped to:
  $session.params.firstname $session.params.lastname
  $session.params.address
  $session.params.zipcode $session.params.city
  $session.params.country
  To continue the order process please explicitly say "I confirm". Do you want to confirm your $session.params.artist $session.params.merch order?
else
  The total costs will be: $$session.params.price.
  After purchasing the digital album, you will receive an email with the download link.
  To continue the order process please explicitly say "I confirm".
  Do you want to confirm your $session.params.artist $session.params.merch order?
endif
  1. Crie a seguinte Intent Route
  • Intent: confirm.proceed.order
  • Mensagem do agente: Thank you for your order! Your merchandise will be shipped today!
  • Adicionar opção de diálogo > Texto: Here's the order number: ABCD123.
  • Adicionar opção de diálogo > Texto: Have a good day!
  • Transição: End Session
  1. Selecione a página Start e clique na intent redirect.end. Crie o fulfillment a seguir: Thank you for contacting G-Records! Have a nice day!
  2. Selecione a página Start e clique na intent redirect.home. Crie a seguinte predefinição de parâmetro: restart = true

Incrível! Agora temos um chatbot de varejo totalmente funcional. No próximo laboratório, vamos testar o desempenho do agente virtual.

9. testar seu agente virtual

Use o simulador integrado para testar os diálogos do agente virtual. A vantagem de testar os fluxos no simulador é que você terá uma boa visão geral dos fluxos, páginas, parâmetros e eventos (DTMF) que o simulador coletou ao percorrer seus fluxos. Isso facilita o teste do que testar diretamente em uma integração, já que esses tipos de informações serão ocultados do usuário final. É possível até mesmo criar, salvar e reutilizar casos de teste. Isso faz muito sentido quando você mantém ou edita seus fluxos ao longo do tempo e quer ter certeza de que nenhuma das mudanças vai afetar seu trabalho anterior.

Também é possível exportar e importar casos de teste feitos anteriormente, armazenando os testes no Google Cloud Storage ou localmente. A exportação de um teste faz o download de um arquivo blob. Para saber mais sobre o simulador e os casos de teste, consulte a documentação do simulador / casos de teste.

Antes de criar alguns casos de teste, vamos finalizar o restante do nosso agente virtual:

Como criar o fluxo de atendimento ao cliente

  1. Acesse o fluxo de Atendimento ao cliente e crie estas transições de intent:

Página (in-flow)

Rotas > Intent

Rotas > Transição para

Início do atendimento ao cliente

redirect.shipping.info

Frete

Início do atendimento ao cliente

redirect.refund.info

Reembolso

Início do atendimento ao cliente

redirect.swapping.info

Troca

Início do atendimento ao cliente

redirect.home

Fluxo final

Início do atendimento ao cliente

redirect.end

Encerrar sessão

Fluxo do Customer Care

  1. Crie os seguintes fulfillments de entrada para a página Frete:
  • Shipping physical merchandise items can take up to 2 weeks.
  • Is there anything else I can help you with?
  1. Crie os seguintes cumprimentos de entrada para a página Reembolso:
  • We offer free returns and refunds. We provide one free return label for each order. You can use it within 30 days from receiving your order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.
  • Is there anything else I can help you with?
  1. Crie os seguintes fulfillments de entrada para a página Troca:
  • If you would like to change your item for a different one, please return your unwanted item and place a new order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.
  • Is there anything else I can help you with?
  1. Selecione a página Start e clique na intent redirect.end. Crie a seguinte conclusão: Thank you for contacting G-Records! Have a nice day!
  2. Selecione a página Start e clique na intent redirect.home. Crie a seguinte predefinição de parâmetro: restart = true

Criar casos de teste

  1. Clique no botão Test Agent no lado direito da tela.

Ao abrir o simulador pela primeira vez, é preciso selecionar um ambiente de agente e um fluxo ativo. Na maioria dos casos, é preciso usar o ambiente de rascunho e o fluxo inicial padrão.

  1. Tipo: Hi

Fluxo de atendimento ao cliente

  1. Pergunta: Which artists are signed with your label?
  2. Diga: The Google Dolls
  3. Diga: I am interested in buying a shirt
  4. Diga: A t-shirt
  5. Diga: Medium
  6. Agora clique no botão de salvar o caso de teste. que você encontra na parte de cima do simulador (ao lado da seta de refazer e do ícone de lixeira de redefinição).

Fluxo de atendimento ao cliente

  1. Informe os seguintes detalhes:
  • Nome do caso de teste: Buy Google Dolls t-shirt size M
  • Tags: #catalog, #shirts, #t-shirt, #TheGoogleDolls
  1. Clique em Salvar.

Vamos criar mais casos de teste.

  1. Primeiro, apague a caixa de diálogo atual clicando no ícone Redefinir (caixa de thrash).
  2. Crie os seguintes casos de teste:

Compre a camiseta da Alice Googler:

>"Buy the Alice Googler t-shirt."
>"XL"
  • Nome do caso de teste: Buy the Alice Googler t-shirt
  • Tags: #catalog, #shirts, #t-shirt, #AliceGoogler

Comprar uma camiseta tamanho M: (o nome do artista não foi mencionado, mas você quer pular as páginas de visão geral das bandas, de produtos, de camisetas e de tamanhos de camisetas)

>"Buy a t-shirt size M"
>"The Google Fighters"
  • Nome do caso de teste: Buy a t-shirt size M
  • Tags: #catalog, #shirts, #t-shirt, #TheGoogleFighters
  • Descrição: (Observe que o nome do artista não foi mencionado, mas você quer pular as páginas de visão geral das bandas, de produtos, de camisas e de tamanhos de camisas)

Compre a música "G's N' Roses". Isso vai pular a página de visão geral das bandas e dos produtos.

>"Purchase music of G's N' Roses"
>"Live"
>"CD"
  • Nome do caso de teste: Purchase music of G's N' Roses
  • Tags: #catalog, #music, #CD, #GsNRoses, #live
  • Descrição: isso pula a página de visão geral das bandas e dos produtos.

Confira as informações de preço:

>"Which products"
>"Shirts"
>"What's the price difference?"
>"Longsleeve"
>"What does it cost?"
>"M"
>"The Google Dolls"
>"No"
>"Which bands"
>"The Gooo Fighters"
>"Music"
>"How much does it cost?"
>"Greatest Hits"
>"What's the price difference?"
>"Mp3"
>"No"
>"I want to buy the tour movie"
>"Alice Googler"
>"Yes"
  • Nome do caso de teste: Price info
  • Tags: #catalog, #music, #tourmovie, #shirts
  • Descrição: testar informações de preço em vários pontos da caixa de diálogo

Testar casos de teste pré-gravados

  1. Selecione Gerenciar > Casos de teste no menu principal do Dialogflow à esquerda.
  2. Selecione todos os casos de teste e pressione o botão Run acima da tabela.

O Dialogflow CX vai executar todos os casos de teste selecionados com base na gravação que foi salva como "Caso de teste ouro". Se os resultados forem os mesmos de quando você a salvou, os testes serão aprovados. - Se algo mudou nos fluxos, como páginas que não estão configuradas corretamente ou intents que direcionaram você para as páginas erradas, os testes vão falhar.

Casos de teste

  1. No simulador, faça a seguinte pergunta: How long will shipping take?
  2. Anote o resultado e salve o caso de teste como Shipping com a tag: #shipping.
  3. Acesse o painel "Gerenciar > Casos de teste" e pressione o botão Run no canto superior direito da grade para executar apenas o caso de teste Shipping.

O teste será aprovado.

  1. Volte ao fluxo de atendimento ao cliente, selecione a página Start e clique no cabeçalho Routes.

Será exibida uma tela com uma grade que mostra todos os trajetos.

  1. Remova o redirect.shipping.info route.
  2. Acesse o painel "Gerenciar > Casos de teste" e pressione o botão Run no canto superior direito da grade para executar apenas o caso de teste Shipping.

O teste vai falhar.

  1. Clique no teste com falha para conferir os detalhes.

Nesse caso, o teste falhou com a mensagem de erro abaixo:

Page: Page mismatch:
Expected: Shipping
Actual: Start Page

Isso acontece porque a página não existe mais no fluxo. Esperávamos a página Shipping, mas não saímos da página Start. ou os usuários finais receberiam uma mensagem alternativa.

Em outras palavras, essa é uma solicitação perdida, um resultado de teste falso negativo. O teste falhou. A página Frete era esperada, mas nada acontece ou uma mensagem de fallback é mostrada.

  1. Volte para o fluxo de atendimento ao cliente e adicione o redirect.shipping.info como uma rota de intenção à página Start. Não se esqueça de acessar a página Entrega e clicar em Salvar.
  2. No simulador, registre o seguinte caso de teste: I want to swap my item e salve-o como Swapping #swapping.
  3. Abra Gerenciar > Intenções > redirect.refund.info e adicione a seguinte frase de treinamento: I want to swap this item for a refund

Sem essa frase de treinamento, quando um usuário pedia a troca de um item para receber um reembolso, ele acessava a intent redirect.swapping.info, mas não queremos fornecer informações sobre a troca de itens, e sim sobre reembolsos.

  1. Crie o seguinte caso de teste dourado: I want to swap this item for a refund no simulador e salve-o como Swap for Refund #refund.
  2. Volte para a intent Gerenciar > Intents > redirect.refund.info e remova a linha I want to swap this item for a refund.
  3. Volte para Gerenciar > Casos de teste, selecione o caso de teste Troca por reembolso e execute.

Seu teste mais recente falhou com a seguinte mensagem de erro:

If you would like to change your item for a different one, please return your unwanted item and place a new order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.`
Is there anything else I can help you with?
 Page: Page mismatch:
Expected: Refund
Actual: Swapping

Em outras palavras, essa é uma solicitação mal compreendida, um resultado de teste falso positivo. O teste falhou. A página Refund era esperada, mas a página Swapping ficou ativa.

Cobertura

No Dialogflow CX, a cobertura de teste é uma medida usada para descrever o grau em que o diálogo do agente virtual (páginas e intents) é executado quando um conjunto de testes específico é executado. Um agente virtual com alta cobertura de teste, medida em porcentagem, teve mais diálogos executados durante o teste, o que sugere que ele tem uma chance menor de conter bugs não detectados (como solicitações não compreendidas) em comparação com um agente virtual com baixa cobertura de teste.

  1. Para visualizar um relatório de cobertura de teste para todos os casos de teste, clique em Cobertura.
  2. Clique na guia Transições.

Isso vai mostrar a cobertura de teste de todas as transições de página.

Cobertura de transições

  1. Clique na guia Intents.

Isso vai mostrar a cobertura de teste de todas as intents.

Cobertura de intents

Parabéns! Agora você já criou e testou um exemplo real completo de um bot de varejista. Vamos para a próxima página do laboratório para ler a conclusão e encontrar algumas referências úteis.

10. Conclusão

O Dialogflow CX é uma plataforma de IA de conversação (CAIP, na sigla em inglês) para criar agentes virtuais, como bots de chat ou de voz. O Dialogflow CX capacita sua equipe a acelerar a criação de experiências de conversação de nível empresarial com criadores de bots visuais, intents reutilizáveis e a capacidade de lidar com conversas em vários turnos.

Neste codelab, você aprendeu a criar um agente virtual de varejo do mundo real. Abordamos os seguintes conceitos:

  • Fluxos
  • Parâmetros, entidades personalizadas e do sistema
  • Pages
  • Processadores de estado, como rotas de intent e de condição
  • Mensagens de fulfillment estáticas e respostas condicionais
  • Intents substitutas
  • Simulador, casos de teste e cobertura

Resultado final

Referências

Para saber mais sobre o Dialogflow CX, confira os blogs e a documentação a seguir.