我需要实现一个 javascript 项目,该项目根据登录的用户创建新的 google meet,并将事件添加到日历并获取 google meet 的 url。如何在 JS 中使用 Google Calendar API 创建新的 google meet。
如何使用谷歌日历 api 创建一个新的谷歌会议
回答:
conferenceData.createRequest
创建 Calendar.Events: 插入请求以将 Meet 链接添加到日历事件时,您需要使用Events 资源的参数。
更多信息:
根据Events: insert和Event resource reperesentation的文档:
conferenceDataVersion
:integer
API客户端支持的会议数据版本号。版本 0 假定没有会议数据支持并忽略事件正文中的会议数据。版本 1 支持复制 ConferenceData 以及使用会议数据的 createRequest 字段创建新会议。默认值为 0。可接受的值为
0
to1
,包括在内。
conferenceData.createRequest
:nested object
生成新会议并将其附加到事件的请求。数据是异步生成的。要查看数据是否存在,请检查该
status
字段。任一
conferenceSolution
和至少一个entryPoint
,或createRequest
是必需的。
conferenceData.createRequest.conferenceSolutionKey.type
:string
会议解决方案类型。
如果客户端遇到不熟悉或空的类型,它应该仍然能够显示入口点。但是,它应该禁止修改。
可能的值为:
- “
eventHangout
”适用于消费者的环聊 ( http://hangouts.google.com )- "
eventNamedHangout
"适用于 G Suite 用户的传统版环聊 ( http://hangouts.google.com )- "
hangoutsMeet
" 代表 Google Meet ( http://meet.google.com )- "
addOn
"适用于 3P 会议提供商
conferenceData.createRequest.requestId
:string
客户端为此请求生成的唯一 ID。客户端应为每个新请求重新生成此 ID。如果提供的 ID 与前一个请求相同,则该请求将被忽略。
有了这些信息,我们就可以生成一个带有 Meet 链接的日历事件创建请求作为会议解决方案。
示例请求:
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
为任何随机字符串。对于您希望创建的每个新会面链接,您必须在请求中使用不同的字符串。
参考:
如果您不使用节点库,则请求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 包中扩展@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"
}
},
};