Imaginez une application qui aide les utilisateurs à trouver les meilleurs itinéraires de randonnée. En ajoutant le paramètre un plan de randonnée en tant qu'événement d'agenda, les utilisateurs obtiennent beaucoup d'aide pour rester organisées automatiquement. Google Agenda les aide à partager le plan et le rappelle à ce sujet afin qu'il puisse se préparer sans stress. De plus, grâce à intégration parfaite des produits Google, Google Now les pingue pour leur indiquer le moment partir et Google Maps le dirigera vers le lieu du rendez-vous à l'heure.
Cet article explique comment créer des événements d'agenda et les ajouter aux comptes de vos utilisateurs agendas.
Ajouter un événement
Pour créer un événement, appelez la méthode
La méthode events.insert()
fournit
au moins ces paramètres:
calendarId
est l'identifiant de l'agenda. Il peut s'agir de l'adresse e-mail correspondante du calendrier sur lequel créer l'événement ou un mot clé spécial'primary'
, qui utilisera l'agenda principal de l'utilisateur connecté. Si vous ne connaissez pas l'adresse e-mail de l'agenda que vous souhaitez utiliser, pouvez le vérifier dans les paramètres de Google Agenda sur le Web dans l'interface utilisateur (dans la section "Adresse URL de l'agenda") dans le résultat AppelcalendarList.list()
.event
est l'événement à créer avec tous les détails nécessaires, tels que "start" (début) et à la fin. Les deux seuls champs obligatoires sont les champsstart
etend
. Consultez le Documentation de référence surevent
pour l'ensemble complet des événements .
Pour pouvoir créer des événements, vous devez:
- Définissez le champ d'application OAuth sur
https://www.googleapis.com/auth/calendar
pour que vous êtes autorisé à modifier l'agenda de l'utilisateur. - Assurez-vous que l'utilisateur authentifié dispose d'un accès en écriture à l'agenda avec le
calendarId
que vous avez fourni (par exemple, en appelantcalendarList.get()
pourcalendarId
et en vérifiant leaccessRole
).
Ajouter des métadonnées d'événement
Vous pouvez éventuellement ajouter des métadonnées d'événement lorsque vous créez un événement d'agenda. Si vous
choisissez de ne pas ajouter de métadonnées lors de la création, vous pouvez mettre à jour de nombreux champs à l'aide de la propriété
events.update()
; mais certains champs,
l'ID de l'événement, par exemple, ne peuvent être définis
Opération events.insert()
.
- Lieu
L'ajout d'une adresse dans le champ "Emplacement" permet d'utiliser des fonctionnalités telles que
"il est l'heure de partir" ou afficher une carte contenant l'itinéraire.
- ID de l'événement
Lorsque vous créez un événement, vous pouvez choisir de générer votre propre ID d'événement
qui respecte nos exigences de format. Cela vous permet de conserver des entités de votre base de données locale à l'aide des événements de Google Agenda. Il y a aussi empêche la création d'événements en double si l'opération échoue après il s'exécute correctement dans le backend d'Agenda. Si non si un ID d'événement est fourni, le serveur en génère un pour vous. Voir l'ID de l'événement référence.
- Participants
L'événement que vous créez apparaît dans tous les agendas Google principaux de
les participants que vous avez inclus avec le même ID d'événement. Si vous définissez
sendNotifications
àtrue
sur votre demande d'insertion, les participants également recevoir une notification par e-mail pour votre événement. Voir les événements avec guide de plusieurs participants plus d'informations.
Les exemples suivants illustrent la création d'un événement et la définition de ses métadonnées:
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}"
Ajouter des pièces jointes Drive à des événements
Vous pouvez joindre Google Drive
des fichiers comme les notes de réunion dans Docs, les budgets dans
des feuilles de calcul, des présentations dans Slides
les fichiers Google Drive pertinents pour vos événements d'agenda. Vous pouvez ajouter
lorsque vous créez un événement avec
events.insert()
ou version ultérieure dans le cadre d'une
mise à jour (par exemple, events.patch()
)
L'ajout d'un fichier Google Drive à un événement se fait en deux étapes:
- Récupérez l'URL
alternateLink
du fichier,title
etmimeType
à partir de la ressource des fichiers de l'API Drive, généralement avec la méthodefiles.get()
. - Créer ou mettre à jour un événement avec les champs
attachments
définis dans la requête et le paramètresupportsAttachments
défini surtrue
.
L'exemple de code suivant montre comment mettre à jour un événement existant pour l'ajouter une pièce jointe:
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()
Ajouter des visioconférences et des conférences téléphoniques aux événements
Vous pouvez associer des événements à Hangouts et conférences Google Meet à permettre à vos utilisateurs de se réunir à distance via un appel téléphonique ou un appel vidéo.
Le champ conferenceData
peut
être utilisée pour lire, copier et effacer les détails d'une conférence existante ; il peut aussi être
utilisée pour demander
la création de nouvelles conférences. Pour autoriser la création
modification des détails de la conférence, définir la requête conferenceDataVersion
sur 1
.
Trois types de conferenceData
sont actuellement pris en charge, comme indiqué par le
conferenceData.conferenceSolution.key.type
:
- Hangouts grand public (
eventHangout
) - Version classique de Hangouts Google Workspace pour les utilisateurs
(obsolète ;
eventNamedHangout
) - Google Meet (
hangoutsMeet
)
Vous pouvez identifier le type de conférence pris en charge dans n'importe quel agenda d'une
utilisateur en consultant conferenceProperties.allowedConferenceSolutionTypes
dans
les calendars
et
calendarList
. Vous pouvez également
déterminer si l'utilisateur préfère que des Hangouts soient créés pour tous ses nouveaux
les événements créés en cochant le paramètre autoAddHangouts
dans
collection settings
.
En plus de type
, conferenceSolution
fournit également les name
et les
Champs iconUri
que vous pouvez utiliser pour représenter la solution de conférence, comme indiqué
ci-dessous:
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);
Vous pouvez créer une conférence pour un événement en fournissant un createRequest
avec
un requestId
nouvellement généré, qui peut être un string
aléatoire. Les conférences sont
sont créées de manière asynchrone, mais vous pouvez toujours vérifier l'état de votre demande
informer vos utilisateurs de ce qui se passe.
Par exemple, pour demander la génération d'une conférence pour un événement existant:
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);
});
Il est possible que la réponse immédiate à cet appel ne contienne pas encore
conferenceData
; cela est indiqué par le code d'état pending
dans
état
. Le code d'état passe à success
lorsque les informations sur la conférence sont
renseignés. Le champ entryPoints
contient des informations sur les types de vidéos et
des URI de téléphone sont disponibles pour que vos utilisateurs puissent y accéder par téléphone.
Si vous souhaitez planifier plusieurs événements Agenda ayant
informations sur la conférence, vous pouvez copier l'intégralité de conferenceData
d'un événement vers
une autre.
La copie est utile dans certaines situations. Par exemple, supposons que vous développiez une application de recrutement qui configure des événements distincts pour le candidat vous voulez protéger l'identité de l'intervieweur, vous assurer que tous les participants rejoignent la même conférence téléphonique.