빠른 시작: Google Meet 과정의 학생 출석 확인

이 페이지의 단계를 완료하여 Google Meet 회의를 사용하여 제공된 Google 클래스룸 과정의 참석을 추적하는 Google Sheets 부가기능을 만듭니다. 다음 이미지는 출석이 기록된 과정을 보여줍니다.

설정

이 빠른 시작을 설정하려면 다음 단계를 따르세요.

  1. 새 Google 시트 만들기
  2. 새 시트에서 메뉴 항목 확장 프로그램 > Apps Script를 선택합니다. 시작 화면이 표시되면 빈 프로젝트를 클릭합니다.
  3. 스크립트 편집기에서 코드를 삭제합니다.
  4. '제목 없는 프로젝트' 프로젝트 이름을 클릭하고 '참석'으로 이름을 변경합니다.
  5. 리소스 > 고급 Google 서비스를 클릭합니다.
  6. 대화상자가 표시되면 Google Classroom APIAdmin Reports API사용/사용 중지 스위치를 찾아 클릭합니다.
  7. Code.js 파일 이름 오른쪽에 있는 아래쪽 화살표를 클릭합니다.
  8. 이름 바꾸기를 선택합니다.
  9. 파일 이름을 "참석만'으로 변경합니다.
  10. 다음 코드를 복사하여 스크립트 편집기에 붙여넣습니다.
/* 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. 파일 > 모두 저장을 선택합니다.

사용해 보기

이 빠른 시작을 사용하려면 다음 단계를 따르세요.

  1. 스프레드시트로 다시 전환하고 페이지를 새로고침합니다. 메뉴 바에 옵션 메뉴가 나타납니다.
  2. 옵션 > 과정 5개 가져오기를 클릭합니다. 스크립트에 승인이 필요함을 나타내는 대화상자가 나타납니다.
  3. 계속을 클릭합니다. 두 번째 대화상자에서 특정 Google 서비스의 승인을 요청합니다. 허용을 클릭합니다. 이제 스프레드시트에 마지막 5개 과정 각각에 대한 탭으로 표시되는 시트가 하나의 탭으로 표시됩니다. 각 과정의 첫 번째 열에는 과정 참석자 목록이, 상단 행에는 Google Meet ID가 표시됩니다.
  4. 과정 시트 중 하나를 클릭합니다.
  5. 옵션 > 현재 시트에서 참석 확인을 클릭합니다. 현재 과정의 Google Meet ID에 참석합니다.
  6. 4개의 클래스도 4단계와 5단계를 반복합니다.

게시

이는 부가기능의 예이므로 이 튜토리얼은 여기까지입니다. 실제 부가기능을 개발했다면 마지막 단계는 다른 사용자가 찾아 설치할 수 있도록 게시하는 것입니다.

다른 언어로 참석 앱 만들기

REST API 또는 해당 라이브러리를 사용하여 참석 앱을 만들거나 기존 원격 학습 앱에 참석 기능을 추가할 수도 있습니다.

이 빠른 시작에서 사용하는 REST API는 다음과 같습니다.

이 빠른 시작의 메서드 이름은 REST API의 이름과 동일합니다. 예를 들어 AdminReports.Activities.list는 Google Reports API의 Activities.list에 해당합니다.

자세히 알아보기

Apps Script를 사용하여 Google Sheets를 확장하는 방법을 계속 알아보려면 다음 리소스를 살펴보세요.