邀请用户参加活动

创建事件

如果您对组织者的 Google 日历拥有写入权限,则可以使用 Events: insert 方法添加活动。

此方法会直接将活动添加到组织者的日历中,而不受其添加邀请的设置影响。

添加参加者

通过此方法,您还可以通过将参加者的电子邮件地址添加到活动的 attendees 属性中,将其添加到同一活动。组织者日后对活动所做的任何更改都会传播给参加者。

参加者会收到来自组织者电子邮件地址的邀请。Google 日历用户会在电子邮件和/或日历中收到邀请,具体取决于其 Google 日历设置中的“活动”设置:

  • 如果对方使用的是设置 From everyone,系统会直接将活动添加到对方的日历中
  • 如果用户的设置为 Only if the sender is known,并且他们之前与组织者互动过、组织者在同一组织中,或者组织者在其 Google 通讯录中,则系统会直接将活动添加到用户的日历中。如果他们不认识组织者,可以点击添加到日历,也可以在邀请电子邮件中点击不确定来回复邀请。然后,系统会将活动添加到对方的日历中。
  • 如果用户使用的是设置 When I respond in email,则只有在用户在邀请电子邮件中点击不确定进行回复后,系统才会将所有邀请添加到用户的日历中。

如需详细了解如何将邀请添加到 Google 日历,请参阅在 Google 日历中管理邀请

直接在参加者日历中显示活动

如需直接在 Google 日历参与者的日历中显示活动,以便参与者根据其可能拥有的任何设置来查看,您可以设置参与者的回复直接将活动的副本导入参与者的日历。无论是哪种方法,您都需要拥有对参加者日历的写入权限;如果没有,不妨考虑将组织者添加到参加者联系人名单中,这可能需要对参加者联系人拥有写入权限。

设置参与者的回复

如需为参加者设置对活动的回复,请按以下步骤操作:

  1. 在组织者的 Google 日历中创建活动,并添加参加者(见上文)。
  2. 使用 Events: update 方法将参加者的回复设置为 acceptedtentative。您必须拥有对参加者日历的写入权限。活动可能需要延迟一段时间才会显示在参加者的日历中。详细了解如何使用 Events: update 方法

此方法会将活动添加到参加者的日历中,但参加者可能仍会在电子邮件中看到一条横幅,提示邀请来自他们之前不认识的地址。

直接在参加者日历中导入活动的副本

如需将活动的副本导入参加者的日历,请按以下步骤操作:

  1. 如果您有权对组织者的 Google 日历进行写入,请使用 Events: import 方法导入活动的副本。
  2. 使用 Events: import 在参加者日历中导入同一活动的另一个副本。您必须拥有对参加者日历的写入权限。为组织者的副本和参加者的副本使用相同的事件 ID (iCalUID),并确保在参加者的副本中指定组织者。

使用此方法时,参加者可以在其日历中看到活动,但不会收到 Google 日历发送的邀请电子邮件。

将组织者添加到参加者联系人中

如果您没有参加者凭据,可以指示参加者或其所在组织提前将组织者的电子邮件地址添加到其 Google 通讯录,以便直接在其日历中显示活动。新创建的联系人可能需要稍等一段时间才会生效。

  • 让 Google 日历用户将组织者添加到其 Google 通讯录
  • 如果参加者属于某个组织,您可以要求该组织的管理员以编程方式将电子邮件地址添加到其用户的联系人中。请管理员启用网域级委托,冒充用户并使用 People: createContact 方法为每位用户创建联系人,以确保日后来自这些电子邮件地址的邀请会自动显示在用户的日历中。
  • 如果您有权访问参加者联系人,还可以使用 People: createContact 方法将组织者的电子邮件地址添加到参加者的联系人中。

通过电子邮件地址邀请用户

如果您没有对组织者的 Google 日历的写入权限,或者不想公开组织者的电子邮件地址,请使用 iCalendar 协议 (RFC-5545) 通过 .ICS 文件邀请用户。

如果参加者是设置为 Only if the sender is known 的 Google 日历用户,并且之前没有与您互动过,或者没有将您的电子邮件地址记录为已知地址,那么在他们点击添加到日历或回复活动邀请之前,系统不会将邀请添加到他们的日历中。

或者,如果您希望 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 格式。在上面的示例中,替换 20230325T224500Z20230326T001500Z
  • 开始时间和结束时间对应的时区:采用 IANA 时区数据库名称格式。将时区放入 stzetz 字段中。
  • 事件说明:必须采用网址编码。
  • 活动地点:必须采用网址编码。
  • 活动标题:必须采用网址编码。

示例

我们以构建预约服务为例,帮助用户预约商家服务。您希望在用户预约时,您的服务会向预约者和商家的 Google 日历中添加活动。

为了提供最佳用户体验,我们建议商家授予对其日历的写入权限,以便您可以直接将活动添加到商家的日历(创建活动),并邀请预约者参加该活动(添加参加者)。为确保预订者在日历中看到活动并收到提醒,请告知他们在预订后立即查看电子邮件,并回复以确认参加活动。他们回复活动邀请后,系统会根据其通知设置向他们发送 Google 日历中的活动通知

如果您想直接将活动添加到预订者的日历中,请告知预订者将用于接收邀请的电子邮件地址添加到通讯录中。或者,您也可以向预订者请求对其日历的写入权限,以便以程序化方式代表他们回复邀请(设置参加者的回复),并向他们发送有关已确认预订的电子邮件通知。

如果商家不想公开其电子邮件地址,可以使用用户专用电子邮件地址通过电子邮件(通过电子邮件地址邀请用户)将活动发送给预订者。

事件传播

下图说明了相关机制。首先,Jack 在其主日历中创建活动(因此拥有组织者副本)。然后,他邀请了“大提琴课程”群组次级日历,以及事件设置为 Only if the sender is known 的 Susan。系统会在小提琴课程群组辅助日历中创建与会者相关的副本,并在 Susan 的日历中创建副本(如果她认识 Jack),否则在她回复“已确认”或指明认识 Jack 时创建副本。当 Susan 回复后,回复更改会传播回组织者,并使用 Susan 的回复更新组织者的副本。然后,系统会将对组织者活动副本所做的这些更改传播给其他参加者。

显示活动/参加者动态的示意图

共享事件属性

创建活动时所用的日历是组织者日历。此日历拥有共享的活动信息,包括 ID、开始时间和结束时间、摘要和说明。在组织者日历中更新此信息后,这些更改会传播到参加者副本。

私人活动属性

并非所有信息都会在所有事件副本之间共享。某些属性是私有的,例如提醒、colorId、透明度或 extendedProperties.private 属性。这些属性由参加者设置控制,而非由组织者日历控制。

参加者还可以更改活动的共享属性。不过,这些更改只会反映在其自己的副本中,如果组织者进行更改,这些更改可能会丢失。

从参加者传播回组织者的唯一活动更改是参加者的回复状态,该状态存储在 attendees[].responseStatus 属性中。