Criar um intent com parâmetros

Agora precisamos de uma intent que possa marcar um atendimento para a bicicletaria. Ao contrário da primeira intent Horário, que retorna apenas a resposta estática "Estamos abertos das 9h às 18h todos os dias. Há mais alguma coisa que eu possa fazer por você?", a nova intent precisa ser capaz de executar um conjunto mais complexo de tarefas."

Vamos examinar a seguinte interação entre o usuário e o agente:

      Usuário: "Oi."

      Agente: "Olá. Posso dizer o horário de funcionamento da loja ou marcar um atendimento. Qual você quer?"

     Usuário: "Eu preciso marcar um horário às 15h de hoje."

     Agente: "Entendi. Seu atendimento está agendado para quarta-feira, 1 de agosto às 15h. Nos vemos em breve. Tchau."

Na caixa de diálogo acima, a frase do usuário "Eu preciso agendar um horário às 15h de hoje" contém informações importantes, "15h" e "hoje", que indicam a hora e a data que o usuário quiser visitar a loja de bicicletas. A resposta do agente inclui as informações relevantes mencionadas na resposta do usuário: "Entendi. Seu atendimento está agendado para quarta-feira, 1 de agosto às 15h. Nos vemos em breve. Tchau."

Para nós, identificar informações importantes de expressões é simples. Para máquinas, no entanto, é uma tarefa complexa. Precisamos dar aos intents a capacidade de extrair informações importantes, parâmetros, de expressões do usuário.

Extrair informações usando entidades e parâmetros

O Dialogflow usa conceitos conhecidos como entidades e parâmetros para extrair informações direcionadas dos enunciados do usuário e convertê-las em um conjunto de parâmetros que podem ser processados por outras funções ou sistemas para executar várias tarefas.

Para criar um novo intent com parâmetros, siga estas etapas:

  1. Crie um intent chamado Make Appointment.
  2. Na seção Frases de treinamento, adicione a seguinte frase de treinamento:

    I need to make an appointment at 3 PM today.

  3. Na tabela Ação e parâmetros, verifique se as entidades do sistema @sys.date e @sys.time apareceram.

  4. Na tabela Resposta de texto, adicione a seguinte frase de resposta:

    Got it. I have your appointment scheduled on $date at $time. See you soon. Good-bye.

  5. Clique em SALVAR.

    Figura 5. Fluxograma mostrando a adição da intent Agendar atendimento.

Com essa configuração, a intent Agendar atendimento analisa os enunciados do usuário, captura todas as palavras mapeadas nas entidades integradas ao sistema do Dialogflow @sys.date e @sys.time e coloca os valores capturados nos parâmetros $date e $time. Portanto, na resposta, podemos usar $date e $time para nos referir aos valores de data e hora capturados das declarações do usuário: "Ok. Entendi." Seu horário está marcado para $date às $time. Nos vemos em breve. Tchau."

O Dialogflow também permite criar entidades personalizadas para extrair parâmetros incomuns ou não categorizados. No entanto, em nosso cenário, o uso de entidades do sistema é suficiente para capturar parâmetros típicos, como hora e data. Se quiser saber mais sobre entidades, confira Entidades.

Coletar os parâmetros obrigatórios usando o preenchimento de slots

Seguindo a prática recomendada da seção anterior, agora precisamos fornecer mais frases de treinamento além da atual: "Preciso marcar um atendimento às 15h hoje".

Adicione as frases de treinamento a seguir:

  • Can I schedule service for 4 PM tomorrow?
  • Can I set up an appointment for noon on Friday?

Até o momento, todas as frases de treinamento contêm as informações de hora e data: "15h hoje", "16h amanhã," e "meio-dia de sexta-feira." No entanto, no mundo real, nem sempre as elocuções do usuário incluem todos os parâmetros necessários. Adicione as frases de treinamento a seguir:

  • Can you fix my road bike?
  • My bike is broken.
  • I'd like to get my bike fixed, I have a mountain bike that needs servicing.
  • I need to fix my bike today.
  • I'd like to schedule an appointment on this Thursday.

Todas as frases acima indicam que o usuário quer agendar um atendimento. Portanto, nosso novo intent precisa ser combinado com essas frases para lidar com a tarefa de agendar um atendimento. No entanto, nenhuma dessas frases tem as informações de horário, de data ou ambas. Frases como essas são problemáticas porque o intent não pode agendar um atendimento sem as informações de hora e data.

O Dialogflow fornece um recurso chamado preenchimento de slots, que garante que um intent consiga todas as informações necessárias de um usuário. Para ativar esse recurso, precisamos marcar os parâmetros como obrigatórios.

Quando um intent exige parâmetros, mas é correspondido com uma expressão do usuário que não tem nenhum dos parâmetros obrigatórios, o intent faz perguntas rápidas para recuperar todos os parâmetros obrigatórios do usuário. Vejamos o seguinte diálogo:

      Usuário: "Oi."

      Agente: "Olá. Posso dizer o horário de funcionamento da loja ou marcar um atendimento. Qual você quer?"

Usuário: "Eu preciso consertar minha bicicleta."

Agente: "Ok, posso ajudar você com isso." Em que dia você quer vir?

Usuário: "Hoje."

Agente: "Qual é o melhor horário para você?"

Usuário: "15h".

     Agente: "Entendi. Seu atendimento está agendado para quarta-feira, 1 de agosto às 15h. Nos vemos em breve. Tchau."

Para tornar os parâmetros $time e $date obrigatórios e fornecer perguntas rápidas para os parâmetros, siga estas etapas:

  1. Clique no intent Criar atendimento.
  2. Na tabela Ação e parâmetros, marque as caixas REQUIRED para os parâmetros $time e $date. Uma coluna chamada PROMPTS é criada.
  3. Se o parâmetro $date estiver localizado abaixo do parâmetro $time na tabela, arraste para cima a linha do parâmetro $date acima do parâmetro $time. O posicionamento na tabela determina a ordem em que as perguntas são feitas.
  4. Para o parâmetro $date, clique no link Definir prompts na coluna PROMPTS e adicione os seguintes prompts:
    • Okay, I can help you with that. What day do you want to come in?
    • Sure, what day are you coming in?
    • Okay, what day will work for you?
  5. Para o parâmetro $time, clique no link Definir prompts e adicione os seguintes prompts:
    • And what time works for you?
    • What time?
    • Now, what time do you want the appointment?
  6. Clique em SALVAR.
  7. Teste a configuração de preenchimento de slots usando o simulador no console do Dialogflow.

    Figura 6. Fluxograma mostrando o preenchimento de slots para parâmetros obrigatórios.

Agora, temos um intent que garante a coleta das informações de data e hora quando um usuário indica a necessidade de criar um atendimento. No entanto, no momento, o intent só oferece uma resposta simulada. Nenhum compromisso real está agendado. Precisamos criar um processo de back-end, atendimento de pedido, que possa executar a tarefa de agendar um compromisso no Google Agenda.

Veremos como criar um fulfillment para a intent Criar atendimento na próxima seção.