我尝试使用“/users/${userId}/calendar/events”端点从 Graph API 接收 Microsoft 团队会议链接。这是我当前的请求正文:
subject: "Test Meeting",
start: {
dateTime: startTime,
timeZone: "UTC",
},
end: {
dateTime: endTime,
timeZone: "UTC",
},
isOnlineMeeting: true,
我应该添加什么属性才能允许参与者在未经大厅批准的情况下加入?
我认为您应该包含在线会议资源属性https://learn.microsoft.com/en-us/graph/api/resources/onlinemeeting?view=graph-rest-1.0#json-representation
{
...
"onlineMeeting": {
"lobbyBypassSettings": { "scope": "everyone", "isDialInBypassEnabled": false }
}
...
}
更新
嗯,以上似乎是合乎逻辑的,但似乎不那样支持。
使用日历 API
onlineMeetingInfo
使用资源,而不是 onlineMeeting
。并且 lobbyBypassSettings
是 onlineMeeting
的属性。
因此,似乎甚至不可能以您的方式创建活动并使用大厅设置更新在线会议或将活动与在线会议链接。如果必须绕过大厅,请考虑使用在线会议 API。
以下是有关这两种方法差异的一些信息
ms365社区线上会议的注意事项(大厅9:50)
正如 kadis 之前的回答所指出的,您无法在创建活动时配置在线会议。这是因为该事件包含
onlineMeetingInfo
资源,而不是 onlineMeeting
。
因此,要配置会议,您需要执行以下步骤:
这是执行此操作的一些代码片段。
//Event is created on behalf of this user
String userId = "c2ad2...";
Event event = new Event();
//Setup the event
event.setSubject("Test subject");
event.setStart(...);
event.setEnd(...);
//Enable online meeting
event.setIsOnlineMeeting(true);
event.setOnlineMeetingProvider(
OnlineMeetingProviderType.TeamsForBusiness);
//Create the event
Event result = cli
.users()
.byUserId(userId)
.events()
.post(event);
//Update the associated online meeting
//Lookup the online meeting using join URL
var meet = getOnlineMeeting(cli,
userId, result.getOnlineMeeting().getJoinUrl());
//Use a new online meeting object and
//set only what you need to update
var patchMeet = new OnlineMeeting();
var bypass = new LobbyBypassSettings();
bypass.setScope(LobbyBypassScope.forValue("everyone"));
patchMeet.setLobbyBypassSettings(bypass);
//Enable recording if you want
patchMeet.setRecordAutomatically(true);
//Patch the meeting
cli
.users()
.byUserId(userId)
.onlineMeetings()
.byOnlineMeetingId(meet.getId())
.patch(patchMeet);
您可以像这样实现
getOnlineMeeting()
方法。
public OnlineMeeting getOnlineMeeting(GraphServiceClient cli, String userId, String joinURL) throws Exception {
var decodedJoinURL = URLDecoder.decode(joinURL, "UTF-8");
var response = cli.users().byUserId(userId)
.onlineMeetings()
.get(cfg -> {
cfg.queryParameters.filter = String.format("JoinWebUrl eq '%s'", decodedJoinURL);
});
return response.getValue().get(0);
}