จัดการเวลาที่ต้องการสมาธิ การลางาน และกิจกรรมสถานที่ทำงาน

หน้านี้จะอธิบายวิธีใช้ API ของ Google ปฏิทินเพื่อสร้างกิจกรรมที่แสดงสถานะของผู้ใช้ Google ปฏิทิน เหตุการณ์สถานะจะอธิบายตำแหน่งของผู้ใช้หรือสิ่งที่พวกเขากำลังทำ เช่น อยู่ในเวลาที่ต้องการสมาธิ การลางาน หรือการทำงานจากสถานที่ใดสถานที่หนึ่ง

ใน Google ปฏิทิน ผู้ใช้สามารถสร้างกิจกรรมเกี่ยวกับเวลาที่ต้องการสมาธิ การลางาน และกิจกรรมจากสถานที่ทำงาน เพื่อระบุสถานะและสถานที่ที่กำหนดเอง ฟีเจอร์เหล่านี้จะใช้ได้เฉพาะในปฏิทินหลักและสำหรับผู้ใช้ Google ปฏิทินบางรายเท่านั้น

โปรดดูรายละเอียดเพิ่มเติมที่หัวข้อใช้เวลาที่ต้องการสมาธิใน Google ปฏิทินและเปิดหรือปิดสถานที่ทำงานสำหรับผู้ใช้

อ่านและแสดงรายการกิจกรรมสถานะในปฏิทิน

คุณอ่านและแสดงรายการกิจกรรมสถานะปฏิทินได้ในทรัพยากร Events ของ API ปฏิทิน

หากต้องการอ่านเหตุการณ์สถานะ ให้ใช้เมธอด events.get โดยระบุ eventId ของเหตุการณ์

หากต้องการแสดงรายการเหตุการณ์สถานะ ให้ใช้เมธอด events.list โดยระบุค่าต่อไปนี้อย่างน้อย 1 ค่าในช่อง eventTypes

  • 'focusTime'
  • 'outOfOffice'
  • 'workingLocation'

จากนั้นในออบเจ็กต์ Event ที่แสดงผล ให้ตรวจสอบว่าช่อง eventType มีค่าที่ขอ จากนั้นดูรายละเอียดเกี่ยวกับสถานะที่ผู้ใช้สร้างใน Google ปฏิทินในช่องที่เกี่ยวข้อง

สมัครรับการเปลี่ยนแปลงเหตุการณ์สถานะ

คุณติดตามการเปลี่ยนแปลงกิจกรรมสถานะได้ในทรัพยากร Events ของ Calendar API

ใช้เมธอด events.watch โดยระบุ calendarId ของปฏิทินที่จะสมัครใช้บริการ และค่าต่อไปนี้อย่างน้อย 1 ค่าในช่อง eventTypes

  • 'focusTime'
  • 'outOfOffice'
  • 'workingLocation'

สร้างและอัปเดตกิจกรรมสถานะในปฏิทิน

หากต้องการสร้างเหตุการณ์สถานะ คุณต้องสร้างอินสแตนซ์ของทรัพยากร Events โดยใช้เมธอด events.insert แล้วตั้งค่าฟิลด์ที่จำเป็นสำหรับประเภทเหตุการณ์

หากคุณอัปเดตเหตุการณ์สถานะโดยใช้เมธอด events.update เหตุการณ์ดังกล่าวต้องมีช่องที่ต้องกรอกต่อไป

สร้างเวลาที่ต้องการสมาธิ

วิธีสร้างกิจกรรมที่ต้องการสมาธิ

  • ตั้งค่า eventType เป็น 'focusTime'
  • รวมช่อง focusTimeProperties
  • ตั้งค่าช่อง transparency เป็น 'opaque'
  • ตั้งค่าช่อง start และ end ของเหตุการณ์เป็นเหตุการณ์ที่กำหนดเวลาไว้ (พร้อมเวลาเริ่มต้นและเวลาสิ้นสุด)
    เวลาที่ต้องการสมาธิไม่สามารถเป็นกิจกรรมตลอดทั้งวัน

โปรดดูรายละเอียดฟีเจอร์ที่หัวข้อใช้เวลาที่ต้องการสมาธิใน Google ปฏิทิน

สร้างการลางาน

วิธีสร้างกิจกรรมลางาน

  • ตั้งค่า eventType เป็น 'outOfOffice'
  • รวมช่อง outOfOfficeProperties
  • ตั้งค่าช่อง transparency เป็น 'opaque'
  • ตั้งค่าช่อง start และ end ของเหตุการณ์เป็นเหตุการณ์ที่กำหนดเวลาไว้ (พร้อมเวลาเริ่มต้นและเวลาสิ้นสุด)
    กิจกรรมลางานต้องไม่ใช่กิจกรรมตลอดทั้งวัน

โปรดดูรายละเอียดฟีเจอร์ที่หัวข้อแสดงเมื่อคุณลางาน

สร้างสถานที่ทำงาน

วิธีสร้างกิจกรรมสถานที่ทำงาน

  • ตั้งค่า eventType เป็น 'workingLocation'
  • รวมช่อง workingLocationProperties
  • ตั้งค่าช่อง visibility เป็น 'public'
  • ตั้งค่าช่อง transparency เป็น 'transparent'
  • ตั้งค่าช่อง start และ end ของกิจกรรมเป็นอย่างใดอย่างหนึ่งต่อไปนี้

    • เหตุการณ์ที่มีกำหนดเวลา (ซึ่งระบุเวลาเริ่มต้นและเวลาสิ้นสุด)
    • กิจกรรมที่เกิดทั้งวัน (ซึ่งมีการระบุวันที่เริ่มต้นและวันที่สิ้นสุด) ที่กินเวลา 1 วันพอดี

    กิจกรรมสถานที่ทำงานแบบตลอดวันต้องไม่ครอบคลุมหลายวัน แต่เหตุการณ์ที่มีกำหนดเวลาได้

ช่องต่อไปนี้ไม่บังคับ แต่แนะนำให้ใช้เพื่อให้ผู้ใช้ได้รับประสบการณ์ที่ดีที่สุดเมื่อใส่ officeLocation

  • workingLocationProperties.officeLocation.buildingId: ควรตรงกับ buildingId ในฐานข้อมูลทรัพยากรขององค์กร ซึ่งจะช่วยให้ผู้ใช้ได้รับประโยชน์จากฟีเจอร์ทั้งหมดของปฏิทิน เช่น การแนะนำห้อง
  • workingLocationProperties.officeLocation.label: คือป้ายกำกับที่แสดงในเว็บปฏิทินและไคลเอ็นต์ในอุปกรณ์เคลื่อนที่ คุณดึงข้อมูลรหัสอาคารและป้ายกำกับอาคารได้โดยใช้เมธอด resources.buildings.list

ระบบไม่รองรับการสร้างและอัปเดตเหตุการณ์สถานที่ทำงานผ่านปลายทางแบบกลุ่ม

โปรดดูรายละเอียดฟีเจอร์ที่หัวข้อกำหนดเวลาและสถานที่ทำงานและเปิดหรือปิดสถานที่ทำงานสำหรับผู้ใช้

วิธีแสดงกิจกรรมสถานที่ทำงานที่ทับซ้อนกัน

ผู้ใช้สามารถมีกิจกรรมสถานที่ทำงานหลายกิจกรรมพร้อมกันในปฏิทินของตนซึ่งจะทับซ้อนกัน ซึ่งหมายความว่าช่วงเวลาหนึ่งอาจมีสถานที่ทำงานหลายแห่งที่กำหนดไว้สำหรับกิจกรรมนี้ ในกรณีที่ผู้ใช้แสดงได้เพียงตำแหน่งเดียว ก็ควรแสดงตำแหน่งนั้นให้สอดคล้องกันในหลายแอปพลิเคชัน เมื่อดำเนินการนี้ ให้ใช้หลักเกณฑ์ต่อไปนี้เพื่อเลือกเหตุการณ์ที่จะแสดง

  • เหตุการณ์ที่มีกำหนดเวลาจะมีผลเหนือกว่าเหตุการณ์ตลอดทั้งวัน
  • กิจกรรมเดียวจะมีความสำคัญมากกว่ากิจกรรมที่เกิดซ้ำและข้อยกเว้น
  • เหตุการณ์ที่เริ่มต้นภายหลังจะมีลําดับความสําคัญเหนือกว่าเหตุการณ์ที่เริ่มต้นก่อน
  • เหตุการณ์ที่มีระยะเวลาสั้นจะมีความสำคัญมากกว่าเหตุการณ์ที่มีระยะเวลานานกว่า
  • เหตุการณ์ที่สร้างล่าสุดจะมีความสำคัญเหนือกว่าเหตุการณ์ที่สร้างขึ้นก่อนหน้านี้
  • กิจกรรมที่ซ้อนทับกันบางส่วนควรแสดงเป็น 2 กิจกรรมที่ต่างกัน โดยแต่ละกิจกรรมมีสถานที่ทำงานของตัวเอง

สร้างกิจกรรมสถานะใน Google Apps Script

Google Apps Script คือภาษาสคริปต์ในระบบคลาวด์แบบ JavaScript ที่ช่วยให้คุณสร้างแอปพลิเคชันทางธุรกิจที่ผสานรวมกับ Google Workspace ได้ สคริปต์ได้รับการพัฒนาในตัวแก้ไขโค้ดที่ทำงานบนเบราว์เซอร์ และจะจัดเก็บและเรียกใช้สคริปต์บนเซิร์ฟเวอร์ของ Google โปรดดูเพิ่มเติมที่การเริ่มต้น Google Apps Script อย่างรวดเร็วเพื่อเริ่มใช้ Apps Script เพื่อส่งคำขอไปยัง Google Calendar API

คำแนะนำต่อไปนี้อธิบายวิธีจัดการกิจกรรมสถานะโดยใช้ API ของ Google ปฏิทินเป็นบริการขั้นสูงใน Google Apps Script ดูทรัพยากรและวิธี Google ปฏิทิน API ทั้งหมดได้ในเอกสารอ้างอิง

สร้างและตั้งค่าสคริปต์

  1. สร้างสคริปต์โดยไปที่ script.google.com/create
  2. ในแผงด้านซ้ายถัดจาก Services ให้คลิก "เพิ่มบริการ"
  3. เลือก Google Calendar API แล้วคลิกเพิ่ม
  4. หลังจากเปิดใช้แล้ว API จะปรากฏในแผงด้านซ้าย วิธีการและคลาสที่ใช้ได้ใน API สามารถแสดงโดยใช้คีย์เวิร์ดปฏิทินในตัวแก้ไข

(ไม่บังคับ) อัปเดตโปรเจ็กต์ Google Cloud

โปรเจ็กต์ Google Apps Script แต่ละโปรเจ็กต์มีโปรเจ็กต์ Google Cloud ที่เชื่อมโยง สคริปต์จะใช้โปรเจ็กต์เริ่มต้นที่ Google Apps Script สร้างขึ้นโดยอัตโนมัติได้ หากต้องการใช้โปรเจ็กต์ Google Cloud ที่กำหนดเอง ให้ทำตามขั้นตอนต่อไปนี้เพื่ออัปเดตโปรเจ็กต์ที่เชื่อมโยงกับสคริปต์

  1. คลิกการตั้งค่าโปรเจ็กต์ ทางด้านซ้ายของเครื่องมือแก้ไข
  2. ในส่วนโครงการ Google Cloud Platform (GCP) ให้คลิกเปลี่ยนโครงการ
  3. ป้อนหมายเลขโปรเจ็กต์ของโปรเจ็กต์ Google Cloud ที่อยู่ในโปรแกรมทดลองใช้สำหรับนักพัฒนาซอฟต์แวร์ แล้วคลิกตั้งค่าโปรเจ็กต์
  4. ทางด้านซ้าย ให้เลือก Editor เพื่อกลับไปที่ตัวแก้ไขโค้ด

เพิ่มโค้ดลงในสคริปต์

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีสร้าง อ่าน และแสดงรายการกิจกรรมสถานะในปฏิทินหลัก

  1. วางโค้ดต่อไปนี้ลงในตัวแก้ไขโค้ด

    /** Creates a focus time event. */
    function createFocusTime() {
      const event = {
        start: { dateTime: '2023-11-14T10:00:00+01:00' },
        end: { dateTime: '2023-11-14T12:00:00+01:00' },
        eventType: 'focusTime',
        focusTimeProperties: {
          chatStatus: 'doNotDisturb',
          autoDeclineMode: 'declineOnlyNewConflictingInvitations',
          declineMessage: 'Declined because I am in focus time.',
        }
      }
      createEvent(event);
    }
    
    /** Creates an out of office event. */
    function createOutOfOffice() {
      const event = {
        start: { dateTime: '2023-11-15T10:00:00+01:00' },
        end: { dateTime: '2023-11-15T18:00:00+01:00' },
        eventType: 'outOfOffice',
        outOfOfficeProperties: {
          autoDeclineMode: 'declineOnlyNewConflictingInvitations',
          declineMessage: 'Declined because I am on vacation.',
        }
      }
      createEvent(event);
    }
    
    /** Creates a working location event. */
    function createWorkingLocation() {
      const event = {
        start: { date: "2023-06-01" },
        end: { date: "2023-06-02" },
        eventType: "workingLocation",
        visibility: "public",
        transparency: "transparent",
        workingLocationProperties: {
          type: 'customLocation',
          customLocation: { label: "a custom location" },
        }
      }
      createEvent(event);
    }
    
    /**
      * Creates a Calendar event.
      * See https://developers.google.com/calendar/api/v3/reference/events/insert
      */
    function createEvent(event) {
      const calendarId = 'primary';
    
      try {
        var response = Calendar.Events.insert(event, calendarId);
        var event = (response.eventType === 'workingLocation') ? parseWorkingLocation(response) : response;
        console.log(event);
      } catch (exception) {
        console.log(exception.message);
      }
    }
    
    /**
      * Reads the event with the given eventId.
      * See https://developers.google.com/calendar/api/v3/reference/events/get
      */
    function readEvent() {
      const calendarId = 'primary';
    
      // Replace with a valid eventId.
      const eventId = "sample-event-id";
    
      try {
        var response = Calendar.Events.get(calendarId, eventId);
        var event = (response.eventType === 'workingLocation') ? parseWorkingLocation(response) : response;
        console.log(event);
      } catch (exception) {
        console.log(exception.message);
      }
    }
    
    /** Lists focus time events. */
    function listFocusTimes() {
      listEvents('focusTime');
    }
    
    /** Lists out of office events. */
    function listOutOfOffices() {
      listEvents('outOfOffice');
    }
    
    /** Lists working location events. */
    function listWorkingLocations() {
      listEvents('workingLocation');
    }
    
    /**
      * Lists events with the given event type.
      * See https://developers.google.com/calendar/api/v3/reference/events/list
      */
    function listEvents(eventType = 'default') {
      const calendarId = 'primary'
    
      // Query parameters for the list request.
      const optionalArgs = {
        eventTypes: [eventType],
        showDeleted: false,
        singleEvents: true,
        timeMax: '2023-04-01T00:00:00+01:00',
        timeMin: '2023-03-27T00:00:00+01:00',
      }
      try {
        var response = Calendar.Events.list(calendarId, optionalArgs);
        response.items.forEach(event =>
          console.log(eventType === 'workingLocation' ? parseWorkingLocation(event) : event));
      } catch (exception) {
        console.log(exception.message);
      }
    }
    
    /**
      * Parses working location properties of an event into a string.
      * See https://developers.google.com/calendar/api/v3/reference/events#resource
      */
    function parseWorkingLocation(event) {
      if (event.eventType != "workingLocation") {
        throw new Error("'" + event.summary + "' is not a working location event.");
      }
    
      var location = 'No Location';
      const workingLocation = event.workingLocationProperties;
      if (workingLocation) {
        if (workingLocation.type === 'homeOffice') {
          location = 'Home';
        }
        if (workingLocation.type === 'officeLocation') {
          location = workingLocation.officeLocation.label;
        }
        if (workingLocation.type === 'customLocation') {
          location = workingLocation.customLocation.label;
        }
      }
      return `${event.start.date}: ${location}`;
    }
    

เรียกใช้ตัวอย่างโค้ด

  1. ที่ด้านบนของตัวแก้ไขโค้ด ให้เลือกฟังก์ชันที่จะเรียกใช้จากเมนูแบบเลื่อนลง แล้วคลิกเรียกใช้
  2. เมื่อดำเนินการครั้งแรก ระบบจะแจ้งให้คุณให้สิทธิ์เข้าถึง ตรวจสอบและอนุญาตให้ Apps Script เข้าถึงปฏิทินของคุณ
  3. คุณตรวจสอบผลการดำเนินการของสคริปต์ได้ในบันทึกการดำเนินการที่ปรากฏที่ด้านล่างของหน้าต่าง