Cómo compilar acciones para Asistente de Google mediante el SDK de Actions (nivel 2)

La plataforma para desarrolladores de Asistente de Google te permite crear software que extienden la funcionalidad de este asistente personal virtual en más de 1,000 millones de dispositivos, como bocinas inteligentes, teléfonos, vehículos, TVs, auriculares y muchos más. Los usuarios interactúan con Asistente mediante conversaciones para completar tareas, como comprar alimentos o reservar un viaje. Como desarrollador, puedes usar la plataforma para desarrolladores de Asistente a fin de crear y administrar fácilmente experiencias de conversación interesantes y eficaces entre los usuarios y tu propio servicio externo.

Este codelab abarca conceptos de nivel intermedio para desarrollar con Asistente de Google y se basa en la acción creada en el codelab de nivel 1. Te recomendamos que completes ese codelab antes de comenzar este.

La acción que compilarás en este codelab les dice a los usuarios la fortuna para su misión en una tierra mítica, Gryffinberg, en función de la ayuda que elijan.

Qué compilarás

En este codelab, compilarás una acción conversacional sofisticada que realiza lo siguiente:

  • Recopila datos del usuario y, según el valor, modifica los mensajes conversacionales.
  • Responde con preguntas de seguimiento para continuar con la conversación.
  • Crea un bucle de juego para que un usuario pueda interactuar con la acción nuevamente después de recibir la fortuna.

Antes de comenzar a compilar, puedes interactuar con la acción publicada en tu dispositivo compatible con Asistente de Google cuando dices "Hey Google, habla con Fate y Fortune". La ruta predeterminada a través de esta acción para un usuario recurrente se ve en la siguiente interacción:

dd6f5c61296b8b50.png

eba043f546aa8c51.png

Qué aprenderás

  • Cómo usar espacios para recopilar datos del usuario
  • Cómo usar condiciones para agregar lógica a una escena
  • Cómo agregar un bucle de juego
  • Cómo agregar una ruta de acceso de asistencia

Requisitos

Estos son algunos requisitos del codelab:

  • Un IDE o el editor de texto que prefieras
  • Una ventana de terminal a fin de ejecutar comandos de shell para NodeJS, npm y git
  • Un navegador web, como Google Chrome
  • Un proyecto completo de acciones del codelab de nivel 1

Conocimientos de JavaScript (ES6), (aunque no es obligatorio) para comprender el código de entregas de este codelab

Opcional: Cómo obtener el código de muestra

De forma opcional, puedes obtener el código completo del proyecto del nivel 1 en este repositorio de GitHub o el del nivel 2 en este repositorio de GitHub.

En el primer codelab, creaste una acción de conversación simple con una sola escena, Start.

En este codelab, extenderás la conversación de tu acción. En las siguientes secciones, configurarás tu acción para que realice lo siguiente:

  • Pasar a una nueva escena de Fortune cuando el usuario quiera escuchar su fortuna
  • Preguntar al usuario qué ayuda desea elegir para su viaje
  • Ofrecer una predicción personalizada según la elección del usuario

Realiza la transición a Fortune y crea la escena

En esta sección, harás lo siguiente:

  • Quitar el mensaje existente de la escena Start, que responde al usuario y finaliza la conversación
  • Definir la transición de la escena Start a la escena Fortune
  • Crear la escena Fortune

Para modificar la escena Start y agregar una transición a Fortune, sigue estos pasos:

  1. Abre tu proyecto de acciones del codelab del nivel 1 en tu editor de texto.
  2. Abre el archivo custom/scenes/Start.yaml.
  3. Actualiza el handler del intent yes para que el código coincida con el siguiente fragmento:

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. Guarda el archivo.

Para crear una nueva escena llamada Fortune, sigue estos pasos:

  1. Navega a tu proyecto de acciones del codelab de nivel 1 a la ventana de terminal.
  2. Crea un archivo nuevo llamado Fortune.yaml en el directorio scenes.
touch custom/scenes/Fortune.yaml

Editarás este archivo en la próxima sección.

Define la lógica de conversación para la escena Fortune

En este codelab, configurarás tu escena Fortune para preguntarle al usuario: "What do you choose to help you on your quest (¿Qué eliges como ayuda para tu aventura?): dragon (dragón), translator (traductor) or a compass (brújula)?". Puedes usar una función llamada slot filling (relleno de espacios) para recopilar la información necesaria del usuario antes de continuar.

Tu acción proporciona fortunas para tres tipos de ayuda: dragon (dragón), translator (traductor) o compass (brújula). Para configurar tu acción a fin de que identifique estas tres opciones en la entrada de un usuario, debes crear un type (tipo) nuevo.

Puedes usar tipos dentro de la etapa de relleno del espacio de una escena para definir la información que desees obtener del usuario. Cuando el motor de CLN detecta una coincidencia para el espacio en la entrada del usuario, extrae el espacio como parámetro escrito para que puedas realizar la lógica correspondiente en una escena.

Crea el tipo available_options

En esta sección, crearás un nuevo tipo llamado available_options, que especifica las tres opciones (dragon, translator o compass) que los usuarios pueden elegir como respuesta al mensaje. También puedes definir algunos sinónimos para estas opciones, en caso de que un usuario diga algo similar. En una sección posterior, agregarás el tipo available_options a un espacio para especificar que deseas obtener la elección del usuario.

Para crear el tipo available_options, sigue estos pasos:

  1. Crea un directorio nuevo llamado types.
mkdir custom/types
  1. Crea un archivo nuevo llamado available_options.yaml en el directorio types.
touch custom/types/available_options.yaml
  1. Abre custom/types/available_options.yaml en tu editor de texto.

Los tipos se configuran como pares clave-valor de información, en los que la clave es el nombre del tipo y los valores son sinónimos de esa clave. Cuando defines la clave, esta se agrega automáticamente como un valor. Con el SDK de Actions, representas las claves como entities, y los valores como synonyms.

Para agregar las tres opciones que el usuario puede elegir, sigue los pasos que se detallan a continuación:

  1. Agrega los siguientes objetos entities y synonyms al archivo 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. Guarda el archivo.

Tu acción ahora entiende que las available_options pueden ser dragon (dragón), translator (traductor) y compass (brújula), y también puede reconocer algunos sinónimos correspondientes.

Configura el relleno de espacios

Luego, debes configurar el relleno de espacios en la escena Fortune. Para configurar la lógica de relleno de espacios, haz lo siguiente:

  1. Abre custom/scenes/Fortune.yaml en tu editor de texto.
  2. Agrega los siguientes datos de slots al archivo 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. Guarda el archivo.

De esta manera, habrás agregado el tipo available_options al espacio, que le indica a tu acción qué información debe recopilar del usuario (la ayuda que elija) antes de continuar. También habrás configurado un mensaje dentro del espacio, que se agrega a la cola de mensajes cuando el usuario llega a la etapa de relleno de la escena.

Cuando le asignas el nombre chosenOptions al espacio, se actualiza el campo writeSessionsParam con el mismo nombre ($session.params.chosenOptions). Puedes acceder a este parámetro mediante ese nombre en el mensaje y en tu entrega a través de la biblioteca cliente.

Agrega una condición

Ahora que agregaste un espacio que requiere la preferencia de ayuda del usuario, puedes agregar una condición a fin de verificar que se hayan obtenido los datos del espacio antes de que el usuario continúe con la conversación.

En esta sección, agregarás la condición scene.slots.status == "FINAL", que verifica que se complete el llenado de espacios. Cuando se rellenan todos los espacios, la condición agrega un mensaje (You picked $session.params.chosenOptions.) a la cola de mensajes.

Para configurar la condición scene.slots.status == "FINAL", debes seguir estos pasos:

  1. Abre custom/scenes/Fortune.yaml en tu editor de texto.
  2. Agrega datos de conditionalEvents en la parte superior del archivo Fortune.yaml.

Fortune.yaml

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

Prueba tu acción en el simulador

En este punto, habrás definido las opciones que el usuario debería seleccionar para rellenar el espacio. Después de obtener esta información del usuario, tu acción debe proporcionar un mensaje que haga referencia a la opción específica que este eligió.

Para probar tu acción, sigue estos pasos:

  1. En la ventana de terminal, ejecuta el siguiente comando:
gactions deploy preview

Deberías recibir un resultado similar al siguiente:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Copia la URL proporcionada y pégala en un navegador.
  2. Escribe Talk to my test app o haz clic en la opción, en el campo Input, y presiona Intro.
  3. Escribe Yes en el campo Input y presiona Intro. También puedes hacer clic en el chip de sugerencias Yes.

a899d45c542668f6.png

  1. Escribe o di dragon, o bien haz clic en la opción. Deberías recibir el mensaje "You picked dragon" (seleccionaste el dragón).

En la próxima sección, podrás personalizar los mensajes para cada ayuda que el usuario pueda seleccionar.

Personaliza los mensajes con condiciones

En esta sección, agregarás condiciones para cada opción que el usuario pueda elegir, así como un mensaje personalizado para cada condición.

Personaliza la fortuna de dragon

Para actualizar la condición y personalizar el mensaje cuando un usuario seleccione "dragon" (dragón), sigue estos pasos:

  1. Abre custom/scenes/Fortune.yaml en tu editor de texto.
  2. Reemplaza los datos de conditionalEvents con el siguiente fragmento en el archivo 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. Guarda el archivo.

Ahora, cuando un usuario diga "dragon" o algo similar, tu acción proporcionará una fortuna basada en esa selección. A continuación, agregarás las dos selecciones restantes.

Personaliza las fortunas translator y compass

Para agregar las condiciones y personalizar los mensajes cuando el usuario dice "translator" o "compass", sigue estos pasos:

  1. En el archivo custom/scenes/Fortune.yaml, agrega las otras dos condiciones en la condición 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. Guarda el archivo.

Prueba tu acción en el simulador

En este punto, tu acción debería mostrar una fortuna personalizada para el usuario según la opción que este seleccione.

Para probar tu acción, sigue estos pasos:

  1. En la ventana de terminal, ejecuta el siguiente comando:
gactions deploy preview

Deberías recibir un resultado similar al siguiente:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Copia la URL proporcionada y pégala en un navegador.
  2. Escribe Talk to my test app en el campo Input y presiona Intro.
  3. Escribe "Yes" en el campo Input y presiona Intro. También puedes hacer clic en el chip de sugerencias Yes.
  4. Escribe o di Translator, o bien haz clic en la opción.

29e17f950bd0dd71.png

Deberías obtener la fortuna correspondiente para la opción "translator" (traductor).

En esta sección, configurarás tu acción para que el usuario pueda seleccionar otra opción y escuchar una fortuna diferente después de hacerlo. Este cambio es similar al mensaje "Do you want to play again? (¿Quieres volver a jugar?)" que se muestra al final de un juego. Para compilar este bucle, puedes volver a usar los intents yes y no creados anteriormente y agregarlos a una nueva escena llamada Again.

Crea la escena Again

En esta sección, crearás una nueva escena Again y agregarás un mensaje en el que se le pregunte al usuario si desea seleccionar una opción diferente.

Para crear y configurar la escena Again, sigue estos pasos:

  1. Crea un archivo nuevo llamado Again.yaml en el directorio scenes.
touch custom/scenes/Again.yaml
  1. Abre custom/scenes/Again.yaml en tu editor de texto.
  2. Agrega a Again.yaml los datos de onEnter que se muestran a continuación:

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. Guarda el archivo.

Agrega la transición de Fortune a la escena Again

Después de que el usuario reciba su fortuna, la conversación deberá pasar a la nueva escena Again.

Para agregar una transición de la escena Fortune a la escena Again, sigue estos pasos:

  1. Abre custom/scenes/Fortune.yaml en tu editor de texto.
  2. Agrega transitionToScene: Again a cada condición, como se muestra en el siguiente fragmento:

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. Guarda el archivo.

Prueba tu acción en el simulador

En este punto, tu acción debería proporcionar al usuario el siguiente mensaje después de que reciba su fortuna: "That is what I see for you. Would you like to choose a different option and explore another future? (Eso es lo que veo para ti. ¿Te gustaría elegir una opción diferente y explorar otro futuro?)".

Para probar tu acción, sigue estos pasos:

  1. En la ventana de terminal, ejecuta el siguiente comando:
gactions deploy preview

Deberías recibir un resultado similar al siguiente:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Copia la URL proporcionada y pégala en un navegador.
  2. Escribe Talk to my test app en el campo Input y presiona Intro.
  3. Escribe Yes en el campo Input y presiona Intro. También puedes hacer clic en el chip de sugerencias Yes.
  4. Escribe o di dragon, o bien haz clic en la opción.

b299e9fed9aedb69.png

Deberías recibir la fortuna para la opción dragon (dragón) y el mensaje Again.

Agrega intents y realiza la transición a la escena Again

En esta sección, agregarás intents yes y no a la escena Again para que tu acción comprenda si el usuario desea seleccionar una nueva opción o no. También debes agregar las transiciones adecuadas para los intents yes y no. El intent yes pasa a la escena Fortune, mientras que no pasa a la escena del sistema End conversation.

Para agregar intents y transiciones a la escena Again, sigue estos pasos:

  1. Abre custom/scenes/Again.yaml en tu editor de texto.
  2. Agrega los datos de intentEvents en la parte superior del archivo Again.yaml, arriba 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. Guarda el archivo.

Prueba tu acción en el simulador

Ahora tu acción debería comprender si el usuario desea seleccionar una opción nueva o finalizar la conversación.

Para probar el intent yes, sigue estos pasos:

  1. En la ventana de terminal, ejecuta el siguiente comando:
gactions deploy preview

Deberías recibir un resultado similar al siguiente:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Copia la URL proporcionada y pégala en un navegador.
  2. Escribe Talk to my test app en el campo Input y presiona Intro.
  3. Escribe Yes en el campo Input y presiona Intro. También puedes hacer clic en el chip de sugerencias Yes.
  4. Escribe o di una opción, o bien haz clic en ella.
  5. Escribe Yes en el campo Input y presiona Intro.

5d0690332efe2e29.png

Deberías recibir el mensaje: "What do you choose to help you on your quest, a dragon, a translator, or a compass? (¿Qué eliges para ayudarte en tu misión: un dragón, un traductor o una brújula?)".

Para probar el intent no, sigue estos pasos:

  1. Escribe o di una opción, o bien haz clic en ella.
  2. Escribe No en el campo Input y presiona Intro.

Deberías recibir el mensaje End conversation: "It pleases me that you are satisfied with your choice. Best of luck on your quest. Farewell. (Me gusta que te complazca tu elección. Mucha suerte en tu misión. Que la suerte te acompañe)".

Así, habrás creado la ruta principal que realizarán la mayoría de los usuarios en tu acción. Sin embargo, el usuario podría responder al mensaje de la escena Fortune, "What do you choose to help you on your quest, a dragon, a translator, or a compass? (¿Qué eliges para ayudarte en tu misión: un dragón, un traductor o una brújula?)", con una opción distinta de las disponibles.

En esta sección, configurarás tu acción para que entienda cuando un usuario dice "magic" (magia), "money" (dinero), "horse" (caballo) o "phone" (teléfono) y le pida que seleccione una de las tres opciones originales. Para configurar esta lógica, debes crear un nuevo type que contenga estas otras opciones y un nuevo intent, other_option, que se detecte cuando un usuario diga una de estas opciones. También debes anotar frases de entrenamiento dentro del intent other_option para identificar y extraer parámetros de intent.

Cuando el motor de procesamiento de lenguaje natural de Asistente detecta una coincidencia de parámetros en la entrada del usuario, extrae el valor como parámetro escrito para que puedas realizar la lógica con una escena. En este codelab, configurarás tu acción para extraer la ayuda que el usuario elige y hacer referencia a esa opción en un mensaje.

Crea el tipo unavailable_options

Ahora puedes crear un tipo unavailable_options que contenga una variedad de opciones para que tu acción pueda identificar esos datos en una entrada del usuario.

Para crear el tipo unavailable_options, sigue estos pasos:

  1. Crea un archivo nuevo llamado unavailable_options.yaml en el directorio types.
touch custom/types/unavailable_options.yaml
  1. Abre custom/types/unavailable_options.yaml en tu editor de texto.
  2. Agrega los datos de synonyms que se muestran a continuación al archivo 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. Guarda el archivo.

Crea el intent other_option

A continuación, crearás un intent llamado other_option y agregarás frases de entrenamiento que incluyan las opciones del tipo unavailable_options. La coincidencia con este intent se establece cuando el usuario selecciona una opción incluida en el tipo unavailable_options.

Para crear y configurar el intent other_option, sigue estos pasos:

  1. Crea un archivo nuevo llamado other_option.yaml en el directorio intents.
touch custom/intents/other_option.yaml
  1. Abre custom/intents/other_option.yaml en tu editor de texto.
  2. Agrega los datos de parameters y trainingPhrases que se muestran a continuación al archivo 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)

Aquí anotarás de forma manual las frases de entrenamiento con las opciones que no están disponibles y que especificaste en la sección anterior. El parámetro de intent, chosenUnavailableOption, te permite extraer el nombre de la opción y usarla en un mensaje, lo cual realizarás en la próxima sección.

  1. Guarda el archivo.

Agrega el intent other_option a la escena Fortune

Ahora tienes un intent, other_option, que puede controlar la acción de un usuario de especificar una opción que no se encuentre entre las originales. En esta sección, agregarás el intent other_option a la escena Fortune. Puedes usar el parámetro de intent para personalizar el mensaje según las entradas del usuario.

Para agregar el intent other_option a la escena Fortune, sigue estos pasos:

  1. Abre custom/scenes/Fortune.yaml en tu editor de texto.
  2. Agrega los datos de intentEvents que se muestran a continuación entre los datos de conditionalEvents y 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. Guarda el archivo.

La expresión $intent.params.chosenUnavailableOption hace referencia al objeto del parámetro de intent, y $intent.params.chosenUnavailableOption.original se refiere al valor de ese objeto. La propiedad original hace referencia a la entrada sin procesar que especifica el usuario.

Cuando un usuario dice una opción que aparece en el tipo unavailable_options durante la escena Fortune, se produce una coincidencia con el intent other_option y este agrega un mensaje a la cola de mensajes. Debido a que no hay una transición especificada, el bucle de ejecución de la escena continúa reevaluando la etapa de condiciones. Luego, el espacio chosenOptions agrega su mensaje a la lista de mensajes de la cola, y esta se entrega al usuario.

Prueba tu acción en el simulador

Tu acción debería responder de manera apropiada cuando un usuario seleccione una de las opciones enumeradas en el tipo unavailable_options y especificar la ayuda que seleccionó el usuario. Luego, la acción debe solicitarle al usuario que elija una de las opciones originales: dragon (dragón), translator (traductor) o compass (brújula).

Para probar tu acción en el simulador, sigue estos pasos:

  1. En la ventana de terminal, ejecuta el siguiente comando:
gactions deploy preview

Deberías recibir un resultado similar al siguiente:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Copia la URL proporcionada y pégala en un navegador.
  2. Escribe Talk to my test app en el campo Input y presiona Intro.
  3. Escribe Yes en el campo Input y presiona Intro. También puedes hacer clic en el chip de sugerencias Yes.
  4. Escribe magic en el campo Input y presiona Intro.

3a42c33eca435f32.png

Tal vez notes que el mensaje no parece correcto cuando el usuario elige "magic" (magia) debido al artículo "a" (un/una) que se encuentra antes de la opción. Resolveremos este problema en las siguientes secciones.

Agrega el controlador unavailable_options

Para colocar el artículo "a" (un/una) antes de las opciones adecuadas del tipo unavailable_options, puedes configurar un controlador de eventos en tu lógica de entrega para comprobar si la opción que elige el usuario necesita estar precedida por un artículo "a" (un/una). En primer lugar, debes configurar tu acción para llamar al controlador de la escena Fortune.

Para agregar el controlador unavailable_options a la escena Fortune, sigue estos pasos:

  1. Abre custom/scenes/Fortune.yaml en tu editor de texto.
  2. Actualiza el archivo Fortune.yaml con los siguientes datos de intentEvents:

Fortune.yaml

intentEvents:
- handler:
    webhookHandler: unavailable_options
  intent: other_option
  1. Guarda el archivo.

Actualiza y, luego, implementa la entrega

Ahora que configuraste tu acción para que llame al controlador de eventos unavailable_options, puedes actualizar el controlador en tu entrega e implementarlo.

Para actualizar la entrega, sigue estos pasos:

  1. Abre webhooks/ActionsOnGoogleFulfillment/index.js en tu editor de texto.
  2. Agrega el siguiente código a index.js en el controlador 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. Agrega el siguiente código a const app = conversation({debug:true});:

index.js

const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
  1. Guarda el archivo.

Cómo interpretar el código

El controlador unavailable_options hace lo siguiente:

  • Obtiene datos option del objeto conv y asigna option a la propiedad original, que es la entrada sin procesar del usuario.
  • Asigna optionKey a la propiedad resolved, que es la clave para el tipo unavailable_options.
  • Verifica si optionKey es una de las opciones que necesitan un artículo "a" (un/una). Si es así, construye el mensaje con el artículo.
  • Agrega el mensaje a través de conv.add(message).

Actualiza los controladores

A fin de permitir que la acción use unavailable_options, agrega el controlador unavailable_options a webhooks/ActionsOnGoogleFulfillment.yaml.

  1. Agrega el nombre de controlador unavailable_options a ActionsOnGoogleFulfillment.yaml.

ActionsOnGoogleFulfillment.yaml

handlers:
- name: greeting
- name: unavailable_options
inlineCloudFunction:
  executeFunction: ActionsOnGoogleFulfillment
  1. Guarda el archivo.

Prueba tu acción en el simulador

Tu acción ahora debería ajustar el mensaje según si la opción del usuario del tipo unavailable_options requiere un artículo "a" antepuesto.

Para probar tu acción, sigue estos pasos:

  1. En la ventana de terminal, ejecuta el siguiente comando:
gactions deploy preview

Deberías recibir un resultado similar al siguiente:

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Copia la URL proporcionada y pégala en un navegador.
  2. Escribe Talk to my test app o haz clic en la opción, en el campo Input, y presiona Intro.
  3. Escribe Yes en el campo Input y presiona Intro. También puedes hacer clic en el chip de sugerencias Yes.
  4. Escribe magic en el campo Input y presiona Intro. Luego, escribe horse en el campo Input y presiona Intro.

54ee24c5c3c56e.png

Tu acción debería agregar el artículo "a" (un) antes de la opción "horse" (caballo), mientras que no debe hacerlo para la opción "magic" (magia).

El SDK de Actions tiene interoperabilidad con un IDE basado en la Web, llamado Actions Builder, que está integrado en la Consola de Actions. Puedes enviar tu sistema de archivos local al borrador de tu acción en la consola con el comando gactions push. La Consola de Actions proporciona una representación visual de la configuración de tu acción. Ver tu acción mapeada visualmente puede ser útil durante el desarrollo, y no afecta la versión de tu acción que se entrega para las pruebas.

Para enviar tu proyecto de acciones y verlo en la Consola de Actions, sigue estos pasos:

  1. En la ventana de terminal, ejecuta el siguiente comando para enviar tu proyecto a la Consola de Actions:
gactions push

Deberías recibir un resultado similar al siguiente:

✔ 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. Copia la URL proporcionada y pégala en un navegador.
  2. En la Consola de Actions, haz clic en Develop, en la barra de navegación superior.
  3. Haz clic en la flecha desplegable junto a Scenes y haz clic en Start. Deberías ver una representación visual de la escena Start de tu acción, como se muestra en la siguiente captura de pantalla:

cae526c647f8d40f.png

Felicitaciones.

Ya aprendiste las habilidades intermedias necesarias para crear acciones para Asistente de Google con el SDK de Actions.

Temas que se abordaron

  • Cómo desarrollar acciones conversacionales con la biblioteca de entregas de Node.js
  • Cómo usar espacios para recopilar datos del usuario
  • Cómo usar condiciones para agregar lógica a una escena
  • Cómo agregar un bucle de juego
  • Cómo agregar una ruta de acceso de asistencia

Recursos de aprendizaje adicionales

Puedes explorar estos recursos y obtener información a fin de crear acciones para Asistente de Google:

Síguenos en Twitter (@ActionsOnGoogle) para mantenerte al tanto de los anuncios más recientes y enviar tuits con #AoGDevs para compartir tu compilación.

Cómo limpiar tu proyecto (recomendado)

A fin de evitar incurrir en posibles cargos, te recomendamos quitar los proyectos que no quieras usar. Para borrar los proyectos que creaste en este codelab, sigue estos pasos:

  1. Si quieres borrar el proyecto de la nube y los recursos, completa los pasos indicados en la sección Cómo apagar (borrar) proyectos.
  1. Opcional: Para quitar un proyecto de la Consola de Actions de forma inmediata, completa los pasos indicados en la sección Cómo borrar un proyecto. Si no sigues este paso, se quitará automáticamente el proyecto después de alrededor de 30 días.

Encuesta de opinión

Antes de irte, completa una breve encuesta sobre tu experiencia.