【问题标题】:How to create a new google meet using google calendar api如何使用谷歌日历 API 创建一个新的谷歌会议
【发布时间】:2021-02-08 20:53:48
【问题描述】:

我需要实现一个 javascript 项目,该项目根据登录的用户创建一个新的 google meet,并将事件添加到日历并获取 google meet 的 url。如何在 JS 中使用 Google Calendar API 创建新的 google meet。

【问题讨论】:

    标签: reactjs api google-chrome google-calendar-api


    【解决方案1】:

    答案:

    您需要在创建日历时使用事件资源的conferenceData.createRequest 参数。事件:插入请求以将会议链接添加到日历事件。

    更多信息:

    根据Events: insertEvent resource reperesentation 的文档:

    conferenceDataVersion: integer

    API客户端支持的会议数据版本号。版本 0 假定不支持会议数据并忽略事件正文中的会议数据。版本 1 支持复制会议数据以及使用会议数据的 createRequest 字段创建新会议。默认值为 0。可接受的值为 01(含)。


    conferenceData.createRequest: nested object

    生成新会议并将其附加到事件的请求。数据是异步生成的。要查看数据是否存在,请检查 status 字段。

    conferenceSolution 和至少一个entryPoint,或者createRequest 是必需的。


    conferenceData.createRequest.conferenceSolutionKey.type: string

    会议解决方案类型。

    如果客户端遇到不熟悉或空的类型,它应该仍然能够显示入口点。但是,它应该不允许修改。

    可能的值是:


    conferenceData.createRequest.requestId: string

    客户端为此请求生成的唯一 ID。 客户端应为每个新请求重新生成此 ID。如果提供的 ID 与上一个请求的 ID 相同,则忽略该请求。

    有了这些信息,我们可以生成一个日历事件创建请求,其中包含一个会议链接作为会议解决方案。

    示例请求:

    gapi.client.calendar.events.insert({
      "calendarId": "primary",
      "conferenceDataVersion": 1,
      "resource": {
        "end": {
          "date": "2020-10-24"
        },
        "start": {
          "date": "2020-10-23"
        },
        "conferenceData": {
          "createRequest": {
            "conferenceSolutionKey": {
              "type": "hangoutsMeet"
            },
            "requestId": "some-random-string"
          }
        },
        "summary": "titles are cool"
      }
    });
    

    注意:为了生成 Meet 链接,您必须conferenceData.createRequest.requestId 设置为 any随机字符串。对于您希望创建的每个新会面链接,您必须在请求中使用不同的字符串

    参考资料:

    【讨论】:

    • 非常感谢,我如何连接我的应用程序以便向日历 API 发出请求。我指的是https://developers.google.com/calendar/quickstart/js 并尝试连接到api,但它显示此应用未验证此应用尚未通过Google 验证。只有在您了解并信任开发者的情况下才能继续。
    • @VishnuDarshan 如果是这种情况,您必须验证您的应用程序。在console.cloud.google.com 上为您的项目完成 OAuth 同意屏幕是实现此目标的方向。无论如何你都可以使用该应用程序,应该有一个按钮,上面写着“我知道风险”
    • 我试过这样做,我点击了高级选项,它显示为 Google 尚未审查此应用程序,无法确认它是真实的。未经验证的应用程序可能会对您的个人数据构成威胁。了解详情 转到快速入门(不安全)。验证是绕过这个的唯一方法吗?。
    • 我尝试验证我的应用,进入 OAuth 同意屏幕,它显示为 验证状态 不需要验证 您的同意屏幕正在显示,但您的应用尚未经过审核,因此您的用户可能看不到您的所有信息,并且您将无法请求某些 OAuth 范围。了解更多。你能帮我解决这个验证过程吗?
    • 查看 Google 链接以进行验证 herehere。不过,堆栈上的人员可以帮助您解决的问题并不多 - 如果您在验证方面遇到特定于项目的问题,最好的办法是联系 Google Workplace 支持 - 详细信息为 on this help page
    【解决方案2】:

    如果您不使用节点库,axios 的请求如下。我没有从上面的答案中意识到conferenceDataVersion 是一个查询参数。

    let event = {
        summary: "some text",
        location: "some text",
        description: "some text",
        start: {
          dateTime: start,
          timeZone: timeZone,
        },
        end: {
          dateTime: end,
          timeZone: timeZone,
        },
        recurrence: [],
        attendees: [
          { email: 'johndoe@whatever.com }, 
    
        ],
        reminders: {
          useDefault: true,
        },
        conferenceData: {
          createRequest: {
            conferenceSolutionKey: {
              type: 'hangoutsMeet',
            },
            requestId: 'somerequestid,
          },
        },
      };
      
    const createEventRequest = await axios({
        url: `https://www.googleapis.com/calendar/v3/calendars/${calendarId}/events?conferenceDataVersion=1`,
        method: 'POST',
        headers: {
          Authorization: `Bearer ${accessToken}`,
        },
        data: event,
      });
    

    【讨论】:

    • 非常有价值的评论。使用 googleapis npm 包时也是如此。
    【解决方案3】:

    在 googleapis npm 包中扩展@Brit 的注释,它的执行方式将是

    let response = await calendar.events.insert({
        auth: auth,
            calendarId: calendarId,
            resource: event,
            conferenceDataVersion: 1
        });
    

    event

    let event = {
        'summary': `Appointment.`,
        'description': `Description`,
        'start': {
            'dateTime': dateTime['start'],
            'timeZone': 'Asia/Kolkata'
        },
        'end': {
            'dateTime': dateTime['end'],
            'timeZone': 'Asia/Kolkata'
        },
        'attendees': [
            {'email': '...@gmail.com'},
        ],
        'reminders': {
            'useDefault': false,
            'overrides': [
              {'method': 'email', 'minutes': 24 * 60},
              {'method': 'popup', 'minutes': 10},
            ],
        },
        "conferenceData": {
            "createRequest": {
                "conferenceSolutionKey": {
                    "type": "hangoutsMeet"
                },
                "requestId": "JksKJJSK1KJSK"
            }
        },
        
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-07
      • 2018-04-30
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多