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 ekleyen kullanıcılar, otomatik olarak organize olmaları konusunda çok yardım alır. Google Takvim, planı paylaşmalarına yardımcı olur ve onlara stressiz bir şekilde hazırlanabilmeleri için planı hatırlatır. Ayrıca Google ürünlerinin sorunsuz entegrasyonu sayesinde, Google Asistan müşterilere yola çıkma vakti hakkında ping gönderir ve Google Haritalar onları zamanında toplantı noktasına yönlendirir.

Bu makalede, takvim etkinliklerinin nasıl oluşturulacağı ve bunların 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ş yapan 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ından ("Takvim Adresi" bölümünde) bu adresi kontrol edebilir veya calendarList.list() çağrısının sonucunda bu adresi bulabilirsiniz.
  • event, başlangıç ve bitiş gibi gerekli tüm ayrıntılarla birlikte oluşturulacak etkinliktir. Yalnızca start ve end alanlarının doldurulması zorunludur. Etkinlik alanlarının tamamı için event referansına bakın.

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

  • 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.
  • 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çin calendarList.get() yöntemini çağırıp accessRole özelliğini kontrol ederek).

Etkinlik meta verileri ekleyin

Takvim etkinliği oluştururken isteğe bağlı olarak etkinlik meta verilerini ekleyebilirsiniz. Oluşturma sırasında meta veri eklememeyi tercih ederseniz events.update() ile 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 bir adres eklendiğinde aşağıdaki gibi özellikler etkinleştirilir:

yol tarifi içeren bir harita gösterebilir veya yol tarifi alabilirsiniz.

Etkinlik Kimliği

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

bir reklam grubu oluşturduk. Böylece yerel veritabanınızdaki varlıkları Google Takvim'deki etkinliklerle senkronize bir şekilde 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 etkinlik kimliği oluşturur. Daha fazla bilgi için etkinlik kimliği referansını inceleyin.

Katılımcılar

Oluşturduğunuz etkinlik şu kişilerin birincil Google Takvimlerinde görünür:

aynı etkinlik kimliğine sahip olan katılımcılar Ekleme isteğinizde sendNotifications değerini true olarak ayarlarsanız katılımcılara etkinliğiniz için bir e-posta bildirimi gönderilir. Daha fazla bilgi için birden fazla katılımcılı etkinlikler rehberini inceleyin.

Aşağıdaki örneklerde etkinlik oluşturma ve etkinlik 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

// Refer to the PHP quickstart on how to setup the environment:
// https://developers.google.com/calendar/quickstart/php
// Change the scope to Google_Service_Calendar::CALENDAR and delete any stored
// credentials.

$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 diğer ilgili Google Drive dosyaları gibi Google Drive dosyaları ekleyebilirsiniz. Bu eki, events.insert() veya üzeri bir güncelleme kapsamında etkinlik oluşturduğunuzda (ör. events.patch()) ekleyebilirsiniz.

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

  1. Drive API Dosyaları kaynağından alternateLink URL, title ve mimeType dosyasını genellikle files.get() yöntemiyle alın.
  2. İstek gövdesinde attachments alanları ve supportsAttachments parametresi true olarak ayarlanmış şekilde bir etkinlik oluşturun veya güncelleyin.

Aşağıdaki kod örneğinde, ek iliştirmek 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();
}

2.999

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 telefon konferansları ekleme

Kullanıcılarınızın telefon araması 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 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.

conferenceData.conferenceSolution.key.type ile belirtildiği gibi, şu anda desteklenen üç tür conferenceData vardır:

  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)

Bir kullanıcının herhangi bir takvimi için 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 kullanıcının, settings koleksiyonundaki autoAddHangouts ayarını kontrol ederek yeni oluşturduğu tüm etkinlikler için Hangouts oluşturulmasını tercih edip etmediğini de öğrenebilirsiniz.

type alanının yanı sıra conferenceSolution, konferans çözümünü temsil etmek için kullanabileceğiniz name ve iconUri alanlarını da aşağıda gösterildiği gibi 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);

createRequest adresine, rastgele string olabilecek yeni oluşturulmuş bir requestId değeri sağlayarak etkinlik için yeni bir konferans oluşturabilirsiniz. Konferanslar eşzamansız olarak oluşturulur ancak kullanıcılarınıza neler olduğunu bildirmek için isteğinizin durumunu istediğiniz zaman kontrol edebilirsiniz.

Örneğin, mevcut bir etkinlik için konferans oluşturulmasını istemek ü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 acil yanıt henüz tam olarak doldurulmuş conferenceData özelliğini içermeyebilir. Bu durum, durum alanında pending durum koduyla belirtilir. Konferans bilgileri girildikten sonra durum kodu success olarak değişir. entryPoints alanı, kullanıcılarınızın telefonla katılmak için kullanabileceği video ve telefon URI'leriyle ilgili bilgileri içerir.

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

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