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 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 la falta de un carácter )
al final de la cuarta línea. Cuando intentes guardar el script, recibirás el siguiente error:
Falta el paréntesis de cierre 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 detectan 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 deben al uso incorrecto de una función o clase, y solo se pueden detectar una vez que se ejecutó 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 "john" para la dirección de correo electrónico cuando llamamos a MailApp.sendEmail
. Como esta no es una dirección de correo electrónico válida, se arroja 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 se escriben 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 los errores comunes y sus causas.
El servicio se invocó 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 solo día. Las cuotas se establecen en diferentes niveles para las cuentas personales, de dominio y premium, y están sujetas a cambios en cualquier momento sin previo aviso de Google. Puedes consultar los límites de cuota para 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.
Existen varios motivos posibles para estos errores:
- Un servidor o sistema de Google no está disponible temporalmente. Espera unos instantes y vuelve a ejecutar la secuencia de comandos.
- 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 problema. Para obtener instrucciones sobre cómo buscar y presentar informes de errores, consulta la sección 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 secuencias 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, incorporada en una página de Google Sites o 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 o cuya autorización venció. Si no tienes acceso al proyecto de secuencia de comandos (por ejemplo, porque el error se produce en un complemento que usas), puedes autorizar la secuencia de comandos volviendo a usar el complemento. Si un activador sigue activándose y provocando este error, puedes quitarlo de la siguiente manera:
- A la izquierda del proyecto de Apps Script, haz clic en Activadores .
- 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 desinstalando el complemento.
Los permisos detallados también podrían causar estos errores. Apps Script solicitaría automáticamente los permisos faltantes al usuario, a menos que se invoque la ejecución con un activador. Consulta nuestra página de permisos de autorización para proteger las ejecuciones de activadores de este error.
Acceso denegado: DriveApp o La política de dominio inhabilitó las aplicaciones de Drive de terceros
Los administradores de dominios de Google Workspace pueden inhabilitar la API de Drive para su dominio, lo que impide que los usuarios instalen y usen las apps de Google Drive. Este parámetro de configuración también impide que los usuarios puedan usar complementos de Apps Script que utilicen el servicio de Drive o el servicio avanzado de Drive (incluso si el script 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 lo instala para algunos o todos los usuarios del dominio, las funciones de secuencia de comandos se ejecutan 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 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 señala esta advertencia, las llamadas posteriores a User.getEmail()
solo devolverán "".
Hay varias formas de solucionar este problema, según el modo de autorización con el que se ejecuta la secuencia de comandos. El modo de autorización se expone en las funciones activadas como la propiedad authMode
del e
parámetro de evento.
- En
AuthMode.FULL
, considera usarSession.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 cliente de Google Workspace y es la primera vez que ves esta advertencia de un activador instalable, asegúrate de que el activador se ejecute como un usuario 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 podría ser 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 biblioteca desde tu cuenta. Asegúrate de actualizar la dependencia en tu secuencia de comandos original a la nueva biblioteca 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 implementada de tu secuencia de comandos, consulta Edita una implementación con versiones.
- Se borró 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 > 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:
- Actualiza la biblioteca para usar una versión diferente. Consulta Cómo actualizar una biblioteca.
- Quita la biblioteca borrada de tu proyecto de secuencia de comandos y código. Consulta Cómo quitar una biblioteca.
Más
- 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 de comandos 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 proyecto de secuencia de comandos y código. 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 qué permisos necesita un script, pero cuando usas el servicio avanzado de Chat, debes agregar manualmente los permisos de autorización que usa tu script al archivo de manifiesto de tu proyecto de Apps Script. Consulta Cómo establecer 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 y pídele que agregue la URL a la lista de entidades permitidas.
Depuración
No todos los errores hacen que se muestre un mensaje de error. Es posible que haya un error más sutil en el que el código sea técnicamente correcto y se pueda ejecutar, pero los resultados no sean los esperados. A continuación, se incluyen algunas estrategias para manejar estas situaciones y seguir investigando una secuencia de comandos que no se ejecuta de la manera esperada.
Logging
Durante la depuración, suele ser ú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 Cloud Logging y los servicios de Logger y de 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 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 y los informes de errores de Cloud en Google Cloud Platform Console.
Ejecuciones
Cada vez que ejecutas una secuencia de comandos, Apps Script registra la ejecución, incluidos los registros de Cloud. Estos registros pueden ayudarte a comprender qué acciones realizó tu 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.Cómo verificar el estado del servicio de Apps Script
Aunque es poco común, a veces, servicios específicos de Google Workspace (como Gmail o Drive) tienen 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 produce 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 tu 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 alcanza un punto de interrupción, que es una línea que destacaste en tu secuencia de comandos y que crees que puede tener un problema. Cuando una secuencia de comandos se detiene, 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 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:
Ejecuta un script en modo de depuración
Para ejecutar la secuencia de comandos en modo de depuración, haz clic en Depurar 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, usa los botones "Paso a paso", "Paso a paso por encima" y "Paso a paso para salir" en la parte superior del panel de Debugger. Estos te permiten ejecutar el script línea por línea y observar cómo cambian los valores con el tiempo.
Error: El código fuente de la línea actual no está disponible
Este error aparece cuando no hay disponible un archivo de depuración activo.
Google Apps Script no admite la visualización de secuencias de comandos de JavaScript (JS) generadas de forma dinámica en el editor de secuencias de comandos, como las que se generan con eval()
y new Function()
. Estas secuencias de comandos se crean y ejecutan dentro del motor V8, pero no se representan como archivos independientes en el editor.
Si ingresas paso a paso en estos secuencias de comandos, encontrarás este error.
Por ejemplo, considera el siguiente código:
function myFunction() {
eval('a=2');
}
Cuando se invoca eval()
, su argumento se trata como código de JS y se ejecuta como una secuencia de comandos creada de forma dinámica dentro del motor de V8. Si ingresas en eval()
, aparecerá este error. Si la secuencia de comandos incluye un comentario //# sourceURL
, su nombre se muestra en la pila de llamadas. De lo contrario, aparecerá como una entrada sin nombre.
A pesar del mensaje de error, la sesión de depuración permanece activa y la ejecución puede continuar. Para continuar, sigue los pasos para entrar, salir o reanudar la ejecución. Sin embargo, este error seguirá apareciendo mientras la ejecución permanezca dentro del alcance de la secuencia de comandos dinámica. Después de que la ejecución sale del script dinámico, la depuración continúa sin este error.
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, los complementos ni las aplicaciones web.
Si abres el editor de Apps Script mientras accediste 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 aplicación web a los 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 tiene el complemento o la aplicación web a los que quieres acceder.
Cómo obtener ayuda
Depurar un problema con las herramientas y técnicas mencionadas anteriormente puede resolver una variedad de problemas, pero es posible que te encuentres con problemas que requieran ayuda adicional para resolverlos. Consulta nuestra página de asistencia para obtener información sobre dónde hacer preguntas y registrar errores.