Etkinlik oluşturun

Kullanıcıların en iyi doğa yürüyüşü rotalarını bulmasına yardımcı olan bir uygulama hayal edin. Yürüyüş planını bir takvim etkinliği olarak eklediğinizde kullanıcılar, otomatik olarak düzenli kalmalarına büyük ölçüde yardımcı olurlar. Google Takvim, bu kişilerin planı paylaşmasına yardımcı olur ve stres yaşamadan hazırlanmaları için onlara planı hatırlatır. Ayrıca, Google ürünlerinin sorunsuz entegrasyonu sayesinde Google Now, yola çıkma vakti hakkında müşterilere ping gönderir ve Google Haritalar onları 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 ekleyin

Etkinlik oluşturmak için en az aşağıdaki 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 giriş yapmış 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ündeki takvim ayarlarından ("Takvim Adresi" bölümünde) kontrol edebilir veya calendarList.list() çağrısının sonucuna bakabilirsiniz.
  • event, başlangıç ve bitiş gibi gerekli tüm ayrıntılarla oluşturulacak etkinliktir. Yalnızca start ve end alanlarının doldurulması zorunludur. Etkinlik alanlarının tamamı için event referansını inceleyin.

Başarılı bir şekilde etkinlik oluşturmak için şunları yapmanız gerekir:

  • Kullanıcının takvimine düzenleme erişiminizin olması için OAuth kapsamınızı https://www.googleapis.com/auth/calendar olarak ayarlayın.
  • Kimliği doğrulanan kullanıcının sağladığınız calendarId ile takvime yazma erişimi olduğundan emin olun (örneğin, calendarId için calendarList.get() çağrısı yapıp accessRole öğesini kontrol ederek).

Etkinlik meta verisi ekleyin

Bir 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() 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,

"yola çıkma vakti" yazıyor veya yol tariflerini içeren bir harita görüntüleyin.

Etkinlik kimliği

Etkinlik oluştururken kendi etkinlik kimliğinizi oluşturmayı seçebilirsiniz

bir metin reklam arıyoruz. Böylece, yerel veritabanınızdaki varlıkları Google Takvim'deki etkinliklerle senkronize halde tutabilirsiniz. Ayrıca, Takvim arka ucunda başarıyla yürütüldükten sonra bir noktada işlem başarısız olursa yinelenen etkinliklerin oluşturulmasını da önler. Etkinlik kimliği sağlanmazsa sunucu sizin için bir etkinlik kimliği oluşturur. Daha fazla bilgi için etkinlik kimliği referansına bakın.

Katılımcılar

Oluşturduğunuz etkinlik tüm birincil Google Takvimlerinde görünür

Aynı etkinlik kimliğiyle, eklediğiniz katılımcılarla. Ekleme isteğinizde sendNotifications değerini true olarak ayarlarsanız katılımcılara etkinliğiniz için bir e-posta bildirimi de gönderilir. Daha fazla bilgi için birden fazla katılımcının yer aldığı etkinlikler rehberine bakın.

Aşağıdaki örneklerde, etkinlik oluşturma ve bu etkinliğin meta verilerini ayarlama süreci gösterilmektedir:

Go

// Refer to the Go quickstart on how to setup the environment:
// https://developers.google.com/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/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/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/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/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 Dokümanlar'da toplantı notları, E-Tablolar'da bütçeler, Slaytlar'da sunular veya diğer alakalı Google Drive dosyaları gibi Google Drive dosyaları ekleyebilirsiniz. events.insert() veya daha sonra events.patch() gibi bir güncelleme kapsamında etkinlik oluşturduğunuzda bu eki ekleyebilirsiniz.

Bir etkinliğe Google Drive dosyası eklemenin iki bölümü vardır:

  1. Genellikle files.get() yöntemini kullanarak Drive API Dosyaları kaynağından alternateLink URL'sini, title ve mimeType dosyalarını alın.
  2. İstek gövdesindeki attachments alanları ve supportsAttachments parametresinin true olarak ayarlandığı bir etkinlik oluşturun veya etkinliği güncelleyin.

Aşağıdaki kod örneğinde, ek eklemek için mevcut bir etkinliğin nasıl güncelleneceği 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 ve telefon konferansları ekleme

Kullanıcılarınızın telefon görüşmesi veya görüntülü görüşme aracılığıyla 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 konferans oluşturma isteğinde bulunmak için de kullanılabilir. Konferans ayrıntılarının oluşturulmasına ve değiştirilmesine izin vermek için conferenceDataVersion istek parametresini 1 olarak ayarlayın.

Şu anda, conferenceData.conferenceSolution.key.type ile belirtilen üç conferenceData türü desteklenmektedir:

  1. Tüketiciler için Hangouts (eventHangout)
  2. Kullanıcılar için Google Workspace klasik Hangouts (kullanımdan kaldırıldı; eventNamedHangout)
  3. Google Meet (hangoutsMeet)

Belirli bir kullanıcının takvimlerinde hangi konferans türünün desteklendiğini öğrenmek için calendars ve calendarList koleksiyonlarındaki conferenceProperties.allowedConferenceSolutionTypes bölümüne bakabilirsiniz. Ayrıca settings koleksiyonundaki autoAddHangouts ayarını kontrol ederek kullanıcının yeni oluşturulan tüm etkinlikler için Hangouts oluşturulmasını tercih edip etmediğini de öğrenebilirsiniz.

conferenceSolution, type'ın yanı sıra aşağıda gösterildiği gibi konferans çözümünü 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);

Yeni oluşturulmuş requestId içeren bir createRequest sağlayarak etkinlik için yeni konferans oluşturabilirsiniz. Bu requestId rastgele bir string olabilir. Konferanslar eşzamansız olarak oluşturulur ancak kullanıcılarınıza ne olduğunu bildirmek için isteğinizin durumunu istediğiniz zaman kontrol edebilirsiniz.

Örneğin, mevcut bir etkinlik için konferans oluşturma isteği göndermek isterseniz:

JavaScript

const eventPatch = {
  conferenceData: {
    createRequest: {requestId: "7qxalsvy0e"}
  }
};

gapi.client.calendar.events.patch({
  calendarId: "primary",
  eventId: "7cbh8rpc10lrc0ckih9tafss99",
  resource: eventPatch,
  sendNotifications: true,
  conferenceDataVersion: 1
}).execute(function(event) {
  console.log("Conference created for event: %s", event.htmlLink);
});

Bu çağrıya verilen acil yanıt, henüz tamamen doldurulmuş conferenceData değerini içermeyebilir. 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 çevirebileceği hakkında bilgiler içerir.

Aynı konferans ayrıntılarına sahip birden fazla Takvim etkinliği planlamak istiyorsanız bir etkinlikteki conferenceData içeriğinin tamamını kopyalayabilirsiniz.

Kopyalama işlemi belirli durumlarda faydalıdır. Örneğin aday ve mülakat yapan kişi için ayrı etkinlikler düzenleyen bir işe alım uygulaması geliştirdiğinizi varsayalım. Görüşmeyi yapan kişinin kimliğini korumak ancak aynı zamanda tüm katılımcıların aynı konferans görüşmesine katılmasını da sağlamak istiyorsunuz.