หน้านี้จะอธิบายวิธีใช้ 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 ทั้งหมดได้ในเอกสารอ้างอิง
สร้างและตั้งค่าสคริปต์
- สร้างสคริปต์โดยไปที่ script.google.com/create
- ในแผงด้านซ้ายถัดจาก Services ให้คลิก "เพิ่มบริการ"
- เลือก Google Calendar API แล้วคลิกเพิ่ม
- หลังจากเปิดใช้แล้ว API จะปรากฏในแผงด้านซ้าย วิธีการและคลาสที่ใช้ได้ใน API สามารถแสดงโดยใช้คีย์เวิร์ดปฏิทินในตัวแก้ไข
(ไม่บังคับ) อัปเดตโปรเจ็กต์ Google Cloud
โปรเจ็กต์ Google Apps Script แต่ละโปรเจ็กต์มีโปรเจ็กต์ Google Cloud ที่เชื่อมโยง สคริปต์จะใช้โปรเจ็กต์เริ่มต้นที่ Google Apps Script สร้างขึ้นโดยอัตโนมัติได้ หากต้องการใช้โปรเจ็กต์ Google Cloud ที่กำหนดเอง ให้ทำตามขั้นตอนต่อไปนี้เพื่ออัปเดตโปรเจ็กต์ที่เชื่อมโยงกับสคริปต์
- คลิกการตั้งค่าโปรเจ็กต์ ทางด้านซ้ายของเครื่องมือแก้ไข
- ในส่วนโครงการ Google Cloud Platform (GCP) ให้คลิกเปลี่ยนโครงการ
- ป้อนหมายเลขโปรเจ็กต์ของโปรเจ็กต์ Google Cloud ที่อยู่ในโปรแกรมทดลองใช้สำหรับนักพัฒนาซอฟต์แวร์ แล้วคลิกตั้งค่าโปรเจ็กต์
- ทางด้านซ้าย ให้เลือก Editor เพื่อกลับไปที่ตัวแก้ไขโค้ด
เพิ่มโค้ดลงในสคริปต์
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีสร้าง อ่าน และแสดงรายการกิจกรรมสถานะในปฏิทินหลัก
วางโค้ดต่อไปนี้ลงในตัวแก้ไขโค้ด
/** 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}`; }
เรียกใช้ตัวอย่างโค้ด
- ที่ด้านบนของตัวแก้ไขโค้ด ให้เลือกฟังก์ชันที่จะเรียกใช้จากเมนูแบบเลื่อนลง แล้วคลิกเรียกใช้
- เมื่อดำเนินการครั้งแรก ระบบจะแจ้งให้คุณให้สิทธิ์เข้าถึง ตรวจสอบและอนุญาตให้ Apps Script เข้าถึงปฏิทินของคุณ
- คุณตรวจสอบผลการดำเนินการของสคริปต์ได้ในบันทึกการดำเนินการที่ปรากฏที่ด้านล่างของหน้าต่าง