Bayangkan sebuah aplikasi yang membantu pengguna menemukan rute pendakian terbaik. Dengan menambahkan rencana hiking sebagai acara kalender, pengguna mendapatkan banyak bantuan untuk tetap diatur secara otomatis. Google Kalender membantu mereka untuk berbagi rencana dan mengingatkan mereka tentang hal itu agar mereka bisa bersiap tanpa stres. Terima kasih kepada integrasi produk Google yang lancar, Google Now akan mengirim ping tentang waktu berangkat dan Google Maps mengarahkan mereka ke tempat pertemuan tepat waktu.
Artikel ini menjelaskan cara membuat acara kalender dan menambahkannya ke kalender.
Tambahkan acara
Untuk membuat peristiwa, panggil metode
Metode events.insert()
yang disediakan di
parameter berikut ini:
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 Anda tidak tahu alamat email kalender yang ingin Anda gunakan, Anda dapat memeriksanya di setelan kalender di web Google Kalender UI (di bagian "Alamat Kalender") atau Anda dapat mencarinya sebagai hasil dari PanggilancalendarList.list()
.event
adalah peristiwa yang akan dibuat dengan semua detail yang diperlukan seperti waktu mulai dan berakhir. Dua kolom yang wajib diisi hanya berupa waktustart
danend
. Lihat Referensievent
untuk kumpulan peristiwa lengkap kolom.
Agar berhasil membuat peristiwa, Anda harus:
- Tetapkan cakupan OAuth Anda ke
https://www.googleapis.com/auth/calendar
agar Anda memiliki akses edit ke kalender pengguna. - Pastikan pengguna yang diautentikasi memiliki akses tulis ke kalender dengan
calendarId
yang Anda berikan (misalnya dengan memanggilcalendarList.get()
untukcalendarId
dan memeriksaaccessRole
).
Tambahkan metadata peristiwa
Anda dapat menambahkan metadata acara saat membuat acara kalender. Jika Anda
memilih untuk tidak menambahkan metadata selama pembuatan, Anda dapat memperbarui banyak kolom menggunakan
events.update()
; namun, beberapa bidang,
seperti ID peristiwa, hanya dapat disetel selama
Operasi events.insert()
.
- Lokasi
Menambahkan alamat ke kolom lokasi akan mengaktifkan fitur seperti
"waktunya berangkat" atau menampilkan peta beserta rutenya.
- ID Peristiwa
Saat membuat acara, Anda dapat memilih untuk membuat ID peristiwa sendiri
yang sesuai dengan persyaratan format kami. Hal ini memungkinkan Anda untuk menjaga entitas dalam {i>database<i} lokal Anda secara sinkron dengan acara di Google Kalender. Anda juga mencegah pembuatan peristiwa duplikat jika operasi gagal pada suatu saat setelah perintah itu berhasil dieksekusi di backend Kalender. Jika tidak ID peristiwa diberikan, server akan membuatkannya untuk Anda. Melihat ID peristiwa untuk informasi selengkapnya.
- Peserta
Acara yang Anda buat akan muncul di semua Google Kalender utama
peserta yang Anda sertakan dengan ID acara yang sama. Jika Anda menetapkan
sendNotifications
hinggatrue
atas permintaan penyisipan Anda, para tamu akan juga akan menerima pemberitahuan email untuk acara Anda. Lihat peristiwa dengan panduan untuk beberapa peserta informasi selengkapnya.
Contoh berikut menunjukkan pembuatan peristiwa dan setelan 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
$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 Google Drive
file seperti catatan rapat di Dokumen, anggaran di
Spreadsheet, presentasi di Slide, atau lainnya
file Google Drive yang relevan
ke acara kalender Anda. Anda dapat menambahkan
lampiran ketika Anda membuat acara dengan
events.insert()
atau yang lebih baru sebagai bagian dari
seperti dengan events.patch()
Dua bagian melampirkan file Google Drive ke acara adalah:
- Dapatkan file
alternateLink
URL,title
, danmimeType
dari Resource File API Drive, biasanya dengan metodefiles.get()
. - Buat atau perbarui peristiwa dengan kolom
attachments
yang ditetapkan dalam permintaan body dan parametersupportsAttachments
ditetapkan ketrue
.
Contoh kode berikut menunjukkan cara memperbarui 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 peristiwa dengan Hangouts dan Konferensi Google Meet untuk mengizinkan pengguna Anda untuk bertemu dari jarak jauh melalui panggilan telepon atau panggilan video.
Kolom conferenceData
dapat
digunakan untuk membaca, menyalin, dan menghapus detail konferensi yang ada; bisa juga
yang digunakan untuk meminta pembuatan konferensi baru. Untuk mengizinkan pembuatan dan
modifikasi detail konferensi, menetapkan permintaan conferenceDataVersion
parameter ke 1
.
Ada tiga jenis conferenceData
yang saat ini didukung, seperti yang ditunjukkan oleh
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 tertentu dari
pengguna dengan melihat conferenceProperties.allowedConferenceSolutionTypes
pada
calendars
dan
calendarList
koleksi. Anda juga dapat
mempelajari apakah pengguna lebih suka membuat Hangouts untuk semua
peristiwa yang dibuat dengan memeriksa setelan autoAddHangouts
di
Koleksi settings
.
Selain type
, conferenceSolution
juga menyediakan name
dan
Kolom 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 acara dengan menyediakan createRequest
dengan
requestId
yang baru dibuat yang dapat berupa string
acak. Konferensi adalah
dibuat secara asinkron, tetapi Anda dapat selalu memeriksa status permintaan
memberi tahu pengguna apa yang sedang terjadi.
Misalnya, untuk meminta pembuatan konferensi untuk acara yang sudah 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 atas panggilan ini mungkin belum berisi respons yang terisi penuh
conferenceData
; hal ini ditunjukkan dengan kode status pending
di
status
kolom tersebut. Kode status berubah menjadi success
setelah informasi konferensi
telah diisi. Kolom entryPoints
berisi informasi tentang video dan
URI telepon tersedia bagi pengguna Anda untuk bergabung melalui telepon.
Jika Anda ingin menjadwalkan beberapa acara Kalender dengan
detail konferensi, Anda dapat menyalin seluruh conferenceData
dari satu acara ke
lain.
Menyalin 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.