Events: insert

创建事件。 立即试用查看示例

请求

HTTP 请求

POST https://www.googleapis.com/calendar/v3/calendars/calendarId/events

参数

参数名称 说明
路径参数
calendarId string 日历标识符。如需检索日历 ID,请调用 calendarList.list 方法。如果您想访问当前登录用户的主要日历,请使用“primary”关键字。
可选的查询参数
conferenceDataVersion integer API 客户端支持的会议数据的版本号。版本 0 假定不支持会议数据,并会忽略事件正文中的会议数据。版本 1 支持复制 ConferenceData,还支持使用 meetingData 的 createRequest 字段创建新会议。默认值为 0。 可接受的值为 01(含)。
maxAttendees integer 响应中包含的参加者数量上限。如果参加者人数超过指定数量,则只返回参与者。可选。
sendNotifications boolean 已弃用。请改用 sendUpdates

是否发送有关新事件创建的通知。请注意,即使您将该值设为 false,系统可能仍会发送某些电子邮件。默认值为 false
sendUpdates string 是否发送有关创建新活动的通知。请注意,系统可能仍会发送某些电子邮件。默认值为 false

可接受的值:
  • all”:系统会向所有访客发送通知。
  • externalOnly”:系统只会向非 Google 日历访客发送通知。
  • none”:不发送任何通知。
supportsAttachments boolean 执行操作的 API 客户端是否支持事件附件。可选。默认值为 False。

授权

此请求需要获得以下至少一个范围的授权:

范围
https://www.googleapis.com/auth/calendar
https://www.googleapis.com/auth/calendar.events

如需了解详情,请参阅身份验证和授权页面。

请求正文

在请求正文中,提供具有以下属性的 Events 资源

属性名称 说明 备注
必需属性
end nested object 事件的(不含)结束时间。对于周期性活动,这是第一个实例的结束时间。
start nested object 活动的开始时间(包括此时间)。对于周期性活动,这是第一次活动开始时间。
可选属性
anyoneCanAddSelf boolean 是否允许任何人邀请自己参加活动(已废弃)。可选。默认值为 False。 可写入
attachments[].fileUrl string 附件的网址链接。

如需添加 Google 云端硬盘文件附件,请使用与 Drive API 中 Files 资源的 alternateLink 属性相同的格式。

添加附件时必填。

可写入
attendees[] list 活动的参加者。如需详细了解如何与其他日历用户一起安排活动,请参阅包含参加者的活动指南。服务账号需要使用全网域授权来填充参加者名单。 可写入
attendees[].additionalGuests integer 额外房客的人数。可选。默认值为 0。 可写入
attendees[].comment string 参加者的回复评论。可选。 可写入
attendees[].displayName string 参加者的姓名(如果有)。可选。 可写入
attendees[].email string 参加者的电子邮件地址(如果有)。添加参加者时,此字段必须填写。该地址必须是符合 RFC5322 的有效电子邮件地址。

添加参加者时必须提供。

可写入
attendees[].optional boolean 此参与者是否为可选的参加者。可选。默认值为 False。 可写入
attendees[].resource boolean 参加者是否为资源。仅当参加者首次添加到活动时才能设置。系统会忽略后续的修改。可选。默认值为 False。 可写入
attendees[].responseStatus string 参加者的回复状态。可能的值包括:
  • needsAction”- 参加者尚未回复邀请(建议针对新活动使用)。
  • declined”- 参加者已拒绝邀请。
  • tentative”- 参加者已暂时接受邀请。
  • accepted”- 参加者已接受邀请。
可写入
birthdayProperties nested object 生日或特殊活动数据。如果 eventType"birthday",使用此属性。固定不变。 可写入
birthdayProperties.type string 生日或特殊活动的类型。可能的值包括:
  • "anniversary" - 除生日以外的周年纪念日。始终具有 contact
  • "birthday" - 生日活动。这是默认值。
  • "custom" - 特殊日期,其标签在 customTypeName 字段中进一步指定。始终具有 contact
  • "other" - 不属于其他类别的特殊日期,没有自定义标签。始终具有 contact
  • "self" - 日历所有者的生日。不得包含 contact
Calendar API 仅支持创建类型为 "birthday" 的事件。活动创建后,类型便无法更改。
可写入
colorId string 事件的颜色。这是一个 ID,用于引用颜色定义的 event 部分中的条目(请参阅 “颜色”端点)。可选。 可写入
conferenceData nested object 与会议相关的信息,例如 Google Meet 会议的详细信息。如需创建新的会议详细信息,请使用 createRequest 字段。如需保留更改,请务必为所有事件修改请求将 conferenceDataVersion 请求参数设置为 1 可写入
description string 活动的说明。可以包含 HTML。可选。 可写入
end.date date 如果是全天活动,则为日期(格式为“yyyy-mm-dd”)。 可写入
end.dateTime datetime 时间,作为组合日期时间值(采用 RFC3339 格式)。除非在 timeZone 中明确指定时区,否则必须指定时区偏移量。 可写入
end.timeZone string 指定时间的时区。(格式为 IANA 时区数据库名称,例如“Europe/Zurich”)。对于周期性活动,此字段是必填字段,用于指定展开周期性事件时所采用的时区。对于单个活动,此字段是可选的,表示活动开始/结束的自定义时区。 可写入
eventType string 事件的具体类型。活动创建后,您将无法修改此设置。可能的值包括:
  • birthday”- 每年重复一次的特别全天活动。
  • default”- 常规事件或未进一步指定。
  • focusTime”- 专注时间事件。
  • fromGmail”- 来自 Gmail 的活动。无法创建此类事件。
  • outOfOffice”- 不在办公室活动。
  • workingLocation”- 工作地点事件。
可写入
extendedProperties.private object 此日历上显示的活动副本的私有属性。 可写入
extendedProperties.shared object 在其他参加者的日历中的活动副本之间共享的属性。 可写入
focusTimeProperties nested object “专注时间”活动数据。如果 eventType 设为 focusTime,则使用此字段。 可写入
gadget.display string 小工具的显示模式。已弃用。可能的值包括:
  • icon”- 该微件会显示在日历视图中活动标题旁边。
  • chip”- 点击事件时显示该小工具。
可写入
gadget.height integer 小工具的高度(以像素为单位)。高度必须是大于 0 的整数。可选。已弃用。 可写入
gadget.preferences object 偏好设置。 可写入
gadget.title string 微件的标题。已弃用。 可写入
gadget.type string 该小工具的类型。已弃用。 可写入
gadget.width integer 小工具的宽度(以像素为单位)。宽度必须是正整数。可选。已弃用。 可写入
guestsCanInviteOthers boolean 组织者以外的参加者是否可以邀请他人参加活动。可选。默认值为 True。 可写入
guestsCanModify boolean 组织者以外的参加者是否可以修改活动。可选。默认值为 False。 可写入
guestsCanSeeOtherGuests boolean 组织者以外的参加者是否可以看到活动的参加者。可选。默认值为 True。 可写入
id string 事件的不透明标识符。创建新的单次或周期性事件时,您可以指定其 ID。提供的 ID 必须遵循以下规则:
  • 身份证件中允许使用的字符是 base32hex 编码中使用的字符,即小写字母 a-v 和数字 0-9,请参阅 RFC2938 中的第 3.1.2 节
  • ID 的长度必须介于 5 到 1024 个字符之间
  • 每个日历的 ID 必须唯一
由于该系统是全球分布式系统,因此我们无法保证系统会在事件创建时检测到 ID 冲突。为了最大限度地降低发生冲突的风险,我们建议使用成熟的 UUID 算法,如 RFC4122 中所述的算法。

如果您未指定 ID,服务器会自动生成 ID。

请注意,icalUIDid 并不相同,在创建事件时应仅提供其中一个。它们在语义上的一个区别在于,在周期性事件中,一个事件的所有出现都具有不同的 id,而它们都共享相同的 icalUID

可写入
location string 活动的地理位置(自由格式文本)。可选。 可写入
originalStartTime.date date 如果是全天活动,则为日期(格式为“yyyy-mm-dd”)。 可写入
originalStartTime.dateTime datetime 时间,采用日期-时间组合值的形式(格式符合 RFC3339 标准)。除非在 timeZone 中明确指定时区,否则必须指定时区偏移量。 可写入
originalStartTime.timeZone string 指定时间的时区。(格式为 IANA 时区数据库名称,例如“Europe/Zurich”)。对于周期性活动,此字段是必填字段,用于指定展开周期性事件时所采用的时区。对于单个活动,此字段是可选的,表示活动开始/结束的自定义时区。 可写入
outOfOfficeProperties nested object “不在办公室”活动数据。如果 eventType 设为 outOfOffice,则使用此字段。 可写入
recurrence[] list RFC5545 中所指定,重复性事件的 RRULE、EXRULE、RDATE 和 EXDATE 行列表。请注意,此字段不允许使用 DTSTART 和 DTEND 行;事件的开始时间和结束时间应在 startend 字段中指定。对于单个活动或周期性活动的实例,此字段会被省略。 可写入
reminders.overrides[] list 如果活动不使用默认提醒,此字段会列出特定于该活动的提醒;如果未设置,则表示未为此活动设置任何提醒。替换提醒的数量上限为 5 个。 可写入
reminders.overrides[].method string 此提醒使用的方法。可能的值包括:
  • email”- 系统会通过电子邮件发送提醒。
  • popup”- 通过界面弹出窗口发送提醒。

添加提醒时必填。

可写入
reminders.overrides[].minutes integer 应在活动开始前多少分钟触发提醒。有效值介于 0 到 40320(4 周,以分钟为单位)之间。

添加提醒时必填。

可写入
reminders.useDefault boolean 日历的默认提醒是否应用于活动。 可写入
sequence integer 序号与 i 日历 相同。 可写入
source.title string 来源的标题;例如网页标题或电子邮件主题。 可写入
source.url string 指向资源的来源的网址。网址架构必须为 HTTP 或 HTTPS。 可写入
start.date date 如果是全天活动,则为日期(格式为“yyyy-mm-dd”)。 可写入
start.dateTime datetime 时间,作为组合日期时间值(采用 RFC3339 格式)。除非在 timeZone 中明确指定时区,否则必须指定时区偏移量。 可写入
start.timeZone string 指定时间的时区。(格式为 IANA 时区数据库名称,例如“Europe/Zurich”)。对于周期性活动,此字段是必填字段,用于指定展开周期性事件时所采用的时区。对于单个活动,此字段是可选的,表示活动开始/结束的自定义时区。 可写入
status string 活动的状态。可选。可能的值包括:
  • confirmed”- 事件已确认。这是默认状态。
  • tentative”- 活动暂时确认。
  • cancelled”- 活动已取消(已删除)。只有在增量同步(指定了 syncTokenupdatedMin)或 showDeleted 标志设置为 true 时,list 方法才会返回已取消的事件。get 方法始终会返回它们。

    已取消状态表示两种不同的状态,具体取决于事件类型:

    1. 未取消的周期性活动的已取消例外情况表示系统不应再向用户显示此实例。客户端应在父级周期性活动的生命周期内存储这些事件。

      已取消的例外情况只能保证为 idrecurringEventIdoriginalStartTime 字段填充值。其他字段可以留空。

    2. 所有其他已取消的事件都代表已删除的事件。客户端应移除其本地同步的副本。此类已取消的活动最终会消失,因此请勿指望它们会无限期可用。

      系统仅保证为已删除的事件填充 id 字段。

    在组织者的日历中,已取消的活动会继续显示活动详细信息(摘要、地点等),以便其可以恢复(取消删除)。同样,对于用户受邀参加但已手动移除的活动,系统仍会提供详细信息。不过,如果将 showDeleted 设置为 false,增量同步请求将不会返回这些详细信息。

    如果活动更改了组织者(例如通过移动操作),并且原始组织者不在参加者名单中,则系统会留下一个已取消的活动,其中只有 id 字段保证会填充。

可写入
summary string 活动的标题。 可写入
transparency string 活动是否会占用日历上的时间。可选。可能的值包括:
  • opaque”- 默认值。该活动会在日历上占用相应时间。这相当于在日历界面中将将我显示为设置为忙碌
  • transparent”- 活动不会占用日历上的时间。这相当于在日历界面中将将我显示为设置为空闲
可写入
visibility string 活动的公开范围。可选。可能的值包括:
  • default”- 使用日历中活动的默认公开范围。这是默认值。
  • public”- 活动是公开的,日历的所有读者都可以看到活动详情。
  • private”- 活动为不公开活动,只有活动参加者可以查看活动详情。
  • confidential”- 活动是不公开的。此值是为了兼容性而提供的。
可写入
workingLocationProperties nested object 工作位置事件数据。 可写入
workingLocationProperties.customLocation object 如果存在,则表示用户是在自定义位置工作。 可写入
workingLocationProperties.customLocation.label string 用于提供其他信息的可选额外标签。 可写入
workingLocationProperties.homeOffice any value 如果存在,则表示用户在家工作。 可写入
workingLocationProperties.officeLocation object 如果存在,则表示用户是在办公室工作。 可写入
workingLocationProperties.officeLocation.buildingId string 可选的建筑物标识符。此值应引用组织资源数据库中的建筑物 ID。 可写入
workingLocationProperties.officeLocation.deskId string 可选的桌面标识符。 可写入
workingLocationProperties.officeLocation.floorId string 可选的楼层标识符。 可写入
workingLocationProperties.officeLocation.floorSectionId string 可选的楼层分区标识符。 可写入
workingLocationProperties.officeLocation.label string 在 Google 日历网页版和移动版客户端中显示的办公室名称。我们建议您引用组织的“资源”数据库中的建筑物名称。 可写入
workingLocationProperties.type string 工作地点的类型。可能的值包括:
  • homeOffice”- 用户在家工作。
  • officeLocation”- 用户在办公室工作。
  • customLocation”- 用户是在自定义位置工作。
所有详细信息均在指定名称的子字段中指定,但如果此字段为空,则可能不存在。系统会忽略所有其他字段。

添加工作地点属性时必填。

可写入

响应

如果成功,此方法将在响应正文中返回一项 Events 资源

示例

注意:此方法的代码示例并未列出所有受支持的编程语言(请参阅客户端库页面,查看受支持的语言列表)。

Java

使用 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());

Python

使用 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'))

PHP

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

Ruby

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

.NET

使用 .NET 客户端库

// Refer to the .NET quickstart on how to setup the environment:
// https://developers.google.com/calendar/quickstart/dotnet
// Change the scope to CalendarService.Scope.Calendar and delete any stored
// credentials.

Event newEvent = new 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 = new EventDateTime()
    {
        DateTime = DateTime.Parse("2015-05-28T09:00:00-07:00"),
        TimeZone = "America/Los_Angeles",
    },
    End = new EventDateTime()
    {
        DateTime = DateTime.Parse("2015-05-28T17:00:00-07:00"),
        TimeZone = "America/Los_Angeles",
    },
    Recurrence = new String[] { "RRULE:FREQ=DAILY;COUNT=2" },
    Attendees = new EventAttendee[] {
        new EventAttendee() { Email = "lpage@example.com" },
        new EventAttendee() { Email = "sbrin@example.com" },
    },
    Reminders = new Event.RemindersData()
    {
        UseDefault = false,
        Overrides = new EventReminder[] {
            new EventReminder() { Method = "email", Minutes = 24 * 60 },
            new EventReminder() { Method = "sms", Minutes = 10 },
        }
    }
};

String calendarId = "primary";
EventsResource.InsertRequest request = service.Events.Insert(newEvent, calendarId);
Event createdEvent = request.Execute();
Console.WriteLine("Event created: {0}", createdEvent.HtmlLink);

Go

使用 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)

JavaScript

使用 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.

var 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}
    ]
  }
};

var request = gapi.client.calendar.events.insert({
  'calendarId': 'primary',
  'resource': event
});

request.execute(function(event) {
  appendPre('Event created: ' + event.htmlLink);
});

Node.js

使用 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.

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

试试看!

使用下面的 API Explorer 对实际数据调用此方法,然后查看响应。