如何通过Google Chat API向Google Workspace域内用户发送私信(免高权限)
可行方案分析与实现
针对你提出的需求——仅通过用户邮箱、无需用户预先操作、避免高权限配置,向Google Workspace组织内用户发送Google Chat异步私信,以下是实际可行的方案:
方案1:最小权限全域委派(最优解)
虽然需要配置全域委派,但可以将权限严格限制到仅获取用户ID的最小范围,避免过度授权:
- 配置步骤
- 在Google Cloud Console中为服务账号启用全域委派。
- 在Google Workspace Admin Console中,为服务账号授权唯一权限范围:
https://www.googleapis.com/auth/admin.directory.user.readonly。
- 获取用户ID
通过Directory API的users.get接口,用邮箱作为userKey参数获取用户ID:from googleapiclient.discovery import build # 初始化Directory API客户端(使用服务账号凭据) directory_service = build('admin', 'directory_v1', credentials=credentials) # 通过邮箱获取用户信息 user_info = directory_service.users().get(userKey='target-user@your-domain.com').execute() user_id = user_info['id'] - 创建DM并发送消息
用获取到的用户ID调用Chat API创建/获取DM空间,再发送消息:# 初始化Chat API客户端 chat_service = build('chat', 'v1', credentials=credentials) # 获取或创建与目标用户的DM空间 dm_space = chat_service.spaces().findDirectMessage(name=f'users/{user_id}').execute() # 发送异步消息 chat_service.spaces().messages().create( parent=dm_space['name'], body={'text': '这是给你的异步私信内容'} ).execute()
此方案完全满足"用户无需预先操作"的需求,且权限仅用于读取用户基本信息,风险可控。
方案2:折衷备选(无需全域委派,但需用户一次操作)
如果完全无法接受全域委派配置,可采用邮件引导方式:
- 向目标用户发送邮件,包含Google Chat的直接对话链接(格式类似
https://chat.google.com/dm/your-bot-email@your-domain.com/target-user@your-domain.com),用户点击链接后会自动创建与应用的DM空间。 - 应用通过
spaces.list接口监控新创建的DM空间,后续即可向该空间发送消息。
此方案的缺点是需要用户主动点击链接,不符合"无需预先操作"的核心需求,仅作为权限受限场景下的备选。
说明
目前Google Chat API没有提供完全绕过"用户ID"或"全域委派"的异步私信发送方式,方案1是最贴合你需求的可行解,权限范围已最小化,符合安全规范。
内容的提问来源于stack exchange,提问作者Andrej Vckovski
相关产品推荐
相关产品推荐

