Значение не может быть пустым (clientId) при выполнении GetConversationMembersWithHttpMessagesAsync - PullRequest
0 голосов
/ 02 июня 2019

Бот получает ошибку «Значение не может быть нулевым. Имя параметра: clientId»
при выполнении метода GetConversationMembersWithHttpMessagesAsync, чтобы получить данные пользователей беседы. Разговор просто работает нормально, я могу отправлять и получать сообщения, но когда я пытаюсь получить информацию о текущем разговоре, я получаю это исключение.

Есть ли необходимость создавать регистрацию каналов ботов в Azure для поддержки таких операций?

Я пытался вручную добавить CustomHeaders с токеном-носителем в http-запрос без результата.

customHeaders.Add("Authorization", new List<string> { "Bearer " + Global.accessToken });
membersListResponse = await connector.Conversations.GetConversationMembersWithHttpMessagesAsync(convId, customHeaders);

Ошибка и трассировка стека:

Значение не может быть нулевым. Имя параметра: clientId в Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential..ctor (String clientId, String clientSecret) в Microsoft.Bot.Connector.Authentication.MicrosoftAppCredentials. <> c__DisplayClass8_0. <. ctor> b__0 () в System.Lazy 1.ViaFactory(LazyThreadSafetyMode mode) at System.Lazy 1.ExecutionAndPublication (LazyHelper executeAndPublication, логическое значение useDefaultConstructor) в System.Lazy 1.CreateValue() at Microsoft.Bot.Connector.Authentication.MicrosoftAppCredentials.GetTokenAsync(Boolean forceRefresh) at Microsoft.Bot.Connector.Authentication.MicrosoftAppCredentials.ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken) at Microsoft.Bot.Connector.Conversations.GetConversationMembersWithHttpMessagesAsync(String conversationId, Dictionary 2 customHeaders, CancellationToken cancellationToken)

1 Ответ

1 голос
/ 05 июня 2019

Причиной этого исключения стало отсутствие данных аутентификации в ConnectorClient, используемом для публикации асинхронного запроса.

Я создал новый класс MicrosoftAppCredentials, передал в него appId и appPassword, а затем применил новый экземпляр к ConnectorClient. Это было: var connector = new ConnectorClient(new Uri(context.Activity.ServiceUrl))

Стало: var connector = new ConnectorClient(new Uri(context.Activity.ServiceUrl), BotCredentials.msAppCredentials);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...