Bắt đầu nhanh: Kiểm tra tình hình tham dự của học viên trong các khoá học trên Google Meet

Hoàn tất các bước trên trang này để tạo một tiện ích bổ sung của Google Trang tính giúp theo dõi việc tham gia các khoá học của Google Lớp học được phân phối bằng cách sử dụng tính năng hội nghị truyền hình của Google Meet. Hình ảnh sau đây cho thấy một khóa học có tham dự được ghi lại:

Thiết lập

Bạn có thể thực hiện các bước sau để thiết lập tính năng bắt đầu nhanh này:

  1. Tạo Google Trang tính mới.
  2. Từ trong trang tính mới của bạn, hãy chọn mục trong trình đơn Tiện ích > Apps Script. Nếu bạn thấy màn hình chào mừng, hãy nhấp vào Dự án trống.
  3. Xóa mã trong trình chỉnh sửa tập lệnh.
  4. Nhấp vào "Dự án không có tiêu đề" tên dự án và đổi tên thành "Tham dự&"
  5. Nhấp vào Tài nguyên > Các dịch vụ nâng cao của Google.
  6. Trong hộp thoại xuất hiện, hãy tìm và nhấp vào nút chuyển bật/tắt cho API Google Lớp họcAPI báo cáo của quản trị viên.
  7. Nhấp vào mũi tên xuống ở bên phải tên tệp Code.js.
  8. Chọn Đổi tên.
  9. Đổi tên tệp thành " Xuất hiện."
  10. Sao chép và dán mã sau vào trình chỉnh sửa tập lệnh:
/* 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. Chọn Tệp > Lưu tất cả.

Chạy thử ứng dụng

Hãy làm theo các bước sau để thử cách bắt đầu nhanh này:

  1. Quay lại bảng tính của bạn và tải lại trang. Trình đơn Tuỳ chọn xuất hiện trên thanh trình đơn.
  2. Nhấp vào Tùy chọn > Nhập 5 khóa học gần đây nhất. Một hộp thoại sẽ xuất hiện cho biết tập lệnh cần được cho phép.
  3. Nhấp vào Tiếp tục. Một hộp thoại thứ hai yêu cầu uỷ quyền cho các dịch vụ cụ thể của Google. Hãy nhấp vào Cho phép. Bảng tính hiện chứa một trang tính, được biểu thị bằng một thẻ ở dưới cùng, cho mỗi khóa học của bạn trong số 5 khóa học vừa qua. Mỗi khoá học có một danh sách người tham gia khoá học trong cột đầu tiên và mã Google Meet trên hàng trên cùng.
  4. Nhấp vào một trong các trang tính của khóa học.
  5. Nhấp vào Tùy chọn > Kiểm tra tình hình tham dự trên Trang tính hiện tại. Trạng thái tham gia sẽ được nhập vào mã Google Meet của khoá học hiện tại.
  6. Lặp lại các bước 4 và 5 cho 4 lớp khác.

Xuất bản

Vì đây là một tiện ích bổ sung mẫu, nên hướng dẫn của chúng tôi kết thúc tại đây. Nếu bạn đang phát triển một tiện ích bổ sung thực sự, bước cuối cùng là phát hành tiện ích bổ sung để người khác tìm và cài đặt.

Tạo ứng dụng chấm điểm bằng ngôn ngữ khác

Bạn cũng có thể tạo ứng dụng chấm điểm hoặc thêm chức năng tham dự vào một ứng dụng học tập từ xa hiện có bằng các API REST hoặc thư viện tương ứng của chúng tôi.

Các API REST được sử dụng trong bước bắt đầu nhanh này là:

Tên phương thức trong trình đơn khởi động nhanh này giống với tên của các API REST này. Ví dụ: AdminReports.Activities.list tương ứng với Activities.list trong API Google Báo cáo.

Tìm hiểu thêm

Để tiếp tục tìm hiểu cách mở rộng Google Trang tính bằng Apps Script, hãy xem các tài nguyên sau: