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

หน้านี้จะอธิบายวิธีใช้ 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 การเริ่มต้นอย่างรวดเร็วเพื่อเริ่มใช้ Apps Script เพื่อส่งคำขอไปยัง Google Calendar API

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

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

  1. สร้างสคริปต์โดยไปที่ script.google.com/create.
  2. ที่บานหน้าต่างด้านซ้ายถัดจากบริการ ให้คลิกเพิ่มบริการ
  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. ทางด้านซ้าย ให้เลือกเครื่องมือแก้ไข เพื่อ ให้ไปที่ตัวแก้ไขโค้ด

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

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

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