邀请用户参加活动

创建事件

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

此方法将活动直接添加到组织者的日历中,与组织者的添加邀请设置无关。

添加参加者

如果使用此方法,您还可以将参加者的电子邮件地址添加到活动的 attendees 属性,从而将其添加到同一活动。组织者将来对活动所做的任何更改都会传播给参加者。

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

  • 如果用户设置了 From everyone,活动会直接添加到他们的日历中
  • 如果用户之前设置了 Only if the sender is known,则活动会直接添加到其日历中,前提是用户之前与组织者互动过、组织者属于同一组织,或者组织者属于其 Google 通讯录。如果组织者不认识,他们可以点击邀请电子邮件中的不确定来点击我认识此发件人或回复。然后,这项活动就会添加到他们的日历中
  • 如果用户设置了 When I respond in email,则在用户通过点击邀请电子邮件中的不确定来回复之前,系统不会将所有邀请添加到他们的日历中。

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

请勿使用 attendees[].responseStatus 属性将参加者的响应设置为 needsAction 以外的任何其他值。预填充参加者的回复不会自动将活动添加到用户的日历中。

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

若要针对参加者可能采用的任何设置直接在 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 日历的写入权限,或者您不希望公开组织者的电子邮件地址,请使用 i 日历 协议 (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 格式。在上面的示例中,替换 20230325T224500Z20230326T001500Z
  • 开始和结束时区:格式应为 IANA 时区数据库名称。 在 stzetz 字段中填写时区。
  • 事件说明:必须经过网址编码。
  • 活动地点:必须经过网址编码。
  • 活动标题:必须经过网址编码。

示例

我们来看一个构建预约服务以帮助用户预约商家服务的示例。用户进行预约时,您希望服务将事件添加到预订者和商家的 Google 日历中。

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

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

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

事件传播

下图说明了动态过程。首先,Jack 在他的主日历上创建了一个活动(因此拥有组织者副本)。然后,他邀请了大提琴课程小组的辅助日历,并邀请了活动设置为 Only if the sender is known 的 Susan。在大提琴课程小组辅助日历上创建参加者的副本;如果苏珊认识小杰,则在她的日历上创建副本,否则在苏珊回复或表明她认识小杰时创建。当 Susan 回复后,RSVP 更改会回传到组织者,并使用 Susan 的回复更新组织者的副本。然后,对活动组织者的副本所做的更改会传播到其他参加者。

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

共享事件属性

创建活动的日历即为组织者日历。此日历拥有共享的活动信息,包括 ID、开始时间和结束时间、摘要及说明。当组织者日历上的此信息更新时,更改会传播到参加者的副本。

私人活动属性

并非所有活动副本都会共享部分信息。有些属性是私有属性,如提醒、colorId、透明度或 extendedProperties.private 属性。这些属性由参加者的设置(而非组织者日历)控制。

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

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