No puedo ejecutar Google Apps Script para mi Gmail
Seguí el script publicado en ¿ Alguna forma de enviar la respuesta automática de Gmail en determinados momentos de la semana? . Sin embargo, mi cuenta de Gmail no respondió ningún mensaje durante las horas fuera de trabajo según mi prueba actual.
¿Hice algo incorrecto o incompleto?
Que he hecho:
- Creó un guión en https://script.google.com/ mediante copiar y pegar.
- Guardé el guión y lo probé. Funcionó bien. ingrese la descripción de la imagen aquí
function myFunction() {
function autoReply() {
var interval = 5; // if the script runs every 5 minutes; change otherwise
var date = new Date();
var day = date.getDay();
var hour = date.getHours();
if ([4,5,6,0].indexOf(day) > -1 || (day == 1 && hour < 9) || (day == 3 && hour >= 17)) {
var timeFrom = Math.floor(date.valueOf()/1000) - 60 * interval;
var threads = GmailApp.search('is:inbox after:' + timeFrom);
for (var i = 0; i < threads.length; i++) {
if (threads[i].isUnread()){
threads[i].reply("xxxx");
threads[i].markRead();
threads[i].markImportant();
}
}
}
}
}
- Habilitado la API de Gmail a través del menú "Servicios avanzados de Google" ingrese la descripción de la imagen aquí
- Configure un disparador para el guión cada 5 minutos. ingrese la descripción de la imagen aquí
- Envió varios correos electrónicos de prueba desde otra cuenta de Gmail para ver si habría alguna respuesta automática.
- No modificó manualmente ningún correo electrónico recibido de otra cuenta.
¡Cualquier sugerencia será muy apreciada!
Actualización: Me pregunto por qué la siguiente secuencia de comandos en sí misma dará como resultado un error "Función de secuencia de comandos no encontrada: myFunction".
function autoReply() {
// find calendar event
var today = new Date();
var events = CalendarApp.getDefaultCalendar().getEventsForDay(today, { search: 'OOF' });
var unavailableToday = false;
for (var i = 0; i < events.length; i++) {
if(events[i].isAllDayEvent() && events[i].isOwnedByMe()) {
unavailableToday = true;
break;
}
}
var myEmail = Session.getEffectiveUser().getEmail();
Logger.log('unavailableToday');
Logger.log(unavailableToday);
if(unavailableToday === true) {
// get html message
var files = DriveApp.getRootFolder().getFilesByName('autoreply.html');
var htmlbody;
while (files.hasNext()) {
var file = files.next();
htmlbody = file.getBlob().getDataAsString('utf8');
}
// get emails
var interval = 2;
var date = new Date();
var timeFrom = Math.floor(date.valueOf()/1000) - 60 * interval;
var threads = GmailApp.search('is:inbox !label:autoresponded after:' + timeFrom);
var label = GmailApp.getUserLabelByName("autoresponded");
for (var i = 0; i < threads.length; i++) {
var message = threads[i].getMessages()[0];
if (message.getFrom().indexOf(myEmail) < 0 && message.getFrom().indexOf("no-repl") < 0 && message.getFrom().indexOf("bounce") < 0 && message.getFrom().indexOf("spam") < 0) {
Logger.log("Replied now");
// reply
threads[i].reply("", {
htmlBody: htmlbody
});
// label
label.addToThread(threads[i]);
}
}
}
}
¿Qué me hizo pensar que MyFunction {} es esencial?
Respuestas
Respuesta:
Debe eliminar la autoReply()función fuera de myFunction()y activar el disparador autoReply().
Más información:
El código debería verse como en la respuesta que vinculó:
function autoReply() {
var interval = 5; // if the script runs every 5 minutes; change otherwise
var date = new Date();
var day = date.getDay();
var hour = date.getHours();
if ([5,6,0].indexOf(day) > -1 || (day == 1 && hour < 8) || (day == 4 && hour >= 17)) {
var timeFrom = Math.floor(date.valueOf()/1000) - 60 * interval;
var threads = GmailApp.search('is:inbox after:' + timeFrom);
for (var i = 0; i < threads.length; i++) {
threads[i].reply("I am out of office. Your email will not seen until Monday morning.");
}
}
}
NO como esto:
function myFunction() {
function autoReply() {
var interval = 5; // if the script runs every 5 minutes; change otherwise
var date = new Date();
var day = date.getDay();
var hour = date.getHours();
if ([5,6,0].indexOf(day) > -1 || (day == 1 && hour < 8) || (day == 4 && hour >= 17)) {
var timeFrom = Math.floor(date.valueOf()/1000) - 60 * interval;
var threads = GmailApp.search('is:inbox after:' + timeFrom);
for (var i = 0; i < threads.length; i++) {
threads[i].reply("I am out of office. Your email will not seen until Monday morning.");
}
}
}
}
autoReply()no se llama cuando llama myFunction(), solo se declara.
Deberá editar el código y luego volver a configurar su disparador para que se ejecute autoReply().
Desde w3schools :
Las funciones declaradas no se ejecutan inmediatamente. Se "guardan para su uso posterior" y se ejecutarán más tarde, cuando se invoquen (invoquen).
¡Espero que esto te sea de ayuda!
Referencias:
- Definiciones de funciones de JavaScript - w3schools