Добавление канала команд с помощью MS Graph

#c# #microsoft-graph-api #botframework #microsoft-teams

#c# #microsoft-graph-api #botframework #microsoft-teams

Вопрос:

Я пытаюсь создать канал с использованием MS Graph в боте BotFramework. Я получаю то, что кажется допустимым токеном доступа. Однако приведенный ниже код выдает следующую ошибку:

Тип коллекции ‘Microsoft.График.IChannelMembersCollectionPage «на»Microsoft.График.Channel.Members’ не поддерживается.

 var credential = new DefaultAzureCredential();
var token = credential.GetToken(
    new Azure.Core.TokenRequestContext(
        new[] { "https://graph.microsoft.com/.default" }));

var accessToken = token.Token;
Logger.LogWarning($"Token:{accessToken.ToString()}");
var graphServiceClient = new GraphServiceClient(
    new DelegateAuthenticationProvider((requestMessage) =>
    {
        requestMessage
        .Headers
        .Authorization = new AuthenticationHeaderValue("bearer", accessToken);

        return Task.CompletedTask;
    }));


try
{

    var chan = new Channel
    {
        DisplayName = $"Chan1",
        Description = "This channel is where we debate all future world domination plans",
        MembershipType = ChannelMembershipType.Standard
    };


    await graphServiceClient.Teams["{GroupID}"].Channels.Request().AddAsync(chan);
}
 

Комментарии:

1. Вы тестировали его в Graph Explorer или POSTMAN и работает ли он так, как ожидалось?

2. Да, я могу создавать каналы в этой команде с помощью Graph Explorer. Однако это означало бы создание канала на основе моих учетных данных. Я включил следующие разрешения делегирования для моего веб-приложения, в котором размещен бот: Канал. Создайте канал. Удалить. Все channel.ReadBasic. Все пользователи профиля OpenID.Читать

Ответ №1:

Вы можете использовать Graph SDK для внутренней генерации токена. Пожалуйста, попробуйте предоставить разрешения для приложений на портале Azure и используйте приведенный ниже код для создания канала в MS Teams. Ниже приведены пакеты, которые необходимо установить.

Это пример разрешений для приложений. Вы можете попробовать тот же код с незначительными изменениями / без изменений для разрешений делегирования.

введите описание изображения здесь

            string clientId = "";
            string clientSecret = "1";
            string tenantId = "";
          
       

            IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithTenantId(tenantId)
    .WithClientSecret(clientSecret) // or .WithCertificate(certificate)
    .Build();

            //AuthorizationCodeProvider authProvider = new AuthorizationCodeProvider(confidentialClientApplication, scopes);

            ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);


            GraphServiceClient graphClient = new GraphServiceClient(authProvider);

            var channel = new Channel
            {
                DisplayName = "Topic Discussion",
                Description = "This channel is where we debate all future architecture plans",
                MembershipType = ChannelMembershipType.Standard
            };

            await graphClient.Teams["{Your-teams-id}"].Channels
                .Request()
                .AddAsync(channel);
 

Комментарии:

1. Никакой радости. Я получаю новое, ужасно бесполезное исключение: внутренняя ошибка UnknownError: Дополнительные данные: дата: 2021-01-25T19:47:32 идентификатор запроса: ebc7b3f9-f553-4583-b239-5eaee8caa0d0 идентификатор запроса клиента: ebc7b3f9-f553-4583-b239-5eaee8caa0d0 Идентификатор клиента: ebc7b3f9-f553-4583-b239-5eaee8caa0d0 Есть какие-нибудь советы по отладке подобной ошибки?

2. @RichH: Можем ли мы подключиться по вызову, чтобы обсудить это? Пожалуйста, напишите нам по адресу microsoftteamsdev@microsoft.com