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