Etkinlik oluşturun

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 ekleyerek kullanıcılar otomatik olarak düzenli kalabilir. Google Takvim, planı paylaşmasına yardımcı olur ve stres yaşamadan hazırlanabilmeleri için planı hatırlatır. Ayrıca Google ürünlerinin sorunsuz entegrasyonu sayesinde Google Asistan, yola çıkma zamanı konusunda kullanıcılara bildirim 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 ekle

Etkinlik oluşturmak için en azından aşağıdaki parametreleri sağlayarak 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 bunu Google Takvim web kullanıcı arayüzündeki takvimin ayarlarından ("Takvim Adresi" bölümünde) kontrol edebilir veya calendarList.list() çağrısının sonucunda arayabilirsiniz.
  • event, başlangıç ve bitiş gibi gerekli tüm ayrıntılarla oluşturulacak etkinliktir. Yalnızca start ve end zamanları zorunludur. Tüm etkinlik alanları için event referansına bakın.

Etkinlikleri başarıyla oluşturmak için:

  • Kullanıcının takvimine düzenleme erişiminiz olması için OAuth kapsamınızı https://www.googleapis.com/auth/calendar olarak ayarlayın.
  • Kimlik doğrulaması yapılan 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ını yaparak ve accessRole değerini 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 eklemeyi tercih etmezseniz 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 aşağıdaki gibi özellikleri etkinleştirir:

"yola çıkma zamanı" veya yol tarifini içeren bir harita gösterme.

Etkinlik kimliği

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

biçim koşullarımıza uygun olmalıdır. Bu sayede, yerel veritabanınızdaki öğeleri Google Takvim'deki etkinliklerle senkronize tutabilirsiniz. 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 engeller. Etkinlik kimliği sağlanmazsa sunucu sizin için bir kimlik oluşturur. Daha fazla bilgi için etkinlik kimliği referansı bölümüne bakın.

Katılımcılar

Oluşturduğunuz etkinlik, aşağıdaki kullanıcıların tüm birincil Google Takvim'lerinde görünür:

aynı etkinlik kimliğiyle eklediğiniz katılımcılar. Ekle isteğinizde sendNotifications değerini true olarak ayarlarsanız katılımcılara etkinliğinizle ilgili bir e-posta bildirimi de gönderilir. Daha fazla bilgi için birden fazla katılımcısı olan etkinlikler kılavuzunu 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/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'daki toplantı notları, E-Tablolar'daki bütçeler, Slaytlar'daki sunular veya ilgili diğer Google Drive dosyalarını ekleyebilirsiniz. Eki, events.insert() ile etkinlik oluştururken veya events.patch() ile güncelleme kapsamında daha sonra ekleyebilirsiniz.

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

  1. Drive API Files kaynağından dosya alternateLink URL'sini, title ve mimeType değerlerini genellikle files.get() yöntemiyle alın.
  2. İstek gövdesinde attachments alanlarının ve supportsAttachments parametresinin true olarak ayarlandığı bir etkinlik oluşturun veya güncelleyin.

Aşağıdaki kod örneğinde, mevcut bir etkinliğe ek eklemek iç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 konferans ve telekonferans görüşmesi ekleme

Kullanıcılarınızın telefon görüşmesi veya görüntülü görüşme üzerinden uzaktan toplantı yapmasına izin vermek 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 istek parametresini 1 olarak ayarlayın.

Şu anda conferenceData.conferenceSolution.key.type ile gösterildiği gibi üç tür conferenceData desteklenmektedir:

  1. Tüketiciler için Hangouts (eventHangout)
  2. kullanıcıları için Klasik Hangouts (desteği sonlandırıldı; eventNamedHangout)
  3. Google Meet (hangoutsMeet)

calendars ve calendarList koleksiyonlarındaki conferenceProperties.allowedConferenceSolutionTypes öğesine bakarak kullanıcının belirli 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.

conferenceSolution, type'ün yanı sıra 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);

Rastgele bir string olabilir. Yeni oluşturulan bir requestId ile createRequest sağlayarak bir etkinlik için yeni bir konferans oluşturabilirsiniz. Konferanslar eşzamanlı olarak oluşturulmaz ancak kullanıcılarınıza neler olduğunu bildirmek için dilediğ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,
  sendNotifications: true,
  conferenceDataVersion: 1
}).execute(function(event) {
  console.log("Conference created for event: %s", event.htmlLink);
});

Bu çağrıya verilen anlık yanıt henüz tamamen doldurulmuş conferenceData içermeyebilir. Bu durum, durum alanında pending durum koduyla gösterilir. Konferans bilgileri doldurulduktan sonra durum kodu success olarak değişir. entryPoints alanı, kullanıcılarınızın telefonla bağlanabileceği video ve telefon URI'leri hakkında bilgi içerir.

Aynı konferans ayrıntılarıyla birden fazla Takvim etkinliği planlamak istiyorsanız conferenceData öğesinin tamamını bir etkinlikten diğerine kopyalayabilirsiniz.

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