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

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

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

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

อ่านและแสดงรายการเหตุการณ์สถานะปฏิทิน

คุณสามารถอ่านและแสดงรายการกิจกรรมสถานะปฏิทินในแหล่งข้อมูล Events ของ Calendar 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 ปฏิทิน API

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

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

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

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

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