Bu sayfada, Google Takvim kullanıcılarının durumunu gösteren etkinlikler oluşturmak için Google Takvim API'nin nasıl kullanılacağı açıklanmaktadır. Durum etkinlikleri, kullanıcıların nerede olduklarını veya ne yaptıklarını (ör. odaklanma zamanında olup olmadıkları, ofiste olup olmadıkları ya da belirli bir konumdan çalışıp çalışmadıkları) açıklar.
Kullanıcılar, Google Takvim'de özel durumlarını ve konumlarını belirtmek için odaklanma zamanı, ofis dışında ve çalışma yeri etkinlikleri oluşturabilir. Bu özellikler yalnızca birincil takvimlerde ve bazı Google Takvim kullanıcıları tarafından kullanılabilir.
Daha fazla bilgi için Google Takvim'de odaklanma süresini kullanma ve Kullanıcılar için çalışma yerini etkinleştirme veya devre dışı bırakma başlıklı makaleleri inceleyin.
Takvim durumu etkinliklerini okuma ve listeleme
Takvim API'sinin Events
kaynağında Takvim durumu etkinliklerini okuyabilir ve listeleyebilirsiniz.
Bir durum etkinliğini okumak için etkinliğin eventId
değerini belirterek events.get
yöntemini kullanın.
Durum etkinliklerini listelemek için events.list
yöntemini kullanın ve eventTypes
alanında aşağıdaki değerlerden birini veya daha fazlasını belirtin:
'focusTime'
'outOfOffice'
'workingLocation'
Ardından, döndürülen Event
nesnelerinde eventType
alanının istenen değeri içerdiğini kontrol edin ve kullanıcının Google Takvim'de oluşturduğu durumla ilgili ayrıntılar için ilgili alana bakın:
Durum etkinliklerindeki değişikliklere abone olma
Calendar API'nin Events
kaynağındaki durum etkinliklerindeki değişikliklere abone olabilirsiniz.
Abone olunacak Takvim'in calendarId
değerini belirterek events.watch
yöntemini kullanın ve eventTypes
alanında aşağıdaki değerlerden birini veya daha fazlasını belirtin:
'focusTime'
'outOfOffice'
'workingLocation'
Takvim durumu etkinlikleri oluşturma ve güncelleme
Durum etkinliği oluşturmak için events.insert
yöntemini kullanarak Events
kaynağının bir örneğini oluşturur ve etkinlik türü için gerekli alanları ayarlarsınız.
Durum etkinliğini events.update
yöntemini kullanarak güncellerseniz etkinlikte zorunlu alanlar korunmalıdır.
Odaklanma zamanı oluşturma
Odaklanma zamanı etkinliği oluşturmak için:
eventType
öğesini'focusTime'
olarak ayarlayın.focusTimeProperties
alanını ekleyin.transparency
alanını'opaque'
olarak ayarlayın.- Etkinliğin
start
veend
alanlarını zamanlanmış etkinlik olacak şekilde ayarlayın (başlangıç ve bitiş zamanları belirtilir).
Odaklanma zamanları tüm gün süren etkinlikler olamaz.
Özellik ayrıntıları için Google Takvim'de odaklanma zamanı özelliğini kullanma başlıklı makaleyi inceleyin.
Ofis dışında mesajı oluşturma
Ofis dışında etkinliği oluşturmak için:
eventType
öğesini'outOfOffice'
olarak ayarlayın.outOfOfficeProperties
alanını ekleyin.transparency
alanını'opaque'
olarak ayarlayın.- Etkinliğin
start
veend
alanlarını zamanlanmış etkinlik olacak şekilde ayarlayın (başlangıç ve bitiş zamanları belirtilir).
Ofis dışında etkinlikleri tüm gün süren etkinlikler olamaz.
Özellik ayrıntıları için Ofis dışında olduğunuzu gösterme başlıklı makaleyi inceleyin.
Çalışma yeri oluşturma
Çalışma yeri etkinliği oluşturmak için:
eventType
öğesini'workingLocation'
olarak ayarlayın.workingLocationProperties
alanını ekleyin.visibility
alanını'public'
olarak ayarlayın.transparency
alanını'transparent'
olarak ayarlayın.Etkinliğin
start
veend
alanlarını şu şekilde ayarlayın:- Zamanlanmış etkinlik (başlangıç ve bitiş zamanları belirtilmiş);
- Tam olarak bir gün süren tüm gün etkinliği (başlangıç ve bitiş tarihleri belirtilmiş).
Tüm gün çalışma yeri etkinlikleri birden fazla güne yayılamaz ancak zamanlanmış etkinlikler yayılabilir.
Aşağıdaki alanlar isteğe bağlıdır ancak officeLocation
eklerken en iyi kullanıcı deneyimi için önerilir:
workingLocationProperties.officeLocation.buildingId
: Bu, kuruluşun kaynaklar veritabanında birbuildingId
ile eşleşmelidir. Bu sayede kullanıcılar, oda önerileri gibi tüm Takvim özelliklerinden yararlanabilir.workingLocationProperties.officeLocation.label
: Bu, Takvim web ve mobil istemcilerinde gösterilen etikettir.resources.buildings.list
yöntemini kullanarak bina kimliklerini ve bina etiketlerini getirebilirsiniz.
Toplu uç noktalar aracılığıyla çalışma yeri etkinlikleri oluşturma ve güncelleme desteklenmez.
Özellik ayrıntıları için Çalışma saatlerinizi ve yerinizi belirtme ve Kullanıcılar için çalışma yerini etkinleştirme veya devre dışı bırakma başlıklı makaleleri inceleyin.
Çakışan çalışma yeri etkinliklerini gösterme
Bir kullanıcının takviminde aynı anda çakışan birden fazla çalışma yeri etkinliği olabilir. Bu da belirli bir zaman için birden fazla çalışma yeri ayarlanabileceği anlamına gelir. Kullanıcıya yalnızca tek bir konumun gösterilebileceği durumlarda, bu konum birden fazla uygulamada tutarlı bir şekilde gösterilmelidir. Bu işlemi yaparken hangi etkinliğin gösterileceğini seçmek için aşağıdaki yönergeleri kullanın:
- Zamanlanmış etkinlikler, tüm gün süren etkinliklere göre önceliklidir.
- Tek seferlik etkinlikler, yinelenen etkinlikler ve bunların istisnaları üzerinde önceliklidir.
- Daha geç başlayan etkinlikler, daha erken başlayan etkinliklere göre önceliklidir.
- Daha kısa süreli etkinlikler, daha uzun süreli etkinliklere göre önceliklidir.
- Daha yeni oluşturulan etkinlikler, daha önce oluşturulan etkinliklere göre önceliklidir.
- Kısmen örtüşen etkinlikler, her biri kendi çalışma yeri olan iki farklı etkinlik olarak gösterilmelidir.
Google Apps Komut Dosyası'nda durum etkinlikleri oluşturma
Google Apps Komut Dosyası, Google Workspace ile entegre olan iş uygulamaları oluşturmanıza olanak tanıyan JavaScript tabanlı bir bulut komut dosyası dilidir. Komut dosyaları, tarayıcı tabanlı bir kod düzenleyicide geliştirilir ve Google'ın sunucularında depolanır ve çalıştırılır. Google Calendar API'ye istek göndermek için Apps Komut Dosyası'nı kullanmaya başlamak üzere Google Apps Komut Dosyası hızlı başlangıç kılavuzuna da bakın.
Aşağıdaki talimatlarda, Google Apps Komut Dosyası'nda gelişmiş hizmet olarak Google Takvim API'yi kullanarak durum etkinliklerinin nasıl yönetileceği açıklanmaktadır. Google Calendar API kaynaklarının ve yöntemlerinin tam listesi için referans dokümanlarına bakın.
Komut dosyasını oluşturup ayarlama
- script.google.com/create adresine giderek bir komut dosyası oluşturun.
- Sol bölmede Hizmetler'in yanındaki Hizmet ekle'yi tıklayın .
- Google Calendar API'yi seçin ve Ekle'yi tıklayın.
- Etkinleştirilen API, sol bölmede görünür. API'deki kullanılabilir yöntemler ve sınıflar, düzenleyicide Takvim anahtar kelimesi kullanılarak listelenir.
(İsteğe bağlı) Google Cloud projesini güncelleme
Her Google Apps Komut Dosyası projesinin ilişkili bir Google Cloud projesi vardır. Komut dosyanız, Google Apps Komut Dosyası'nın otomatik olarak oluşturduğu varsayılan projeyi kullanabilir. Özel bir Google Cloud projesi kullanmak istiyorsanız komut dosyanızla ilişkili projeyi güncellemek için aşağıdaki adımları uygulayın.
- Düzenleyicinin sol tarafında Proje Ayarları'nı tıklayın.
- Google Cloud Platform (GCP) Projesi bölümünde Projeyi değiştir'i tıklayın.
- Geliştirici Önizleme Programında bulunan Google Cloud projesinin proje numarasını girin ve Projeyi ayarla'yı tıklayın.
- Kod düzenleyiciye geri dönmek için sol taraftaki Düzenleyici'yi seçin.
Komut dosyasına kod ekleme
Aşağıdaki kod örneğinde, birincil takviminizde durum etkinliklerinin nasıl oluşturulacağı, okunacağı ve listeleneceği gösterilmektedir.
Aşağıdaki kodu kod düzenleyiciye yapıştırın.
/** 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}`; }
Kod örneğini çalıştırma
- Kod düzenleyicinin üst kısmındaki açılır menüden çalıştırılacak işlevi seçin ve Çalıştır'ı tıklayın.
- İlk çalıştırma sırasında erişimi yetkilendirmenizi ister. Apps Script'in takviminize erişmesine izin verin.
- Komut dosyası yürütme sonuçlarını, pencerenin en altında görünen Yürütme Günlüğü'nde inceleyebilirsiniz.