Google Spreadsheet 팝업

function showAlert() {
  const ui = SpreadsheetApp.getUi()
  ui.alert('팝업 창', '표시할 텍스트', ui.ButtonSet.OK)
}

// 메뉴에 추가
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('팝업 메뉴')
    .addItem('팝업 띄우기', 'showAlert')
    .addToUi()
}
#337

Google Apps Script 캘린더 예약 시스템 - 시간 슬롯 조회 및 예약 구현

fetchAvailability - 지정된 조건(근무 요일, 시간, 이벤트 충돌)에 따라 예약 가능한 시간 슬롯 조회

flowchart LR
    A[시작] --> B[가장 가까운 슬롯 계산]
    B --> C[예약 기간 설정]
    C --> D[바쁜 일정 조회]
    D --> E[가능한 슬롯 필터링]
    E --> F[예약 가능한 슬롯 반환]
    F --> G[종료]
  1. 현재 시간을 기준으로 가장 가까운 시간 슬롯을 계산합니다. (슬롯 길이는 TIMESLOT_DURATION에 따라 설정됩니다.)
  2. 28일(DAYS_IN_ADVANCE) 동안의 일정 기간을 설정합니다.
  3. Calendar.Freebusy.query를 사용하여 지정된 캘린더(CALENDAR)의 바쁜 일정(busy events)을 조회합니다.
  4. 조회된 이벤트를 기반으로 조건에 맞지 않는 시간 슬롯을 제외합니다:
    • 지정된 근무 시간(WORKHOURS.start, WORKHOURS.end) 외의 시간.
    • 근무일(WORKDAYS)이 아닌 요일.
    • 다른 이벤트와 시간이 겹치는 경우.
  5. 예약 가능한 시간 슬롯을 ISO 8601 형식의 문자열로 저장하고 반환합니다.

bookTimeslot - 선택한 시간 슬롯에 이벤트 생성. 성공 시 Calendar에 추가, 확인 메시지 반환.

flowchart TD
    A[시작] --> B[사용자 입력 수신]
    B --> C[시간 슬롯 유효성 검증]
    C --> D[이벤트 충돌 확인]
    D --> E{이벤트가 존재합니까?}
    E -- 예 --> F[에러 반환]
    E -- 아니오 --> G[이벤트 생성]
    G --> H[성공 메시지 반환]
    F --> I[종료]
    H --> I
  1. 사용자가 선택한 시간 슬롯(timeslot)과 추가 정보(이름, 이메일, 전화번호, 메모)를 인수로 받습니다.
  2. 시간 슬롯의 유효성을 검증하고, TIMESLOT_DURATION을 기준으로 종료 시간을 계산합니다.
  3. Calendar.Freebusy.query를 통해 선택한 시간 동안 다른 이벤트가 있는지 확인합니다.
    • 이벤트가 겹치면 예약이 불가능하다는 에러 메시지를 반환합니다.
  4. 겹치는 이벤트가 없다면, CalendarApp.getCalendarById를 사용하여 Google Calendar에 새로운 이벤트를 생성합니다:
    • 이벤트 제목: 사용자 이름이 포함된 약속 제목.
    • 이벤트 설명: 전화번호와 메모를 포함합니다.
    • 초대된 손님: 제공된 이메일로 초대합니다.
    • 초대 메일 발송(sendInvites: true).
  5. 예약 성공 여부를 메시지로 반환합니다.

사용 플로우: 시간 조회 → 시간 선택 → bookTimeslot → 이벤트 생성 → 초대 이메일 발송


#329