使用 Graph API 创建团队会议,用户可以绕过大厅

问题描述 投票:0回答:2

我尝试使用“/users/${userId}/calendar/events”端点从 Graph API 接收 Microsoft 团队会议链接。这是我当前的请求正文:

  subject: "Test Meeting",
  start: {
    dateTime: startTime,
    timeZone: "UTC",
  },
  end: {
    dateTime: endTime,
    timeZone: "UTC",
  },
  isOnlineMeeting: true,

我应该添加什么属性才能允许参与者在未经大厅批准的情况下加入?

microsoft-graph-api microsoft-teams microsoft-graph-teams
2个回答
0
投票

我认为您应该包含在线会议资源属性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)

选择在线会议API


0
投票

正如 kadis 之前的回答所指出的,您无法在创建活动时配置在线会议。这是因为该事件包含

onlineMeetingInfo
资源,而不是
onlineMeeting

因此,要配置会议,您需要执行以下步骤:

  1. 创建活动。启用在线会议。
  2. 从上面的响应中获取加入 URL。
  3. 使用加入 URL 查找在线会议。获取在线会议ID。
  4. 修补在线会议并更新大厅旁路设置。

这是执行此操作的一些代码片段。

//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);
}
© www.soinside.com 2019 - 2024. All rights reserved.