Kullanıcıların en iyi yürüyüş rotalarını bulmasına yardımcı olan bir uygulama düşünün. Yürüyüş planını takvim etkinliği olarak ekleyen kullanıcılar, otomatik olarak düzenli kalma konusunda büyük yardım alır. Google Takvim, planı paylaşmalarına ve planı hatırlatarak strese girmeden hazırlanmalarına yardımcı olur. Ayrıca, Google ürünlerinin sorunsuz entegrasyonu sayesinde Google Now, kullanıcılara toplantıdan ayrılma zamanı hakkında bildirim gönderir ve Google Haritalar, kullanıcıları toplantı yerine zamanında yönlendirir.
Bu makalede, takvim etkinliklerinin nasıl oluşturulacağı ve kullanıcılarınızın takvimlerine nasıl ekleneceği açıklanmaktadır.
Etkinlik ekle
Bir etkinlik oluşturmak için en azından şu parametreleri sağlayan events.insert()
yöntemini çağırın:
calendarId
, takvim tanımlayıcısıdır ve etkinliğin oluşturulacağı takvimin e-posta adresi veya oturum açmış kullanıcının birincil takvimini kullanacak özel bir anahtar kelime'primary'
olabilir. Kullanmak istediğiniz takvimin e-posta adresini bilmiyorsanız Google Takvim web kullanıcı arayüzünün takvim ayarlarında ("Takvim Adresi" bölümünde) veyacalendarList.list()
çağrısının sonucunda bulabilirsiniz.event
, başlangıç ve bitiş gibi gerekli tüm ayrıntılarla oluşturulacak etkinliktir. Yalnızca iki alanın (start
veend
saatleri) doldurulması zorunludur. Etkinlik alanlarının tam listesi içinevent
referansına bakın.
Etkinlikleri başarıyla oluşturmak için:
- Kullanıcının takviminde düzenleme erişimine sahip olmak için OAuth kapsamınızı
https://www.googleapis.com/auth/calendar
olarak ayarlayın. - Kimliği doğrulanmış kullanıcının, sağladığınız
calendarId
ile takvime yazma erişimi olduğundan emin olun (örneğin,calendarId
içincalendarList.get()
'ı çağırarak veaccessRole
'ı kontrol ederek).
Etkinlik meta verileri ekleme
Takvim etkinliği oluştururken isteğe bağlı olarak etkinlik meta verileri ekleyebilirsiniz. Oluşturma sırasında meta veri eklememeyi seçerseniz events.update()
simgesini kullanarak birçok alanı güncelleyebilirsiniz. Ancak etkinlik kimliği gibi bazı alanlar yalnızca events.insert()
işlemi sırasında ayarlanabilir.
- Konum
- Konum alanına adres eklemek, "ayrılma zamanı" veya yol tariflerini içeren bir harita gösterme gibi özellikleri etkinleştirir.
- Etkinlik kimliği
- Etkinlik oluştururken, biçim şartlarımıza uygun kendi etkinlik kimliğinizi oluşturmayı seçebilirsiniz. Bu sayede, yerel veritabanınızdaki öğeleri Google Takvim'deki etkinliklerle senkronize edebilirsiniz. Ayrıca, işlem Takvim arka ucunda başarıyla yürütüldükten sonra bir noktada başarısız olursa yinelenen etkinlik oluşturulmasını da önler. Etkinlik kimliği sağlanmazsa sunucu sizin için bir kimlik oluşturur. Daha fazla bilgi için etkinlik kimliği referansını inceleyin.
- Katılımcılar
- Oluşturduğunuz etkinlik, aynı etkinlik kimliğiyle eklediğiniz katılımcıların tüm birincil Google Takvimlerinde görünür. Ekleme isteğinizde
sendUpdates
değerini"all"
veya"externalOnly"
olarak ayarlarsanız ilgili katılımcılar etkinliğiniz için e-posta bildirimi alır. Daha fazla bilgi için Birden fazla katılımcının yer aldığı etkinlikler başlıklı makaleyi inceleyin.
Aşağıdaki örneklerde etkinlik oluşturma ve meta verilerini ayarlama gösterilmektedir:
Go
// Refer to the Go quickstart on how to setup the environment:
// https://developers.google.com/workspace/calendar/quickstart/go
// Change the scope to calendar.CalendarScope and delete any stored credentials.
event := &calendar.Event{
Summary: "Google I/O 2015",
Location: "800 Howard St., San Francisco, CA 94103",
Description: "A chance to hear more about Google's developer products.",
Start: &calendar.EventDateTime{
DateTime: "2015-05-28T09:00:00-07:00",
TimeZone: "America/Los_Angeles",
},
End: &calendar.EventDateTime{
DateTime: "2015-05-28T17:00:00-07:00",
TimeZone: "America/Los_Angeles",
},
Recurrence: []string{"RRULE:FREQ=DAILY;COUNT=2"},
Attendees: []*calendar.EventAttendee{
&calendar.EventAttendee{Email:"lpage@example.com"},
&calendar.EventAttendee{Email:"sbrin@example.com"},
},
}
calendarId := "primary"
event, err = srv.Events.Insert(calendarId, event).Do()
if err != nil {
log.Fatalf("Unable to create event. %v\n", err)
}
fmt.Printf("Event created: %s\n", event.HtmlLink)
Java
// Refer to the Java quickstart on how to setup the environment:
// https://developers.google.com/workspace/calendar/quickstart/java
// Change the scope to CalendarScopes.CALENDAR and delete any stored
// credentials.
Event event = new Event()
.setSummary("Google I/O 2015")
.setLocation("800 Howard St., San Francisco, CA 94103")
.setDescription("A chance to hear more about Google's developer products.");
DateTime startDateTime = new DateTime("2015-05-28T09:00:00-07:00");
EventDateTime start = new EventDateTime()
.setDateTime(startDateTime)
.setTimeZone("America/Los_Angeles");
event.setStart(start);
DateTime endDateTime = new DateTime("2015-05-28T17:00:00-07:00");
EventDateTime end = new EventDateTime()
.setDateTime(endDateTime)
.setTimeZone("America/Los_Angeles");
event.setEnd(end);
String[] recurrence = new String[] {"RRULE:FREQ=DAILY;COUNT=2"};
event.setRecurrence(Arrays.asList(recurrence));
EventAttendee[] attendees = new EventAttendee[] {
new EventAttendee().setEmail("lpage@example.com"),
new EventAttendee().setEmail("sbrin@example.com"),
};
event.setAttendees(Arrays.asList(attendees));
EventReminder[] reminderOverrides = new EventReminder[] {
new EventReminder().setMethod("email").setMinutes(24 * 60),
new EventReminder().setMethod("popup").setMinutes(10),
};
Event.Reminders reminders = new Event.Reminders()
.setUseDefault(false)
.setOverrides(Arrays.asList(reminderOverrides));
event.setReminders(reminders);
String calendarId = "primary";
event = service.events().insert(calendarId, event).execute();
System.out.printf("Event created: %s\n", event.getHtmlLink());
JavaScript
// Refer to the JavaScript quickstart on how to setup the environment:
// https://developers.google.com/workspace/calendar/quickstart/js
// Change the scope to 'https://www.googleapis.com/auth/calendar' and delete any
// stored credentials.
const event = {
'summary': 'Google I/O 2015',
'location': '800 Howard St., San Francisco, CA 94103',
'description': 'A chance to hear more about Google\'s developer products.',
'start': {
'dateTime': '2015-05-28T09:00:00-07:00',
'timeZone': 'America/Los_Angeles'
},
'end': {
'dateTime': '2015-05-28T17:00:00-07:00',
'timeZone': 'America/Los_Angeles'
},
'recurrence': [
'RRULE:FREQ=DAILY;COUNT=2'
],
'attendees': [
{'email': 'lpage@example.com'},
{'email': 'sbrin@example.com'}
],
'reminders': {
'useDefault': false,
'overrides': [
{'method': 'email', 'minutes': 24 * 60},
{'method': 'popup', 'minutes': 10}
]
}
};
const request = gapi.client.calendar.events.insert({
'calendarId': 'primary',
'resource': event
});
request.execute(function(event) {
appendPre('Event created: ' + event.htmlLink);
});
Node.js
// Refer to the Node.js quickstart on how to setup the environment:
// https://developers.google.com/workspace/calendar/quickstart/node
// Change the scope to 'https://www.googleapis.com/auth/calendar' and delete any
// stored credentials.
const event = {
'summary': 'Google I/O 2015',
'location': '800 Howard St., San Francisco, CA 94103',
'description': 'A chance to hear more about Google\'s developer products.',
'start': {
'dateTime': '2015-05-28T09:00:00-07:00',
'timeZone': 'America/Los_Angeles',
},
'end': {
'dateTime': '2015-05-28T17:00:00-07:00',
'timeZone': 'America/Los_Angeles',
},
'recurrence': [
'RRULE:FREQ=DAILY;COUNT=2'
],
'attendees': [
{'email': 'lpage@example.com'},
{'email': 'sbrin@example.com'},
],
'reminders': {
'useDefault': false,
'overrides': [
{'method': 'email', 'minutes': 24 * 60},
{'method': 'popup', 'minutes': 10},
],
},
};
calendar.events.insert({
auth: auth,
calendarId: 'primary',
resource: event,
}, function(err, event) {
if (err) {
console.log('There was an error contacting the Calendar service: ' + err);
return;
}
console.log('Event created: %s', event.htmlLink);
});
PHP
$event = new Google_Service_Calendar_Event(array(
'summary' => 'Google I/O 2015',
'location' => '800 Howard St., San Francisco, CA 94103',
'description' => 'A chance to hear more about Google\'s developer products.',
'start' => array(
'dateTime' => '2015-05-28T09:00:00-07:00',
'timeZone' => 'America/Los_Angeles',
),
'end' => array(
'dateTime' => '2015-05-28T17:00:00-07:00',
'timeZone' => 'America/Los_Angeles',
),
'recurrence' => array(
'RRULE:FREQ=DAILY;COUNT=2'
),
'attendees' => array(
array('email' => 'lpage@example.com'),
array('email' => 'sbrin@example.com'),
),
'reminders' => array(
'useDefault' => FALSE,
'overrides' => array(
array('method' => 'email', 'minutes' => 24 * 60),
array('method' => 'popup', 'minutes' => 10),
),
),
));
$calendarId = 'primary';
$event = $service->events->insert($calendarId, $event);
printf('Event created: %s\n', $event->htmlLink);
Python
# Refer to the Python quickstart on how to setup the environment:
# https://developers.google.com/workspace/calendar/quickstart/python
# Change the scope to 'https://www.googleapis.com/auth/calendar' and delete any
# stored credentials.
event = {
'summary': 'Google I/O 2015',
'location': '800 Howard St., San Francisco, CA 94103',
'description': 'A chance to hear more about Google\'s developer products.',
'start': {
'dateTime': '2015-05-28T09:00:00-07:00',
'timeZone': 'America/Los_Angeles',
},
'end': {
'dateTime': '2015-05-28T17:00:00-07:00',
'timeZone': 'America/Los_Angeles',
},
'recurrence': [
'RRULE:FREQ=DAILY;COUNT=2'
],
'attendees': [
{'email': 'lpage@example.com'},
{'email': 'sbrin@example.com'},
],
'reminders': {
'useDefault': False,
'overrides': [
{'method': 'email', 'minutes': 24 * 60},
{'method': 'popup', 'minutes': 10},
],
},
}
event = service.events().insert(calendarId='primary', body=event).execute()
print 'Event created: %s' % (event.get('htmlLink'))
Ruby
event = Google::Apis::CalendarV3::Event.new(
summary: 'Google I/O 2015',
location: '800 Howard St., San Francisco, CA 94103',
description: 'A chance to hear more about Google\'s developer products.',
start: Google::Apis::CalendarV3::EventDateTime.new(
date_time: '2015-05-28T09:00:00-07:00',
time_zone: 'America/Los_Angeles'
),
end: Google::Apis::CalendarV3::EventDateTime.new(
date_time: '2015-05-28T17:00:00-07:00',
time_zone: 'America/Los_Angeles'
),
recurrence: [
'RRULE:FREQ=DAILY;COUNT=2'
],
attendees: [
Google::Apis::CalendarV3::EventAttendee.new(
email: 'lpage@example.com'
),
Google::Apis::CalendarV3::EventAttendee.new(
email: 'sbrin@example.com'
)
],
reminders: Google::Apis::CalendarV3::Event::Reminders.new(
use_default: false,
overrides: [
Google::Apis::CalendarV3::EventReminder.new(
reminder_method: 'email',
minutes: 24 * 60
),
Google::Apis::CalendarV3::EventReminder.new(
reminder_method: 'popup',
minutes: 10
)
]
)
)
result = client.insert_event('primary', event)
puts "Event created: #{result.html_link}"
Etkinliklere Drive ekleri ekleme
Takvim etkinliklerinize Google Drive dosyaları (ör. Dokümanlar'daki toplantı notları, E-Tablolar'daki bütçeler, Slaytlar'daki sunular veya diğer ilgili Google Drive dosyaları) ekleyebilirsiniz. events.insert()
ile etkinlik oluştururken veya daha sonra events.patch()
gibi bir güncelleme kapsamında ek ekleyebilirsiniz.
Google Drive dosyasını bir etkinliğe ekleme işlemi iki bölümden oluşur:
-
Drive API Files kaynağındaki
alternateLink
URL'sini,title
vemimeType
değerlerini alın. Bu işlem genelliklefiles.get()
yöntemiyle yapılır. - İstek gövdesinde
attachments
alanları ayarlanmış vesupportsAttachments
parametresitrue
olarak ayarlanmış bir etkinlik oluşturun veya güncelleyin.
Aşağıdaki kod örneğinde, mevcut bir etkinliği güncelleyerek ekleme işleminin nasıl yapılacağı gösterilmektedir:
Java
public static void addAttachment(Calendar calendarService, Drive driveService, String calendarId,
String eventId, String fileId) throws IOException {
File file = driveService.files().get(fileId).execute();
Event event = calendarService.events().get(calendarId, eventId).execute();
List<EventAttachment> attachments = event.getAttachments();
if (attachments == null) {
attachments = new ArrayList<EventAttachment>();
}
attachments.add(new EventAttachment()
.setFileUrl(file.getAlternateLink())
.setMimeType(file.getMimeType())
.setTitle(file.getTitle()));
Event changes = new Event()
.setAttachments(attachments);
calendarService.events().patch(calendarId, eventId, changes)
.setSupportsAttachments(true)
.execute();
}
PHP
function addAttachment($calendarService, $driveService, $calendarId, $eventId, $fileId) {
$file = $driveService->files->get($fileId);
$event = $calendarService->events->get($calendarId, $eventId);
$attachments = $event->attachments;
$attachments[] = array(
'fileUrl' => $file->alternateLink,
'mimeType' => $file->mimeType,
'title' => $file->title
);
$changes = new Google_Service_Calendar_Event(array(
'attachments' => $attachments
));
$calendarService->events->patch($calendarId, $eventId, $changes, array(
'supportsAttachments' => TRUE
));
}
Python
def add_attachment(calendarService, driveService, calendarId, eventId, fileId):
file = driveService.files().get(fileId=fileId).execute()
event = calendarService.events().get(calendarId=calendarId,
eventId=eventId).execute()
attachments = event.get('attachments', [])
attachments.append({
'fileUrl': file['alternateLink'],
'mimeType': file['mimeType'],
'title': file['title']
})
changes = {
'attachments': attachments
}
calendarService.events().patch(calendarId=calendarId, eventId=eventId,
body=changes,
supportsAttachments=True).execute()
Etkinliklere video konferans ve telekonferans görüşmesi ekleme
Kullanıcılarınızın telefon veya görüntülü görüşme yoluyla uzaktan toplantı yapmasına olanak tanımak için etkinlikleri Hangouts ve Google Meet konferanslarıyla ilişkilendirebilirsiniz.
conferenceData
alanı, mevcut konferans ayrıntılarını okumak, kopyalamak ve temizlemek için kullanılabilir. Ayrıca yeni konferansların oluşturulmasını istemek için de kullanılabilir. Konferans ayrıntılarının oluşturulmasına ve değiştirilmesine izin vermek için conferenceDataVersion
isteği parametresini 1
olarak ayarlayın.
Şu anda desteklenen üç tür conferenceData
vardır. Bunlar conferenceData.conferenceSolution.key.type
ile gösterilir:
- Tüketiciler için Hangouts (
eventHangout
) - Google Workspace kullanıcıları için klasik Hangouts
(desteklenmiyor;
eventNamedHangout
) - Google Meet (
hangoutsMeet
)
calendars
ve calendarList
koleksiyonlarındaki conferenceProperties.allowedConferenceSolutionTypes
simgesine bakarak bir kullanıcının herhangi bir takvimi için hangi konferans türünün desteklendiğini öğrenebilirsiniz. Ayrıca, settings
koleksiyonundaki autoAddHangouts
ayarını kontrol ederek kullanıcının yeni oluşturduğu tüm etkinlikler için Hangouts oluşturulmasını tercih edip etmediğini de öğrenebilirsiniz.
type
dışında, conferenceSolution
, konferans çözümünü aşağıda gösterildiği gibi temsil etmek için kullanabileceğiniz name
ve iconUri
alanlarını da sağlar:
JavaScript
const solution = event.conferenceData.conferenceSolution;
const content = document.getElementById("content");
const text = document.createTextNode("Join " + solution.name);
const icon = document.createElement("img");
icon.src = solution.iconUri;
content.appendChild(icon);
content.appendChild(text);
Bir etkinlik için yeni bir konferans oluşturmak istiyorsanız rastgele bir string
olabilecek yeni oluşturulmuş bir requestId
ile createRequest
sağlayabilirsiniz. Konferanslar asenkron olarak oluşturulur ancak kullanıcılarınıza neler olduğunu bildirmek için istediğiniz zaman isteğinizin durumunu kontrol edebilirsiniz.
Örneğin, mevcut bir etkinlik için konferans oluşturma isteğinde bulunmak üzere:
JavaScript
const eventPatch = {
conferenceData: {
createRequest: {requestId: "7qxalsvy0e"}
}
};
gapi.client.calendar.events.patch({
calendarId: "primary",
eventId: "7cbh8rpc10lrc0ckih9tafss99",
resource: eventPatch,
sendUpdates: "all",
conferenceDataVersion: 1
}).execute(function(event) {
console.log("Conference created for event: %s", event.htmlLink);
});
Bu çağrıya verilen anlık yanıtta henüz tam olarak doldurulmuş conferenceData
olmayabilir. Bu durum, status alanında pending
durum koduyla belirtilir. Konferans bilgileri doldurulduktan sonra durum kodu success
olarak değişir. entryPoints
alanı, kullanıcılarınızın hangi video ve telefon URI'lerini arayabileceği hakkında bilgi içerir.
Aynı konferans ayrıntılarını kullanarak birden fazla Takvim etkinliği planlamak isterseniz conferenceData
kodunun tamamını bir etkinlikten diğerine kopyalayabilirsiniz.
Kopyalama, belirli durumlarda kullanışlıdır. Örneğin, aday ve görüşmeci için ayrı etkinlikler oluşturan bir işe alım uygulaması geliştirdiğinizi varsayalım. Görüşmecinin kimliğini korumak istiyorsunuz ancak tüm katılımcıların aynı konferans görüşmesine katılmasını da sağlamak istiyorsunuz.