You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Google Calendar API创建活动,如何发送参会者可访问的活动链接?

解决Google Calendar API创建活动后参会者无法打开链接的问题

问题原因

你通过服务账号创建日历活动时,API返回的htmlLink是被委派用户(username@domain.com)专属的日历活动链接,参会者没有该日历的访问权限,直接打开会提示“活动未找到”。这个链接仅对活动创建者或拥有日历访问权限的用户有效。

解决方法

方法1:设置活动为公开可见(适合无需隐私的活动)

在活动的配置字典中添加visibility字段并设置为public,这样生成的链接所有用户都能正常访问并加入活动:

event = {
  # 原有字段保持不变
  'visibility': 'public',  # 添加这一行开启公开可见性
}

方法2:使用参会者专属的邀请链接(推荐,兼顾隐私)

API返回的htmlLink不适合直接转发给参会者,正确的方式是:

  • 你已经设置了sendUpdates='all',Google会自动给参会者发送包含专属加入链接的邀请邮件,参会者通过邮件中的链接即可正常加入。
  • 如果需要通过短信发送,可以构造ICAL格式的导入链接,让参会者直接将活动导入自己的日历:
    用API返回的iCalUID构造链接:
    https://calendar.google.com/calendar/ical/{iCalUID}/public/basic.ics
    
    替换其中的{iCalUID}为创建活动后返回的event.get('iCalUID')值即可。

方法3:共享日历给参会者(适合长期合作的参会者)

如果参会者需要频繁访问该日历的活动,可以将日历共享给他们,授予“查看所有事件”权限:

# 示例:给单个参会者授予日历查看权限
acl_rule = {
  'scope': {
    'type': 'user',
    'value': 'attendee1@mail.com'
  },
  'role': 'reader'  # 可根据需求设置为writer/owner
}
service.acl().insert(calendarId='mycalenderid', body=acl_rule).execute()

共享完成后,参会者就能正常打开htmlLink访问活动。

修改后的完整代码示例

from __future__ import print_function
import os.path
from googleapiclient.discovery import build
from google.oauth2 import service_account

SCOPES = [
    'https://www.googleapis.com/auth/calendar',
    'https://www.googleapis.com/auth/calendar.events',
    'https://www.googleapis.com/auth/admin.directory.resource.calendar',
    'https://www.googleapis.com/auth/gmail.send'
]
SERVICE_ACCOUNT_FILE = 'credentials.json'


def main():
    creds = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)
    delegated_credentials = creds.with_subject('username@domain.com')

    service = build('calendar', 'v3', credentials=delegated_credentials)

    event = {
        'summary': 'Driving Lessons 5',
        'location': 'Location',
        'description': 'Usman is Testing',
        'visibility': 'public',  # 开启公开可见性
        'start': {
            'dateTime': '2022-08-27T09:00:00-07:00',
            'timeZone': 'America/Los_Angeles',
        },
        'end': {
            'dateTime': '2022-08-27T17:00:00-07:00',
            'timeZone': 'America/Los_Angeles',
        },
        'recurrence': [
            'RRULE:FREQ=DAILY;COUNT=1'
        ],
        'attendees': [
            {'email': 'attendee1@mail.com'},
            {'email': 'attendee2@mail.com'},
        ],
        'reminders': {
            'useDefault': False,
            'overrides': [
                {'method': 'email', 'minutes': 24 * 60}
            ],
        },
    }

    event = service.events().insert(
        calendarId='mycalenderid', body=event, sendUpdates='all').execute()
    print('Event created: %s' % (event.get('htmlLink')))


if __name__ == '__main__':
    main()

内容的提问来源于stack exchange,提问作者Usman Rafiq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 01:18:18