Depura complementos de Google Workspace

Como desarrollador de complementos de Google Workspace, es posible que debas depurar código para probar cambios o solucionar problemas complejos. La depuración de complementos de Google Workspace se puede realizar de muchas maneras diferentes según la arquitectura de tu app, lo que hace, cómo se implementa y tus preferencias.

En esta página, se explica cómo depurar un complemento de Google Workspace con ngrok, una plataforma de entrada unificada que puedes usar para probar entornos de desarrollo locales. En esta guía, probarás los cambios de código en un entorno local y solucionarás problemas en un entorno remoto.

Depurar desde el entorno de desarrollo local

En esta sección, interactuarás con el complemento de Google Workspace que se ejecuta en tu entorno local.

Depurar desde un entorno de desarrollo local

Figura 1. Depurar en un entorno de desarrollo local

Requisitos previos

Node.js

Python

Java

Haz que el servicio de localhost esté disponible públicamente

Debes conectar tu entorno local a Internet para que el complemento de Google Workspace pueda acceder a él. La aplicación ngrok se usa para redireccionar las solicitudes HTTP realizadas a una URL pública hacia tu entorno local.

  1. En un navegador en tu entorno local, accede a tu cuenta de ngrok.
  2. Instala la aplicación y configura tu authtoken en tu entorno local.
  3. Crea un dominio estático en tu cuenta ngrok, al que se hace referencia como NGROK_STATIC_DOMAIN en las instrucciones de esta guía.

Crea e instala la implementación del complemento

  1. Configura el complemento de Google Workspace para enviar todas sus solicitudes HTTP a tu dominio estático. Tu archivo de implementación debería verse de la siguiente manera:

    {
      "oauthScopes": [
        "https://www.googleapis.com/auth/workspace.linkpreview",
        "https://www.googleapis.com/auth/workspace.linkcreate"
      ],
      "addOns": {
        "common": {
          "name": "Manage support cases",
          "logoUrl": "https://developers.google.com/workspace/add-ons/images/support-icon.png",
          "layoutProperties": {
            "primaryColor": "#dd4b39"
          }
        },
        "docs": {
          "linkPreviewTriggers": [
            {
              "runFunction": "NGROK_STATIC_DOMAIN",
              "patterns": [
                {
                  "hostPattern": "example.com",
                  "pathPrefix": "support/cases"
                },
                {
                  "hostPattern": "*.example.com",
                  "pathPrefix": "cases"
                },
                {
                  "hostPattern": "cases.example.com"
                }
              ],
              "labelText": "Support case",
              "localizedLabelText": {
                "es": "Caso de soporte"
              },
              "logoUrl": "https://developers.google.com/workspace/add-ons/images/support-icon.png"
            }
          ],
          "createActionTriggers": [
            {
              "id": "createCase",
              "labelText": "Create support case",
              "localizedLabelText": {
                "es": "Crear caso de soporte"
              },
              "runFunction": "$URL2",
              "logoUrl": "https://developers.google.com/workspace/add-ons/images/support-icon.png"
            }
          ]
        }
      }
    }
    

    Reemplaza NGROK_STATIC_DOMAIN por el dominio estático en tu cuenta ngrok.

  2. Configura el proyecto de Google Cloud para usar el siguiente comando:

    gcloud config set project PROJECT_ID
    
  3. Adquiere credenciales de usuario nuevas para usar las credenciales predeterminadas de la aplicación:

    gcloud auth application-default login
    

    Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud de la app.

  4. Crea la implementación:

    gcloud workspace-add-ons deployments create manageSupportCases \
        --deployment-file=DEPLOYMENT_FILE_PATH
    

    Reemplaza DEPLOYMENT_FILE_PATH por la ruta de acceso del archivo de implementación.

  5. Instala la implementación:

    gcloud workspace-add-ons deployments install manageSupportCases
    

El complemento de Google Workspace envía todas sus solicitudes HTTP al dominio estático

Figura 2: El complemento de Google Workspace envía todas sus solicitudes HTTP al dominio estático. El servicio público ngrok actúa como un puente entre el complemento de Google Workspace y el código de la aplicación que se ejecuta de forma local.

Prueba el complemento de Google Workspace

Puedes implementar, probar, depurar y volver a cargar automáticamente tu complemento de Google Workspace de forma local.

Node.js

  1. Desde el IDE Visual Studio Code instalado en tu entorno local, haz lo siguiente:

    1. En una ventana nueva, abre la carpeta add-ons-samples/node/3p-resources.
    2. Agrega una dependencia y dos secuencias de comandos al archivo package.json para configurar la aplicación para la ejecución local y la depuración automáticamente:

      {
          ...
          "dependencies": {
            ...
            "@google-cloud/functions_framework": "^3.3.0"
          },
          "scripts": {
              ...
              "start": "npx functions-framework --target=createLinkPreview --port=9000",
              "debug-watch": "nodemon --watch ./ --exec npm start"
          }
          ...
      }
      
    3. Desde el directorio raíz, instala la aplicación:

      npm install
      
    4. Crea y configura un lanzamiento llamado Debug Watch que active la secuencia de comandos debug-watch. Para ello, crea el archivo .vscode/launch.json en el directorio raíz:

      {
          "version": "0.2.0",
          "configurations": [{
              "type": "node",
              "request": "launch",
              "name": "Debug Watch",
              "cwd": "${workspaceRoot}",
              "runtimeExecutable": "npm",
              "runtimeArgs": ["run-script", "debug-watch"]
          }]
      }
      
    5. Agrega un punto de interrupción que detenga el procesamiento de la solicitud HTTP en el archivo index.js y comienza a ejecutarse y depurar con la configuración de Debug Watch que se agregó antes. Ahora, la aplicación está en ejecución y detecta las solicitudes HTTP en el puerto 9000.

      La aplicación está en ejecución y a la escucha de solicitudes HTTP en el puerto “9000”

      Figura 3. La aplicación está en ejecución y detecta las solicitudes HTTP en el puerto 9000.

  2. Inicia la aplicación ngrok en tu entorno local:

    ngrok http --domain=NGROK_STATIC_DOMAIN 9000
    

    Reemplaza NGROK_STATIC_DOMAIN por el dominio estático en tu cuenta ngrok. Ahora, todas las solicitudes se redireccionan a tu entorno local y al puerto que usa la aplicación.

    La terminal con el servidor “ngrok”
en ejecución y redireccionamiento

    Figura 4: La terminal con el servidor ngrok en ejecución y redirigiendo.

  3. La aplicación ngrok también inicia una interfaz web en tu localhost. Puedes supervisar todas las actividades si la abres en un navegador.

    La interfaz web alojada por la aplicación “ngrok” que no muestra solicitudes HTTP

    Figura 5: La interfaz web que aloja la aplicación ngrok, que no muestra solicitudes HTTP.

  4. Para probar el complemento de Google Workspace, obtén una vista previa de la URL de un caso en un nuevo documento de Google con una cuenta de verificador:

    • Crea un nuevo documento de Google.

      Cómo crear un nuevo documento de Google

    • Escribe el siguiente vínculo y presiona enter:

      https://example.com/support/case/?name=Name1&description=Description1&priority=P1
      
    • Haga clic en el vínculo.

  5. En la Visual Studio Code de tu entorno local, puedes ver que la ejecución se detiene en el punto de interrupción que se estableció.

    La ejecución se pausa en el punto de interrupción que se estableció.

    Figura 6: La ejecución se pausa en el punto de interrupción que se estableció.

  6. Cuando reanudas la ejecución desde el depurador de Visual Studio Code antes de que se agote el tiempo de espera de los complementos de Google Workspace, este muestra la vista previa del vínculo en el Documento de Google desde la caché.

  7. Puedes verificar los registros de solicitud y respuesta HTTP desde la interfaz web que aloja la aplicación ngrok en tu entorno local.

    La solicitud HTTP desde la interfaz web que aloja la aplicación “ngrok”

    Figura 7: La solicitud HTTP de la interfaz web que aloja la aplicación ngrok.

  8. Para cambiar el comportamiento de la aplicación, reemplaza Case por Case: intercalado 51 de index.js. Cuando guardas el archivo, nodemon vuelve a cargar automáticamente la aplicación con el código fuente actualizado y Visual Studio Code permanece en modo de depuración.

    La aplicación está en ejecución y detecta las solicitudes HTTP en el puerto “9000” con el cambio de código cargado.

    Figura 8: La aplicación está en ejecución y detecta las solicitudes HTTP en el puerto 9000 con el cambio de código cargado.

  9. Esta vez, en lugar de hacer clic en el vínculo y esperar unos segundos en un documento de Google nuevo, puedes seleccionar la última solicitud HTTP registrada en la interfaz web que aloja la aplicación ngrok en tu entorno local y hacer clic en Replay. Igual que la última vez, tu complemento de Google Workspace no responde porque se está depurando de forma activa.

  10. Cuando reanudas la ejecución desde el depurador de Visual Studio Code, puedes ver en la interfaz web que aloja la aplicación ngrok en tu entorno local que la aplicación genera una respuesta con la versión actualizada de la tarjeta de vista previa.

Python

  1. Desde el IDE Visual Studio Code instalado en tu entorno local, haz lo siguiente:

    1. En una ventana nueva, abre la carpeta add-ons-samples/python/3p-resources/create_link_preview.
    2. Crea un entorno virtual nuevo para Python env y actívalo:

      virtualenv env
      source env/bin/activate
      
    3. Instala todas las dependencias del proyecto con pip en el entorno virtual:

      pip install -r requirements.txt
      
    4. Crea el archivo .vscode/launch.json en el directorio raíz y configura un lanzamiento llamado Debug Watch que active la aplicación desde el módulo functions-framework en el puerto 9000 en modo de depuración en el entorno virtual env:

      {
          "version": "0.2.0",
          "configurations": [{
              "type": "python",
              "request": "launch",
              "name": "Debug Watch",
              "python": "${workspaceFolder}/env/bin/python3",
              "module": "functions_framework",
              "args": [
                  "--target", "create_link_preview",
                  "--port", "9000",
                  "--debug"
              ]
          }]
      }
      
    5. Agrega un punto de interrupción que detenga el procesamiento de la solicitud HTTP en el archivo main.py y comienza a ejecutarse y depurar con la configuración de Debug Watch que se agregó antes. Ahora, la aplicación está en ejecución y detecta las solicitudes HTTP en el puerto 9000.

      La aplicación está en ejecución y a la escucha de solicitudes HTTP en el puerto “9000”

      Figura 3. La aplicación está en ejecución y detecta las solicitudes HTTP en el puerto 9000.

  2. Inicia la aplicación ngrok en tu entorno local:

    ngrok http --domain=NGROK_STATIC_DOMAIN 9000
    

    Reemplaza NGROK_STATIC_DOMAIN por el dominio estático en tu cuenta ngrok. Ahora, todas las solicitudes se redireccionan a tu entorno local y al puerto que usa la aplicación.

    La terminal con el servidor “ngrok”
en ejecución y redireccionamiento

    Figura 4: La terminal con el servidor ngrok en ejecución y redirigiendo.

  3. La aplicación ngrok también inicia una interfaz web en tu localhost. Puedes supervisar todas las actividades si la abres en un navegador.

    La interfaz web alojada por la aplicación “ngrok” que no muestra solicitudes HTTP

    Figura 5: La interfaz web que aloja la aplicación ngrok, que no muestra solicitudes HTTP.

  4. Para probar el complemento de Google Workspace, obtén una vista previa de la URL de un caso en un nuevo documento de Google con una cuenta de verificador:

    • Crea un nuevo documento de Google.

      Cómo crear un nuevo documento de Google

    • Escribe el siguiente vínculo y presiona enter:

      https://example.com/support/case/?name=Name1&description=Description1&priority=P1
      
    • Haga clic en el vínculo.

  5. En la Visual Studio Code de tu entorno local, puedes ver que la ejecución se detiene en el punto de interrupción que se estableció.

    La ejecución se pausa en el punto de interrupción que se estableció.

    Figura 6: La ejecución se pausa en el punto de interrupción que se estableció.

  6. Cuando reanudas la ejecución desde el depurador de Visual Studio Code antes de que se agote el tiempo de espera de los complementos de Google Workspace, este muestra la vista previa del vínculo en el Documento de Google desde la caché.

  7. Puedes verificar los registros de solicitud y respuesta HTTP desde la interfaz web que aloja la aplicación ngrok en tu entorno local.

    La solicitud HTTP desde la interfaz web que aloja la aplicación “ngrok”

    Figura 7: La solicitud HTTP de la interfaz web que aloja la aplicación ngrok.

  8. Para cambiar el comportamiento de la aplicación, reemplaza Case por Case: intercalado 56 del archivo main.py. Cuando guardas el archivo, Visual Studio Code vuelve a cargar automáticamente la aplicación con el código fuente actualizado y permanece en modo de depuración.

    La aplicación está en ejecución y detecta las solicitudes HTTP en el puerto “9000” con el cambio de código cargado.

    Figura 8: La aplicación está en ejecución y detecta las solicitudes HTTP en el puerto 9000 con el cambio de código cargado.

  9. Esta vez, en lugar de hacer clic en el vínculo y esperar unos segundos en un documento de Google nuevo, puedes seleccionar la última solicitud HTTP registrada en la interfaz web que aloja la aplicación ngrok en tu entorno local y hacer clic en Replay. Igual que la última vez, tu complemento de Google Workspace no responde porque se está depurando de forma activa.

  10. Cuando reanudas la ejecución desde el depurador de Visual Studio Code, puedes ver en la interfaz web que aloja la aplicación ngrok en tu entorno local que la aplicación genera una respuesta con la versión actualizada de la tarjeta de vista previa.

Java

  1. Desde el IDE Visual Studio Code instalado en tu entorno local, haz lo siguiente:

    1. En una ventana nueva, abre la carpeta add-ons-samples/java/3p-resources.
    2. Configura el proyecto de Maven para ejecutar la aplicación CreateLinkPreview en el puerto 9000 de forma local. Para ello, agrega el complemento de compilación de Cloud Functions Framework function-maven-plugin en el archivo pom.xml:

      ...
      <plugin>
          <groupId>com.google.cloud.functions</groupId>
          <artifactId>function-maven-plugin</artifactId>
          <version>0.11.0</version>
          <configuration>
              <functionTarget>CreateLinkPreview</functionTarget>
              <port>9000</port>
          </configuration>
      </plugin>
      ...
      
    3. Ahora puedes iniciarlo localmente en modo de depuración:

      mvnDebug function:run
      Preparing to execute Maven in debug mode
      Listening for transport dt_socket at address: 8000
      
    4. Crea el archivo .vscode/launch.json en el directorio raíz y configura un lanzamiento llamado Remote Debug Watch que se conecte a la aplicación que se inició con el puerto 8000:

      {
          "version": "0.2.0",
          "configurations": [{
              "type": "java",
              "request": "attach",
              "name": "Remote Debug Watch",
              "projectName": "http-function",
              "hostName": "localhost",
              "port": 8000
          }]
      }
      
    5. Agrega un punto de interrupción que detenga el procesamiento de la solicitud HTTP en el archivo CreateLinkPreview.java y comienza a adjuntar y depurar con la configuración Remote Debug Watch que se agregó antes. Ahora, la aplicación está en ejecución y detecta las solicitudes HTTP en el puerto 9000.

      La aplicación está en ejecución y a la escucha de solicitudes HTTP en el puerto “9000”

      Figura 3: La aplicación está en ejecución y detecta las solicitudes HTTP en el puerto 9000

  2. Inicia la aplicación ngrok en tu entorno local:

    ngrok http --domain=NGROK_STATIC_DOMAIN 9000
    

    Reemplaza NGROK_STATIC_DOMAIN por el dominio estático en tu cuenta ngrok. Ahora, todas las solicitudes se redireccionan a tu entorno local y al puerto que usa la aplicación.

    La terminal con el servidor “ngrok”
en ejecución y redireccionamiento

    Figura 4: La terminal con el servidor ngrok en ejecución y redirigiendo.

  3. La aplicación ngrok también inicia una interfaz web en tu localhost. Puedes supervisar todas las actividades si la abres en un navegador.

    La interfaz web alojada por la aplicación “ngrok” que no muestra solicitudes HTTP

    Figura 5: La interfaz web que aloja la aplicación ngrok, que no muestra solicitudes HTTP.

  4. Para probar el complemento de Google Workspace, obtén una vista previa de la URL de un caso en un nuevo documento de Google con una cuenta de verificador:

    • Crea un nuevo documento de Google.

      Cómo crear un nuevo documento de Google

    • Escribe el siguiente vínculo y presiona enter:

      https://example.com/support/case/?name=Name1&description=Description1&priority=P1
      
    • Haga clic en el vínculo.

  5. En la Visual Studio Code de tu entorno local, puedes ver que la ejecución se detiene en el punto de interrupción que se estableció.

    La ejecución se pausa en el punto de interrupción que se estableció.

    Figura 6: La ejecución se pausa en el punto de interrupción que se estableció.

  6. Cuando reanudas la ejecución desde el depurador de Visual Studio Code antes de que se agote el tiempo de espera de los complementos de Google Workspace, este muestra la vista previa del vínculo en el Documento de Google desde la caché.

  7. Puedes verificar los registros de solicitud y respuesta HTTP desde la interfaz web que aloja la aplicación ngrok en tu entorno local.

    La solicitud HTTP desde la interfaz web que aloja la aplicación “ngrok”

    Figura 7: La solicitud HTTP de la interfaz web que aloja la aplicación ngrok.

  8. Para cambiar el comportamiento de la aplicación, reemplaza Case por Case: intercalado 78 del archivo CreateLinkPreview.java, reinicia el proceso mvnDebug y reinicia Remote Debug Watch para volver a conectar y reiniciar la depuración.

  9. Esta vez, en lugar de hacer clic en el vínculo y esperar unos segundos en un documento de Google nuevo, puedes seleccionar la última solicitud HTTP registrada en la interfaz web que aloja la aplicación ngrok en tu entorno local y hacer clic en Replay. Igual que la última vez, tu complemento de Google Workspace no responde porque se está depurando de forma activa.

  10. Cuando reanudas la ejecución desde el depurador de Visual Studio Code, puedes ver en la interfaz web que aloja la aplicación ngrok en tu entorno local que la aplicación genera una respuesta con la versión actualizada de la tarjeta de vista previa.

Depurar desde un entorno remoto

En esta sección, interactuarás con el complemento de Google Workspace que se ejecuta en un entorno remoto.

Depurar desde un entorno remoto

Figura 9: Depurar desde un entorno remoto

Requisitos previos

  • Se implementó e instaló tu complemento de Google Workspace.
  • La aplicación que se ejecuta en el entorno remoto con el depurador habilitado en un puerto determinado se menciona como REMOTE_DEBUG_PORT en las instrucciones de esta guía.
  • Tu entorno local puede ssh al entorno remoto.
  • Un IDE configurado en tu entorno local que pueda depurarse. Usamos el IDE de Visual Studio Code y sus funciones de depuración predeterminadas en esta guía con fines ilustrativos.

Conecta tus entornos locales y remotos

En tu entorno local desde el que deseas iniciar una conexión de cliente de depuración, configura un túnel SSH:

ssh -L LOCAL_DEBUG_PORT:localhost:REMOTE_DEBUG_PORT REMOTE_USERNAME@REMOTE_ADDRESS

Reemplaza lo siguiente:

  • LOCAL_DEBUG_PORT: Es el puerto de depuración en tu entorno local.
  • REMOTE_USERNAME: Es el nombre de usuario en tu entorno remoto.
  • REMOTE_ADDRESS: Es la dirección de tu entorno remoto.
  • REMOTE_DEBUG_PORT: Es el puerto de depuración en tu entorno remoto.

El puerto de depuración de tu entorno local ahora está vinculado al puerto de depuración de tu entorno remoto.

Cómo iniciar la depuración

Desde el IDE de Visual Studio Code instalado en tu entorno local, haz lo siguiente:

  1. En una ventana nueva, abre el código fuente de tu app.
  2. Crea el archivo .vscode/launch.json en el directorio raíz y configura un lanzamiento llamado Debug Remote que se conecte al puerto de depuración en tu entorno local:

    Node.js

    {
        "version": "0.2.0",
        "configurations": [{
            "type": "node",
            "request": "attach",
            "name": "Debug Remote",
            "address": "127.0.0.1",
            "port": LOCAL_DEBUG_PORT
        }]
    }
    

    Python

    {
        "version": "0.2.0",
        "configurations": [{
            "type": "python",
            "request": "attach",
            "name": "Debug Remote",
            "connect": {
                "host": "127.0.0.1",
                "port": LOCAL_DEBUG_PORT
            }
        }]
    }
    

    Java

    {
        "version": "0.2.0",
        "configurations": [{
            "type": "java",
            "request": "attach",
            "name": "Debug Remote",
            "hostName": "127.0.0.1",
            "port": LOCAL_DEBUG_PORT
        }]
    }
    

    Reemplaza LOCAL_DEBUG_PORT por el puerto de depuración en tu entorno local.

  3. Agrega un punto de interrupción en el código fuente de tu app que detenga el procesamiento de solicitudes HTTP y comienza a ejecutar y depurar con la configuración Debug Remote que se agregó antes.

Interactuar con el complemento de Google Workspace instalado Tu complemento de Google Workspace no responde porque se está depurando de forma activa en el IDE de Visual Studio Code.

Aprende a consultar registros de errores.