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:
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 escenaFortune
- Crear la escena
Fortune
Para modificar la escena Start
y agregar una transición a Fortune
, sigue estos pasos:
- Abre tu proyecto de acciones del codelab del nivel 1 en tu editor de texto.
- Abre el archivo
custom/scenes/Start.yaml
. - Actualiza el
handler
del intentyes
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
- Guarda el archivo.
Para crear una nueva escena llamada Fortune
, sigue estos pasos:
- Navega a tu proyecto de acciones del codelab de nivel 1 a la ventana de terminal.
- Crea un archivo nuevo llamado
Fortune.yaml
en el directorioscenes
.
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:
- Crea un directorio nuevo llamado
types
.
mkdir custom/types
- Crea un archivo nuevo llamado
available_options.yaml
en el directoriotypes
.
touch custom/types/available_options.yaml
- 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:
- Agrega los siguientes objetos
entities
ysynonyms
al archivoavailable_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
- 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:
- Abre
custom/scenes/Fortune.yaml
en tu editor de texto. - Agrega los siguientes datos de
slots
al archivoFortune.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
- 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:
- Abre
custom/scenes/Fortune.yaml
en tu editor de texto. - Agrega datos de
conditionalEvents
en la parte superior del archivoFortune.yaml
.
Fortune.yaml
conditionalEvents: - condition: scene.slots.status == "FINAL" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: You picked $session.params.chosenOptions.
- 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:
- 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
- Copia la URL proporcionada y pégala en un navegador.
- Escribe
Talk to my test app
o haz clic en la opción, en el campo Input, y presiona Intro. - Escribe
Yes
en el campo Input y presiona Intro. También puedes hacer clic en el chip de sugerencias Yes.
- 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:
- Abre
custom/scenes/Fortune.yaml
en tu editor de texto. - Reemplaza los datos de
conditionalEvents
con el siguiente fragmento en el archivoFortune.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.
- 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:
- En el archivo
custom/scenes/Fortune.yaml
, agrega las otras dos condiciones en la condicióndragon
.
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.
- 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:
- 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
- Copia la URL proporcionada y pégala en un navegador.
- Escribe
Talk to my test app
en el campo Input y presiona Intro. - Escribe "Yes" en el campo Input y presiona Intro. También puedes hacer clic en el chip de sugerencias Yes.
- Escribe o di
Translator
, o bien haz clic en la opción.
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:
- Crea un archivo nuevo llamado
Again.yaml
en el directorioscenes
.
touch custom/scenes/Again.yaml
- Abre
custom/scenes/Again.yaml
en tu editor de texto. - Agrega a
Again.yaml
los datos deonEnter
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"
- 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:
- Abre
custom/scenes/Fortune.yaml
en tu editor de texto. - 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
- 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:
- 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
- Copia la URL proporcionada y pégala en un navegador.
- Escribe
Talk to my test app
en el campo Input y presiona Intro. - Escribe
Yes
en el campo Input y presiona Intro. También puedes hacer clic en el chip de sugerencias Yes. - Escribe o di
dragon
, o bien haz clic en la opción.
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:
- Abre
custom/scenes/Again.yaml
en tu editor de texto. - Agrega los datos de
intentEvents
en la parte superior del archivoAgain.yaml
, arriba deOnEnter
.
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
- 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:
- 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
- Copia la URL proporcionada y pégala en un navegador.
- Escribe
Talk to my test app
en el campo Input y presiona Intro. - Escribe
Yes
en el campo Input y presiona Intro. También puedes hacer clic en el chip de sugerencias Yes. - Escribe o di una opción, o bien haz clic en ella.
- Escribe
Yes
en el campo Input y presiona Intro.
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:
- Escribe o di una opción, o bien haz clic en ella.
- 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:
- Crea un archivo nuevo llamado
unavailable_options.yaml
en el directoriotypes
.
touch custom/types/unavailable_options.yaml
- Abre
custom/types/unavailable_options.yaml
en tu editor de texto. - Agrega los datos de
synonyms
que se muestran a continuación al archivounavailable_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
- 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:
- Crea un archivo nuevo llamado
other_option.yaml
en el directoriointents
.
touch custom/intents/other_option.yaml
- Abre
custom/intents/other_option.yaml
en tu editor de texto. - Agrega los datos de
parameters
ytrainingPhrases
que se muestran a continuación al archivoother_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.
- 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:
- Abre
custom/scenes/Fortune.yaml
en tu editor de texto. - Agrega los datos de
intentEvents
que se muestran a continuación entre los datos deconditionalEvents
yslots
.
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
- 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:
- 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
- Copia la URL proporcionada y pégala en un navegador.
- Escribe
Talk to my test app
en el campo Input y presiona Intro. - Escribe
Yes
en el campo Input y presiona Intro. También puedes hacer clic en el chip de sugerencias Yes. - Escribe
magic
en el campo Input y presiona Intro.
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:
- Abre
custom/scenes/Fortune.yaml
en tu editor de texto. - Actualiza el archivo
Fortune.yaml
con los siguientes datos deintentEvents
:
Fortune.yaml
intentEvents: - handler: webhookHandler: unavailable_options intent: other_option
- 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:
- Abre
webhooks/ActionsOnGoogleFulfillment/index.js
en tu editor de texto. - Agrega el siguiente código a
index.js
en el controladorgreeting
:
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);
});
- Agrega el siguiente código a
const app = conversation({debug:true});
:
index.js
const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
- Guarda el archivo.
Cómo interpretar el código
El controlador unavailable_options
hace lo siguiente:
- Obtiene datos
option
del objetoconv
y asignaoption
a la propiedadoriginal
, que es la entrada sin procesar del usuario. - Asigna
optionKey
a la propiedadresolved
, que es la clave para el tipounavailable_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
.
- Agrega el nombre de controlador
unavailable_options
aActionsOnGoogleFulfillment.yaml
.
ActionsOnGoogleFulfillment.yaml
handlers: - name: greeting - name: unavailable_options inlineCloudFunction: executeFunction: ActionsOnGoogleFulfillment
- 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:
- 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
- Copia la URL proporcionada y pégala en un navegador.
- Escribe
Talk to my test app
o haz clic en la opción, en el campo Input, y presiona Intro. - Escribe
Yes
en el campo Input y presiona Intro. También puedes hacer clic en el chip de sugerencias Yes. - Escribe
magic
en el campo Input y presiona Intro. Luego, escribehorse
en el campo Input y presiona Intro.
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:
- 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.
- Copia la URL proporcionada y pégala en un navegador.
- En la Consola de Actions, haz clic en Develop, en la barra de navegación superior.
- 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:
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:
- Documentación sobre el desarrollo de acciones para Asistente de Google
- Página de GitHub de Actions on Google con código de muestra y bibliotecas
- Comunidad oficial de Reddit para desarrolladores que trabajan con Asistente de Google
- Lineamientos sobre el diseño de conversaciones para conocer las prácticas recomendadas y los lineamientos relacionados con las acciones de conversación
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:
- Si quieres borrar el proyecto de la nube y los recursos, completa los pasos indicados en la sección Cómo apagar (borrar) proyectos.
- 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.