Juego de práctica de ortografía con Asistente de Google y Cloud Firestore

1. Descripción general

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 mil millones de dispositivos, como bocinas inteligentes, teléfonos, automóviles, 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, Cloud Functions y Cloud Firestore. En este codelab, compilarás un juego llamado "Práctica de ortografía" que usa el Asistente de Google para pedirles a los usuarios que deletreen palabras.

Qué compilarás

En este codelab, compilarás un juego sofisticado con las siguientes funciones:

  • Recibe respuestas de ortografía del usuario y, según el valor, modifica los mensajes conversacionales.
  • Responde con sugerencias relacionadas con la ortografía de la palabra, como su definición o la repetición de la palabra.
  • Crea un bucle de juego para que un usuario pueda interactuar con el Asistente nuevamente después de deletrear la palabra.

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

Cuando completes este codelab, la acción finalizada tendrá el siguiente flujo conversacional:

2e9f94dc0ceafc96.png

Qué aprenderás

  • Cómo interactuar con Cloud Firestore
  • Cómo usar espacios para recopilar datos del usuario
  • Cómo procesar las entradas del usuario y mostrar respuestas
  • Cómo usar condiciones para agregar lógica a una escena
  • Cómo agregar un bucle de juego

Requisitos

Estos son algunos requisitos del codelab:

  • Un navegador web, como Google Chrome
  • Un IDE para escribir Cloud Functions
  • Una forma de pago En este codelab, se usan Cloud Functions para Firebase, lo que requiere que tu proyecto tenga el plan de precios Blaze de Firebase ( más información).
  • Una terminal para ejecutar comandos de shell
  • Node.js 10 o versiones posteriores

2. Obtén el código de las funciones

Clona el repositorio de GitHub desde la línea de comandos:

$ git clone https://github.com/FirebaseExtended/codelab-actions-firestore

3. Crea un proyecto de Firebase y configura tu app

Crea un proyecto de Firebase

  1. Accede a Firebase.
  2. En Firebase console, haz clic en Agregar proyecto (o Crear un proyecto) y, luego, asígnale el nombre Spelling-Practice.

66ae8d1894f4477.png

  1. Haz clic en las opciones de creación del proyecto. Si se te solicita, acepta las condiciones de Firebase. Omite la configuración de Google Analytics, ya que no utilizarás ese servicio en esta app.

Para obtener más información sobre los proyectos de Firebase, consulta la Información sobre los proyectos de Firebase.

Actualiza al plan de precios Blaze

Para usar Cloud Functions para Firebase, deberás actualizar tu proyecto de Firebase al plan de precios Blaze, lo que significa que adjuntarás una cuenta de facturación de Google Cloud a tu proyecto. Para ello, debes proporcionar una tarjeta de crédito o alguna otra forma de pago.

Todos los proyectos de Firebase, incluidos los que están en el plan Blaze, aún tienen acceso a las cuotas de uso sin costo de Cloud Functions. Los pasos que se describen en este codelab se encuentran dentro de los límites de uso sin costo. Sin embargo, verás pequeños cargos ( alrededor de USD 0.03) de Cloud Storage, que se usa para alojar las imágenes de compilación de Cloud Functions.

4. Instala Firebase CLI

Firebase CLI (interfaz de línea de comandos) te permite implementar tus Cloud Functions.

Existen varias opciones para instalar Firebase CLI según tu sistema operativo y caso de uso. En los siguientes pasos, se describe la opción más común si también usas Cloud Functions.

  1. Asegúrate de haber instalado npm, que se suele incluir con Node.js.
  2. Para instalar o actualizar la CLI, ejecuta el siguiente comando npm:
$ npm -g install firebase-tools
  1. Para verificar que la CLI se haya instalado de forma correcta, ejecuta el siguiente comando:
$ firebase --version

Asegúrate de que la versión de Firebase CLI sea 9.0.0 o posterior para que tenga todas las funciones más recientes que se requieren para Cloud Functions. Si no es así, ejecuta npm install -g firebase-tools para actualizarla, como se mostró anteriormente.

  1. Ejecuta el siguiente comando para autorizar Firebase CLI:
$ firebase login
  1. Desde el directorio spelling-functions-start, configura Firebase CLI para usar tu proyecto de Firebase. Ejecuta el siguiente comando, selecciona el ID de tu proyecto y, luego, sigue las instrucciones. Cuando se te solicite, puedes elegir cualquier alias, como codelab, por ejemplo.
$ firebase use --add

5. El directorio de funciones

Ahora agregarás funcionalidad con el SDK de Firebase para Cloud Functions para compilar el backend del juego Práctica de ortografía.

Cloud Functions te permite ejecutar código en la nube sin necesidad de configurar un servidor. En este codelab, aprenderás a compilar funciones que reaccionen a eventos de Firebase Authentication, Cloud Storage y Firebase Realtime Database. Comencemos con la autenticación.

Cuando uses el SDK de Firebase para Cloud Functions, el código de tus funciones residirá en el directorio functions (de forma predeterminada). Para que te resulte más fácil, ya creamos el archivo functions/index.js en el que se incluirá tu código. No dudes en inspeccionar el directorio functions antes de continuar.

$ cd functions
$ ls

El código de tus funciones también es una app de Node.js y, por lo tanto, necesita un package.json que brinde información sobre tu app y una lista de las dependencias.

Si no conoces Node.js, te recomendamos que obtengas más información sobre él antes de continuar con el codelab.

El archivo package.json ya muestra dos dependencias requeridas: el SDK de Firebase para Cloud Functions y el SDK de Firebase Admin. Para instalarlos de forma local, ejecuta npm install desde el directorio functions:

$ npm install

Ahora, veamos el archivo index.js:

index.js

/**
 * Copyright 2021 Google Inc. All Rights Reserved.
 * ...
 */
// TODO(DEVELOPER): Import the Cloud Functions for Firebase and Firebase Admin modules here. Also import the Actions SDK here.
// TODO(DEVELOPER): Write the getWordDetailsFromDictionaryAPI function here.
// TODO(DEVELOPER): Write the createSpellingPracticeWord function here.
// TODO(DEVELOPER): Write the app Handle getSpellingWordList function here.
// TODO(DEVELOPER): Write the app Handle getSpellingWord function here.
// TODO(DEVELOPER): Write the app Handle repeatSpellingWord function here.
// TODO(DEVELOPER): Write the app Handle definitionOfSpellingWord function here.
// TODO(DEVELOPER): Write the app Handle verifySpellingWord function here.

Primero, importarás los módulos obligatorios y, luego, escribirás cuatro funciones en lugar de los TODO. Continúa con el siguiente paso del codelab para importar los módulos.

6. Importa los módulos requeridos

Este codelab requiere tres módulos.

  • El módulo firebase-functions nos permite escribir los activadores para nuestras Cloud Functions.
  • El módulo firebase-admin nos permite usar la plataforma de Firebase en un servidor con acceso de administrador, por ejemplo, para escribir en Cloud Firestore.
  • La biblioteca de entrega de Node.js del SDK de Actions completa los controladores del SDK de Actions para Asistente de Google.
  1. Para instalar el SDK de Actions, ejecuta el siguiente comando npm:
$ npm install @assistant/conversation
  1. En el archivo index.js, reemplaza el primer comentario TODO por lo siguiente.

Estos cambios importan cada uno de los módulos requeridos.

Además, el SDK de Firebase Admin se puede configurar automáticamente cuando se implementa en un entorno de Cloud Functions o en otro contenedor de Google Cloud. Esto es lo que sucede cuando llamamos a admin.initializeApp(); en los cambios que se muestran a continuación.

index.js

/**
 * Copyright 2021 Google Inc. All Rights Reserved.
 * ...
 */

// Import the Actions SDK
const {conversation} = require('@assistant/conversation');
const https = require('https');
const app = conversation();
const cors = require('cors')({origin: true});

// Import the Firebase SDK for Cloud Functions.
const functions = require('firebase-functions');
// Import and initialize the Firebase Admin SDK.
const admin = require('firebase-admin');
admin.initializeApp();
// To access Cloud Firestore
const db = admin.firestore();
// TODO(DEVELOPER): Write the getWordDetailsFromDictionaryAPI function here.
// TODO(DEVELOPER): Write the createSpellingPracticeWord function here.
// TODO(DEVELOPER): Write the shuffleWordList function here.
// TODO(DEVELOPER): Write the app Handle getSpellingWordList function here.
// TODO(DEVELOPER): Write the app Handle getSpellingWord function here.
// TODO(DEVELOPER): Write the app Handle repeatSpellingWord function here.
// TODO(DEVELOPER): Write the app Handle definitionOfSpellingWord function here.
// TODO(DEVELOPER): Write the app Handle verifySpellingWord function here.

Ahora agreguemos lógica empresarial con funciones para admitir las Acciones de Asistente.

7. Crear funciones

Obtén las definiciones de las palabras y escríbelas en Cloud Firestore

Usarás la API pública de dictionaryapi.dev para obtener las definiciones de las palabras.

En el archivo index.js, reemplaza el comentario TODO de getWordDetailsFromDictionaryAPI por lo siguiente:

index.js

// Retrieves word definition and audio pronunciation from api.dictionaryapi.dev service
// Function uses service provided by https://dictionaryapi.dev/
async function getWordDetailsFromDictionaryAPI(word) {
  let responseData="";
  let req = https.request({
    host: 'api.dictionaryapi.dev',
    port: 443,
    path:'/api/v2/entries/en/' + word,
    method:'GET'
  }, (res) => {
    res.setEncoding('utf8');
    res.on('data', d => {
        responseData+=d;
    })
    res.on('end',function(){
        let object = JSON.parse(responseData)
        const wordListRef = db.collection('wordlist');
        wordListRef.doc(object[0].word).set(
          object[0]
        );
       return responseData;
     });
  });
  req.end();
}

Agrega un activador de Cloud Firestore

A continuación, crearás una Cloud Function que se active cada vez que se cree un documento nuevo en Cloud Firestore. Llamará a la API de dictionaryapi.dev para obtener definiciones de palabras a través de la función getWordDetailsFromDictionaryAPI que escribimos anteriormente.

En el archivo index.js, reemplaza el comentario TODO de createSpellingPracticeWord por lo siguiente:

index.js

// Activador de Firestore que recupera definiciones de palabras a través de getWordDetailsFromDictionaryAPI para cada documento nuevo de Firestore

exports.createSpellingPracticeWord = functions.firestore
  .document('wordlist/{word}')
  .onCreate((snap, context) => {
    const newValue = snap.data();
    const word = newValue.word;
    getWordDetailsFromDictionaryAPI(word);
});

Obtén una lista de palabras para el juego

Puedes escribir una Cloud Function que recupere una lista de palabras para practicar la ortografía de Cloud Firestore para el Asistente. Para ello, usamos el controlador de la app.

En el archivo index.js, reemplaza el comentario TODO de getSpellingWordList por lo siguiente.

Agregar esta función al objeto especial app.handle es una forma de hacer que la función sea accesible desde el Asistente.

index.js

// Store the list of spelling words in Assistant session
app.handle('getSpellingWordList', conv => {
  const wordListRef = db.collection('wordlist').limit(50);
  const snapshot = wordListRef;

  if (snapshot.empty) {
    console.log('No matching documents.');
    return;
  }
  VocabularyList = []

  return snapshot.get().then(snapshot => {
    snapshot.forEach(doc => {
      if (doc.data().word) {
          let definition = 'unknown';
          let audio = 'unknown';
          try {
            if(doc.data().hasOwnProperty('meanings')) {
              if(doc.data().meanings[0].hasOwnProperty('definitions')) {
                  definition = doc.data().meanings[0].definitions[0].definition;
              }
            }
            if(doc.data().hasOwnProperty('phonetics')) {
              if(doc.data().phonetics.length > 0)
                audio = doc.data().phonetics[0].audio;
            }
          } catch (error) {
            console.log(error);
          }

          let obj = {
            word: doc.data().word,
            answer: doc.data().word.split("").join(" "),
            definition: definition,
            audio: audio
          }
          VocabularyList.push(obj);
      }
      // Shuffle the array
      let currentIndex = VocabularyList.length, temporaryValue, randomIndex;
      while (0 !== currentIndex) {
        randomIndex = Math.floor(Math.random() * currentIndex);
        currentIndex -= 1;
        temporaryValue = VocabularyList[currentIndex];
        VocabularyList[currentIndex] = VocabularyList[randomIndex];
        VocabularyList[randomIndex] = temporaryValue;
      }
      conv.session.params.vocabWord = VocabularyList;
      conv.session.params.vocabWordIndex = 0;
    });
  });
})

Obtén una palabra de la sesión de Asistente

Puedes escribir una Cloud Function que devuelva la siguiente palabra de ortografía de la lista de palabras.

En el archivo index.js, reemplaza el comentario TODO de getSpellingWord por lo siguiente:

index.js

// Returns a spelling practice word to Google Assistant and uses Speech Synthesis Markup Language (SSML) to format the response
app.handle('getSpellingWord',  conv => {
  if (!conv.session.params.vocabWord.empty) {
    conv.session.params.vocabWordIndex+=1;
    const ssml = '<speak>' +
    '<audio src="'+ conv.session.params.vocabWord[conv.session.params.vocabWordIndex].audio +'">Use phonetics to spell the word.</audio> ' +
    '</speak>';
    conv.add(ssml);
  }
  else
    conv.add('Great job! You completed the Spelling practice');
});

Habilita el juego para que repita la palabra

Puedes escribir una Cloud Function que repita la palabra actual del juego.

En el archivo index.js, reemplaza el comentario TODO de repeatSpellingWord por lo siguiente:

index.js

// Returns current spelling word
app.handle('repeatSpellingWord',  conv => {
  if (!conv.session.params.vocabWord.empty) {
    const ssml = '<speak>' +
    '<audio src="'+ conv.session.params.vocabWord[conv.session.params.vocabWordIndex].audio +'">Use phonetics to spell the word. </audio> ' +
    '</speak>';
    conv.add(ssml);
  }
  else
    conv.add('Great job! You completed the Spelling practice');
});

Obtén la definición de la palabra

Puedes escribir una Cloud Function que proporcione la definición de la palabra actual para el juego.

En el archivo index.js, reemplaza el comentario TODO de definitionOfSpellingWord por lo siguiente:

index.js

// Returns spelling word definition from Assistant session parameter
app.handle('definitionOfSpellingWord',  conv => {
  conv.add( 'It means ' + conv.session.params.vocabWord[conv.session.params.vocabWordIndex].definition);
});

Verifica la respuesta de ortografía del usuario

Puedes escribir una Cloud Function que verifique la respuesta del usuario sobre cómo deletrear la palabra actual del juego.

En el archivo index.js, reemplaza el comentario TODO de verifySpellingWord por lo siguiente:

index.js

// Verifies user spelling response
app.handle('verifySpellingWord', conv => {
  try {
    userResponse = conv.intent.params.userresponse.resolved.join("");
    if (userResponse.toLowerCase() === conv.session.params.vocabWord[conv.session.params.vocabWordIndex].word.toLowerCase()) {
      conv.add('You are correct. Say next to continue.');
    }
    else {
      conv.add('Sorry, wrong answer. The correct answer is ' + conv.session.params.vocabWord[conv.session.params.vocabWordIndex].answer + ' . Say next to continue.');
    }
  } catch (error) {
    conv.add('Sorry. I did not understand your response' );
  }
});
exports.ActionsOnGoogleFulfillment = functions.https.onRequest(app);

Implementa todas tus funciones

Tus Cloud Functions solo estarán activas después de que las implementes en Firebase.

Desde la raíz del directorio spelling-functions-start, ejecuta el siguiente comando:

$ firebase deploy --only functions

Este es el resultado que debería ver en la consola:

i  deploying functions
i  functions: ensuring necessary APIs are enabled...
⚠  functions: missing necessary APIs. Enabling now...
i  env: ensuring necessary APIs are enabled...
⚠  env: missing necessary APIs. Enabling now...
i  functions: waiting for APIs to activate...
i  env: waiting for APIs to activate...
✔  env: all necessary APIs are enabled
✔  functions: all necessary APIs are enabled
i  functions: preparing functions directory for uploading...
i  functions: packaged functions (X.XX KB) for uploading
✔  functions: functions folder uploaded successfully
i  starting release process (may take several minutes)...
i  functions: creating function createSpellingPracticeWord(us-central1)...
✔  functions[createSpellingPracticeWord(us-central1)]: Successful create operation.
i  functions: creating function ActionsOnGoogleFulfillment(us-central1)...
✔  functions[ActionsOnGoogleFulfillment(us-central1)]: Successful create operation.

✔  Deploy complete!
Project Console: https://console.firebase.google.com/project/spelling-practice-1234/overview

Toma nota de la URL del extremo HTTP de la función ActionsOnGoogleFulfillment para usarla más adelante. Para obtener el extremo, abre Firebase console y, luego, haz clic en el proyecto spelling-practice. Abre el panel de Functions para ver el extremo de las funciones.

332cb0437411a242.png

Completaste la adición de todas las funciones necesarias. Ahora, pasemos a configurar Cloud Firestore.

8. Habilita Cloud Firestore

Deberás habilitar Cloud Firestore.

En la sección Compilación de Firebase console, haz clic en Firestore. Luego, haz clic en Crear base de datos.

5c0b4abf4410ffcf.png

El acceso a los datos en Cloud Firestore se controla con reglas de seguridad. Primero, debes establecer algunas reglas básicas sobre los datos para comenzar. Haz clic en Firestore y, luego, en la pestaña Rules de Firebase console, agrega las siguientes reglas y, luego, haz clic en Publish.

Las siguientes reglas restringen el acceso a los datos a los usuarios que accedieron a su cuenta, lo que impide que los usuarios no autenticados lean o escriban datos.

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      //
      // WARNING: These rules are insecure! We will replace them with
      // more secure rules later in the codelab
      //
      allow read, write: if request.auth != null;
    }
  }
}

9. Agrega datos de palabras de ortografía a Cloud Firestore

En este paso, escribirás datos de palabras de ortografía en Cloud Firestore para poder generar una lista de palabras para el Asistente (y el juego).

Los datos de Cloud Firestore se estructuran en colecciones, documentos, campos y subcolecciones. Cada palabra del juego se almacenará como su propio documento en una colección de nivel superior llamada wordlist. Para cada documento nuevo en la colección de Firestore, se activará la función createSpellingPracticeWord para obtener los detalles de la palabra del servicio de la API de Dictionary.

Crea una colección de Cloud Firestore

  1. En Firebase console, navega a la sección Cloud Firestore.
  2. Haz clic en + Iniciar colección.
  3. En el cuadro de texto ID de colección, ingresa wordlist y, luego, haz clic en Siguiente.

1b4ccadb90f52f02.png

A continuación, crearemos un documento para la palabra acuerdo.

  1. En el cuadro de texto ID del documento, ingresa agreement.
  2. En el cuadro de texto Campo, ingresa word y, en el cuadro de texto Valor, ingresa agreement.
  3. Haz clic en Guardar.

379037e011e8511e.png

Cuando agregas este documento a Cloud Firestore, se activa la función createSpellingPracticeWord para recuperar los detalles de la definición de la palabra. Agrega más palabras (por ejemplo, asombro, automóvil, verdadero, decir, mejor, viaje diario, etc.) creando un documento nuevo para cada palabra.

10. Cómo configurar Asistente de Google

En las siguientes secciones, se describe cómo configurar tu entorno de desarrollo del Asistente de Google y crear tu proyecto de Actions.

Verifique su configuración de permisos de Google

Para probar la acción que compiles en este codelab, deberás habilitar los permisos necesarios a fin de que el simulador pueda acceder a ella. Para habilitar los permisos, sigue estos pasos:

  1. Ve a la página Controles de actividad.
  2. Si aún no lo hiciste, accede con tu Cuenta de Google.
  3. Habilita los siguientes permisos:
  • Actividad web y de aplicaciones
  • En Actividad web y de aplicaciones, selecciona la casilla de verificación junto a Incluir el historial de Chrome y la actividad en los sitios, apps y dispositivos que usan los servicios de Google.

c988e1e639e6d6e1.png

Cree un proyecto de Actions

El proyecto de Actions es un contenedor para tu Action. Para crear tu proyecto de Actions para este codelab, sigue estos pasos:

  1. Abre la Consola de Actions.
  2. Haz clic en Proyecto nuevo.
  3. Aceptar las Condiciones del servicio

b174d45710b8086b.png

  1. Escribe o selecciona spelling-practice-codelab, que creaste con Firebase console. El nombre es para tu referencia interna; más adelante podrás establecer un nombre externo para el proyecto.

a2951de5d2001fac.png

  1. Haz clic en Importar proyecto.
  2. En la pantalla What kind of Action do you want to build?, selecciona la tarjeta Custom.
  3. Haz clic en Siguiente.
  4. Selecciona la tarjeta Blank project.
  5. Haz clic en Start building.
  6. Ingresa Práctica de ortografía para el nombre visible y haz clic en Guardar.

Los usuarios inician la conversación con tu acción a través de una invocación. Por ejemplo, los usuarios pueden invocar tu Acción con una frase como "Hey Google, habla con Práctica de ortografía", en la que Práctica de ortografía es el nombre visible.

Tu acción debe incluir un nombre visible si quieres implementarla en producción. Sin embargo, para probar la acción, no es necesario que definas ese nombre. En su lugar, puedes usar la frase "Habla con la app de prueba" en el simulador para invocar la acción.

Configurar entrega

Debes conectar al asistente los controladores de eventos de las Cloud Functions que escribiste y que implementaste anteriormente en este codelab.

Para configurar la entrega, sigue estos pasos:

  1. Haz clic en Webhook en el panel de navegación lateral.
  2. Selecciona Extremo HTTPS como opción de cumplimiento:

d523bf003e96e66f.png

  1. Ingresa la URL del extremo de tu función en el cuadro de texto Extremo HTTPS y, luego, haz clic en Guardar.

be53e2cd0d914d54.png

En la siguiente sección, personalizarás el mensaje de tu invocación principal en la Consola de Actions.

Cómo configurar la invocación principal

Debes editar la invocación principal para definir lo que ocurre después de que un usuario invoca tu acción.

Según la configuración predeterminada, Actions Builder proporciona un mensaje genérico cuando se activa tu invocación: "Start building your Action by defining main invocation" (Comienza a compilar tu acción definiendo una invocación principal).

Para modificar el mensaje que muestra tu acción al usuario cuando este la invoca, sigue estos pasos:

  1. Haz clic en Main invocation, en el menú de navegación.

9ff088c04c995cde.png

  1. Marca Call your webhook y agrega el nombre del controlador de eventos getSpellingWordList en el cuadro de texto.
  2. En el editor de código, reemplaza el texto del campo speech por el siguiente mensaje de bienvenida: Welcome to Spelling Practice

Nota: Puedes usar el formato YAML o JSON para editar los mensajes.

  1. Haz clic en Guardar.

Cómo probar la invocación principal en el simulador

La Consola de Actions proporciona una herramienta web llamada simulador para probar tu acción. La interfaz simula dispositivos de hardware y su configuración para que puedas conversar con la acción, como si se estuviera ejecutando en una pantalla inteligente, un teléfono, una bocina o KaiOS.

Para probar la invocación principal de la acción en el simulador, sigue estos pasos:

  1. En la barra de navegación superior, haz clic en Test para ir al simulador.
  2. Para invocar la acción en el simulador, escribe Talk to Spelling Practice en el campo de entrada ubicado en la parte superior izquierda y, luego, presiona Intro en el teclado.

651fc8da1ac9aa0a.png

Cuando activas la invocación principal de la acción, Asistente responde con tu mensaje de bienvenida personalizado. En este punto, la conversación termina cuando Asistente responde con un saludo.

Cómo ver registros de eventos

En la pestaña Test, en el panel de la derecha, aparecen los registros de eventos, que muestran el historial de conversaciones como registros de eventos. Cada registro de eventos muestra los eventos que se ejecutan durante ese turno de la conversación. Para ver el registro de eventos, haz clic en el ícono gris que aparece antes del evento.

Actualmente, tu acción tiene un registro de eventos que muestra la entrada del usuario ("Habla con Spelling Practice") y la respuesta de la acción. En la siguiente captura de pantalla, se muestra el registro de eventos de tu acción:

a6fb192f94426824.png

11. Crea la conversación para la práctica de ortografía

Ahora que definiste lo que ocurre cuando un usuario invoca tu acción, puedes compilar el resto de la conversación. Práctica de ortografía tiene cuatro escenas, y debes activar cada una para poder ejecutarla. La manera más común de activar una escena es configurar la acción de modo que, cuando un usuario asocia un intent de usuario dentro de una escena, ese intent active la transición a otra escena para ejecutarla.

Cómo pasar de la invocación principal a la escena de inicio

En esta sección, crearás una escena nueva llamada Start, que envía un mensaje al usuario para preguntarle si quiere comenzar a jugar Práctica de ortografía. También agregarás una transición desde la invocación principal hacia la nueva escena Start.

Para crear esta escena y agregarle una transición, sigue estos pasos:

  1. En el menú de navegación superior, haz clic en Develop. Luego, haz clic en Main invocation, en el menú de navegación izquierdo.
  2. En la sección Transition, a la derecha, haz clic en el menú desplegable y, luego, escribe Start en el campo de texto.

dd4f1807a57f794d.png

  1. Haz clic en Agregar. Esto crea una escena llamada Start y le indica a la acción que debe realizar la transición a la escena Start después de que la acción le muestre el mensaje de bienvenida al usuario.
  2. En el menú de navegación izquierdo, haz clic en Scenes para ver la lista de escenas.
  3. En Scenes, haz clic en Start para ver la escena Start.
  4. Haz clic en + en la sección On enter de la escena Start.
  5. Selecciona Send prompts.
  6. Reemplaza la oración del campo speech (Enter the response that users will see or hear...) con una pregunta para el usuario: Use phonetic alphabet to spell the word. For example alpha for a, bravo for b, charlie for c etc. Do you want to continue?

Los chips de sugerencias ofrecen sugerencias en las que el usuario puede hacer clic y que tu acción procesa como entradas del usuario. En esta sección, agregarás chips de sugerencias que aparecen debajo del mensaje que acabas de configurar (Do you want to play

Spelling Practice

?) para ayudar a los usuarios en dispositivos con pantallas.

Para agregar chips de sugerencias al mensaje de la escena Start, sigue estos pasos:

  1. En la escena Start, haz clic en las sugerencias que se muestran debajo del editor de código. Esta acción agrega un solo chip de sugerencias.
  2. En el campo title, reemplaza Suggested Response por 'Yes'.
  3. Usa el mismo formato para agregar de forma manual chips de sugerencias denominados 'No' y 'Help with Phonetics'. El código debería verse como este fragmento:
  4. Haz clic en Guardar.

5ff2ecdc56801b91.png

Prueba tu acción en el simulador

En este punto, tu acción debería pasar de la invocación principal a la escena Start y preguntar al usuario si quiere continuar. Los chips de sugerencias también deberían aparecer en la pantalla simulada.

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

  1. En la barra de navegación, haz clic en Test para ir al simulador.
  2. Para probar la acción en el simulador, escribe Talk to Spelling Practice en el campo Input.
  3. Presiona Intro. Tu acción debería responder con el mensaje Main invocation y el mensaje de la escena Start agregado: "Welcome to Spelling Practice. Usa el alfabeto fonético para deletrear la palabra. Por ejemplo, alfa para A, bravo para B, charlie para C, etcétera. ¿Deseas continuar?".

En la siguiente captura de pantalla, se muestra esta interacción:

338c9570b02a618e.png

  1. Haz clic en el chip de sugerencias Yes, No o Help with Phonetics para responder el mensaje. (También puedes decir "Sí" o "No" o "Ayuda con la fonética", o bien escribir Yes o No o Help with Phonetics en el campo Input).

Cuando respondes el mensaje, tu acción responde con un mensaje en el que se indica que no comprende tu entrada: "Sorry, I didn't catch that. Can you try again?" Dado que aún no configuraste tu acción para que comprenda y responda a "Yes" o "No", la acción asocia tu entrada a un intent NO_MATCH.

De forma predeterminada, el intent del sistema NO_MATCH proporciona respuestas genéricas, pero puedes personalizarlas para indicar al usuario que no comprendiste su entrada. Asistente finalizará la conversación del usuario con tu acción cuando no pueda asociar la entrada del usuario tres veces.

Cómo agregar intents de negación y fonéticos

Ahora que el usuario puede responder a la pregunta que le presenta tu acción, puedes configurarla para que comprenda las respuestas del usuario ("Yes", "No" o "Help with Phonetics"). En las siguientes secciones, crearás intents del usuario que coincidan cuando el usuario diga "Yes" o "No" o "Ayuda con fonética", y los agregarás a la escena Start. Usaremos el intent del sistema yes y crearemos otros intents.

Crea el intent no

Ahora, debes crear el intent no para comprender cuando el usuario no quiera jugar y responderle de forma adecuada. Para crear este intent, sigue estos pasos:

  1. En el menú de navegación, haz clic en Develop.
  2. Haz clic en Intents personalizados en la navegación para abrir la lista de intents.
  3. Al final de la lista, haz clic en el signo + (más). Asigna el nombre no al intent nuevo y presiona Intro.
  4. Haz clic en no para abrir la página del intent no.
  5. En la sección Add training phrases, haz clic en el cuadro de texto Enter Phrase e ingresa las siguientes frases:
  • No
  • N
  • I don't want
  • nope

98b0c9a7b67ea9b9.png

  1. Haz clic en Guardar.

Agrega el intent no a la escena Start

Ahora, la acción puede comprender si el usuario dice "no" o algo parecido a "no", como "nope". Debes agregar el intent de usuario no a la escena Start porque el usuario responde al mensaje Start ("Welcome to Spelling Practice. Usa el alfabeto fonético para deletrear la palabra. Por ejemplo, alfa para A, bravo para B, charlie para C, etcétera. ¿Deseas continuar?").

Para agregar este intent a la escena Start, sigue estos pasos:

  1. En el menú de navegación, haz clic en la escena Start.
  2. Haz clic en el signo + (más) en la escena Start junto a User intent handling.
  3. En la sección Intent, selecciona no en el menú desplegable.

51f752e78c8b4942.png

  1. Haz clic en Send prompts y actualiza el campo speech con este texto: Good Bye.

El código del editor debería verse como el siguiente fragmento:

candidates:
  - first_simple:
      variants:
        - speech: >-
             Goodbye.
  1. En la sección Transition, selecciona End conversation en el menú desplegable.
  2. Haz clic en Guardar.

Cómo probar el intent no en el simulador

Ahora, tu acción comprende si el usuario no quiere jugar y muestra una respuesta adecuada.

Para probar este intent en el simulador, sigue estos pasos:

  1. En la barra de navegación, haz clic en Test.
  2. Escribe Talk to Spelling Practice en el campo Input y presiona Enter.
  3. Escribe No en el campo Input y presiona Intro. También puedes hacer clic en el chip de sugerencias No.

7727a456b522f31b.png

Agrega el intent del sistema YES a la escena Start

Ahora, agregaremos el intent SYSTEM "YES" a la escena Start, dado que el usuario responde que sí al mensaje Start ("Welcome to Spelling Practice. Usa el alfabeto fonético para deletrear la palabra. Por ejemplo, alfa para A, bravo para B, charlie para C, etcétera. ¿Deseas continuar?").

Para agregar este intent a la escena Start, sigue estos pasos:

  1. En el menú de navegación, haz clic en la escena Start.
  2. Haz clic en el signo + (más) en la escena Start junto a User intent handling.
  3. En Todos los intents del sistema, selecciona en el menú desplegable de intents.

f6cbe789cde49e8f.png

  1. Haz clic en Call your webhook y actualiza el cuadro de texto event handler con la función que creaste anteriormente: getSpellingWordList
  2. En la sección Transition, haz clic en el menú desplegable y selecciona End conversation.
  3. Haz clic en Guardar.

Cómo probar el intent YES en el simulador

Ahora, tu acción comprende si el usuario quiere jugar y muestra una respuesta adecuada.

Para probar este intent en el simulador, sigue estos pasos:

  1. En la barra de navegación, haz clic en Test.
  2. Para probar la acción en el simulador, escribe Talk to Spelling Practice 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.

Tu acción recupera una lista de todas las palabras de práctica de ortografía y las almacena en la sesión. Luego, la acción finaliza la sesión porque seleccionaste la transición End conversation para el intent YES.

Crea el intent Phonetics

Para crear el intent Phonetics, sigue estos pasos:

  1. En el menú de navegación, haz clic en Develop.
  2. Haz clic en Intents personalizados en la navegación para abrir la lista de intents.
  3. Al final de la lista, haz clic en el signo + (más). Asigna el nombre phonetics al intent nuevo y presiona Enter.
  4. Haz clic en el intent phonetics para abrir la página del intent phonetics.
  5. En la sección Add training phrases, haz clic en el cuadro de texto Enter Phrase y, luego, ingresa las siguientes frases:
  • how do I spell words
  • phonetics
  • help me with phonetics
  • phonetic alphabet

1455bdfca8dae46.png

  1. Haz clic en Guardar.

Agrega el intent phonetics a la escena Start

Ahora, la acción puede comprender cuándo un usuario expresa un intent de "fonética". Puedes agregar el intent de usuario phonetics a la escena Start, dado que el usuario responde al mensaje Start ("Welcome to Spelling Practice. Usa el alfabeto fonético para deletrear la palabra. Por ejemplo, alfa para A, bravo para B, charlie para C, etcétera. ¿Deseas continuar?").

Para agregar este intent a la escena Start, sigue estos pasos:

  1. En el menú de navegación, haz clic en la escena Start.
  2. Haz clic en el signo + (más) en la escena Start junto a User intent handling.
  3. En el panel desplegable del intent, selecciona phonetics.

67ee2e08000b2aee.png

  1. En la sección Transition, haz clic en el panel desplegable y selecciona End conversation.
  2. Haz clic en Guardar.

Transición de la escena de inicio a la escena de ortografía

En esta sección, crearás una escena nueva llamada Spelling, que envía un mensaje al usuario para que deletree la palabra con el alfabeto fonético.

Para crear esta escena y agregarle una transición, sigue estos pasos:

  1. En el menú de navegación superior, haz clic en Develop. Luego, haz clic en la escena Start en el menú de navegación izquierdo.
  2. En la sección User intent handling, haz clic en when actions.intent.YES is matched y, a la derecha, en la sección transition, haz clic en el menú desplegable y escribe Spelling en el campo de texto.
  3. Haz clic en Agregar. Esto crea una escena llamada Spelling y le indica a la acción que debe realizar la transición a la escena Spelling después de la coincidencia con el intent YES.
  4. Expande Scenes en el menú de navegación izquierdo para ver la lista de escenas.
  5. En Scenes, haz clic en Spelling para ver la escena Spelling.
  6. Haz clic en + en la sección On enter de la escena Spelling.
  7. Haz clic en Llama a tu webhook y, luego, ingresa getSpellingWord en el cuadro de texto del controlador de eventos.
  8. Selecciona Send prompts.
  9. Reemplaza la oración del campo speech (Enter the response that users will see or hear...) por {}. El webhook completará la instrucción real.

Los chips de sugerencias ofrecen sugerencias en las que el usuario puede hacer clic y que tu acción procesa como entradas del usuario.

Para agregar chips de sugerencias al mensaje de la escena Spelling, sigue estos pasos:

  1. En la escena Spelling, haz clic en las sugerencias que se muestran debajo del editor de código. Esta acción agrega tres chips de sugerencias.
  2. En el campo title, reemplaza Suggested Response por 'Repeat'.
  3. Usa el mismo formato para agregar de forma manual un chip de sugerencias denominado 'Skip'.
  4. Usa el mismo formato para agregar de forma manual un chip de sugerencias denominado 'Quit'. El código debería verse como este fragmento:
  5. Haz clic en Guardar.
suggestions:
      - title: 'Repeat'
      - title: 'Skip'
      - title: 'Quit'

e1d437f714ea1539.png

Crea el intent Repeat

Para crear el intent repeat, sigue estos pasos:

  1. En el menú de navegación, haz clic en Develop.
  2. Haz clic en Intents personalizados en la navegación para abrir la lista de intents.
  3. Al final de la lista, haz clic en el signo + (más). Asigna el nombre repeat al intent nuevo y presiona Enter.
  4. Haz clic en el intent repeat para abrir la página del intent definition.
  5. En la sección Add training phrases, haz clic en el cuadro de texto Enter Phrase y, luego, ingresa las siguientes frases:
  • one more time please
  • say the word again
  • repeat the word
  • tell me again
  • repeat

e61f0b9f80510bc9.png

  1. Haz clic en Guardar.

Agrega el intent repeat a la escena Spelling

Ahora, la acción puede comprender cuándo un usuario expresa un intent de "repetir". Puedes agregar el intent de usuario repeat a la escena Spelling, dado que el usuario responde al mensaje Spelling ("Spell the word using phonetic alphabet").

Para agregar este intent a la escena Spelling, sigue estos pasos:

  1. En el panel de navegación, haz clic en la escena Spelling.
  2. Haz clic en el signo + (más) en la escena Spelling junto a User intent handling.
  3. En el menú desplegable del intent, selecciona repeat.

5cfd623b25bedbed.png

  1. Marca la casilla de verificación Llama a tu webhook y, luego, ingresa repeatSpellingWord en el cuadro de texto del controlador de eventos para obtener la definición de la palabra.
  2. Marca Send prompts.
  3. Reemplaza la oración en el campo speech (Enter the response that users will see or hear...) por "'". El webhook completará la instrucción real.

Se agregaron chips de sugerencias a "Cuando se encuentra una repetición"

  1. En "When Repeat is matched", en User Intent handling, haz clic en sugerencias debajo del editor de código. Esta acción agrega tres chips de sugerencias.
  2. En el campo title, reemplaza Suggested Response por 'Skip'.
  3. Usa el mismo formato para agregar de forma manual un chip de sugerencias denominado 'Quit'.El código debería verse como este fragmento:
suggestions:
      - title: 'Skip'
      - title: 'Quit'

ab40e4b0c432b97c.png

  1. Haz clic en Guardar.

Crea el intent definition

Para crear el intent definition, sigue estos pasos:

  1. En el menú de navegación, haz clic en Develop.
  2. Haz clic en Intents personalizados en la navegación para abrir la lista de intents.
  3. Al final de la lista, haz clic en el signo + (más). Asigna el nombre definition al intent nuevo y presiona Enter.
  4. Haz clic en el intent definition para abrir la página del intent definition.
  5. En la sección Add training phrases, haz clic en el cuadro de texto Enter Phrase y, luego, ingresa las siguientes frases:
  • I would like to know the definition
  • tell me the definition
  • what does it mean
  • meaning
  • definition
  • what is the definition?

c1b88a9c0b1ac082.png

  1. Haz clic en Guardar.

Agrega el intent definition a la escena Spelling

Ahora, la acción puede comprender cuándo un usuario expresa un intent de "definición". Puedes agregar el intent de usuario definition a la escena Spelling, dado que el usuario responde al mensaje Spelling ("Spell the word using phonetic alphabet").

Para agregar este intent a la escena Spelling, sigue estos pasos:

  1. En el panel de navegación, haz clic en la escena Spelling.
  2. Haz clic en el signo + (más) en la escena Spelling junto a User intent handling.
  3. En el menú desplegable del intent, selecciona definition.

646bdcac3ad3eb0c.png

  1. Marca la casilla de verificación Llama a tu webhook y, luego, ingresa definitionOfSpellingWord en el cuadro de texto del controlador de eventos para obtener la definición de la palabra.
  2. Marca Send prompts.
  3. Reemplaza la oración del campo speech (Enter the response that users will see or hear...) por “"”. El webhook completará la instrucción real.

Agrega chips de sugerencias a la respuesta del webhook

  1. En la escena Start, haz clic en sugerencias debajo del editor de código. Esta acción agrega tres chips de sugerencias.
  2. En el campo title, reemplaza Suggested Response por 'Skip'.
  3. Usa el mismo formato para agregar de forma manual un chip de sugerencias denominado 'Quit'.El código debería verse como este fragmento:
suggestions:
      - title: 'Skip'
      - title: 'Quit'

25227545839d933f.png

  1. Haz clic en Guardar.

Crea el intent skip

Para crear el intent skip, sigue estos pasos:

  1. En el menú de navegación, haz clic en Develop.
  2. Haz clic en Intents en el panel de navegación para abrir la lista de intents.
  3. Al final de la lista, haz clic en el signo + (más). Asigna el nombre skip al intent nuevo y presiona Enter.
  4. Haz clic en el intent skip para abrir la página del intent skip.
  5. En la sección Add training phrases, haz clic en el cuadro de texto Enter Phrase y, luego, ingresa las siguientes frases:
  • next word
  • go next
  • next
  • skip
  • skip word

d1c4908a3d7882f8.png

  1. Haz clic en Guardar.

Agrega el intent Skip a la escena Spelling

Ahora, la acción puede comprender cuándo un usuario expresa un intent de "omitir". Puedes agregar el intent de usuario skip a la escena Spelling, dado que el usuario responde al mensaje Spelling ("Spell the word using phonetic alphabet").

Para agregar este intent a la escena Spelling, sigue estos pasos:

  1. En el panel de navegación, haz clic en la escena Spelling.
  2. Haz clic en el signo + (más) en la escena Spelling junto a User intent handling.
  3. En el panel desplegable del intent, selecciona skip.

5465f97542217964.png

  1. En la sección Transition, a la derecha, haz clic en el menú desplegable y selecciona Spelling .

c8072485ca82bd3f.png

  1. Haz clic en Guardar.

Crea el intent quit

Para crear el intent Quit, sigue estos pasos:

  1. En el menú de navegación, haz clic en Develop.
  2. Haz clic en Intents en el panel de navegación para abrir la lista de intents.
  3. Al final de la lista, haz clic en el signo + (más). Asigna el nombre Quit al intent nuevo y presiona Enter.
  4. Haz clic en el intent Quit para abrir la página del intent definición.
  5. En la sección Add training phrases, haz clic en el cuadro de texto Enter Phrase y, luego, ingresa las siguientes frases:
  • I quit
  • Goodbye
  • Cancel
  • Exit
  • Quit

9916f77b8766541e.png

  1. Haz clic en Guardar.

Agrega el intent Quit a la escena Spelling

Ahora, la acción puede comprender cuándo un usuario expresa un intent de "salir". Puedes agregar el intent de usuario quit a la escena Spelling, dado que el usuario responde al mensaje Spelling ("Spell the word using phonetic alphabet").

Para agregar este intent a la escena Spelling, sigue estos pasos:

  1. En el panel de navegación, haz clic en la escena Spelling.
  2. Haz clic en el signo + (más) en la escena Spelling junto a User intent handling.
  3. En el panel desplegable del intent, selecciona quit.

5f62fb18a3653d66.png

  1. En la sección Transition, a la derecha, haz clic en el menú desplegable y selecciona End conversation . 1ffbe35a7bbbb4b0.png
  2. Haz clic en Guardar.

Crea el tipo phonetic_alphabet

En esta sección, crearás un nuevo tipo llamado phonetic_alphabet, que especifica las opciones del alfabeto fonético que los usuarios pueden elegir para deletrear la palabra. 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 phonetic_alphabet a un espacio para especificar que deseas obtener la respuesta del usuario.

Para crear el tipo phonetic_alphabet, sigue estos pasos:

  1. En el menú de navegación, haz clic en Develop.
  2. Haz clic en el signo + (signo más) en Types.
  3. Escribe phonetic_alphabet y presiona Enter.
  4. Haz clic en phonetic_alphabet para abrir las opciones.
  5. En la sección ¿Qué tipo de valores admitirá este tipo?, selecciona la opción Palabras y sinónimos.
  6. Ingresa las siguientes entradas y los valores correspondientes en la sección Add entries:

a

alfa, apple, amsterdam

b

bravo, butter, baltimore

c

charlie, cat, casablanca

d

delta, dog, denmark

e

echo, edward, edison

f

foxtrot, fox, florida

g

golf, george, gallipoli

h

hotel, harry, havana

i

india, ink, italia

j

juliette, johnny, jerusalem

k

kilo, king, kilogramme

l

lima, love, london

m

mike, money, madagascar

n

noviembre, Nueva York, Nancy

o

oscar, orange, oslo

p

papa, paris, peter

q

quebec, queen

r

romeo, roma, robert

s

sierra, sugar, santiago

t

tango, tommy, tripoli

u

uniforme, paraguas, tío

v

Víctor, vinagre, Valencia

w

whiskey, william, washington

x

Rayos X

y

yankee, yellow, yorker

z

zulu, zebra, zurich

La tabla de pares clave-valor debería tener el siguiente aspecto:

5b5a5cd9fa557e1b.png

  1. Haz clic en Guardar.

Configura el relleno de espacios

A continuación, debes configurar el relleno de espacios en la escena Spelling. Para configurar la lógica de relleno de espacios, haz lo siguiente:

  1. En el panel de navegación, haz clic en la escena Spelling.
  2. Haz clic en el signo + (más) en la escena Spelling para Slot filling.
  3. En el campo Enter slot name, agrega userresponse como nombre del espacio.
  4. En el menú desplegable Select type, selecciona phonetic_alphabet como el tipo de ranura.
  5. Marca Este segmento acepta una lista de valores.
  6. Marca This slot is required.
  7. Selecciona la opción Personalizar la escritura diferida del valor de la ranura y, luego, ingresa userresponse en el cuadro de texto del parámetro de sesión.

ba57a419877a07f3.png

  1. Haz clic en Guardar.

Agregar condición a la pantalla Spelling

Para agregar la condición a la escena Spelling, sigue estos pasos:

  1. En el panel de navegación, haz clic en la escena Spelling.
  2. Haz clic en el signo + (más) en la escena Spelling junto a Condición.
  3. Ingresa scene.slots.status == "FINAL" como condición.
  4. Marca la casilla de verificación Llama a tu webhook y, luego, ingresa verifySpellingWord en el cuadro de texto del controlador de eventos para verificar la respuesta del usuario.
  5. Marca Send prompts.
  6. Reemplaza la oración del campo speech (Enter the response that users will see or hear...) por {}. El webhook completará la instrucción real.

Agrega chips de sugerencias a la respuesta del webhook

  1. En la escena Start, haz clic en sugerencias debajo del editor de código. Esta acción agrega tres chips de sugerencias.
  2. En el campo title, reemplaza Suggested Response por 'Next'.
  3. Usa el mismo formato para agregar de forma manual un chip de sugerencias denominado 'Quit'.El código debería verse como este fragmento:
suggestions:
      - title: 'Next'
      - title: 'Quit'

ac3d7a9366ebc1b1.png

  1. Haz clic en Guardar.

12. Cómo probar la práctica de ortografía en el simulador

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

  1. En la barra de navegación, haz clic en Test para ir al simulador.
  2. Para probar la acción en el simulador, escribe Talk to Spelling Practice en el campo Input.
  3. Presiona Intro. Tu acción debería responder con el mensaje Main invocation y el mensaje de la escena Start agregado: "Welcome to Spelling Practice. Usa el alfabeto fonético para deletrear la palabra. Por ejemplo, alfa para A, bravo para B, charlie para C, etcétera. ¿Deseas continuar?".
  4. Di para continuar.
  5. El simulador reproducirá el sonido de una palabra para deletrearla.
  6. Puedes deletrear la palabra con alfabetos fonéticos. Por ejemplo, para mejor, di o escribe "bravo eco tango tango eco romeo".
  7. El simulador responderá con la respuesta correcta o incorrecta.
  8. Di siguiente para continuar con la siguiente palabra o salir para salir del bucle del juego.

13. Felicitaciones

¡Felicitaciones! Creaste correctamente tu juego, Práctica de ortografía.

Ahora conoces los pasos clave necesarios para crear un juego con Cloud Firestore, Cloud Functions y Action Builder de Google Assistant.

Temas abordados

  • Cómo interactuar con Cloud Firestore
  • Cómo usar espacios para recopilar datos del usuario
  • Cómo procesar las entradas del usuario y mostrar respuestas
  • Cómo usar condiciones para agregar lógica a una escena
  • Cómo agregar un bucle de juego

Recursos de aprendizaje adicionales

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

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. Para borrar tu proyecto y recursos de Firebase, completa los pasos indicados en la sección Cómo apagar (borrar) proyectos.

Precaución: Asegúrate de seleccionar el proyecto correcto que quieres borrar en la página Configuración de la consola de Google Cloud.

  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 completas este paso, se quitará automáticamente el proyecto después de aproximadamente 30 días.

Sigue a @ActionsOnGoogle y @Firebase en Twitter para mantenerte al tanto de nuestros anuncios más recientes y envía tuits con el hashtag #GoogleIO para compartir tu compilación.