Bayangkan sebuah aplikasi yang membantu pengguna menemukan rute hiking terbaik. Dengan menambahkan rencana hiking sebagai acara kalender, pengguna mendapatkan banyak bantuan untuk teratur secara otomatis. Google Kalender membantu mereka untuk berbagi rencana dan mengingatkan mereka tentang hal itu sehingga mereka bisa mempersiapkan diri tanpa stres. Selain itu, berkat integrasi produk Google yang lancar, Google Now akan mengirimkan ping kepada mereka mengenai waktu yang tepat untuk berangkat dan Google Maps mengarahkan mereka ke tempat pertemuan secara tepat waktu.
Artikel ini menjelaskan cara membuat acara kalender dan menambahkannya ke kalender pengguna.
Tambahkan acara
Untuk membuat peristiwa, panggil metode events.insert()
yang menyediakan setidaknya parameter berikut:
calendarId
adalah ID kalender dan dapat berupa alamat email kalender untuk membuat acara atau kata kunci khusus'primary'
yang akan menggunakan kalender utama pengguna yang login. Jika tidak tahu alamat email kalender yang ingin digunakan, Anda dapat memeriksanya di setelan kalender pada UI web Google Kalender (di bagian "Alamat Kalender") atau Anda dapat mencarinya dalam hasil panggilancalendarList.list()
.event
adalah peristiwa yang akan dibuat dengan semua detail yang diperlukan seperti awal dan akhir. Dua kolom wajib diisi hanya dua kalistart
danend
. Lihat referensievent
untuk mengetahui kumpulan lengkap kolom peristiwa.
Agar peristiwa berhasil dibuat, Anda harus:
- Tetapkan cakupan OAuth ke
https://www.googleapis.com/auth/calendar
sehingga Anda memiliki akses edit ke kalender pengguna. - Pastikan pengguna yang terautentikasi memiliki akses tulis ke kalender dengan
calendarId
yang Anda berikan (misalnya dengan memanggilcalendarList.get()
untukcalendarId
dan memeriksaaccessRole
).
Tambahkan metadata peristiwa
Anda dapat memilih untuk menambahkan metadata acara saat membuat acara kalender. Jika memilih untuk tidak menambahkan metadata selama pembuatan, Anda dapat memperbarui banyak kolom menggunakan events.update()
. Namun, beberapa kolom, seperti ID peristiwa, hanya dapat ditetapkan selama operasi events.insert()
.
- Lokasi
Menambahkan alamat ke kolom lokasi akan mengaktifkan fitur seperti
"waktunya berangkat" atau menampilkan peta beserta petunjuk arahnya.
- ID Peristiwa
Saat membuat acara, Anda dapat memilih untuk membuat ID peristiwa sendiri
yang sesuai dengan persyaratan format kami. Hal ini memungkinkan Anda untuk menyinkronkan entitas dalam database lokal dengan acara di Google Kalender. Tindakan ini juga mencegah pembuatan peristiwa duplikat jika operasi gagal pada suatu saat setelah berhasil dijalankan di backend Kalender. Jika tidak ada ID peristiwa yang diberikan, server akan membuatkannya untuk Anda. Lihat referensi ID peristiwa untuk informasi selengkapnya.
- Peserta
Acara yang Anda buat muncul di semua Google Kalender utama
peserta yang Anda sertakan dengan ID acara yang sama. Jika Anda menetapkan
sendNotifications
ketrue
pada permintaan penyisipan, tamu juga akan menerima notifikasi email untuk acara Anda. Lihat panduan acara dengan beberapa peserta untuk informasi selengkapnya.
Contoh berikut menunjukkan pembuatan peristiwa dan penyetelan metadatanya:
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}"
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 lainnya yang relevan ke acara kalender. Anda dapat menambahkan
lampiran saat membuat acara dengan
events.insert()
atau nanti sebagai bagian dari
update, seperti dengan events.patch()
Dua bagian dari melampirkan file Google Drive ke acara adalah:
- Dapatkan file
alternateLink
URL,title
, danmimeType
dari resource File Drive API, biasanya dengan metodefiles.get()
. - Buat atau perbarui peristiwa dengan kolom
attachments
yang ditetapkan dalam isi permintaan dan parametersupportsAttachments
yang ditetapkan ketrue
.
Contoh kode berikut menunjukkan cara mengupdate peristiwa 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 agar pengguna dapat bertemu dari jarak jauh melalui panggilan telepon atau panggilan video.
Kolom conferenceData
dapat digunakan untuk membaca, menyalin, dan menghapus detail konferensi yang ada; juga dapat digunakan untuk meminta pembuatan konferensi baru. Untuk mengizinkan pembuatan dan
modifikasi detail konferensi, setel parameter permintaan
conferenceDataVersion
ke 1
.
Ada tiga jenis conferenceData
yang saat ini didukung, seperti yang dilambangkan dengan
conferenceData.conferenceSolution.key.type
:
- Hangouts untuk konsumen (
eventHangout
) - Hangouts klasik untuk Google Workspace pengguna
(tidak digunakan lagi;
eventNamedHangout
) - Google Meet (
hangoutsMeet
)
Anda dapat mempelajari jenis konferensi yang didukung untuk kalender pengguna tertentu dengan melihat conferenceProperties.allowedConferenceSolutionTypes
di koleksi calendars
dan calendarList
. Anda juga dapat
mengetahui apakah pengguna lebih memilih membuat Hangouts untuk semua peristiwa yang baru
dibuat dengan memeriksa setelan autoAddHangouts
di
koleksi settings
.
Selain type
, conferenceSolution
juga menyediakan kolom name
dan
iconUri
yang dapat Anda gunakan untuk mewakili solusi konferensi seperti yang ditunjukkan
di bawah ini:
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 suatu acara dengan memberikan createRequest
requestId
yang baru dibuat dan dapat berupa string
acak. Konferensi
dibuat secara asinkron, tetapi Anda selalu dapat memeriksa status permintaan untuk
memberi tahu pengguna 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,
sendNotifications: true,
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 penuh; 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
ponsel yang tersedia bagi pengguna untuk bergabung melalui telepon.
Jika ingin menjadwalkan beberapa acara Kalender dengan detail konferensi yang sama, Anda dapat menyalin seluruh conferenceData
dari satu acara ke acara lainnya.
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 juga ingin memastikan semua peserta bergabung dalam panggilan konferensi yang sama.