Solución de problemas

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

Mensajes de error

Cuando tu secuencia de comandos encuentra un error, se muestra un mensaje de error. El mensaje se acompaña 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 tiempo de ejecución.

Errores de sintaxis

Los errores de sintaxis se producen cuando se escribe código que no sigue la gramática de JavaScript, y 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 el carácter ) al final de la cuarta línea. Cuando intentes guardar la secuencia de comandos, recibirás el siguiente error:

Falta ) después de la lista de argumentos. (línea 4)

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

Errores de entorno de ejecución

Estos errores se producen por usar 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 genera un error de tiempo 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 “juan” para la dirección de correo electrónico cuando llamamos a MailApp.sendEmail. Como 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: john (línea 5)

Lo que hace que estos errores sean más difíciles 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. Usar las técnicas de depuración que se indican a continuación puede ayudarte a identificar la causa de estos errores.

Errores comunes

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

Se invocó el servicio demasiadas veces: <nombre de la acción>

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

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

Estas son algunas de las posibles causas de estos errores:

  • Un servidor o sistema de Google no está disponible temporalmente. Espera unos momentos y vuelve a intentar ejecutar la secuencia de comandos.
  • Hay un error en la secuencia de comandos que no tiene un mensaje de error correspondiente. Intenta depurar la secuencia de comandos y ver si puedes aislar el problema.
  • Hay un error en Google Apps Script que causa este error. Si quieres obtener instrucciones para buscar y enviar informes de errores, consulta Errores. Antes de informar un error nuevo, busca 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 secuencia de comandos o desde un elemento de menú personalizado, se le presenta al usuario un diálogo de autorización. Sin embargo, cuando se ejecuta una secuencia de comandos desde un activador, se incorpora a una página de Google Sites o se ejecuta como un servicio, no se puede presentar el diálogo 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 secuencia de comandos. Si la secuencia de comandos contiene servicios nuevos no autorizados, debes volver a autorizarla.

Este error suele deberse a activadores que se activan antes de que el usuario los autorice. Si no tienes acceso al proyecto de secuencia de comandos (porque el error se produce en un complemento que usas, por ejemplo), por lo general, puedes volver a autorizar la secuencia de comandos con el complemento. Si un activador sigue activando y causando este error, puedes quitar los activadores siguiendo estos pasos:

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

También puedes quitar los activadores de complementos problemáticos si desinstalas el complemento.

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

Los administradores de dominios pueden inhabilitar la API de Drive para su dominio, lo que impide que los usuarios instalen y usen apps de Google Drive. Este parámetro de configuración también impide que los usuarios puedan usar complementos de Apps Script que usen el servicio de Drive o el servicio avanzado de Drive (incluso si la secuencia de comandos se autorizó antes de que el administrador inhabilitara la API de Drive).

Sin embargo, si se publica un complemento o una app web que usa el servicio de Drive para la instalación en todo el dominio y el administrador la 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 se produce a partir de una llamada a Session.getActiveUser(). También puede deberse a 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 muestran "".

Existen varias formas de solucionar este problema, 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 que experimenta esta advertencia por primera vez 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 biblioteca 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 de tu secuencia de comandos. El motivo puede ser que demasiadas personas acceden 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 de tu secuencia de comandos original a la biblioteca nueva en lugar de 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 situaciones:

  • Se borró la versión implementada de la secuencia de comandos. Para actualizar la versión implantada de tu secuencia de comandos, consulta Cómo editar una implementación con control de versiones.
  • Se eliminó la versión de una biblioteca que usa la secuencia de comandos. Para verificar 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. Una vez que encuentres 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 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 el 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 permiso 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 qué permisos necesita una secuencia de comandos, pero cuando usas el servicio avanzado de Chat, debes agregar manualmente los permisos de autorización que usa la secuencia de comandos al archivo de manifiesto de tu proyecto de Apps Script. Consulta Cómo configurar permisos explícitos.

Para resolver el error, agrega los permisos 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"
]

El administrador no permite las llamadas de UrlFetch a <URL>

Los administradores de Google Workspace pueden activar una lista de entidades permitidas en la Consola del administrador para controlar a qué dominios externos puedes acceder a través de Apps Script.

Para resolver el error, comunícate con tu administrador para que agregue la URL a la lista de entidades permitidas.

Depuración

No todos los errores hacen que se muestre un mensaje de error. Puede haber un error más sutil en el que el código es técnicamente correcto y se puede ejecutar, pero los resultados no son los que esperas. A continuación, se muestran algunas estrategias para controlar estas situaciones y seguir investigando una secuencia de comandos que no se ejecuta de la manera esperada.

Logging

Durante la depuración, a menudo es útil registrar 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 registro de Cloud y los servicios de registrador y consola más básicos que están integrados en el editor de Apps Script.

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

Error Reporting

Las excepciones que se producen debido a errores del entorno de ejecución se registran automáticamente con el servicio de Error Reporting de Google Cloud. Este servicio te permite buscar y filtrar los mensajes de excepción que crea tu proyecto de secuencia de comandos.

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

Ejecuciones

Cada vez que ejecutas una secuencia de comandos, Apps Script crea 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, haz clic en Ejecuciones a la izquierda.

Verifica el estado del servicio de Apps Script

Aunque es poco común, a veces, algunos servicios específicos de Google Workspace (como Gmail o Drive) pueden tener 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.

Puedes consultar si hay una interrupción del servicio de Google Workspace en el Google Workspace Status Dashboard. Si se está experimentando una interrupción, espera a que se resuelva o busca ayuda adicional en el Centro de ayuda de Google Workspace o en la documentación de Problemas conocidos de Google Workspace.

Usa el depurador y los puntos de interrupción

Para ubicar problemas en la secuencia de comandos, puedes ejecutarla en modo de depuración. Cuando se ejecuta en modo de depuración, una secuencia de comandos se pausa cuando llega a un punto de interrupción, que es una línea que destacaste en la secuencia de comandos y que crees que puede tener un problema. Cuando se detiene 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.

Cómo agregar un punto de interrupción

Para agregar un punto de interrupción, coloca el cursor sobre el número de línea en el que deseas agregarlo. A la izquierda del número de 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:

Cómo agregar un punto de interrupción

Ejecuta 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 del depurador, usa los botones “Paso dentro”, “Paso por encima” y “Salir”. Estos te permiten ejecutar la secuencia de comandos una línea a la vez y verificar 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 al mismo tiempo no son compatibles con Apps Script, complementos ni aplicaciones web.

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

  • Si abres una app 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 tenga el complemento o la app web a la que quieres 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 tenga 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 variedad de problemas, pero es posible que encuentres algunos que requieran ayuda adicional para resolverlos. Consulta nuestra página de asistencia para obtener información sobre dónde hacer preguntas y enviar errores.