Criar ações para o Google Assistente usando o SDK do Actions (nível 2)

A plataforma de desenvolvedores do Google Assistente permite criar softwares para ampliar a funcionalidade desse assistente pessoal virtual em mais de um bilhão de dispositivos, incluindo alto-falantes inteligentes, smartphones, carros, TVs, fones de ouvido e muito mais. O usuário interage com o Google Assistente em uma conversa para realizar tarefas, como fazer compras ou reservar uma viagem. Como desenvolvedor, você pode usar a plataforma para desenvolvedores do Google Assistente para criar e gerenciar experiências de conversação eficazes entre o usuário e seu próprio serviço de atendimento terceirizado.

Este codelab aborda conceitos de nível intermediário para desenvolvimento com o Google Assistente e se baseia na ação criada no nível 1. Recomendamos que você conclua o codelab do nível 1 antes de iniciar este.

A ação que será criada neste codelab informa a previsão do futuro do usuário ao se aventurar em uma terra mitológica chamada Gryffinberg, de acordo com o auxílio que ele escolher.

O que você criará

Neste codelab, você vai criar uma ação de conversa sofisticada com as seguintes funções:

  • Coletar dados do usuário e, dependendo do valor, modificar solicitações de conversa.
  • Responder às perguntas adicionais para continuar a conversa.
  • Criar um loop de jogo para que o usuário possa interagir com a ação novamente depois de receber a previsão do futuro.

Antes de começar a criar, você pode interagir com a ação ativa no dispositivo com o Google Assistente. Basta dizer "Ok Google, falar com Previsão do futuro e Destino". O caminho padrão dessa ação para um usuário retornante gera a seguinte interação:

dd6f5c61296b8b50.png

eba043f546aa8c51.png

O que você aprenderá

  • Como usar slots para coletar dados do usuário
  • Como usar condições para adicionar lógica a uma cena
  • Como adicionar um loop de jogo
  • Como adicionar um caminho de apoio

Pré-requisitos

Os pré-requisitos para este codelab incluem o seguinte:

  • Um ambiente de desenvolvimento integrado/editor de texto de sua escolha
  • Um terminal para executar comandos de shell com NodeJS, NPM e git instalados
  • Um navegador da Web, como o Google Chrome
  • Um projeto concluído do Actions do codelab de nível 1

É recomendável ter familiaridade com o JavaScript (ES6), embora não seja obrigatório, para entender o código de fulfillment deste codelab.

Opcional: obter o código de amostra

Também, é possível receber o código de projeto completo de nível 1 desse repositório do GitHub ou do repositório do GitHub.

No primeiro codelab, você criou uma ação de conversa simples com uma só cena, Start.

Neste codelab, você vai ampliar a conversa da ação. Nas seções a seguir, você vai configurar sua ação para realizar o seguinte:

  • Fazer a transição para uma nova cena Fortune quando o usuário quiser ouvir a previsão do futuro
  • Perguntar ao usuário qual auxílio ele quer escolher
  • Oferecer uma previsão do futuro personalizada com base na escolha do usuário

Criar a cena Fortune e fazer a transição para ela.

Nesta seção, você realizará o seguinte:

  • Remover a solicitação existente da cena Start, que responde ao usuário e encerra a conversa
  • Definir a transição da cena Start para a cena Fortune
  • Criar a cena Fortune

Para modificar a cena Start e adicionar uma transição à cena Fortune, siga estas etapas:

  1. Abra seu projeto do Actions do codelab de nível 1 no editor de texto.
  2. Abra o arquivo custom/scenes/Start.yaml.
  3. Atualize handler para a intent yes de modo que o código corresponda ao snippet abaixo:

Start.yaml

intentEvents:
- intent: "yes"
  transitionToScene: Fortune
- handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: I understand, stranger. Best of luck on your quest! Farewell.
  intent: "no"
  transitionToScene: actions.scene.END_CONVERSATION
  1. Salve o arquivo.

Para criar uma cena chamada Fortune, siga estas etapas:

  1. Acesse o projeto do Actions do codelab de nível 1 no terminal.
  2. Crie um novo arquivo chamado Fortune.yaml no diretório scenes.
touch custom/scenes/Fortune.yaml

Você vai editar esse arquivo na próxima seção.

Definir a lógica de conversa da cena de Fortune

Neste codelab, você vai configurar a cena Fortune para perguntar ao usuário: "O que você escolhe para ajudar na sua missão: um dragão, um tradutor ou uma bússola?" Antes de continuar, use um recurso chamado preenchimento de slot para coletar as informações do usuário necessárias.

Sua ação oferece opções de previsão do futuro com três auxílios: um dragão, um tradutor e uma bússola. Para que sua ação identifique essas três opções na entrada de um usuário, crie um tipo.

Você pode usar tipos na etapa de preenchimento do slot de uma cena para definir as informações do usuário que quiser. Quando o mecanismo de PLN detecta uma correspondência na entrada do usuário, ele extrai o slot como um parâmetro digitado para que você possa executar a lógica com ele em uma cena.

Criar tipo available_options

Nesta seção, você vai criar um tipo chamado available_options, que especifica as três opções que os usuários têm (dragão, tradutor e bússola) em resposta à solicitação. Você também vai definir alguns sinônimos para essas opções caso um usuário diga algo semelhante. Em outra seçãovocê vai adicionar o tipo available_options a um slot para especificar que quer acessar a escolha do usuário.

Para criar o tipo available_options, siga estas etapas:

  1. Crie um novo diretório chamado types:
mkdir custom/types
  1. Crie um novo arquivo chamado available_options.yaml no diretório types:
touch custom/types/available_options.yaml
  1. Abra custom/types/available_options.yaml no seu editor de texto.

Os tipos são configurados como pares de chave-valor de informações, em que chave é o nome do tipo, e os valores são sinônimos dessa chave. Ao definir a chave, ela é adicionada automaticamente como um valor. Com o SDK do Actions, as chaves são representadas como entities e os valores como synonyms.

Para adicionar as três opções que o usuário pode escolher, siga estas etapas:

  1. Adicione entities e synonyms ao arquivo available_options.yaml:

available_options.yaml

synonym:
  entities:
    dragon:
      synonyms:
      - dragon
      - hydra
      - lizard
    translator:
      synonyms:
      - translator
      - communicator
      - machine
      - decoder
      - translate
    compass:
      synonyms:
      - compass
      - direction
      - guide
      - navigator
  matchType: EXACT_MATCH
  1. Salve o arquivo.

Sua ação agora entende que available_options representa dragão, tradutor e bússola, além de reconhecer alguns sinônimos.

Configurar o preenchimento de slot

Agora, configure o preenchimento de slot na cena Fortune. Para configurar a lógica de preenchimento de slot, siga estas etapas:

  1. Abra custom/scenes/Fortune.yaml no seu editor de texto.
  2. Adicione os dados slots ao arquivo Fortune.yaml:

Fortune.yaml

slots:
- commitBehavior:
    writeSessionParam: chosenOptions
  name: chosenOptions
  promptSettings:
    initialPrompt:
      staticPrompt:
        candidates:
        - promptResponse:
            firstSimple:
              variants:
              - speech: What do you choose to help you on your quest, a dragon, a translator, or a compass?
            suggestions:
            - title: Dragon
            - title: Translator
            - title: Compass
  required: true
  type:
    name: available_options
  1. Salve o arquivo.

Você adicionou o tipo available_options ao slot, que avisa à ação as informações do usuário que é preciso coletar (a opção de auxílio) antes de continuar. Além disso, configurou uma solicitação dentro do slot, que é adicionado à fila de solicitação quando o usuário chega ao estágio de preenchimento do slot da cena.

Ao nomear o slot chosenOptions, o campo writeSessionsParam será atualizado com o mesmo nome ($session.params.chosenOptions). Você pode acessar esse parâmetro pelo nome na solicitação e no fulfillment com a biblioteca de cliente.

Adicionar condição

Depois de incluir um slot que requer que o usuário escolha um auxílio, antes de continuar a conversa, é possível adicionar uma condição para verificar se os dados do slot foram recebidos.

Nesta seção, você vai adicionar a condição scene.slots.status == "FINAL", que verifica se o preenchimento de slot está completo. Depois que todos os slots forem preenchidos, a condição vai adicionar uma solicitação (You picked $session.params.chosenOptions.) à fila.

Para configurar a condição scene.slots.status == "FINAL", siga estas etapas:

  1. Abra custom/scenes/Fortune.yaml no seu editor de texto.
  2. Adicione dados conditionalEvents à parte superior do arquivo Fortune.yaml:

Fortune.yaml

conditionalEvents:
- condition: scene.slots.status == "FINAL"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: You picked $session.params.chosenOptions.
  1. Salve o arquivo.

Testar ação no simulador

Você já definiu as opções que o usuário precisa selecionar para preencher o slot. Depois de obter as informações do usuário, a ação deve fornecer uma solicitação de acordo com a opção escolhida.

Para testar a ação, siga estas etapas:

  1. No terminal, execute o seguinte comando:
gactions deploy preview

A saída será semelhante a esta:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Copie o URL fornecido e cole-o em um navegador.
  2. Clique ou digite Talk to my test app no campo Entrada e pressione Enter.
  3. Digite Yes no campo Entrada e pressione Enter. Também é possível clicar no ícone de sugestão Sim.

a899d45c542668f6.png

  1. Clique, digite ou diga dragon. Aparecerá a mensagem "Você escolheu um dragão".

Na próxima seção, você vai personalizar as solicitações para cada auxílio disponível ao usuário.

Personalizar solicitações usando condições

Nesta seção, você vai adicionar condições para cada opção disponível ao usuário, além de uma solicitação personalizada para cada condição.

Personalizar a previsão do futuro de dragon

Para atualizar a condição e personalizar a solicitação caso o usuário escolha "dragão", siga estas etapas:

  1. Abra custom/scenes/Fortune.yaml no seu editor de texto.
  2. Substitua os dados conditionalEvents pelo seguinte snippet no arquivo Fortune.yaml:

Fortune.yaml

conditionalEvents:
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The people of Gryffinberg will be awestruck by the beauty and
                power of the ancient dragon. Much to your dismay, the townspeople
                fall into dispute over who will receive the honor of riding the dragon
                first. You return home from your quest without everlasting glory or
                a dragon.
  1. Salve o arquivo.

Agora, quando um usuário disser "dragão" ou algo parecido, sua ação vai oferecer uma previsão do futuro de acordo com essa seleção. Em seguida, adicione as duas seleções restantes.

Personalizar as recomendações de translator e compass

Para adicionar as condições e personalizar as solicitações para quando um usuário disser "tradutor" ou "bússola", siga estas etapas:

  1. No arquivo custom/scenes/Fortune.yaml, adicione as outras duas condições abaixo da condição dragon:

Fortune.yaml

- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: With the help of the translator, the rival factions in Gryffinberg
                are finally able to communicate with each other and resolve their
                disputes. You will complete your quest to restore peace in the town.
                The translator will be used on many other journeys across the
                earth. After its work is done, it retires honorably to a premier location
                in the Gryffinberg History Museum.
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The compass will help you find the mystical and ancient Library
                of Gryffinberg. Among its infinite stacks of dusty books, you find
                one entitled "Wisdom of the Ages". By the time you've read the 50,000-page
                tome, the townspeople have forgotten their problems. You will write
                a second edition of "Wisdom of the Ages", but have limited commercial
                success.
  1. Salve o arquivo.

Testar ação no simulador

Agora, a ação precisa fornecer uma previsão personalizada para o usuário conforme a opção selecionada.

Para testar a ação, siga estas etapas:

  1. No terminal, execute o seguinte comando:
gactions deploy preview

A saída será semelhante a esta:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Copie o URL fornecido e cole-o em um navegador.
  2. Digite Talk to my test app no campo Entrada e pressione Enter.
  3. Digite "Sim" no campo Entrada e pressione Enter. Também é possível clicar no ícone de sugestão Sim.
  4. Clique, digite ou diga Translator.

29e17f950bd0dd71.png

Você deve receber a previsão do futuro correspondente à opção "tradutor".

Nesta seção, você vai configurar sua ação para que o usuário possa selecionar outra opção e ouvir uma previsão diferente. Essa mudança é semelhante à mensagem "Você quer jogar novamente?" ao final de um jogo. Para criar esse loop, reutilize as intents yes e no criadas e adicione-as a uma nova cena chamada Again.

Criar cena Again

Nesta seção, você vai criar uma cena Again e adicionar uma solicitação para perguntar se o usuário quer selecionar outra opção.

Para criar e configurar a cena Again, siga estas etapas:

  1. Crie um arquivo chamado Again.yaml no diretório scenes:
touch custom/scenes/Again.yaml
  1. Abra custom/scenes/Again.yaml no seu editor de texto.
  2. Adicione os seguintes dados do onEnter a Again.yaml:

Again.yaml

onEnter:
  staticPrompt:
    candidates:
    - promptResponse:
        firstSimple:
          variants:
          - speech: That is what I see for you. Would you like to choose a different option and explore another future?
        suggestions:
        - title: "Yes"
        - title: "No"
  1. Salve o arquivo.

Adicionar transição da cena Fortune para Again

Após o usuário receber a previsão do futuro, a conversa precisa fazer a transição para a nova cena Again.

Para adicionar uma transição da cena Fortune à Again, siga estas etapas:

  1. Abra custom/scenes/Fortune.yaml no seu editor de texto.
  2. Adicione transitionToScene: Again a cada condição, conforme mostrado no snippet a seguir:

Fortune.yaml

conditionalEvents:
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The people of Gryffinberg will be awestruck by the beauty and
                power of the ancient dragon. Much to your dismay, the townspeople
                fall into dispute over who will receive the honor of riding the dragon
                first. You return home from your quest without everlasting glory or
                a dragon.
  transitionToScene: Again
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: With the help of the translator, the rival factions in Gryffinberg
                are finally able to communicate with each other and resolve their
                disputes. You will complete your quest to restore peace in the town.
                The translator will be used on many other journeys across the
                earth. After its work is done, it retires honorably to a premier location
                in the Gryffinberg History Museum.
  transitionToScene: Again
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The compass will help you find the mystical and ancient Library
                of Gryffinberg. Among its infinite stacks of dusty books, you find
                one entitled "Wisdom of the Ages". By the time you've read the 50,000-page
                tome, the townspeople have forgotten their problems. You will write
                a second edition of "Wisdom of the Ages", but have limited commercial
                success.
  transitionToScene: Again
  1. Salve o arquivo.

Testar ação no simulador

Agora, sua ação deve fornecer a seguinte solicitação depois que o usuário receber a previsão: "É isso que vejo para você. Quer escolher outra opção e explorar outro futuro?"

Para testar a ação, siga estas etapas:

  1. No terminal, execute o seguinte comando:
gactions deploy preview

A saída será semelhante a esta:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Copie o URL fornecido e cole-o em um navegador.
  2. Digite Talk to my test app no campo Entrada e pressione Enter.
  3. Digite Yes no campo Entrada e pressione Enter. Também é possível clicar no ícone de sugestão Sim.
  4. Clique, digite ou diga dragon.

b299e9fed9aedb69.png

Você receberá a previsão do futuro para a opção de dragão e a solicitação Again.

Adicionar intents e transição para a cena Again

Nesta seção, você adicionará as intents yes e no à cena Again. Assim, a ação poderá entender se o usuário quer ou não escolher uma nova opção. Você também vai adicionar as transições adequadas para as intents yes e no. A intent yes faz a transição para a cena Fortune, e a no faz a transição para a cena do sistema End conversation.

Para adicionar intents e transições à cena Again, siga estas etapas:

  1. Abra custom/scenes/Again.yaml no seu editor de texto.
  2. Adicione os dados intentEvents na parte superior do arquivo Again.yaml, acima de OnEnter:

Again.yaml

intentEvents:
- intent: "yes"
  transitionToScene: Fortune
- handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: It pleases me that you are satisfied with your choice. Best
                of luck on your quest. Farewell.
  intent: "no"
  transitionToScene: actions.scene.END_CONVERSATION
  1. Salve o arquivo.

Testar ação no simulador

Sua ação agora pode entender se o usuário quer escolher uma nova opção ou encerrar a conversa.

Para testar a intent yes, siga estas etapas:

  1. No terminal, execute o seguinte comando:
gactions deploy preview

A saída será semelhante a esta:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Copie o URL fornecido e cole-o em um navegador.
  2. Digite Talk to my test app no campo Entrada e pressione Enter.
  3. Digite Yes no campo Entrada e pressione Enter. Também é possível clicar no ícone de sugestão Sim.
  4. Clique, digite ou diga uma das opções.
  5. Digite Yes no campo de entrada e pressione Enter.

5d0690332efe2e29.png

Você receberá a solicitação "O que você quer usar como auxílio na sua missão: um dragão, um tradutor ou uma bússola?"

Para testar a intent no, siga estas etapas:

  1. Clique, digite ou diga uma das opções.
  2. Digite No no campo de entrada e pressione Enter.

Você receberá a solicitação End conversation: "Que bom que está feliz com sua escolha. Boa sorte na sua missão! Adeus."

Você criou o caminho principal que a maioria dos usuários usa na sua ação. No entanto, a resposta do usuário à solicitação da cena Fortune ("O que você quer usar como auxílio na sua missão: um dragão, um tradutor ou uma bússola?") pode não estar nas opções disponíveis.

Nesta seção, você vai configurar sua ação para entender quando um usuário disser "mágica", "dinheiro", "cavalo" ou "telefone" e pedir para que ele escolha uma das três opções originais. Para configurar essa lógica, você precisa criar uma type que contenha as outras opções e uma intent, other_option, que é associada quando um usuário indica uma delas. Também é necessário anotar frases de treinamento na intent other_option para identificar e extrair parâmetros de intent.

Quando o mecanismo de processamento de linguagem natural do Google Assistente detecta uma correspondência de parâmetros na entrada do usuário, ele extrai o valor como um parâmetro digitado para que você possa executar a lógica em uma cena. Neste codelab, você vai configurar sua ação para extrair o auxílio que o usuário quiser e indicar essa escolha em uma solicitação.

Criar tipo unavailable_options

Agora você pode criar um tipo unavailable_options com uma variedade de opções diferentes para que sua ação possa identificar esses dados na entrada de um usuário.

Para criar o tipo unavailable_options, siga estas etapas:

  1. Crie um arquivo chamado unavailable_options.yaml no diretório types:
touch custom/types/unavailable_options.yaml
  1. Abra custom/types/unavailable_options.yaml no seu editor de texto.
  2. Adicione os dados synonyms ao arquivo unavailable_options.yaml:

unavailable_options.yaml

synonym:
  entities:
    money:
      synonyms:
      - money
      - cash
      - gold
    horse:
      synonyms:
      - horse
      - stallion
      - steed
    magic:
      synonyms:
      - magic
      - enchanted
      - spells
    phone:
      synonyms:
      - phone
      - cell
      - apps
  matchType: EXACT_MATCH
  1. Salve o arquivo.

Criar intent other_option

Em seguida, crie uma intent chamada other_option e adicione frases de treinamento com as opções no tipo unavailable_options. Essa intent é acionada quando o usuário seleciona uma opção que apareça no tipo unavailable_options.

Para criar e configurar a intent other_option, siga estas etapas:

  1. Crie um arquivo chamado other_option.yaml no diretório intents:
touch custom/intents/other_option.yaml
  1. Abra custom/intents/other_option.yaml no seu editor de texto.
  2. Adicione os dados parameters e trainingPhrases ao arquivo other_option.yaml:

other_option.yaml

parameters:
- name: chosenUnavailableOption
  type:
    name: unavailable_options
trainingPhrases:
- I want to use ($chosenUnavailableOption 'spells' auto=true)
- I really really want to use a ($chosenUnavailableOption 'phone' auto=true)
- ($chosenUnavailableOption 'magic' auto=true)!
- ($chosenUnavailableOption 'cash' auto=true)
- I want to ride a ($chosenUnavailableOption 'horse' auto=true)

Aqui, você vai anotar as frases de treinamento com as opções indisponíveis especificadas na seção anterior. O parâmetro de intent chosenUnavailableOption permite extrair o nome da opção e usá-la em uma solicitação. Você fará isso na seção a seguir.

  1. Salve o arquivo.

Adicionar a intent other_option à cena Fortune

Agora você tem uma intent, other_option, que será usada quando a escolha do usuário não fizer parte das opções originais. Nesta seção, você vai adicionar a intent other_option à cena Fortune. Use o parâmetro da intent para personalizar a solicitação com base na entrada do usuário.

Para adicionar a intent other_option à cena Fortune, siga estas etapas:

  1. Abra custom/scenes/Fortune.yaml no seu editor de texto.
  2. Adicione intentEvents entre os dados conditionalEvents e slots:

Fortune.yaml

intentEvents:
- handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech:  I have seen the future and a $intent.params.chosenUnavailableOption.original will not aid you on your journey.
  intent: other_option
  1. Salve o arquivo.

A expressão $intent.params.chosenUnavailableOption refere-se ao objeto do parâmetro da intent, e $intent.params.chosenUnavailableOption.original indica o valor desse objeto. A propriedade original refere-se à entrada bruta fornecida pelo usuário

Quando um usuário menciona uma opção listada no tipo unavailable_options durante a cena Fortune, isso aciona a intent other_option e adiciona uma solicitação à fila. Como não há transição especificada, o loop de execução da cena continua reavaliando o estágio de condições. O slot chosenOptions adiciona a solicitação à fila, que é enviada ao usuário.

Testar ação no simulador

Agora, sua ação responderá adequadamente quando um usuário selecionar uma das opções listadas no tipo unavailable_options e especificar o auxílio selecionado. Em seguida, sua ação pedirá que o usuário escolha uma das opções originais (um dragão, um tradutor ou uma bússola).

Para testar a ação no simulador, siga estas etapas:

  1. No terminal, execute o seguinte comando:
gactions deploy preview

A saída será semelhante a esta:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Copie o URL fornecido e cole-o em um navegador.
  2. Digite Talk to my test app no campo Entrada e pressione Enter.
  3. Digite Yes no campo Entrada e pressione Enter. Também é possível clicar no ícone de sugestão Sim.
  4. Digite magic no campo Entrada e pressione Enter.

3a42c33eca435f32.png

Você vai notar que a solicitação não parece correta quando o usuário escolhe "mágica" devido ao artigo "um" ou "uma" antes da palavra. Saiba como resolver o problema nas seções a seguir.

Adicionar gerenciador unavailable_options

Para colocar o artigo "um" ou "uma" antes das opções apropriadas do tipo unavailable_options, configure um manipulador de eventos na sua lógica de fulfillment para verificar se a opção escolhida pelo usuário precisa de um artigo. Primeiro, configure sua ação para chamar o gerenciador a partir da cena Fortune.

Para adicionar o gerenciador unavailable_options à cena Fortune, siga estas etapas:

  1. Abra custom/scenes/Fortune.yaml no seu editor de texto.
  2. Atualize o arquivo Fortune.yaml com os seguintes dados do intentEvents:

Fortune.yaml

intentEvents:
- handler:
    webhookHandler: unavailable_options
  intent: other_option
  1. Salve o arquivo.

Atualizar e implantar o fulfillment

Agora que você configurou a ação para chamar o manipulador de eventos unavailable_options, basta atualizar no seu fulfillment e implantá-lo.

Para atualizar o fulfillment, siga estas etapas:

  1. Abra webhooks/ActionsOnGoogleFulfillment/index.js no seu editor de texto.
  2. Adicione o seguinte código ao index.js no gerenciador greeting:

index.js

app.handle('unavailable_options', conv => {
  const option = conv.intent.params.chosenUnavailableOption.original;
  const optionKey = conv.intent.params.chosenUnavailableOption.resolved;
  let message = 'I have seen the future and ';
  if(optionsNeedA.has(optionKey)){
    message = message + 'a ';
  }
  message = message + `${option} will not aid you on your journey. `;
  conv.add(message);
});
  1. Adicione o seguinte código em const app = conversation({debug:true});:

index.js

const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
  1. Salve o arquivo.

Entender o código

O gerenciador unavailable_options faz o seguinte:

  • Recebe os dados option do objeto conv e atribui option à propriedade original, que contém as entradas brutas do usuário
  • Atribui optionKey à propriedade resolved, que é a chave do tipo unavailable_options
  • Verifica se optionKey é uma das opções que precisam de um artigo. Se for, cria a mensagem com o artigo necessário
  • Adiciona a mensagem via conv.add(message)

Atualizar gerenciadores

Para permitir que a ação use unavailable_options, adicione o gerenciador unavailable_options a webhooks/ActionsOnGoogleFulfillment.yaml.

  1. Adicione o nome do gerenciador unavailable_options a ActionsOnGoogleFulfillment.yaml:

ActionsOnGoogleFulfillment.yaml

handlers:
- name: greeting
- name: unavailable_options
inlineCloudFunction:
  executeFunction: ActionsOnGoogleFulfillment
  1. Salve o arquivo.

Testar ação no simulador

Agora, sua ação precisa ajustar a solicitação. Isso depende do uso do artigo "um" ou "uma" antes da escolha do usuário para o tipo unavailable_options.

Para testar a ação, siga estas etapas:

  1. No terminal, execute o seguinte comando:
gactions deploy preview

A saída será semelhante a esta:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Copie o URL fornecido e cole-o em um navegador.
  2. Clique ou digite Talk to my test app no campo Entrada e pressione Enter.
  3. Digite Yes no campo Entrada e pressione Enter. Também é possível clicar no ícone de sugestão Sim.
  4. Digite magic no campo Entrada e pressione Enter. Em seguida, digite horse no campo Entrada e pressione Enter.

54ee24c5c3c56e.png

Sua ação precisa adicionar o artigo "um" antes da opção "cavalo". Além disso, ela não pode incluir um artigo para a opção "mágica".

O SDK do Actions tem interoperabilidade com um IDE baseado na Web chamado Action Builder, que é integrado ao Console do Actions. É possível enviar seu sistema de arquivos local para o rascunho da sua ação no console com o comando gactions push. O Console do Actions tem uma representação visual da configuração da ação. Visualizar a ação pode ser útil durante o desenvolvimento e não afeta a versão veiculada para teste.

Para enviar e visualizar seu projeto no Console do Actions, siga estas etapas:

  1. No terminal, execute o seguinte comando para enviar seu projeto ao Console do Actions:
gactions push

A saída será semelhante a esta:

✔ Done. Files were pushed to Actions Console, and you can now view your project with this URL: https://console.actions.google.com/project/{project-id}/overview. If you want to test your changes, run "gactions deploy preview", or navigate to the Test section in the Console.
  1. Copie o URL fornecido e cole-o em um navegador.
  2. No Console do Actions, clique em Desenvolver na barra de navegação superior.
  3. Clique na seta suspensa ao lado de Cenas e clique em Iniciar. Você verá uma representação visual da cena Start da ação, conforme esta captura de tela:

cae526c647f8d40f.png

Parabéns!

Agora você já tem as habilidades intermediárias necessárias para criar ações para o Google Assistente com o SDK do Actions.

Conteúdo abordado

  • Como desenvolver ações de conversa usando a biblioteca de fulfillment do Node.js
  • Como usar slots para coletar dados do usuário
  • Como usar condições para adicionar lógica à cena
  • Como adicionar um loop de jogo
  • Como adicionar um caminho de apoio

Recursos de aprendizado adicionais

Veja estes recursos para aprender a criar ações do Google Assistente:

Siga nosso perfil do Twitter @ActionsOnGoogle para ficar por dentro dos nossos comunicados mais recentes e envie um tuíte para #AoGDevs contando o que você criou.

Como limpar o projeto [recomendado]

Para evitar possíveis cobranças, é recomendável remover os projetos que você não pretende usar. Para excluir os projetos criados neste codelab, siga estas etapas:

  1. Para excluir o projeto e os recursos do Cloud, conclua as etapas da seção Como encerrar (excluir) projetos.
  1. Opcional: para remover seu projeto do Console do Actions imediatamente, conclua as etapas da seção Como excluir um projeto. Caso contrário, seu projeto será removido automaticamente após cerca de 30 dias.

Pesquisa de feedback

Antes de sair, preencha esta breve pesquisa sobre sua experiência.