Na tej stronie dowiesz się, jak używać interfejsu Google Calendar API do tworzenia wydarzeń, które pokazują stan użytkowników Kalendarza Google. Zdarzenia stanu opisują, gdzie znajdują się użytkownicy lub co robią, m.in. czy są w czasie pracy, nieobecni w pracy czy pracują z określonej lokalizacji.
W Kalendarzu Google użytkownicy mogą tworzyć wydarzenia dotyczące czasu skupienia, nieobecności w pracy i miejsca pracy, aby wskazać swój niestandardowy stan i lokalizację. Te funkcje są dostępne tylko w kalendarzach głównych i dla niektórych użytkowników Kalendarza Google.
Więcej informacji znajdziesz w artykułach Korzystanie z czasu na skupienie w Kalendarzu Google i Włączanie i wyłączanie lokalizacji miejsca pracy dla użytkowników.
Odczytywanie i wyświetlanie zdarzeń stanu Kalendarza
Możesz odczytywać i wyświetlać listę zdarzeń stanu Kalendarza w zasobie Events
interfejsu Calendar API.
Aby odczytać zdarzenie stanu, użyj metody events.get
, podając eventId
zdarzenia.
Aby wyświetlić listę zdarzeń stanu, użyj metody events.list
, podając w polu eventTypes
co najmniej jedną z tych wartości:
'focusTime'
'outOfOffice'
'workingLocation'
Następnie w zwróconych obiektach Event
sprawdź, czy pole eventType
zawiera żądaną wartość. Aby uzyskać szczegółowe informacje o stanie utworzonym przez użytkownika w Kalendarzu Google, odszukaj odpowiednie pole:
Subskrybowanie zmian w zdarzeniach stanu
Możesz subskrybować zmiany zdarzeń stanu w zasobie Events
interfejsu Calendar API.
Użyj metody events.watch
, podając calendarId
Kalendarza, do którego chcesz się zasubskrybować, oraz co najmniej jedną z tych wartości w polu eventTypes
:
'focusTime'
'outOfOffice'
'workingLocation'
Tworzenie i aktualizowanie zdarzeń stanu w kalendarzu
Aby utworzyć zdarzenie stanu, utwórz instancję zasobu Events
za pomocą metody events.insert
, ustawiając wymagane pola dla danego typu zdarzenia.
Jeśli zaktualizujesz zdarzenie stanu za pomocą metody events.update
, zdarzenie musi zawierać wymagane pola.
Tworzenie czasu skupienia
Aby utworzyć wydarzenie typu czas skupienia:
- Ustaw
eventType
na'focusTime'
. - Dołącz pole
focusTimeProperties
. - W polu
transparency
ustaw wartość'opaque'
. - Ustaw pola
start
iend
jako zdarzenie czasowe (z określonymi godzinami rozpoczęcia i zakończenia).
Czas skupienia nie może być wydarzeniem całodniowym.
Więcej informacji o tej funkcji znajdziesz w artykule Używanie czasu skupienia w Kalendarzu Google.
Tworzenie informacji o nieobecności
Aby utworzyć zdarzenie nieobecności w biurze:
- Ustaw
eventType
na'outOfOffice'
. - Dołącz pole
outOfOfficeProperties
. - W polu
transparency
ustaw wartość'opaque'
. - Ustaw pola
start
iend
jako zdarzenie czasowe (z określonymi godzinami rozpoczęcia i zakończenia).
Wydarzenia poza biurem nie mogą być całodniowymi wydarzeniami.
Więcej informacji o tej funkcji znajdziesz w artykule Informowanie o nieobecności w biurze.
Tworzenie miejsca pracy
Aby utworzyć zdarzenie dotyczące miejsca pracy:
- Ustaw
eventType
na'workingLocation'
. - Dołącz pole
workingLocationProperties
. - W polu
visibility
ustaw wartość'public'
. - W polu
transparency
ustaw wartość'transparent'
. W polu
start
iend
zdarzenia ustaw:- wydarzenie o określonym czasie trwania (z określonymi godzinami rozpoczęcia i zakończenia);
- Wydarzenie całodniowe (z określonymi datami rozpoczęcia i zakończenia), które trwa dokładnie jeden dzień.
Wydarzenia całodniowe związane z lokalizacją miejsca pracy nie mogą obejmować kilku dni, ale wydarzenia czasowe mogą.
Te pola są opcjonalne, ale zalecamy ich używanie, aby zapewnić użytkownikom jak najlepsze wrażenia podczas wstawiania officeLocation
:
workingLocationProperties.officeLocation.buildingId
: Ten parametr powinien być zgodny z parametrembuildingId
w bazie danych zasobów organizacji. Dzięki temu użytkownicy mogą korzystać ze wszystkich funkcji Kalendarza, np. sugestii dotyczące sal.workingLocationProperties.officeLocation.label
: to etykieta wyświetlana w kliencie internetowym i mobilnym Kalendarza. Identyfikatory i etykiety budynków możesz pobrać za pomocą metodyresources.buildings.list
.
Tworzenie i aktualizowanie zdarzeń dotyczących miejsca pracy za pomocą punktów końcowych zbiorczego nie jest obsługiwane.
Szczegółowe informacje o tej funkcji znajdziesz w artykułach Ustawianie godzin pracy i lokalizacji oraz Włączanie i wyłączanie lokalizacji miejsca pracy dla użytkowników.
Jak wyświetlać nakładające się zdarzenia dotyczące lokalizacji miejsca pracy
Użytkownik może mieć w kalendarzu kilka wydarzeń związanych z lokalizacją miejsca pracy, które nakładają się na siebie, co oznacza, że w danym momencie może być ustawionych kilka lokalizacji miejsca pracy. W sytuacji, gdy użytkownikowi można wyświetlić tylko jedną lokalizację, należy ją wyświetlać w sposób spójny w różnych aplikacjach. Aby wybrać wydarzenie do wyświetlenia, kieruj się tymi wskazówkami:
- Zdarzenia z zaplanowanym czasem mają pierwszeństwo przed wydarzeniami całodniowymi.
- Pojedyncze zdarzenia mają pierwszeństwo przed zdarzeniami cyklicznymi i ich wyjątkami.
- Wydarzenia, które zaczynają się później, mają pierwszeństwo przed tymi, które zaczynają się wcześniej.
- Wydarzenia o krótszym czasie trwania mają pierwszeństwo przed tymi o dłuższym czasie trwania.
- Zdarzenia utworzone później mają pierwszeństwo przed zdarzeniami utworzonymi wcześniej.
- Częściowo nakładające się wydarzenia powinny być wyświetlane jako 2 różne wydarzenia z osobną lokalizacją.
Tworzenie zdarzeń stanu w Google Apps Script
Google Apps Script to internetowy język skryptów oparty na JavaScript, który umożliwia tworzenie aplikacji biznesowych zintegrowanych z Google Workspace. Skrypty są tworzone w edytorze kodu w przeglądarce, a przechowywane i uruchamiane na serwerach Google. Aby zacząć używać Google Apps Script do wysyłania żądań do interfejsu Google Calendar API, zapoznaj się z krótkim wprowadzeniem do Google Apps Script.
Z tych instrukcji dowiesz się, jak zarządzać zdarzeniami stanu za pomocą interfejsu Google Calendar API jako zaawansowanej usługi w Google Apps Script. Pełną listę zasobów i metod interfejsu Google Calendar API znajdziesz w dokumentacji.
Tworzenie i konfigurowanie skryptu
- Aby utworzyć skrypt, otwórz stronę script.google.com/create.
- W panelu po lewej stronie obok pozycji Usługi kliknij Dodaj usługę .
- Wybierz Google Calendar API i kliknij Dodaj.
- Po włączeniu interfejs API pojawi się w lewym panelu. Dostępne metody i klasy w interfejsie API można wyświetlić, używając w edytorze słowa kluczowego Calendar.
(Opcjonalnie) Zmień projekt Google Cloud
Każdy projekt Google Apps Script ma powiązany projekt Google Cloud. Twój skrypt może korzystać z projektu domyślnego utworzonego automatycznie przez Google Apps Script. Jeśli chcesz użyć niestandardowego projektu Google Cloud, wykonaj te czynności, aby zaktualizować projekt powiązany ze skryptem.
- Po lewej stronie edytora kliknij Ustawienia projektu .
- W sekcji Projekt Google Cloud Platform (GCP) kliknij Zmień projekt.
- Wpisz numer projektu Google Cloud, który jest w ramach programu podglądu dla deweloperów, i kliknij Ustaw projekt.
- Po lewej stronie wybierz Edytor , aby wrócić do edytora kodu.
Dodawanie kodu do skryptu
Poniższy przykładowy kod pokazuje, jak tworzyć, odczytywać i wyświetlać zdarzenia stanu w głównym kalendarzu.
Wklej ten kod do edytora kodu.
/** 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}`; }
Uruchamianie przykładowego kodu
- Nad edytorem kodu wybierz funkcję do uruchomienia z menu i kliknij Uruchom.
- Podczas pierwszego uruchomienia pojawi się prośba o autoryzację dostępu. Sprawdź i zezwól Apps Script na dostęp do kalendarza.
- Wyniki wykonania skryptu możesz sprawdzić w logu wykonania, który pojawia się u dołu okna.