Solución de problemas

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

Mensajes de error

Cuando se detecta un error en la secuencia de comandos, se muestra 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 un carácter ) faltante 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)

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 el código válido en tu proyecto.

Errores de entorno de ejecución

Estos errores se producen por el uso incorrecto de una función o clase, y solo pueden detectarse 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 muestra 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. Las técnicas de depuración que se indican a continuación pueden ayudarte a identificar la causa de estos errores.

Errores comunes

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

El servicio se ha solicitado demasiadas veces: <action name>.

Este error indica que excediste la 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, dominio y cuenta Premier, y están sujetas a cambios en cualquier momento sin previo aviso por parte de Google. Puedes ver los límites de cuota de diversas 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 temporalmente. Espera unos minutos y vuelve a ejecutar la secuencia de comandos.
  • Hay un error en tu secuencia de comandos que no tiene el 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 está causando este error. Para obtener instrucciones sobre cómo buscar y presentar informes de errores, consulta 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 carece de 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 al usuario un diálogo de autorización. Sin embargo, cuando una secuencia de comandos se ejecuta 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 nuevos servicios no autorizados, debes volver a autorizarla.

Con frecuencia, este error se debe a activadores que se activan antes de que el usuario los autorice. Si no tienes acceso al proyecto de secuencia de comandos (por ejemplo, porque el error ocurre en un complemento que usas), por lo general, puedes autorizar la secuencia de comandos con el complemento de nuevo. Si un activador continúa activándose y causa este error, puedes quitar los 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 si desinstalas el complemento.

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

Los administradores de dominios Google Workspace pueden inhabilitar la API de Drive para sus dominios, lo que evita que los usuarios instalen y usen apps de Google Drive. Este parámetro de configuración también evita que los usuarios puedan usar los complementos de Apps Script que usan el servicio de Drive o el servicio avanzado de Drive (incluso si la secuencia de comandos estaba autorizada antes de que el administrador inhabilite la API de Drive).

Sin embargo, si un complemento o una aplicación 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 funcionará 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 distinto de AuthMode.FULL. Si se indica esta advertencia, las llamadas posteriores a User.getEmail() solo mostrarán “”.

Existen varias formas de solucionar 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 Google Workspace cliente que acaba de experimentar esta advertencia con un activador instalable, asegúrate de que se ejecute como un usuario 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 en el que se indique que falta, aunque la biblioteca se muestre como una dependencia para la secuencia de comandos. Esto puede deberse a 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 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 control de versiones.
  • Se eliminó la versión de una 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 que falta 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 de 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 de tu código y proyecto de secuencia de comandos. Consulta Cómo quitar una biblioteca.

Error 400: invalid_scope cuando llames 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 la secuencia 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 hacen que se muestre un mensaje de error. Podría 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 esas situaciones y realizar una investigación más detallada sobre una secuencia de comandos que no se ejecuta de la manera esperada.

Logging

Durante 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 consola y registro más básicos 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 entorno de ejecución se registran de forma automática mediante el servicio de Google Cloud Error Reporting. 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 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, a la izquierda, haz clic en Executions .

Verifica 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úen con estos servicios no funcionen como se espera.

Puedes verificar si hay una interrupción del servicio de Google Workspace en Google Workspace Status Dashboard. Si se produce una interrupción, debes esperar a que se resuelva o buscar 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 identificar 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 llega a un punto de interrupción, que es una línea que destacaste en tu secuencia que crees que podría 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 línea de la línea a la que deseas agregar el punto de interrupción. 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:

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 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". Estos te permiten ejecutar la secuencia de comandos una línea a la vez e 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 apps web. El acceso múltiple o a varias Cuentas de Google a la vez no es compatible con Apps Script, los complementos ni las apps web.

  • Si accedes a más de una cuenta y abres el editor de Apps Script, 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 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 mediante las herramientas y técnicas mencionadas anteriormente puede resolver una gran variedad de problemas, pero es posible que encuentres algunos que requieran ayuda adicional. Consulta nuestra página de asistencia para obtener información sobre dónde hacer preguntas o informar errores.