Solución de problemas

Incluso el desarrollador más experimentado rara vez escribe código correctamente en el primer intento, por lo que la solución de problemas es una parte importante del proceso de desarrollo. En esta sección, analizaremos algunas técnicas que pueden ayudarte a encontrar, comprender y depurar errores en tus secuencias de comandos.

Mensajes de error

Cuando se produce un error en la secuencia de comandos, aparece un mensaje de error. Este mensaje va acompañado de un número de línea que se usa para solucionar problemas. Existen dos tipos básicos de errores que se muestran de esta manera: errores de sintaxis y errores de entorno de ejecución.

Errores de sintaxis

Los errores de sintaxis se producen cuando se escribe un código que no sigue la gramática de JavaScript, y los errores se detectan en cuanto intentas guardar la secuencia de comandos. Por ejemplo, el siguiente fragmento de código contiene un error de sintaxis:

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ";
  MailApp.sendEmail('john@example.com',
                    'Data in row ' + rowNumber,
                    rowData);
}

El problema de sintaxis aquí es que falta un carácter ) al final de la cuarta línea. Cuando intentes guardar la secuencia de comandos, verás el siguiente error:

Falta ")" detrás de la lista de argumentos. (línea 4)

Estos tipos de errores suelen ser fáciles de solucionar, ya que se encuentran de inmediato y, por lo general, tienen causas simples. No puedes guardar un archivo que contenga errores de sintaxis, lo que significa que solo se guarda el código válido en tu proyecto.

Errores de entorno de ejecución

Estos errores se producen cuando se usa una función o clase de forma incorrecta y solo se pueden detectar una vez que se ejecuta la secuencia de comandos. Por ejemplo, el siguiente código causa un error de entorno de ejecución:

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ");
  MailApp.sendEmail('john',
                    'Data in row ' + rowNumber,
                    rowData);
}

El código tiene el formato correcto, pero pasamos el valor "john" para la dirección de correo electrónico cuando se llama a MailApp.sendEmail. Dado que esta no es una dirección de correo electrónico válida, se genera el siguiente error cuando se ejecuta la secuencia de comandos:

Correo electrónico no válido: juan (línea 5)

Lo que hace que solucionar estos errores sea más difícil de solucionar es que, a menudo, los datos que pasas a una función no están escritos en el código, sino que se extraen de una hoja de cálculo, un formulario o alguna otra fuente de datos externa. Puedes usar las siguientes técnicas de depuración para identificar la causa de estos errores.

Errores comunes

A continuación, se incluye una lista de errores comunes y sus causas.

El servicio se invocó demasiadas veces: <action name>

Este error indica que superaste tu cuota diaria para una acción determinada. Por ejemplo, puedes encontrar este error si envías demasiados correos electrónicos en un solo día. Las cuotas se establecen en diferentes niveles para las cuentas de consumidor, de dominio y Premier, y están sujetas a cambios en cualquier momento sin que Google lo anuncie con anterioridad. Puedes ver los límites de cuota de varias acciones en la documentación de cuotas de Apps Script.

El servidor no está disponible. o Se produjo un error de servidor. Vuelve a intentarlo.

Estos errores pueden deberse a varias causas:

  • Un servidor o sistema de Google no está disponible en este momento. Espera unos minutos y prueba ejecutar la secuencia de comandos de nuevo.
  • Hay un error en tu secuencia de comandos que no tiene un mensaje de error correspondiente. Intenta depurar tu secuencia de comandos y ver si puedes aislar el problema.
  • Hay un error en Google Apps Script que está causando este error. Si quieres obtener instrucciones para buscar y archivar informes de errores, consulta los errores. Antes de informar un error nuevo, realiza una búsqueda para ver si otros ya lo informaron.

Se requiere autorización para realizar esa acción.

Este error indica que la secuencia de comandos no tiene la autorización necesaria para ejecutarse. Cuando se ejecuta una secuencia de comandos en el Editor de secuencias de comandos o desde un elemento de menú personalizado, se presenta un diálogo de autorización al usuario. Sin embargo, cuando una secuencia de comandos se ejecuta desde un activador, está incorporada en una página de Google Sites o se ejecuta como un servicio, el diálogo no se puede presentar y se muestra este error.

Para autorizar la secuencia de comandos, abre el Editor de secuencias de comandos y ejecuta cualquier función. Aparecerá el mensaje de autorización para que puedas autorizar el proyecto de la secuencia de comandos. Si la secuencia de comandos contiene nuevos servicios no autorizados, debes volver a autorizar la secuencia de comandos.

Por lo general, este error se debe a los activadores que se activan antes de que el usuario los autorice. Si no tienes acceso al proyecto de la secuencia de comandos (porque el error se produce para un complemento que utilizas, por ejemplo), generalmente puedes autorizar la secuencia de comandos mediante el complemento de nuevo. Si un activador se sigue activando y causa este error, puedes quitar tus activadores de la siguiente manera:

  1. A la izquierda del proyecto de Apps Script, haz clic en Activadores .
  2. A la derecha del activador que deseas quitar, haz clic en Más > Borrar activador.

También puedes quitar los activadores de complementos problemáticos mediante la desinstalación del complemento.

Acceso denegado: DriveApp o La política del dominio inhabilitó las apps de Drive de terceros

Los administradores de Google Workspace dominios pueden inhabilitar la API de Drive para su dominio, lo que impide a los usuarios instalar y usar apps de Google Drive. Esta configuración también impide que los usuarios puedan usar complementos de Apps Script que utilicen el servicio de Drive o el servicio de Drive avanzado (incluso si la secuencia de comandos se autorizó antes de que el administrador inhabilite la API de Drive).

Sin embargo, si un complemento o una app web que usa el servicio de Drive se publica para la instalación en todo el dominio y el administrador lo instala para algunos o todos los usuarios del dominio, la secuencia de comandos funciona para esos usuarios, incluso si la API de Drive está inhabilitada en el dominio.

La secuencia de comandos no tiene permiso para obtener la identidad del usuario activo.

Indica que la identidad y el correo electrónico del usuario activo no están disponibles para la secuencia de comandos. Esta advertencia es el resultado de una llamada a Session.getActiveUser(). También puede ser el resultado de una llamada a Session.getEffectiveUser() si la secuencia de comandos se ejecuta en un modo de autorización que no sea AuthMode.FULL. Si se indica esta advertencia, las llamadas posteriores a User.getEmail() solo mostrarán "".

Existen varias formas de solucionar problemas con esta advertencia, según el modo de autorización en el que se ejecuta la secuencia de comandos. El modo de autorización se expone en las funciones activadas como la propiedad authMode del parámetro de evento e.

  • En AuthMode.FULL, considera usar Session.getEffectiveUser() en su lugar.
  • En AuthMode.LIMITED, asegúrate de que el propietario haya autorizado la secuencia de comandos.
  • En otros modos de autorización, evita llamar a cualquiera de los métodos.
  • Si eres un cliente Google Workspace que recibe esta advertencia de un activador instalable, asegúrate de que el activador se ejecute como un usuario dentro de tu organización.

Falta la biblioteca

Si agregas una library popular a tu secuencia de comandos, es posible que recibas un mensaje de error que indique que falta, aunque la biblioteca aparezca como una dependencia para tu secuencia de comandos. Probablemente, esto se deba a que demasiadas personas están accediendo a la biblioteca al mismo tiempo. Para evitar este error, prueba una de las siguientes soluciones:

  • Copia y pega el código de la biblioteca en tu secuencia de comandos y quita la dependencia de la biblioteca.
  • Copia la secuencia de comandos de la biblioteca y, luego, impleméntala como una biblioteca desde tu cuenta. Asegúrate de actualizar la dependencia en tu secuencia de comandos original a la biblioteca nueva en lugar de a la pública.

Se produjo un error debido a que faltaba una versión de la biblioteca o una versión de implementación. Código de error Not_Found

Este mensaje de error indica una de las siguientes opciones:

  • Se borró la versión implementada de la secuencia de comandos. Para actualizar la versión implementada de tu secuencia de comandos, consulta Edita una implementación con versión.
  • Se borró la versión de la biblioteca que utiliza la secuencia de comandos. Para comprobar qué biblioteca falta, junto al nombre de la biblioteca, haz clic en Más > Abrir en una pestaña nueva. La biblioteca faltante muestra un mensaje de error. Después de encontrar la biblioteca que necesitas actualizar, realiza una de las siguientes acciones:
  • La secuencia de comandos de una biblioteca que usa tu secuencia de comandos incluye otra biblioteca que usa una versión borrada. Realiza una de las siguientes acciones:
    • Si tienes acceso de edición a la biblioteca que usa tu secuencia de comandos, actualiza la biblioteca secundaria en esa secuencia a una versión existente.
    • Actualiza la biblioteca para usar una versión diferente. Consulta Cómo actualizar una biblioteca.
    • Quita la biblioteca del proyecto y del código de la secuencia de comandos. Consulta Cómo quitar una biblioteca.

Error 400: invalid_scope cuando se llama a la API de Google Chat con el servicio avanzado

Si encuentras Error 400: invalid_scope con el mensaje de error Some requested scopes cannot be shown, significa que no especificaste ningún alcance de autorización en el archivo appsscript.json del proyecto de Apps Script. En la mayoría de los casos, Apps Script determina automáticamente los alcances que necesita una secuencia de comandos, pero cuando usas el servicio avanzado de Chat, debes agregar de forma manual los alcances de autorización que usa tu secuencia de comandos al archivo de manifiesto del proyecto de Apps Script. Consulta Configura alcances explícitos.

Para resolver el error, agrega los alcances de autorización adecuados al archivo appsscript.json del proyecto de Apps Script como parte del array oauthScopes. Por ejemplo, para llamar al método spaces.messages.create, agrega lo siguiente:

"oauthScopes": [
  "https://www.googleapis.com/auth/chat.messages.create"
]

Depuración

No todos los errores provocan que se muestre un mensaje de error. Puede haber un error más sutil en el que el código sea técnicamente correcto y pueda ejecutarse, pero los resultados no son los esperados. A continuación, se incluyen algunas estrategias para manejar estas situaciones y también investigar con más detalle una secuencia de comandos que no se ejecuta de la manera esperada.

Logging

Si bien la depuración suele ser útil, registrar la información a medida que se ejecuta un proyecto de secuencia de comandos. Google Apps Script tiene dos métodos para registrar información: el servicio de Cloud Logging y los servicios de registro y consola más básicos que están integrados en el editor de Apps Script.

Consulta la guía de Logging para obtener más detalles.

Error Reporting

Las excepciones que se producen debido a errores de tiempo de ejecución se registran de forma automática mediante el servicio de Error Reporting de Google Cloud. Este servicio te permite buscar y filtrar los mensajes de excepción que crea el proyecto de secuencia de comandos.

Para acceder a Error Reporting, consulta Visualiza los registros y los informes de errores de Cloud en la consola de Google Cloud Platform.

Ejecuciones

Cada vez que ejecutas una secuencia de comandos, Apps Script genera un registro de la ejecución, incluidos los registros de Cloud. Estos registros pueden ayudarte a comprender qué acciones realizó la secuencia de comandos.

Para ver las ejecuciones de tu secuencia de comandos en el proyecto de Apps Script, a la izquierda, haz clic en Executions .

Comprueba el estado del servicio de Apps Script

Aunque es poco frecuente, a veces los servicios específicos de Google Workspace (como Gmail o Drive) encuentran problemas temporales que pueden provocar interrupciones del servicio. Cuando esto ocurre, es posible que los proyectos de Apps Script que interactúan con estos servicios no funcionen como se espera.

Para verificar si hay una interrupción del servicio de Google Workspace, consulta el Panel de estado de Google Workspace. Si se está experimentando una interrupción, espera a que se resuelva o solicita ayuda adicional en el Centro de ayuda de Google Workspace o en la documentación de problemas conocidos de Google Workspace.

Cómo usar el depurador y los puntos de interrupción

Para detectar problemas en tu secuencia de comandos, puedes ejecutarla en modo de depuración. Cuando se ejecuta en modo de depuración, una secuencia de comandos se detiene cuando alcanza un punto de interrupción, que es una línea que destacaste en tu secuencia de comandos que crees que puede tener un problema. Cuando se pausa una secuencia de comandos, se muestra el valor de cada variable en ese momento, lo que te permite inspeccionar el funcionamiento interno de una secuencia de comandos sin tener que agregar muchas instrucciones de registro.

Agregar un punto de interrupción

Para agregar un punto de interrupción, coloca el cursor sobre el número de la línea a la que deseas agregarlo. A la izquierda del número de la línea, haz clic en el círculo. En la siguiente imagen, se muestra un ejemplo de un punto de interrupción agregado a una secuencia de comandos:

Agregar un punto de interrupción

Cómo ejecutar una secuencia de comandos en modo de depuración

Para ejecutar la secuencia de comandos en modo de depuración, haz clic en Debug en la parte superior del editor.

Antes de que la secuencia de comandos ejecute la línea con el punto de interrupción, se detiene y muestra una tabla de información de depuración. Puedes usar esta tabla para inspeccionar datos como los valores de los parámetros y la información almacenada en los objetos.

Para controlar cómo se ejecuta la secuencia de comandos, en la parte superior del panel Debugger, usa los botones “Step in”, “Step over” y “Step out”. Te permiten ejecutar la secuencia de comandos una línea a la vez y, luego, inspeccionar cómo cambian los valores con el tiempo.

Problemas con varias Cuentas de Google

Si accediste a varias Cuentas de Google al mismo tiempo, es posible que tengas problemas para acceder a tus complementos y aplicaciones web. El acceso múltiple o a varias Cuentas de Google a la vez no son compatibles con Apps Script, los complementos ni las apps web.

  • Si abres el editor de Apps Script después de acceder a más de una cuenta, Google te pedirá que elijas la cuenta con la que deseas continuar.

  • Si abres una aplicación web o un complemento y tienes problemas de acceso múltiple, prueba una de las siguientes soluciones:

    • Sal de todas tus Cuentas de Google y accede solo a la que tiene el complemento o la app web a la que deseas acceder.
    • Abre una ventana de incógnito en Google Chrome o una ventana de navegación privada equivalente y accede a la Cuenta de Google que tiene el complemento o la app web a la que deseas acceder.

Cómo obtener ayuda

La depuración de un problema con las herramientas y técnicas mencionadas anteriormente puede resolver una gran variedad de problemas, pero es posible que te encuentres con algunos que requieran ayuda adicional para resolverlos. Consulta nuestra página de asistencia para obtener información sobre dónde hacer preguntas y informar errores.