Criar um agente de RBM com tecnologia do Dialogflow (avançado)

Neste codelab, você aprenderá a usar o Dialogflow para criar uma interface de conversa para alimentar um agente do RBM.

O que você vai criar neste codelab?

  • Um agente do Dialogflow que alimenta a conversa com um agente do RBM
  • Uma interface de conversa para uma loja de bicicletas fictícia que permite que os usuários conheçam informações sobre a bicicleta e marque horários para corrigir ou atender a bicicleta

O que você vai aprender

  • Como usar as três construções principais do Dialogflow (intents, entidades e contextos) para criar uma interface de conversa
  • Como conectar a interface de conversa aos seus serviços e APIs usando o fulfillment do Dialogflow e o editor in-line (com o Cloud Functions para Firebase)
  • Como criar tipos de resposta RBM do Dialogflow para criar uma experiência aprimorada de RBM para usuários

Pré-requisitos

  • Uma Conta do Google

Crie e consulte seu primeiro agente

Duração: 10h

Crie seu primeiro agente do Dialogflow

Para criar um agente do Dialogflow, siga estas etapas:

  1. Abra uma nova guia e faça login no Dialogflow.
  2. Clique em Criar agente na navegação à esquerda.

  3. Insira "CodelabRBMBikeShop" para o nome do agente, "inglês" como o idioma padrão e defina o fuso horário padrão como seu fuso horário. Em seguida, clique em Criar.

O console do Dialogflow

Você verá o console do Dialogflow. Se você estiver trabalhando em uma tela menor e a navegação à esquerda estiver oculta, clique no botão de navegação no canto superior esquerdo. O botão de configurações direciona você para as configurações atuais do agente.

O meio da página mostra uma lista de intents para o agente. Por padrão, os agentes do Dialogflow começam com duas intents. Seu agente corresponde à intent de fallback padrão quando não entende o que os usuários dizem. A intent de boas-vindas padrão cumprimenta seus usuários. É possível mudar essas intents para personalizar a experiência.

O simulador do Dialogflow fica à direita. Assim, você pode testar seu agente falando ou digitando mensagens.

Como consultar seu agente

Os agentes do Dialogflow são mais bem descritos como módulos de Processamento de linguagem natural (PLN). Elas podem ser incluídas no seu app, produto ou serviço para transformar solicitações naturais do usuário em dados acionáveis.

Agora é hora de testar o agente. No simulador à direita, clique no campo de texto Try it now, digite "Hi" e pressione Enter.

O Dialogflow identifica a consulta, corresponde à intent de boas-vindas padrão e responde com uma saudação genérica. Isso funciona porque o Dialogflow treina automaticamente a intent de boas-vindas padrão com algumas saudações de exemplo.

Criar um agente do RBM

Faça login no Console do desenvolvedor do Business Communications e clique em Criar agente.

No campo "Name", digite "quot;Your Name's Bike Shop" (como "Sean's Bike Agent"), selecione uma região e clique em Create Agent.

Conectar o agente do RBM ao Dialogflow

Após a criação do agente do RBM, clique no agente para ver a página Visão geral do agente. Clique no link Integrações na navegação à esquerda.

Por padrão, os agentes do RBM usam o Google Cloud Pub/Sub para gerenciar mensagens do usuário. Para conectar o agente do RBM ao agente do Dialogflow criado anteriormente, clique na integração do Dialogflow.

Na caixa de diálogo, clique em Conectar modelo existente. Siga as instruções para conceder ao agente do RBM permissões para chamar o agente do Dialogflow e clique em Próxima.

Por fim, você precisa fornecer o ID do projeto do Dialogflow. Em uma guia diferente do navegador do Console do desenvolvedor de comunicações comerciais, acesse o Dialogflow e abra o agente CodelabRBMBikeShop criado anteriormente. Clique no ícone de engrenagem próximo ao nome do projeto na navegação à esquerda.

Clique nesse link para acessar as configurações do modelo. Em GOOGLE PROJECT,encontre e copie o ID do projeto.

Volte para a guia com o Console do desenvolvedor do Business Communications aberto, cole o ID do projeto na caixa de diálogo e clique em Iniciar integração.

Esse processo leva cerca de dois minutos para ser concluído. Depois de concluído, você verá a opção de integração do Dialogflow destacada e um link Ver agente disponível.

Todas as mensagens de e para seu agente agora estão sendo gerenciadas pelo agente do Dialogflow do CodelabRBMBikeShop.

Convide seu dispositivo de teste e envie uma mensagem

Antes de começar a usar o Dialogflow, vamos configurar o dispositivo de teste. Se você ainda não tem um dispositivo capaz de receber mensagens RBM, siga este guia para preparar seu dispositivo.

No Console para desenvolvedores do Business Communications, clique em Devices na navegação à esquerda. No formulário, digite o número de telefone completo do seu dispositivo no formato E.164 (por exemplo, +12223334444) e clique em Adicionar.

No dispositivo, você recebe o convite para fazer o teste. Toque em Quero ser testador.

No navegador, encontre seu dispositivo na lista e envie uma mensagem de teste a ele. Se você recebeu uma mensagem do agente do RBM no seu dispositivo, está tudo pronto para continuar com este codelab.

Como criar uma intent de boas-vindas

Normalmente, com um agente RBM com tecnologia do Dialogflow, para iniciar uma conversa, você faz uma chamada de API que especifica o número de telefone do usuário e a intent do Dialogflow que inicia a conversa (geralmente a intent de boas-vindas do seu agente). Neste codelab, vamos pular esta etapa e usar a conversa que já criamos na etapa anterior com o dispositivo de teste do Business Console do Business Communications. Para ler mais sobre esse recurso da API, confira este guia.

Vamos começar adicionando respostas do RBM ao Intent de boas-vindas padrão para que o Dialogflow possa usá-lo com seu agente do RBM. Primeiro, navegue até a guia do navegador que está com o Dialogflow aberto. Clique em Intent de boas-vindas padrão, role a tela para baixo até a seção Respostas, clique em + na lista de tipos de resposta e selecione RCS Business Messaging (RBM).

Clique em Adicionar respostas e selecione Resposta simples. No campo de texto da Resposta simples, insira ""Hi, Welcome to Hogarth's bike shop". Como posso ajudar? (Substitua Hogarth pelo seu nome) e clique em Salvar.

Iniciar uma conversa

Agora que você tem uma intent de boas-vindas configurada, volte para o dispositivo de teste e envie a mensagem "Hi". Essa mensagem aciona a intent de boas-vindas padrão, e você verá algo semelhante à imagem abaixo.

Atualizar sua intent de boas-vindas

Agora que o Dialogflow está enviando uma mensagem simples, vamos atualizar a mensagem para ser um pouco mais útil. Queremos não só receber o usuário, mas também orientar as ações que ele realiza.

O agente que estamos criando precisa ser compatível com dois recursos principais: verificar o horário de funcionamento da empresa e agendar um horário. Vamos substituir nossa mensagem de boas-vindas de resposta por um card com respostas sugeridas para realizar essas interações.

Na seção Respostas de boas-vindas padrão, Respostas, selecione a guia Mensagens de negócios do RCS. Remova a Resposta simples clicando no ícone da lixeira. Em seguida, clique em Adicionar respostas e selecione Rich Card autônomo.

No formulário independente de Rich Card, insira o seguinte:

  • Título do cartão: Olá, esta é a loja de bicicletas da Hogarth'
  • Descrição do card: como posso ajudar? Selecione uma das opções abaixo:
  • Selecionar orientação do cartão: vertical
  • URL da imagem/vídeo: https://storage.googleapis.com/df-rbm-codelab/bike-shop.jpg
  • Selecionar altura de mídia: média

Clique em Adicionar sugestão e insira as seguintes informações:

  • Texto de sugestão: Qual é o horário de funcionamento?
  • Postback de sugestão: response_hours

Para adicionar outra sugestão, clique em Add Suggestion e insira o seguinte:

  • Texto de sugestão: agende um horário
  • Postback de sugestão: response_appointment

Clique em Salvar.

Faça o teste!

Quando o modelo mostrar "quot;Agent Training complete"" volte para seu dispositivo e envie a mensagem "quot;Hi" para seu agente. Agora você verá o Rich Card autônomo que acabou de criar.

Tente tocar em Qual é seu horário de funcionamento? A intent de fallback padrão é acionada. Isso porque o agente do Dialogflow não sabe como lidar com os dados de postback que você configurou para essa sugestão e responde.

Vamos corrigir isso.

Criar sua intent de horário de funcionamento

O Dialogflow usa intents para categorizar as intenções de um usuário. As intents têm frases de treinamento, que são exemplos do que um usuário pode dizer ao agente. Por exemplo, alguém quer saber o horário de funcionamento da nossa loja de bicicletas e pode perguntar: "Quando vocês abrem?" "Qual é seu horário de funcionamento {/7}ou

Todas essas consultas são únicas, mas têm a mesma intenção: receber informações sobre quando nossa loja de bicicletas está aberta.

Para cobrir essa consulta, crie uma intent de "Horas":

  1. No menu de navegação à esquerda, clique em + ao lado de Intents.
  2. Em Nome da intent, insira "Hours".
  3. Em Frases de treinamento, clique em Adicionar expressão do usuário e insira o seguinte, pressionando Enter após cada entrada:

    • When do you open?
    • What are your hours?
    • How late can I come in?
    • reply_hours.

    Essa última frase de treinamento é usada para mapear os dados de postback que você configurou na seção anterior com essa intent.

  4. Em Respostas, clique em + e selecione RCS Business Messaging (RBM).

  5. Clique em Adicionar respostas e selecione Resposta simples.

  6. No campo de texto da Simple Response, insira "quo"; We'open's all weekday, from 9am to 5:30pm."

  7. Clique em Salvar.

Faça o teste!

Agora, pergunte o horário de funcionamento do seu agente. No dispositivo, na conversa do agente do RBM, digite "quot;When are you open?"" e envie a mensagem para o agente.

Seu agente agora responde corretamente à consulta. Observe que, mesmo que sua consulta seja um pouco diferente da frase de treinamento ("Quando você está aberto?" em comparação com Quando você está aberto?"), O Dialogflow ainda correspondeu a consulta à intent correta. Você também pode tocar em Qual é seu horário de funcionamento? no Rich Card.

O Dialogflow usa frases de treinamento como exemplos para um modelo de machine learning para corresponder as consultas dos usuários à intenção correta. O modelo de aprendizado de máquina verifica a consulta em relação a cada intent no agente, dá uma pontuação a cada intent e estabelece a correspondência da intent de maior pontuação. Se a intent de pontuação mais alta tiver uma pontuação muito baixa, a correspondência será feita com a intent de fallback.

Como adicionar o fulfillment

Embora funcione, o agente que criamos se comporta de maneira não natural. Quando o usuário fizer algo como "Você está aberto?", o agente responderá com "Estamos abertos todos os dias da semana das 9h às 17h30". Seria muito mais natural e útil se o agente nos dissesse diretamente se a loja está aberta.

Para isso, nosso agente precisa verificar se a loja está aberta e gerar uma resposta diferente nos dois casos. No Dialogflow, esse tipo de lógica complexa precisa ser implementado no webhook de fulfillment.

Um webhook de fulfillment é um servidor HTTP chamado pelo Dialogflow com informações sobre o estado atual da conversa. O código de fulfillment realiza todas as ações necessárias e gera uma resposta que o Dialogflow retorna ao usuário.

Agora veremos o processo de implantação de um webhook de fulfillment que deixa nosso agente responder de maneira mais útil.

Configuração: como implantar e ativar o fulfillment

O Dialogflow tem um editor integrado do Cloud Functions para Firebase que permite escrever e implantar o código JavaScript que processará o fulfillment.

Na navegação à esquerda do Dialogflow, clique em Fulfillment para abrir a página de fulfillment. Clique no botão ao lado de Editor in-line para ativar o editor do Cloud Functions para Firebase.

O editor contém dois arquivos: "index.js", que contém o código principal do fulfillment, e "package.json", que detalha as dependências necessárias.

Agora vamos importar um exemplo de código que vai ativar o fulfillment.

Copie e cole o texto desse arquivo em "index.js" substituindo todo o conteúdo atual dele:

https://storage.googleapis.com/df-rbm-codelab/index.js

Role até a parte inferior da página e clique em IMPLANTAR. Depois de um minuto, o código será implantado no Cloud Functions para Firebase.

Depois que a função for implantada, você verá a data e a hora da implantação na parte inferior da página:

Veja o código de fulfillment. A função hoursHandler chama currentlyOpen para determinar se a loja está aberta no momento e adiciona uma resposta RBM diferente dependendo da condição.

function hoursHandler(agent) {
    let responseText = 'We\'re currently closed, but we open every weekday at 9am!';
    if (currentlyOpen()) {
      responseText = 'We\'re open now!! We close at 5pm today.';
    }

    let payload = {
    "fulfillmentMessages": [
        {
          "platform": "GOOGLE_RBM",
          "rbmText": {
              "text": responseText
          }
        }
      ]
    };

    return response.status(200).json(payload);
}

A linha intentMap.set('Hours', hoursHandler); informa à biblioteca de fulfillment que a função hoursHandler precisa ser executada quando há correspondência com a intent "quo";Horas" No entanto, também precisamos instruir o Dialogflow a ativar o fulfillment para nossa intent "Horas"

No menu de navegação à esquerda, clique em Intents e abra a intent "Hours" Abra a seção Fulfillment na parte inferior e selecione Ativar chamada de webhook para essa intent para ativar.

Depois de salvar a intent, faça um teste. No simulador à direita, digite "Are you open?". Se você clicar em Informações de diagnóstico e inspecionar a resposta da API, verá a resposta de fulfillment. O fuso horário usado pelo servidor do Cloud Functions para Firebase será UTC, portanto, a resposta pode não estar correta para seu horário local atual.

Se houver um erro no fulfillment, o Dialogflow usará qualquer resposta definida na seção Respostas da página Intent, permitindo que seu agente se recupere corretamente.

A seguir, usaremos entidades para extrair as partes relevantes da consulta do usuário. Isso permite que nossos usuários marquem um horário com nossa loja de bicicletas para consertar ou consertar a bicicleta.

Extraia dados com entidades

Duração: 12h

Nesta seção, vamos ver como extrair dados da consulta de um usuário para permitir que os usuários agendem um horário com nossa loja de bicicletas para consertar ou consertar a bicicleta.

Adicione parâmetros às intents

Os parâmetros são palavras ou frases relevantes na consulta de um usuário que o Dialogflow extrai para que seu agente possa fornecer uma resposta adequada. Você criará uma nova intent com parâmetros e aprenderá a incluir os valores deles nas respostas.

  1. Clique em + ao lado de Intents no menu de navegação à esquerda para criar um novo intent.
  2. Para o nome da intent, digite "quot;Criar horário" na parte superior da página.
  3. Adicione os seguintes termos como frases de treinamento:
    • reply_appointment
    • I'd like to schedule an appointment for next Thursday
    • I'd like to get my bike fixed, I have a mountain bike that needs servicing
    • My bike is broken
    • Can I schedule service for 4pm tomorrow?
    • Can you fix my road bike?
    • Can I set up an appointment for noon on Friday?

O Dialogflow detecta automaticamente os parâmetros conhecidos nas frases de treinamento e as cria para você.

Abaixo de Frases de treinamento, o Dialogflow preenche automaticamente a tabela de parâmetros com as informações coletadas:

  • o parâmetro é opcional (não obrigatório)
  • chamados date e time
  • corresponde aos tipos de entidade do sistema @sys.date e @sys.time**
  • tem os valores de $date e $time
  • não é uma lista

Como usar dados de parâmetro

Você pode usar o valor de um parâmetro nas suas respostas. Nesse caso, é possível usar $date e $time nas suas respostas, e elas são substituídas pela data e hora especificadas na consulta para seu agente.

Em Respostas, adicione a guia "Mensagens comerciais do RCS", adicione o seguinte a uma Resposta simples e clique em Salvar:

Great! I've set up your appointment for $date at $time.  See you then!

Faça o teste!

Agora, consulte seu agente com "#quot;Posso agendar um horário para 14h amanhã?"#quot; no simulador no painel à direita.

Veja, na parte inferior da saída do simulador, que o Dialogflow extraiu corretamente os parâmetros "quot;tomorrow"" e "quot;2pm"" da consulta e os rastreou corretamente como a data e a hora. Agora tente o mesmo no seu dispositivo de teste e veja como a resposta inclui corretamente a data e a hora analisadas.

Como tornar os parâmetros obrigatórios

No caso da nossa loja de bicicletas, precisamos saber os valores da data e da hora antes de agendar um horário. Por padrão, todos os parâmetros do Dialogflow são opcionais. Para torná-los obrigatórios, precisamos marcar a caixa ao lado de cada parâmetro que queremos tornar obrigatório. Marque a caixa ao lado de cada parâmetro na intent "Criar agendamento":

Agora que cada parâmetro é obrigatório, precisamos criar uma solicitação para cada um deles. As solicitações solicitam que o usuário forneça um valor para qualquer parâmetro não fornecido quando ele inicialmente indica a intenção (nesse caso, um agendamento). Clique em Definir solicitações para criar uma solicitação para um parâmetro e inserir as seguintes solicitações para cada parâmetro:

Parâmetro Prompt
date Em que dia você quer vir?
tempo Qual é o horário de sua preferência?

Depois de inserir os avisos, clique em Salvar.

Faça o teste!

No dispositivo, toque na sugestão ou tipo de Agendar horário "Quero que minha bicicleta seja fixada." Você recebe a resposta "Em que dia você quer entrar? Indique uma data ("amanhã") e você receberá uma resposta solicitando um horário na data. Responda a isso para ver que o agendamento foi feito.

As consultas que contêm algumas informações na solicitação inicial (por exemplo, "Quero marcar uma consulta para amanhã") preenchem o parâmetro correto (a data), ignoram a solicitação de data ("Que dia você quer que apareça in?") e passam para a solicitação de tempo ("Qual hora funciona para você{/7}quot;).

Acabamos de usar entidades e parâmetros do Dialogflow para criar uma conversa completamente única sem código e pouca configuração. A seguir, veremos como usar o fulfillment para ajudar a orientar as respostas do usuário a solicitações como "Em que data você quer agendar um horário.

Configuração: como ativar o fulfillment

No menu de navegação à esquerda, clique em Intents e abra a intent "quot;Agendar" Abra Fulfillment, selecione Ativar chamada de webhook para esta intent e Ativar chamada de webhook para preenchimento de slot para que ambos sejam ativados e clique em Salvar.

Com esses dois recursos ativados, quando essa intent é acionada, o Dialogflow usa o fulfillment para produzir respostas para os parâmetros obrigatórios, se necessário, bem como a resposta do RBM para a intent.

Implementar o fulfillment

Na navegação à esquerda do Dialogflow, clique em Fulfillment para abrir a página de fulfillment. Role para baixo até a linha

intentMap.set('Hours', hoursHandler);

E adicione o seguinte como a próxima linha:

intentMap.set('Make Appointment', makeAppointment);

Isso informa à biblioteca de fulfillment que a função makeAppointment precisa ser executada quando houver correspondência com a intent "Make Schedule"

Em seguida, copie o código abaixo e cole-o abaixo da função currentlyOpen. As duas funções, getSuggestedTimes e getSuggestedDates, criam listas de ícones úteis para facilitar as respostas dos usuários.

function getSuggestedTimes() {
  return [
        {
          "reply": {
            "text": "9 am",
            "postbackData": "9:00am"
            }
        },
        {
          "reply": {
            "text": "10 am",
            "postbackData": "10:00am"
          }
        },
        {
          "reply": {
            "text": "1 pm",
            "postbackData": "1:00pm"
          }
        },
        {
          "reply": {
            "text": "2 pm",
            "postbackData": "2:00pm"
          }
        }
      ];
}

function getSuggestedDates() {
  return [
        {
          "reply": {
            "text": "Tomorrow",
            "postbackData": "Tomorrow"
          }
        },
        {
          "reply": {
            "text": "A week from now",
            "postbackData": "A week from now"
          }
        },
        {
          "reply": {
            "text": "Two weeks from now",
            "postbackData": "Two weeks from now"
          }
        }
      ];
}

Em seguida, abaixo de hoursHandler, copie e cole o código abaixo e clique em Implantar.

function makeAppointment(agent) {
    // extract required parameters
    const appointmentDate = agent.parameters.date;
    const appointmentTime = agent.parameters.time;

    const gotAppointmentDate = appointmentDate.length > 0;
    const gotAppointmentTime = appointmentTime.length > 0;

    let responseText = '';
    let suggestions = [];

    if(gotAppointmentDate && gotAppointmentTime) {
      // We have all required parameters, return success message
      responseText = 'Great! I\'ve set up your appointment for ' +
          appointmentDate + ' at ' + appointmentTime + '.  See you then!';
    }
    else if(gotAppointmentDate) {
      responseText = 'What time works for you?';
      suggestions = getSuggestedTimes();
    }
    else if(gotAppointmentTime) {
      responseText = 'What day do you want to come in?';
      suggestions = getSuggestedDates();
    }
    else {
      responseText = 'What day do you want to come in?';
      suggestions = getSuggestedDates();
    }

    let payload = {
      "fulfillmentMessages": [
      {
        "platform": "GOOGLE_RBM",
        "rbmText": {
          "text": responseText,
          "rbmSuggestion": suggestions
        }
      }
    ]
    };

    return response.status(200).json(payload);
  }

Reserve alguns minutos para inspecionar o código. Observe que os parâmetros necessários estão sendo verificados os valores e, se não estiverem definidos, solicitando ao usuário uma mensagem adequada e um conjunto de sugestões.

Faça o teste!

No dispositivo, toque na sugestão ou tipo de Agendar horário "Quero que minha bicicleta seja fixada." Você recebe a resposta "Em que dia você quer chegar, além de algumas sugestões úteis: "Amanhã", "Uma semana a partir de agora" e "Duas semanas a partir de agora" Indique uma data ("amanhã") e você receberá uma resposta por um tempo. Responda a isso para ver que o agendamento foi agendado.

Gerenciar o estado com contextos

Duração: 7h

Adicionar contextos ao estado da conversa

Depois que nosso usuário marcar um horário, podemos coletar mais algumas informações. Imagine que nossa loja de bicicletas oferece dois tipos de agendamento: reparo ou ajuste. Queremos saber de qual deles o usuário precisa.

Para começar, vamos atualizar a resposta da intent "Agendar" para perguntar ao usuário o tipo de agendamento de que ele precisa. Substitua a resposta de sucesso na função de cumprimento de makeAppointment pelo texto abaixo e clique em Implantar.

responseText = 'Great! I\'ve set up your appointment for ' +
    appointmentDate + ' at ' + appointmentTime + '.  Do you need a repair for just a tune-up?';

Para coletar a resposta a essa pergunta, precisamos criar outra intent. No entanto, é importante que essa nova intent seja correspondido somente depois que essa pergunta já tiver sido respondida. Para aplicar isso, podemos defini-la como uma intent de acompanhamento.

Intents de acompanhamento são intents que só podem ser correspondidas após a intent "quot;parent" (nesse caso, nossa intent "Make Agenda") correspondente. Clique em Intents no menu de navegação à esquerda. Se o menu estiver oculto, clique no botão ☰ no menu no canto superior esquerdo. Em seguida, passe o cursor sobre a intent "quot;Agendar" e clique em Adicionar intent de acompanhamento, que aparece à direita do nome da intent:

Em seguida, clique em Personalizado no menu suspenso.

O Dialogflow nomeou automaticamente a intent de acompanhamento como "Agendar – Personalizado" e a seta indica a relação entre as intents.

As intents de acompanhamento só podem ser combinadas após a correspondência da intent pai. Como essa intent só vai corresponder à intent "quot;Agendar" quo, podemos presumir que o usuário acabou de receber a pergunta "quot;Você precisa de reparo ou apenas um ajuste?".

Para capturar a resposta a essa pergunta, primeiro precisamos definir algumas entidades.

Como criar sua primeira entidade

O Dialogflow permite definir entidades de desenvolvedor, que funcionam de maneira semelhante às entidades do sistema do Dialogflow. Começaremos criando um tipo de entidade. Como queremos que os usuários possam escolher o tipo de agendamento que querem fazer com nossa loja, vamos chamar o tipo de entidade AppointmentType. Adicionaremos duas entidades no tipo de entidade AppointmentType para os dois tipos diferentes de nomeações: service e fix.

Para criar um tipo de entidade, faça o seguinte:

  1. Clique em + ao lado de Entidades na navegação à esquerda.
  2. Para o nome do tipo de entidade, digite "CompromissoType".
  3. Clique no campo de texto e adicione as seguintes entradas:
    • serviço
    • Corrigir
  4. Ao inserir uma entrada, pressionar a tecla Tab move o cursor para o campo de sinônimo. Adicione os sinônimos a seguir para cada entrada. Adicione cada palavra individualmente em vez de copiar e colar a string inteira:
Entrada Sinônimo
serviço
  • serviço
  • reformular
  • manutenção
  • ajuste
  • Afinar
Corrigir
  • Corrigir
  • repair
  • escondida
  • quebrado
  • pneu furado
  • fixo
  1. Clique em Salvar.

Cada tipo de entidade precisa ter o seguinte:

  • um nome para definir a categoria ("CompromissoType")
  • uma ou mais entradas ("service", "fix")
  • um ou mais sinônimos ("manutenção", "refinar" etc.)

O Dialogflow processa coisas simples, como a pluralidade e o uso de letras maiúsculas, mas não se esqueça de adicionar todos os sinônimos possíveis. Quanto mais você adicionar, melhor o agente poderá determinar as entidades.

Adicionando sua nova entidade

Agora que definimos o tipo de entidade de horário, podemos usá-lo nas Frases de treinamento da nossa intent "Criar agendamento – personalizado":

  1. Clique em Intents no menu de navegação à esquerda e depois na seta ao lado da intent "quo";Criar agendamento" para revelar as intents de acompanhamento. Clique na intent "quot;Agendar – personalizado"".
  2. Adicione as seguintes frases de treinamento:

    • Pode consertar minha bicicleta?
    • Preciso de uma reparação.

  3. Você verá o tipo de entidade de agendamento anotado automaticamente em Frases de treinamento inseridas. Isso adiciona o parâmetro AppointmentType à tabela, que está abaixo da seção Frases de treinamento. Clique na caixa de seleção para marcar esse parâmetro como REQUIRED.

  4. Clique em Definir prompts e digite "Podemos consertar ou consertar sua bicicleta. Qual você quer?

  5. Em Respostas, mude a resposta para "OK, vamos agendar um $CompromissoType." e depois clicar em Salvar.

Faça o teste!

No dispositivo, toque na sugestão ou tipo de Agendar horário "Quero que minha bicicleta seja fixada." Você recebe a resposta "Em que dia você quer chegar, além de algumas sugestões úteis: "Amanhã", "Uma semana a partir de agora" e "Duas semanas a partir de agora" Indique uma data ("amanhã") e você receberá uma resposta perguntando por um tempo na data.

Selecione um horário e você verá a nova resposta criada perguntando se ele é para serviço ou ajuste.

Depois, digite "Preciso de reparo" Você verá a resposta "Ok", vamos agendar uma correção. Isso indica que o Dialogflow extraiu o SchedulingType correto como uma entidade.

No momento, a resposta para essa intent ("Ok, vamos agendar uma correção.") é bastante irrelevante. É importante que a resposta confirme a data e a hora em que o horário foi agendado. Para isso, precisamos da data e da hora, mas os parâmetros de data e hora estão presentes apenas na intent "quo";Criar agendamento" e não no intent "quot;Agendar – personalizado"

Intents e contextos

Para responder com um parâmetro coletado da intent "Criar agendamento" você precisa saber como as intents de acompanhamento funcionam. As intents de acompanhamento usam contextos para rastrear se uma intent pai foi acionada. Se você inspecionar a intent "quot;Agendar" quo, verá "Fazer consulta-segue" listado como um contexto de saída, precedido pelo número 2:

Após a correspondência com a intent "Criar agendamento" o Dialogflow anexa o contexto "MakeSchedule-Followup" à conversa para duas turnos. Portanto, quando o usuário responder à pergunta ("Você precisa de reparo ou apenas um ajuste)?, o contexto "MakeSchedule-Followup" estará ativo. Todas as intents que tiverem o mesmo contexto de entrada serão altamente favorecidas quando o Dialogflow fizer a correspondência com intents.

Clique em Intents na navegação à esquerda e depois na intent "MakeSchedule - custom".

É possível ver que a intent tem o mesmo contexto de entrada ("MakeSchedule- Followup") que o contexto de saída de "Make Schedule". Por isso, "quoSchedule;MakeSchedule - custom" só corresponde após a intent "quot;Make Schedule" ser correspondida.

Contextos e parâmetros

Os contextos armazenam valores de parâmetro, o que significa que é possível acessar os valores dos parâmetros definidos na intent "Criar agendamento" em outros intents como "MakeCalendar - custom".

Adicione a seguinte resposta à intent "MakeSchedule - custom" e clique em Save: "Ok, vamos agendar um $ScheduleType, #MakeSchedule- Followup.date, em #MakeSchedule-Followup.time. Até a próxima."

Agora, consulte o agente novamente para receber a resposta adequada. Primeiro, insira "Eu posso marcar uma consulta para consertar minha bicicleta às 11h de amanhã" e, em seguida, responder à pergunta com "Preciso de reparo".

Na resposta que confirma o horário, você verá que os valores de parâmetro de data e hora foram recuperados do contexto.

Como melhorar o formato da resposta

Duração: 5h

Use o fulfillment para formatar a data e a hora

Como você provavelmente percebeu, a data e a hora mostradas na mensagem de sucesso não são muito fáceis de usar. Para corrigir isso, precisamos usar o fulfillment novamente para que possamos usar JavaScript para formatar os parâmetros de data e hora de uma maneira que possa ser lida facilmente pelo usuário.

Para acessar sua intent "Agendar – Agendar personalizado", clique em Intents na navegação à esquerda e depois na intent "Criar agendamento - personalizado". Role até a parte inferior da página, ative a opção Ativar chamada de webhook para essa intent e clique em Salvar.

Acesse o fulfillment clicando no link "Entrega" na navegação à esquerda. Copie o código abaixo e cole-o abaixo da função makeAppointment.

function makeAppointmentFollowUp(agent) {
    let context = agent.getContext('makeappointment-followup');

    // extract required parameters
    const appointmentDate = new Date(context.parameters.date);
    const appointmentTime = new Date(context.parameters.time);
    const appointmentType = agent.parameters.AppointmentType;

    // format date and time to be human-readable
    const dateAsString = appointmentDate.toLocaleDateString('en-US',
        { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' });
    const timeAsString = appointmentTime.toLocaleString('en-US',
        { hour: 'numeric', minute: 'numeric', hour12: true });

    // compose response for user
    let responseText = 'Okay, we'll schedule a ' + appointmentType + ', ' + dateAsString +
        ', at ' + timeAsString + '.  We'll see you then.';

    let payload = {
      "fulfillmentMessages": [
      {
        "platform": "GOOGLE_RBM",
        "rbmText": {
          "text": responseText
        }
      }
    ]
    };

    return response.status(200).json(payload);
  }

Abaixo dessa função, encontre a linha intentMap.set('Make appointment', makeAppointment); e adicione intentMap.set('Make appointment - custom', makeAppointmentFollowUp); para que, quando a intent de acompanhamento for invocada, a função colada anteriormente seja chamada.

Observe o código makeAppointmentFollowUp e veja como os parâmetros estão sendo extraídos do contexto de entrada e da intent. Antes que o responseText fosse gerado, o código agora está formatando a data e a hora para ser legível.

Faça o teste!

No dispositivo, toque na sugestão ou tipo de Agendar horário "Quero que minha bicicleta seja fixada." Você recebe a resposta "Em que dia você quer chegar, além de algumas sugestões úteis: "Amanhã", "Uma semana a partir de agora" e "Duas semanas a partir de agora" Indique uma data ("amanhã") e você receberá uma resposta perguntando por um tempo na data.

Selecione um horário e você verá a nova resposta criada perguntando se ele é para serviço ou ajuste.

Depois, digite "Preciso de reparo" Você verá a resposta confirmando o horário com o tipo de horário, a data e a hora em um formato legível.

Pronto!

Duração: 1h

Bom trabalho!

Você concluiu todas as etapas da criação de um agente do RBM com tecnologia do Dialogflow.

Divirta-se desenvolvendo para esta nova plataforma incrível!