gmail에서 달력의 데이트 자동 생성 및 삭제

너 뭐 했어?

  • 골프과정의 예약 및 취소 메일에서 달력의 예약을 자동으로 수정
  • 개시하다


    한 사람이 계속 싸우면 발전이 전혀 없고 개회비를 기념하기 위해 입회비가 줄어든다지구골프대학.
    월액제는 출입이 자유로워 자주 가지만 골프 수업 예약은 달력에서 수작업으로 하기가 번거롭다.
    다른 회원들이 취소하고 빈칸으로 바꾸려는 등의 이유로 취소했다가 다시 예약하는 경우가 많았다.
    예약·취소 알림 메일이 비워져 있어 달력에 예약을 자동 제작할 수 있다는 생각도 들지만...
    종료 시간이 기재되지 않아 자동 제작되지 않았다.
    안 될 것 같으면 직접 쓰면 되잖아. 그래서 찾아보면 되지. 그래서 처음으로 GAS를 만졌어.

    메일에서 달력에서 데이트 만들기 및 삭제


    GAS를 만질 때 참고Gmail에서 GAS를 사용하여 Google Calendar에 자동 로그인.
    스크립트는 여기.입니다.
    대상의 메일은 다음과 같다.
    xx xx 様
    
    お申込みありがとうございます。
    下記日程でレッスンの受付をいたしました。
    
    日時:2021年xx月xx日(x) xx:00~
    
    お問い合わせは下記までご連絡ください。
    ------------------------------------------------
    アースゴルフxxxx
    TEL : xx-xxxx-xxxx
    E-MAIL : [email protected]
    ------------------------------------------------
    

    GAS 만들기

  • Google 드라이브 열기
  • 신규 > 기타 > Google Apps Script
  • 선택

    초기 실행 시 허용 권한


  • 클릭実行

  • 클릭権限を確認
  • 적당한 계좌 선택

  • 클릭詳細

  • 클릭<プロジェクト名>(安全でないページ)に移動
  • <プロジェクト名>が Google アカウントへのアクセスをリクエストしています로 표시되고 許可
  • 를 클릭합니다.

    예약 메일에서 자동으로 계획 만들기


    이 부분은 기본적으로 원형을 유지하고 처리는 다음과 같다.

  • query 단서 가져오기 지정하기
    const threads = GmailApp.search(query, 0, 5);
    

  • 단서의 모든 정보를 확인하다
    for (var i in threads) {
      const thread = threads[i];
      const messages = thread.getMessages()
      for (var j in messages) {
          // 処理
      }
    }
    

  • 별표가 없는 경우 다음과 같이 처리한다.
  • 예약 정보 지우기parseReserve
  • 우편물에 협조하여 퍼스의 조건을 고쳐야 한다
  • DATE_PREFIX (i.e. 日時: )
  • 날짜 부분
  • 종료 시간 설정
  • 달력에서 데이트 만들기createEvent
  • 스레드에 레이블 추가
  • 메시지에 스타 추가
  •     if (!messages[j].isStarred()) {
          callback(messages[j])
          label.addToThread(thread)
          messages[j].star()
        }
    
    자동 처리 후 스타를 여는 게 불편할 것 같아 반복 실험을 해봤지만
    압축 파일과 라벨이 라인에 주어졌기 때문에 사용할 수 없어서 좌절했습니다.
    하루 동안 여러 통의 메일을 보내지 않으면 라인이 생기지 않는다는 것을 알고 라벨만 붙이면 된다.

    취소 메일에서 데이트 자동 삭제


    계획을 세울 수 있다면 삭제할 수도 있겠지...라고 생각하고 착수했다.
    처리는 전항과 마찬가지로 달력에서 데이트를 만드는 부분만 다르다.
    삭제는 다음과 같이 처리됩니다.( deleteEvent )

  • 지정한 시간대의 이벤트 가져오기
    var calendarEvents = calendar.getEvents(startTime, endTime);
    

  • 각 이벤트의 제목 확인
    if (calendarEvent.getTitle() == TITLE) {
    

  • 해당 제목의 이벤트 삭제
    calendarEvent.deleteEvent()
    
  • 트리거 설정


    실행할 함수를 main로 유지하고 이벤트의 원본을 時間主導型로 설정합니다.
    매번 우편물을 받을 때마다 촉발할 수 없기 때문에 이런 대응 조치를 취했다.

    const의 샘플


    const 대상 메일에 따라 설정해야 한다.
    이번 지구골프학원의 상황은 다음과 같다.
    const QUERY_RESERVE = 'subject:(レッスンの予約が完了しました。)'
    const QUERY_CANCEL = 'subject:(レッスンの予約キャンセルが完了しました。)'
    const TITLE = "ゴルフレッスン"
    const LABEL = "アースゴルフアカデミー"
    const DATE_PREFIX = "日時:"
    

    감상

  • GAS는 어렵지 않고 편리합니다.진작 했어야 했는데...
  • 메일은 정형문이 많아서 다른 걸로 바꾸고 싶어요.
  • 헬스장 센터에서 입관 수속을 밟을 때 메일이 오기 때문에 이를 결합해서 만들었다각본.
  • 시간은메일 수신 시간
  • 체류시간은2시간
  • 가본 거 잊지 않고 편하게 (어? 저번에 언제 갔었어? 많이 안 남았어)
  • 계속할 수 있다는 것이 동력과 관련이 있다는 것을 절감하여 계수 횟수를 적어 슬랙의gas에 알렸다
  • 일후, 보도로 예정
  • Ref.

  • Gmail에서 GAS를 사용하여 Google Calendar에 자동 로그인
  • 좋은 웹페이지 즐겨찾기