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 düzenli kalma konusunda yardım alır. Google Takvim, planı paylaşmalarına yardımcı olur ve planı hatırlatarak strese girmeden hazırlanmalarını sağlar. Ayrıca, Google ürünlerinin sorunsuz entegrasyonu sayesinde 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ğ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 kullanan özel bir anahtar kelime 'primary' olabilir. Kullanmak istediğiniz takvimin e-posta adresini bilmiyorsanız Takvim web kullanıcı arayüzündeki takvim ayarlarında ("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 iki alanın doldurulması zorunludur: start ve end saatleri. Etkinlik alanlarının tam listesi için Events kaynak referansına bakın.

Etkinlik 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çin calendarList.get işlevini çağırarak ve accessRole işlevini 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 yöntemini 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 tarifleriyle birlikte harita gösterme gibi özellikleri etkinleştirir.
Etkinlik kimliği
Etkinlik oluştururken, biçim şartlarına uygun kendi etkinlik kimliğinizi oluşturmayı seçebilirsiniz. Bu sayede, yerel veritabanınızdaki öğeleri 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 etkinliğin yinelenerek oluşturulmasını da önler. Etkinlik kimliği sağlamazsanız sunucu 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ğini kullanarak eklediğiniz katılımcıların tüm birincil Takvim 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ısı olan etkinlikler başlıklı makaleyi inceleyin.

Aşağıdaki örneklerde, etkinlik oluşturma ve meta verilerini ayarlama işlemleri 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. Google Dokümanlar'daki toplantı notları, Google E-Tablolar'daki bütçeler, Google Slaytlar'daki sunular veya diğer ilgili Drive dosyaları) ekleyebilirsiniz. events.insert veya sonraki sürümlerde etkinlik oluştururken ya da events.patch gibi bir güncelleme kapsamında eki ekleyebilirsiniz.

Drive dosyasını etkinliğe ekleme işlemi iki bölümden oluşur:

  1. Google Drive API Files kaynağı'ndan dosya alternateLink URL'sini, title ve mimeType değerini alın. Bu işlem genellikle files.get yöntemiyle yapılır.
  2. İstek gövdesinde attachments alanları ayarlanmış ve supportsAttachments parametresi true 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 görüşmesi veya görüntülü görüşme yoluyla uzaktan toplantı yapmasına olanak tanımak için etkinlikleri Google Meet konferanslarıyla ilişkilendirebilirsiniz.

conferenceData alanı, mevcut konferans ayrıntılarını okumanıza, kopyalamanıza ve temizlemenize ya da yeni konferanslar oluşturulmasını istemenize olanak tanır. Konferans ayrıntılarının oluşturulmasına ve değiştirilmesine izin vermek için conferenceDataVersion istek parametresini 1 olarak ayarlayın.

Aşağıdaki konferans türleri desteklenir (conferenceData.conferenceSolution.key.type ile gösterilir):

  1. Google Meet (hangoutsMeet)

calendars ve calendarList koleksiyonlarındaki conferenceProperties.allowedConferenceSolutionTypes simgesine bakarak bir kullanıcının takviminde hangi konferans türünün desteklendiğini öğ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);

Rastgele bir dize olarak yeni oluşturulmuş bir requestId ile createRequest sağlayarak bir 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,
  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 bulunmayabilir. Durum alanı pending içerir. 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 istiyorsanız conferenceData bölümünün 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 aramasına katılmasını da sağlamak istiyorsunuz.