Bayangkan sebuah aplikasi yang membantu pengguna menemukan rute mendaki terbaik. Dengan menambahkan rencana mendaki sebagai acara kalender, pengguna akan mendapatkan banyak bantuan untuk tetap teratur secara otomatis. Google Kalender membantu mereka membagikan rencana dan mengingatkan mereka tentang rencana tersebut sehingga mereka dapat bersiap tanpa merasa tertekan. Selain itu, berkat integrasi produk Google yang lancar, Google Now akan memberi tahu mereka tentang waktu keberangkatan dan Google Maps akan mengarahkan mereka ke tempat pertemuan tepat waktu.
Artikel ini menjelaskan cara membuat acara kalender dan menambahkannya ke kalender pengguna Anda.
Tambahkan acara
Untuk membuat peristiwa, panggil metode
events.insert() dengan memberikan setidaknya
parameter berikut:
calendarIdadalah ID kalender dan dapat berupa alamat email kalender tempat acara akan dibuat atau kata kunci khusus'primary'yang akan menggunakan kalender utama pengguna yang login. Jika Anda tidak mengetahui alamat email kalender yang ingin digunakan, Anda dapat memeriksanya di setelan kalender di UI web Google Kalender (di bagian "Alamat Kalender") atau Anda dapat mencarinya di hasil panggilancalendarList.list().eventadalah acara yang akan dibuat dengan semua detail yang diperlukan seperti waktu mulai dan akhir. Dua kolom yang wajib diisi hanyalah waktustartdanend. Lihat referensieventuntuk mengetahui set lengkap kolom peristiwa.
Agar berhasil membuat acara, Anda harus:
- Tetapkan cakupan OAuth Anda ke
https://www.googleapis.com/auth/calendaragar Anda memiliki akses edit ke kalender pengguna. - Pastikan pengguna yang diautentikasi memiliki akses tulis ke kalender dengan
calendarIdyang Anda berikan (misalnya dengan memanggilcalendarList.get()untukcalendarIddan memeriksaaccessRole).
Menambahkan metadata acara
Anda dapat menambahkan metadata acara secara opsional saat membuat acara kalender. Jika Anda
memilih untuk tidak menambahkan metadata selama pembuatan, Anda dapat memperbarui banyak kolom menggunakan
events.update(); namun, beberapa kolom,
seperti ID acara, hanya dapat ditetapkan selama operasi
events.insert().
- Lokasi
- Menambahkan alamat ke kolom lokasi akan mengaktifkan fitur seperti "waktu untuk berangkat" atau menampilkan peta dengan petunjuk arah.
- ID Peristiwa
- Saat membuat acara, Anda dapat memilih untuk membuat ID acara sendiri yang sesuai dengan persyaratan format kami. Dengan begitu, Anda dapat menyinkronkan entitas di database lokal dengan acara di Google Kalender. Tindakan ini juga mencegah pembuatan acara duplikat jika operasi gagal di suatu titik setelah berhasil dieksekusi di backend Kalender. Jika tidak ada ID peristiwa yang diberikan, server akan membuatnya untuk Anda. Lihat referensi ID peristiwa untuk mengetahui informasi selengkapnya.
- Peserta
- Acara yang Anda buat akan muncul di semua Google Kalender utama tamu yang Anda sertakan dengan ID acara yang sama. Jika Anda menetapkan
sendUpdateske"all"atau"externalOnly"dalam permintaan penyisipan, tamu yang sesuai akan menerima notifikasi email untuk acara Anda. Untuk mempelajari lebih lanjut, lihat acara dengan beberapa tamu.
Contoh berikut menunjukkan cara membuat peristiwa dan menyetel metadatanya:
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}"
Menambahkan lampiran Drive ke acara
Anda dapat melampirkan file Google Drive seperti catatan rapat di Dokumen, anggaran di Spreadsheet, presentasi di Slide, atau file Google Drive relevan lainnya ke acara kalender Anda. Anda dapat menambahkan lampiran saat membuat acara dengan
events.insert() atau yang lebih baru sebagai bagian dari
update seperti dengan events.patch()
Dua bagian untuk melampirkan file Google Drive ke acara adalah:
- Dapatkan URL file
alternateLink,title, danmimeTypedari resource File Drive API, biasanya dengan metodefiles.get(). - Buat atau perbarui peristiwa dengan kolom
attachmentsyang ditetapkan di isi permintaan dan parametersupportsAttachmentsyang ditetapkan ketrue.
Contoh kode berikut menunjukkan cara memperbarui acara yang ada untuk menambahkan lampiran:
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()
Menambahkan konferensi video dan telepon ke acara
Anda dapat mengaitkan acara dengan konferensi Hangouts dan Google Meet untuk mengizinkan pengguna Anda bertemu dari jarak jauh melalui panggilan telepon atau panggilan video.
Kolom conferenceData dapat
digunakan untuk membaca, menyalin, dan menghapus detail konferensi yang ada; kolom ini juga dapat
digunakan untuk meminta pembuatan konferensi baru. Untuk mengizinkan pembuatan dan
modifikasi detail konferensi, tetapkan parameter permintaan conferenceDataVersion
ke 1.
Saat ini ada tiga jenis conferenceData yang didukung, seperti yang ditunjukkan oleh
conferenceData.conferenceSolution.key.type:
- Hangouts untuk konsumen (
eventHangout) - Hangouts klasik untuk pengguna Google Workspace
(tidak digunakan lagi;
eventNamedHangout) - Google Meet (
hangoutsMeet)
Anda dapat mempelajari jenis konferensi yang didukung untuk kalender tertentu pengguna dengan melihat conferenceProperties.allowedConferenceSolutionTypes di
calendars dan
calendarList. Anda juga dapat
mempelajari apakah pengguna lebih suka Hangouts dibuat untuk semua acara yang baru
dibuat dengan memeriksa setelan autoAddHangouts di koleksi
settings.
Selain type, conferenceSolution juga menyediakan kolom name dan
iconUri yang dapat Anda gunakan untuk merepresentasikan solusi konferensi seperti yang ditunjukkan
di bawah:
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);
Anda dapat membuat konferensi baru untuk acara dengan memberikan createRequest dengan
requestId yang baru dibuat yang dapat berupa string acak. Konferensi dibuat secara asinkron, tetapi Anda selalu dapat memeriksa status permintaan untuk memberi tahu pengguna tentang apa yang terjadi.
Misalnya, untuk meminta pembuatan konferensi untuk acara yang ada:
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);
});
Respons langsung terhadap panggilan ini mungkin belum berisi
conferenceData yang terisi sepenuhnya; hal ini ditunjukkan oleh kode status pending di kolom
status. Kode status berubah menjadi success setelah informasi konferensi diisi. Kolom entryPoints berisi informasi tentang URI video dan
telepon mana yang tersedia bagi pengguna Anda untuk bergabung.
Jika ingin menjadwalkan beberapa acara Kalender dengan detail konferensi yang sama, Anda dapat menyalin seluruh conferenceData dari satu acara ke acara lain.
Penyalinan berguna dalam situasi tertentu. Misalnya, Anda sedang mengembangkan aplikasi perekrutan yang menyiapkan acara terpisah untuk kandidat dan pewawancara. Anda ingin melindungi identitas pewawancara, tetapi Anda juga ingin memastikan semua peserta bergabung ke panggilan konferensi yang sama.