自动创建 Google Meet

自动创建 Google Meet
最新回答
无聊的下雨天

2021-03-25 00:06:19

要使用Google Calendar API和服务帐号自动化创建Google Meet会议,需完成以下步骤

  • 配置Google Cloud项目

    访问

    Google Cloud Console
    ,创建新项目或选择现有项目。

    启用Google Calendar API:在侧边栏搜索“Calendar API”并启用。

    创建服务帐号:在“IAM和管理”部分生成服务帐号,下载其JSON密钥文件(路径如/path/to/your/service-account-key.json)。

  • 启用域范围委托

    进入

    Google管理控制台
    安全性→API控制→管理域范围委托

    添加服务帐号的客户端ID(从Google Cloud Console获取),并授权以下OAuth范围:

    https://www.googleapis.com/auth/calendar

    确保服务帐号可模拟域中用户的权限。

  • 安装Node.js依赖包运行以下命令安装必要库:

    npm install google-auth-library jsonwebtoken node-fetch
  • 生成JWT令牌编写Node.js脚本生成JWT,用于服务帐号身份验证:

    const fs = require('fs');const jwt = require('jsonwebtoken');const service_account_key_file = '/path/to/your/service-account-key.json';const scopes = ['
    https://www.googleapis.com/auth/calendar'
    ];const audience = '
    https://oauth2.googleapis.com/token';async
    function generateJWT() { const serviceAccount = JSON.parse(fs.readFileSync(service_account_key_file, 'utf8')); const jwtPayload = { iss: serviceAccount.client_email, sub: 'user@example.com', // 替换为域中用户的邮箱 aud: audience, scope: scopes.join(' '), iat: Math.floor(Date.now() / 1000), exp: Math.floor(Date.now() / 1000) + 3600 }; const signedJWT = jwt.sign(jwtPayload, serviceAccount.private_key, { algorithm: 'RS256' }); return signedJWT;}
  • 获取OAuth 2.0访问令牌使用JWT从Google令牌端点交换访问令牌:

    const fetch = require('node-fetch');async function getAccessToken(signedJWT) { const response = await fetch('
    https://oauth2.googleapis.com/token'
    , { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: new URLSearchParams({ 'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer', 'assertion': signedJWT }) }); const data = await response.json(); return data.access_token;}
  • 创建Google日历活动并生成Meet链接通过访问令牌创建事件,自动包含Google Meet链接:

    async function createEvent(accessToken) { const eventData = { summary: '团队会议', description: '讨论项目更新', start: { dateTime: '2025-01-15T10:00:00Z' }, end: { dateTime: '2025-01-15T11:00:00Z' }, attendees: [ { email: 'attendee1@gmail.com' }, { email: 'attendee2@gmail.com' } ], conferenceData: { createRequest: { conferenceSolutionKey: { type: 'hangoutsMeet' }, requestId: 'unique-request-id' // 确保每次请求唯一 } } }; const response = await fetch('
    https://www.googleapis.com/calendar/v3/calendars/primary/events?conferenceDataVersion=1'
    , { method: 'POST', headers: { 'Authorization': `Bearer ${accessToken}`, 'Content-Type': 'application/json' }, body: JSON.stringify(eventData) }); const event = await response.json(); console.log('已创建事件:', event);}
  • 运行完整流程组合上述函数,执行自动化创建:

    (async () => { const signedJWT = await generateJWT(); if (signedJWT) { const accessToken = await getAccessToken(signedJWT); await createEvent(accessToken); }})();

注意事项

  • 权限配置:确保服务帐号具有域范围委托权限,且sub字段(模拟用户邮箱)需为Google Workspace域内有效账号。
  • 唯一请求ID:requestId需每次生成唯一值,避免重复请求冲突。
  • 时间格式:日历事件的start和end时间需使用RFC3339格式(如2025-01-15T10:00:00Z)。

通过以上步骤,可实现Google Meet会议的自动化创建,适用于企业环境中的批量会议安排。