创建事件
如果您对活动组织者的 Google 日历拥有写入权限,则可以使用 Events: insert 方法添加活动。
此方法可将活动直接添加到组织者的日历中,而无需考虑组织者是否设置了添加邀请。
添加参加者
使用此方法,您还可以通过将参与者的电子邮件地址添加到活动的 attendees 属性中,向同一活动添加参与者。组织者日后对活动所做的任何更改都会传播给参加者。
参会者会收到组织者电子邮件地址发来的邀请。Google 日历用户会在电子邮件中和/或日历中收到邀请,具体取决于其 Google 日历设置中的活动设置:
- 如果他们选择的是
From everyone设置,活动会直接添加到他们的日历中 - 如果他们选择的是
Only if the sender is known设置,则当他们之前与组织者互动过、组织者与他们位于同一组织中,或者组织者位于他们的 Google 通讯录中时,系统会将活动直接添加到他们的日历中。如果他们不认识活动组织者,可以点击添加到日历,也可以在邮件邀请中点击是或不确定来回复。然后,活动会添加到他们的日历中。 - 如果用户选择
When I respond in email设置,则系统不会将所有邀请添加到其日历中,除非用户在邮件邀请中点击是、不确定或否进行回复。
如需详细了解如何将邀请添加到 Google 日历,请参阅在日历中管理邀请。
直接在参加者的日历中显示活动
如需在 Google 日历中直接向受邀者显示活动,无论受邀者可能采用何种设置,您都可以设置受邀者的回复,或者直接将活动副本导入受邀者的日历。对于这两种方法,您都需要拥有对参会者日历的写入权限;如果没有,请考虑将组织者添加到参会者的联系人中,这可能需要对参会者的联系人拥有写入权限。
设置参会者的回复
如需将参加者的活动回复状态设置为“参加”,请按以下步骤操作:
- 在 Google 日历组织者的日历中创建活动,并添加参会者(见上文)。
- 使用
Events: update方法将参会者的 RSVP 设置为accepted或tentative。您必须拥有对参会者日历的写入权限。活动可能要过一段时间才会显示在参会者的日历中。 详细了解如何使用Events: update方法。
此方法会将活动添加到参会者的日历中,但参会者可能仍会在电子邮件中看到横幅,提示邀请是从他们之前不认识的地址发送的。
直接在参加者的日历中导入活动副本
如需将活动的副本导入到参与者的日历中,请按以下步骤操作:
- 如果您对活动组织者的 Google 日历拥有写入权限,请使用
Events: import方法导入活动副本。 - 使用
Events: import在参会者的日历中导入同一活动的其他副本。 您必须拥有对相应出席者日历的写入权限。为组织者和参会者的副本使用相同的活动 ID (iCalUID),并确保在参会者的副本中指定组织者。
使用此方法,参加者可以在其日历中看到相应活动,但不会收到 Google 日历发送的邮件邀请。
将组织者添加到参会者的联系人中
如果您没有参加者的凭据,可以指示参加者或其组织提前将组织者的电子邮件地址添加到其 Google 通讯录中,以便直接在其日历中显示活动。新创建的联系人可能需要过一段时间才会生效。
- 让 Google 日历用户将组织者添加到其 Google 通讯录。
- 如果参会者属于某个组织,您可以让该组织的管理员以编程方式将电子邮件地址添加到其用户的联系人中。请管理员启用网域范围的委托,模拟用户并使用
People: createContact方法为每位用户创建联系人,以确保日后来自这些电子邮件地址的邀请会自动显示在用户的日历中。 - 如果您有权访问参会者的联系人,还可以使用
People: createContact方法将组织者的电子邮件地址添加到参会者的联系人中。
通过电子邮件地址邀请用户
如果您没有组织者的 Google 日历的写入权限,或者不想公开组织者的电子邮件地址,请使用 iCalendar 协议 (RFC-5545) 通过 .ICS 文件邀请电子邮件用户。
如果受邀者是 Google 日历用户,且其设置处于 Only if the sender
is known 状态,并且之前未与您互动过或未将您的地址记录为已知地址,则在受邀者点击添加到日历或回复活动邀请之前,系统不会将邀请添加到其日历中。
提供供用户添加活动的链接
或者,如果您想让 Google 日历用户更轻松地添加一次性活动,而无需保持活动更新,您可以提供一个预先填充了活动的链接,供用户自行添加。此方法会在用户的日历上创建一个单独的活动,除非您有权访问用户的日历,否则无法更新该活动。
使用以下链接模板:
https://calendar.google.com/calendar/r/eventedit?action=TEMPLATE&dates=20230325T224500Z%2F20230326T001500Z&stz=Europe/Brussels&etz=Europe/Brussels&details=EVENT_DESCRIPTION_HERE&location=EVENT_LOCATION_HERE&text=EVENT_TITLE_HERE
通过更新以下信息:
- 开始日期和时间以及结束日期和时间:请使用 ISO 8601 格式。在上面的示例中,替换
20230325T224500Z和20230326T001500Z。 - 开始时区和结束时区:格式采用 IANA 时区数据库名称。
将时区放置在
stz和etz字段中。 - 活动说明:必须经过网址编码。
- 活动地点:必须采用网址编码。
- 活动标题:必须采用网址编码。
示例
我们来考虑一下构建预约服务的示例,该服务可帮助用户向商家预约。当用户预约后,您希望自己的服务在预约者和商家的 Google 日历中添加活动。
为了提供最佳的用户体验,我们建议商家授予其日历的写入权限,以便您直接将活动添加到商家的日历中(创建活动),并邀请预订者参加该活动(添加参加者)。为确保预订者在日历中看到活动并收到活动提醒,请告知他们在预订后立即查看电子邮件,并回复是以确认参加活动。他们回复活动后,系统会根据其通知设置,向他们发送 Google 日历活动通知。
如果您想直接将活动添加到预订者的日历中,请告知预订者将他们会收到邀请的电子邮件地址添加到其通讯录。或者,请求预订者授予其日历的写入权限,以便代表他们以编程方式回复 (Set the attendee's RSVP),并向他们发送有关已确认预订的电子邮件通知。
如果商家不想公开其电子邮件地址,请使用特定于用户的电子邮件地址通过电子邮件将活动发送给预订者(通过电子邮件地址邀请用户)。
事件传播
下图说明了这种动态。首先,Jack 在自己的主日历中创建了一项活动(因此拥有组织者副本)。然后,他邀请了“大提琴课”群组辅助日历和 Susan(她的活动设置是 Only if the sender is known)。系统会在“大提琴课程”群组辅助日历中创建参与者的副本,如果 Susan 认识 Jack,则会在 Susan 的日历中创建副本,否则会在 Susan 回复或表明她认识 Jack 时创建副本。当 Susan 回复时,RSVP 更改会传播回活动组织者,并根据 Susan 的回复更新组织者的副本。对组织者的活动副本所做的这些更改随后会传播给其他参加者。

共享事件属性
创建活动的日历是组织者日历。此日历拥有共享活动信息,包括 ID、开始和结束时间、摘要和说明。当组织者日历中的相应信息更新后,更改会传播到参会者的日历中。
非公开活动属性
并非所有信息都会在所有活动副本之间共享。某些属性是私有的,例如提醒、colorId、透明度或 extendedProperties.private 属性。这些属性由参会者的设置控制,而不是由组织者的日历控制。
参加者还可以更改活动的共享属性。不过,这些更改只会反映在他们自己的副本中,如果组织者进行更改,这些更改可能会丢失。
从参加者传播回组织者的唯一活动更改是参加者的回复状态,该状态存储在 attendees[].responseStatus 属性中。