使用 GraphAPI 来操作 Microsoft Teams 的团队
我们继续来讲讲 Graph API,这篇文章来一起看一下如何使用 GraphAPI 来操作 Microsoft Teams 的团队。
- 创建团队: POST /teams
- 删除团队: DELETE /teams/{id}
- 更新团队: PATCH /teams/{id}
- 添加团队成员:POST /teams/{team-id}/members
- 克隆团队
创建团队
使用接口 POST /teams
来创建一个团队,c# 代码如下:
using Microsoft.Graph;
using Microsoft.Identity.Client;
using System;
using System.Linq;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
string tenantId = "your_tenant_id";
string clientId = "your_client_id";
string clientSecret = "your_client_secret";
var appCredentials = new ClientCredential(clientId, clientSecret);
var graphClient = new GraphServiceClient(
new DelegateAuthenticationProvider(
async (requestMessage) =>
{
var authContext = new AuthenticationContext("https://login.microsoftonline.com/" + tenantId);
var authResult = await authContext.AcquireTokenAsync("https://graph.microsoft.com/", appCredentials);
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", authResult.AccessToken);
}));
var team = new Team
{
DisplayName = "My Team",
Description = "This is my team",
AdditionalData = new Dictionary<string, object>()
{
{"template@odata.bind", "https://graph.microsoft.com/v1.0/teamsTemplates('standard')"}
}
};
var newTeam = await graphClient.Teams.Request().AddAsync(team);
}
}
首先声明了三个字符串变量,tenantId、clientId 和 clientSecret,这三个变量需要根据实际情况进行替换。接着创建了名为 appCredentials 的 ClientCredential 对象,并使用 clientId 和 clientSecret 初始化。
然后创建了 graphClient,后续的 graph api 的调用就通过它来进行。委托会在请求时被调用,它会使用 tenantId、clientId 和 clientSecret 去获取一个访问令牌,并将其添加到请求头中。
最后,创建了一个名为 team 的 Team 对象,并设置了它的 DisplayName、Description 和 AdditionalData 属性。然后使用 graphClient 对象调用 Teams.Request().AddAsync 方法来创建一个新的团队。
更新团队
更新团队使用 c# 代码也比较简单:
var team = new Team
{
MemberSettings = new TeamMemberSettings
{
AllowCreateUpdateChannels = true
},
MessagingSettings = new TeamMessagingSettings
{
AllowUserEditMessages = true,
AllowUserDeleteMessages = true
},
FunSettings = new TeamFunSettings
{
AllowGiphy = true,
GiphyContentRating = GiphyRatingType.Strict
}
};
await graphClient.Teams["{team-id}"].Request().UpdateAsync(team);
可以看到我们可以更新团队成员的设置,消息的设置,还有一些有趣的设置。TeamFunSettings
一共有四个属性:
Property | Type | Description | |
---|---|---|---|
allowCustomMemes | Boolean | 如果设置为 true,则允许用户包含自定义模因。 | |
allowGiphy | Boolean | 如果设置为 true,则启用 Giphy 使用。 | |
allowStickersAndMemes | Boolean | 如果设置为 true,则允许用户包含贴纸和模因。 | |
giphyContentRating | String (enum) | Giphy 内容评级。 可取值为:moderate、strict。 | . |
删除团队
删除团队则最简单,一行话就能搞定。但需要注意的是,这里是 Groups
而不是 Teams
。因为 team 的本质实际上就是 group
await graphClient.Groups["{team-id}"].Request().DeleteAsync();
添加团队成员
首先我们要知道想要添加的成员的 Azure AD id。然后就很简单了:
var conversationMember = new AadUserConversationMember
{
Roles = new List<String>()
{
"owner"
},
AdditionalData = new Dictionary<string, object>()
{
{"user@odata.bind", "https://graph.microsoft.com/v1.0/users('8b081ef6-4792-4def-b2c9-c363a1bf41d5')"}
}
};
await graphClient.Teams["{team-id}"].Members.Request().AddAsync(conversationMember);
从上面我们能看到,成员的id 是通过 AdditionalData
传入的。我们给的 role 是 owner
,也可以使用其他的role。
克隆团队
Teams 给我们还提供了一个克隆团队的功能。使用c#的sdk的话,也很简单。
var displayName = "Library Assist";
var description = "Self help community for library";
var mailNickname = "libassist";
var partsToClone = ClonableTeamParts.Apps | ClonableTeamParts.Tabs | ClonableTeamParts.Settings | ClonableTeamParts.Channels | ClonableTeamParts.Members;
var visibility = TeamVisibilityType.Public;
await graphClient.Teams["{team-id}"]
.Clone(visibility,partsToClone,displayName,description,mailNickname,null)
.Request()
.PostAsync();
从上面的代码里可以看到克隆一个团队的 app, tabs,设置,频道,成员。我们实际上可以只克隆一部分,只要修改 partsToClone
就可以了。