Skip to the content.

使用 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 就可以了。

Written on May 13, 2022