Guía de inicio rápido: Verifica la asistencia de los alumnos en los cursos de Google Meet

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Completa los pasos que se indican en esta página para crear un complemento de Hojas de cálculo de Google que realice un seguimiento de la asistencia a los cursos de Google Classroom que se dictan con las reuniones de Google Meet. En la siguiente imagen, se muestra un curso con asistencia grabada:

Configurar

Sigue estos pasos para configurar esta guía de inicio rápido:

  1. Cree una nueva hoja de cálculo de Google.
  2. En la hoja nueva, selecciona el elemento de menú Extensiones > Apps Script. Si aparece una pantalla de bienvenida, haz clic en Blank Project.
  3. Borra el código en el editor de secuencias de comandos.
  4. Haz clic en el nombre de proyecto "Untitled project" y cambia el nombre a "Attendance".
  5. Haz clic en Recursos > Servicios avanzados de Google.
  6. En el cuadro de diálogo que aparece, busca y haz clic en el interruptor para activar o desactivar la API de Google Classroom y la API de informes del administrador.
  7. Haga clic en la flecha hacia abajo que se encuentra a la derecha del nombre del archivo Code.js.
  8. Selecciona Cambiar nombre.
  9. Cambia el nombre del archivo por "Attendance"
  10. Copie y pegue el siguiente código en el editor de secuencias de comandos:
/* Menu Options */
function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Options')
      .addItem("Import Last 5 Courses", 'importCourses')
      .addItem('Check Attendance on Current Sheet', 'checkAll')
      .addToUi();
}

/*
  Description: Option for teachers to import their
  most 5 recently created courses
*/
function importCourses() {
  var optionalArgs = {
    teacherId: 'me',
    courseStates: 'ACTIVE'
  };
  var response = Classroom.Courses.list(optionalArgs);
  var courses = response.courses
  for (var i = 0; i < courses.length; i++) {
    var courseName = courses[i].name
    var courseId = courses[i].id
    insertCourse(courseName, courseId)
  }
}

/*
  Description: Create the Sheet for Course
  @param {String} courseName - Name of Course
  @param {String} courseId - Corresponding Classroom ID
*/
function insertCourse(courseName, courseId) {
    var spreadsheetName = courseName + "(" + courseId + ")"
    var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var yourNewSheet = activeSpreadsheet.getSheetByName(spreadsheetName);

    if (yourNewSheet != null) {
        return
    }
    yourNewSheet = activeSpreadsheet.insertSheet();
    yourNewSheet.setName(spreadsheetName);
    yourNewSheet.appendRow(['Student Name', 'Email Address', 'Replace with Meet Code'])
    yourNewSheet.setFrozenRows(1)
    var studentNames = getRoster(courseId)["studentNames"]
    var studentEmails = getRoster(courseId)["studentEmails"]
    for (var i = 0; i < studentNames.length; i++) {
      yourNewSheet.appendRow([studentNames[i],studentEmails[i]])
    }
    yourNewSheet.autoResizeColumns(1, 2)
    yourNewSheet.setFrozenColumns(2)
  }

/*
  Description: Adds the course's students to the course sheet
  @param {String} courseId - Corresponding Classroom ID
*/
function getRoster(courseId) {
  var studentNames = []
  var studentEmails = []
  var optionalArgs = {
      pageSize: 100
  };
  var response = Classroom.Courses.Students.list(courseId, optionalArgs)
  var students = response.students

  for (var i = 0; i <= students.length; i++) {
    try {
      studentNames.push(students[i].profile.name.fullName)
      studentEmails.push(students[i].profile.emailAddress)
    } catch (err) {
       return { "studentNames":studentNames, "studentEmails":studentEmails }
   }
 }
}

/*
  Description: Retrieves the Meet code from the Course Sheet
  and uses helper function to check attendance
*/
function checkAll() {
  var ss = SpreadsheetApp.getActiveSheet();
  var sheet = ss.getDataRange().getValues();
  for (var i = 2; i < sheet.length * 100; i++){
    var meetCode = getCleanCode(sheet[0][i])
    // No Meet code given
    if (meetCode == null) {
      break;
    }
    else {
      // check whether each student was present in Meet
      checkMeet(meetCode, i+1);
    }
  }
}

/*
  Description: Checks the Meet for attendance of the given student
  @param {String} meetCode - Raw Meet Code from Course Sheet
  @param {Integer} index - Index corresponding to the Student's row
  in the Course Sheet
*/
function checkMeet(meetCode, index) {
  // universal settings - static
  var userKey = 'all';
  var applicationName = 'meet';
  var ss = SpreadsheetApp.getActiveSheet();
  var sheet = ss.getDataRange().getValues();
  for (var i = 0; i < sheet.length-1; i++) {
    var emailAddress = sheet[i+1][1]
    var optionalArgs = {
      event_name: "call_ended",
      filters: "identifier==" + emailAddress + ",meeting_code==" + meetCode
    };
    try {
      var response = AdminReports.Activities.list(userKey, applicationName, optionalArgs);
      var activities = response.items;
      if (activities == null) {
        markAbsent(ss,i+2,index)
      }
      else {
        markPresent(ss,i+2,index)
      }
    } catch (err) {
        continue
     }
  }
}

/*
  Description: Strips any "-' Characters to match needed format
  for Reports API
  @param {String} meetCode - Raw Meet Code from Course Sheet
*/
function getCleanCode(meetCode) {
  try{
    return meetCode.replace("/-/g","")
  } catch (err) { return meetCode; }
}

/*
  Description: Marks the student as absent for their corresponding cell
  @param {Object} sheet - Course Sheet object
  @param {Integer} i - Index of Sheet cell column to be filled
  @param {Integer} j - Index of Sheet cell row to be filled
*/
function markAbsent(sheet, i, j) {
    var cell = sheet.getRange(i, j);
    cell.setValue("Absent");
}

/*
  Description: Marks the student as absent for their corresponding cell
  @param {Object} sheet - Course Sheet object
  @param {Integer} i - Index of Sheet cell column to be filled
  @param {Integer} j - Index of Sheet cell row to be filled
*/
function markPresent(sheet, i, j) {
    var cell = sheet.getRange(i, j);
    cell.setValue("Present");
}
  1. Selecciona Archivo > Guardar todo.

Pruébalo

Sigue estos pasos para probar esta guía de inicio rápido:

  1. Vuelve a tu hoja de cálculo y vuelve a cargar la página. Aparecerá un menú Opciones en la barra de menú.
  2. Haz clic en Options > Import Last 5 Courses. Aparecerá un cuadro de diálogo que indica que la secuencia de comandos requiere autorización.
  3. Haga clic en Continue. Un segundo cuadro de diálogo solicita autorización para servicios de Google específicos. Haz clic en Permitir. La hoja de cálculo ahora contiene una hoja, que se representa con una pestaña en la parte inferior, para cada uno de los últimos 5 cursos. Cada curso tiene una lista de los asistentes del curso en la primera columna y los ID de Google Meet en la fila superior.
  4. Haz clic en una de las hojas del curso.
  5. Haz clic en Opciones > Comprobar asistencia en la hoja actual. Se ingresa la asistencia a los ID de Google Meet del curso actual.
  6. Repite los pasos 4 y 5 para las otras cuatro clases.

Publicar

Como este es un complemento de ejemplo, nuestro instructivo termina aquí. Si desarrollas un complemento real, el último paso es publicarlo para que otras personas lo encuentren y lo instalen.

Crear una app de asistencia en otro idioma

También puedes crear una app de asistencia o agregar la funcionalidad de asistencia a una app de aprendizaje a distancia existente con nuestras API de REST o las bibliotecas correspondientes.

Las API de REST que se usan en esta guía de inicio rápido son las siguientes:

Los nombres de los métodos en esta guía de inicio rápido son los mismos que en estas API de REST. Por ejemplo, AdminReports.Activities.list corresponde a Activities.list en la API de informes de Google.

Más información

Para obtener más información sobre cómo extender Hojas de cálculo de Google con Apps Script, consulta los siguientes recursos: