יצירת אירועים

דמיינו אפליקציה שעוזרת למשתמשים למצוא את מסלולי ההליכה הטובים ביותר. על ידי הוספת תוכנית של טיול רגלי כאירוע ביומן, המשתמשים מקבלים עזרה רבה כדי להישאר מאורגנות באופן אוטומטי. יומן Google עוזר להם לשתף את התוכנית מזכיר להם את זה כדי שהם יוכלו להתכונן בלי לחץ. כמו כן, בזכות שילוב חלק של מוצרי Google, 'Google עכשיו' מצלצל אליהם לגבי הזמן לעזוב אותו ומפות Google להפנות אותו למקום הפגישה בזמן.

במאמר הזה מוסבר איך ליצור אירועים ביומן ולהוסיף אותם לרשימת האירועים של המשתמשים. יומנים.

הוספת אירוע

כדי ליצור אירוע, קוראים לפונקציה השיטה events.insert() מספקת לפחות את הפרמטרים הבאים:

  • calendarId הוא מזהה היומן, והוא יכול להיות כתובת האימייל שלו של היומן שבו יש ליצור את האירוע או מילת מפתח מיוחדת 'primary' שישתמש ביומן הראשי של המשתמש המחובר. אם המיקום אתם לא יודעים מהי כתובת האימייל של היומן שבו תרצו להשתמש, את יכולה לבדוק בהגדרות של היומן באתר של יומן Google ממשק משתמש (בקטע 'כתובת היומן') או שאפשר לחפש אותו. כתוצאה מכך calendarList.list().
  • event הוא האירוע שיש ליצור עם כל הפרטים הנדרשים, כמו התחלה ובסופו. שני שדות החובה היחידים הם פעמים start ו-end. לצפייה קובץ עזר של event לקבוצה המלאה של אירועים .

כדי ליצור את האירועים בהצלחה, צריך:

  • צריך להגדיר את היקף הרשאות ה-OAuth ל-https://www.googleapis.com/auth/calendar כדי יש לכם גישת עריכה ליומן של המשתמש.
  • מוודאים שלמשתמש המאומת יש גישת כתיבה ליומן באמצעות calendarId שסיפקת (לדוגמה, על ידי התקשרות) calendarList.get() עבור calendarId ומתבצעת בדיקה של accessRole).

הוספת מטא-נתונים של אירוע

אפשר להוסיף מטא-נתונים של אירועים כשיוצרים אירוע ביומן. אם לבחור שלא להוסיף מטא-נתונים במהלך היצירה, אפשר לעדכן שדות רבים באמצעות events.update() עם זאת, חלק מהשדות כמו מזהה האירוע, רק במהלך פעולה events.insert().

מיקום

הוספת כתובת לשדה המיקום מפעילה תכונות כמו

"הגיע הזמן לצאת" או הצגת מפה עם מסלול הגעה.

מזהה אירוע

כשיוצרים אירוע, אפשר ליצור מזהה אירוע משלכם

שתואם לדרישות הפורמט שלנו. כך תוכלו לשמור ישויות במסד הנתונים המקומי בסנכרון עם האירועים ביומן Google. כמו כן מונעת יצירת אירוע כפול אם הפעולה נכשלת בשלב כלשהו לאחר הוא מופעל בהצלחה בקצה העורפי של יומן Google. אם לא מזהה האירוע סופק, השרת יוצר אותו בשבילכם. כאן מופיע מזהה האירוע למידע נוסף.

משתתפים

האירוע שתיצרו יופיע בכל יומני Google הראשיים של

המשתתפים שכללתם עם אותו מזהה אירוע. אם מגדירים sendNotifications עד true בבקשת ההוספה, המשתתפים יקבלו גם התראה באימייל על האירוע. הצג את האירועים עם מדריך למשתתפים מרובים מידע נוסף.

בדוגמאות הבאות מוסבר איך ליצור אירוע ולהגדיר את המטא-נתונים שלו:

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}"

הוספת קבצים מצורפים מ-Drive לאירועים

אפשר לצרף את Google Drive כמו סיכומי פגישות ב-Docs, תקציבים Sheets, מצגות ב-Slides או כל סוג אחר קבצים רלוונטיים ב-Google Drive לאירועים ביומן. אפשר להוסיף את כשתיצרו אירוע עם events.insert() ואילך כחלק עדכון, למשל באמצעות events.patch()

שני החלקים בצירוף קובץ מ-Google Drive לאירוע:

  1. מוצאים את הקובץ alternateLink, title ו-mimeType מ- משאב Files של Drive API, בדרך כלל באמצעות השיטה files.get().
  2. יצירה או עדכון של אירוע עם השדות attachments שמוגדרים בבקשה body והפרמטר supportsAttachments מוגדרים ל-true.

הקוד לדוגמה הבא ממחיש איך לעדכן אירוע קיים כדי להוסיף אירוע קובץ מצורף:

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()

איך מוסיפים לאירועים שיחות ועידה בטלפון או בווידאו

אפשר לשייך אירועים עם Hangouts ו- שיחות ועידה ב-Google Meet לאפשר למשתמשים להיפגש מרחוק באמצעות שיחת טלפון או שיחת וידאו.

השדה conferenceData יכול לשמש לקריאה, להעתקה ולמחיקה של הפרטים הקיימים של שיחת הוועידה. אפשר גם להיות ששימשו כדי לבקש יצירה של שיחות ועידה חדשות. כדי לאפשר יצירה שינוי של פרטי שיחת הוועידה, הגדרת הבקשה של conferenceDataVersion ל-1.

כרגע יש שלושה סוגים של conferenceData שנתמכים, כפי שמצוין ב- conferenceData.conferenceSolution.key.type:

  1. Hangouts לצרכנים (eventHangout)
  2. הגרסה הקלאסית של Hangouts Google Workspace למשתמשים (הוצא משימוש; eventNamedHangout)
  3. Google Meet (hangoutsMeet)

תוכלו לראות איזה סוג של שיחת ועידה נתמך בכל יומן נתון של משתמש על ידי עיון בconferenceProperties.allowedConferenceSolutionTypes ב calendars אוספים calendarList. אפשר גם לקבל מידע אם המשתמש מעדיף ליצור Hangouts לכל השיחות החדשות שנוצרו על ידי סימון ההגדרה autoAddHangouts האוסף settings.

מלבד type, conferenceSolution מספק גם את name ואת iconUri שדות שבהם אפשר להשתמש כדי לייצג את פתרון שיחת הוועידה כפי שמוצג למטה:

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);

כדי ליצור שיחת ועידה חדשה לאירוע צריך לספק ל-createRequest requestId חדש שנוצר שיכול להיות string אקראי. שיחות ועידה הן נוצרה באופן אסינכרוני, אבל תמיד אפשר לבדוק את סטטוס הבקשה כדי כדי שהמשתמשים יוכלו לדעת מה קורה,

לדוגמה, כדי לבקש יצירת שיחת ועידה של אירוע קיים:

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);
});

יכול להיות שהתשובה המיידית לשיחה הזו עוד לא מכילה את כל הפרטים conferenceData; מצוין באמצעות קוד הסטטוס pending בשדה סטטוס השדה הזה. קוד הסטטוס ישתנה ל-success אחרי שהפרטים של שיחת הוועידה מאוכלס. השדה entryPoints מכיל מידע על סוג הסרטון מזהי URI של טלפון שזמינים למשתמשים באמצעות הטלפון.

אם אתם רוצים לקבוע כמה אירועים ביומן Google פרטי שיחת הוועידה, אפשר להעתיק את כל conferenceData מאירוע אחד אל אחר.

ההעתקה שימושית במצבים מסוימים. לדוגמה, נניח שאתם מפתחים אפליקציית גיוס שמגדירה אירועים נפרדים למועמד מראיין – צריך להגן על הזהות של המראיין, אבל אם אתם רוצים לוודא שכל המשתתפים יצטרפו לאותה שיחת ועידה.