이벤트 만들기

사용자가 최적의 하이킹 경로를 찾도록 도와주는 앱이 있다고 가정해 보겠습니다. 이 등산 계획을 캘린더 일정처럼 사용할 수 있으므로 사용자는 자동으로 정리됩니다. Google Calendar를 통해 계획을 공유하고 스트레스 없이 준비할 수 있도록 상기시켜 줍니다. 또한 Google Now를 통해 통합해야 할 시점에 대해 Google 지도가 정시에 회의 장소로 안내합니다.

이 도움말에서는 캘린더 일정을 만들어 사용자의 일정에 추가하는 방법을 설명합니다. 있습니다.

일정 추가

이벤트를 만들려면 events.insert() 메서드는 다음 매개변수를 포함해야 합니다.

  • calendarId는 캘린더 식별자이며 이메일 주소일 수 있습니다. 일정을 만들 캘린더의 일정 또는 특수 키워드 'primary': 로그인한 사용자의 기본 캘린더를 사용합니다. 만약 사용하려는 캘린더의 이메일 주소를 모르는 경우 Google Calendar 웹의 캘린더 설정에서 일정을 확인할 수 있습니다. UI('캘린더 주소' 섹션)를 확인하거나 0이 아닌 calendarList.list() 호출
  • event는 필요한 모든 세부정보(예: 시작)로 만들 이벤트입니다. 알 수 있습니다. 두 개의 필수 필드는 startend 횟수뿐입니다. 자세한 내용은 전체 이벤트 세트에 대한 event 참조 있습니다.

이벤트를 만들려면 다음을 실행해야 합니다.

  • OAuth 범위를 https://www.googleapis.com/auth/calendar로 설정하여 다음과 같이 합니다. 사용자의 캘린더에 대한 수정 액세스 권한이 있는지 확인합니다.
  • 인증된 사용자에게 제공한 calendarId (예: calendarList.get(): calendarIdaccessRole 확인).

이벤트 메타데이터 추가

캘린더 일정을 만들 때 일정 메타데이터를 추가할 수도 있습니다. 만약 생성 중에 메타데이터를 추가하지 않도록 선택하는 경우 events.update(); 일부 필드, 이벤트 ID와 같은 이벤트 ID가 events.insert() 연산으로 해석됩니다.

위치

위치 입력란에 주소를 추가하면 다음과 같은 기능을 사용할 수 있습니다.

"출발 시간 알림" 경로가 포함된 지도를 표시할 수 있습니다.

이벤트 ID

이벤트를 만들 때 자체 이벤트 ID를 생성할 수 있습니다.

동영상만 게재됩니다. 이렇게 하면 Google Calendar의 일정과 동기화하여 로컬 데이터베이스에 저장할 수 있습니다. 또한 이벤트 발생 후 특정 시점에 작업이 실패할 경우 중복 이벤트 생성을 방지합니다. Calendar 백엔드에서 실행됩니다. 답이 '아니요'인 경우 이벤트 ID가 제공되면 서버에서 자동으로 생성합니다. 이벤트 ID 보기 참조를 참조하세요.

참석자

만든 일정은 다음 일정의 모든 기본 Google 캘린더에 나타납니다.

초대할 수 있습니다. 만약 삽입 요청에서 truesendNotifications을 보내는 경우 참석자는 다음과 같이 처리됩니다. 이벤트에 대한 이메일 알림도 수신됩니다. 이 이벤트가 발생한 이벤트를 여러 참석자 가이드를 참조하세요.

다음 예에서는 이벤트를 만들고 메타데이터를 설정하는 방법을 보여줍니다.

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)

자바

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

자바스크립트

// 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를 첨부할 수 있습니다. 문서 파일, 문서, 스프레드시트, 문서 등의 Sheets, Slides의 프레젠테이션 또는 기타 항목 관련 Google Drive 파일을 캘린더 일정에 추가할 수 있습니다. 이때 일정을 만들 때 이 파일을 첨부하세요. events.insert() 이상 업데이트(예: events.patch())

일정에 Google Drive 파일을 첨부하는 작업은 다음 두 부분으로 이루어집니다.

  1. 에서 alternateLink URL, title, mimeType 파일을 가져옵니다. Drive API 파일 리소스(일반적으로 files.get() 메서드를 사용하면 됩니다.
  2. 요청에 설정된 attachments 필드로 이벤트를 만들거나 업데이트합니다. 본문과 supportsAttachments 매개변수가 true로 설정됨

다음 코드 예에서는 추가할 기존 이벤트를 업데이트하는 방법을 보여줍니다. 첨부파일:

자바

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

일정에 화상 회의 및 전화 회의 추가

이벤트를 행아웃Google Meet 회의를 사용자가 전화 통화나 영상 통화를 통해 원격으로 만날 수 있습니다.

conferenceData 필드는 다음 작업을 할 수 있습니다. 기존 회의 세부정보를 읽고 복사하고 삭제하는 데 사용 또한 사용됩니다. 생성과 배포를 허용하기 위해 회의 세부정보를 수정하려면 conferenceDataVersion 요청을 설정하세요. 매개변수를 1로 설정합니다.

현재 지원되는 conferenceData에는 세 가지 유형이 있으며, 이는 conferenceData.conferenceSolution.key.type:

  1. 일반 사용자를 위한 행아웃 (eventHangout)
  2. 사용자용 Google Workspace 기존 행아웃 (지원 중단됨, eventNamedHangout)
  3. Google Meet (hangoutsMeet)

특정 캘린더에서 지원되는 회의 유형을 알 수 있습니다. conferenceProperties.allowedConferenceSolutionTypes를 확인하여 calendars 및 컬렉션 calendarList개 그 외에 사용자가 새로 만든 모든 사용자를 위해 행아웃을 만드는 것을 선호하는지 다음 항목에서 autoAddHangouts 설정을 확인하여 만든 이벤트를 settings 컬렉션

type 외에도 conferenceSolutionname 및 다음과 같이 회의 솔루션을 나타내는 데 사용할 수 있는 iconUri 필드 아래:

자바스크립트

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일 수 있음) 컨퍼런스 비동기식으로 생성되지만 언제든지 사용자에게 현재 상황을 알릴 수 있습니다.

예를 들어 기존 이벤트의 회의 생성을 요청하는 방법은 다음과 같습니다.

자바스크립트

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 필드에는 어떤 동영상 및 사용자가 전화로 참여하는 데 사용할 수 있습니다.

동일한 캘린더로 여러 캘린더 일정을 예약하려는 경우 conferenceData 전체 데이터를 한 일정에서 다른 일정으로 복사해서 있습니다.

복사는 특정 상황에서 유용합니다. 예를 들어, Google Cloud의 후보자 및 지원자를 위해 별도의 이벤트를 설정하는 채용 신청서 즉, 면접관의 신원을 보호하길 원하지만 모든 참가자가 동일한 다자간 통화에 참여하도록 하는 것이 좋습니다.