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

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

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

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

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

คุณสามารถอ่านและแสดงรายการเหตุการณ์สถานะปฏิทินในแหล่งข้อมูล Events ของปฏิทิน API

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

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

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

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

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

คุณสามารถสมัครรับข้อมูลการเปลี่ยนแปลงในเหตุการณ์สถานะในทรัพยากร Events ของปฏิทิน 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 quickstart เพื่อเริ่มต้นใช้งาน Apps Script ในการส่งคำขอไปยัง Google Calendar API

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

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

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

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

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

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

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

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

  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. คุณสามารถตรวจสอบผลลัพธ์ของการเรียกใช้สคริปต์ได้ในบันทึกการดำเนินการที่ปรากฏที่ด้านล่างของหน้าต่าง