#.net-core #botframework #microsoft-teams #microsoft-graph-teams
Вопрос:
Можно ли использовать платформу бота для отправки / обновления сообщения от имени пользователя, а не бота в качестве отправителя сообщения (возможно, после какой-либо формы аутентификации с пользователем, которая позволяет боту выполнять такие операции)?
Ниже приведена иллюстрация текущей ситуации: я отправил сообщение от лица A в канал команд, и я хотел бы обновить сообщение с помощью платформы bot, поскольку API Graph не поддерживает обновление сообщения. Однако сообщение не обновляется, хотя ошибки не было.
Это помещается в контроллер веб-api «/test». Следовательно, обновление будет запущено путем отправки СООБЩЕНИЯ в /test.
ServiceClientCredentials service = new CustomLoginCredentials();
var connectorClient = new ConnectorClient(new Uri("https://smba.trafficmanager.net/apac/"), service);
var newActivity = MessageFactory.Text($"hello: updated on {DateTime.Now}");
string destActivityId = "this is the activity id of the existing message sent using person A account on MS Teams";
string conversationId = $"channelidhere;messageid={destActivityId}";
connectorClient.Conversations.UpdateActivityAsync(conversationId, destActivityId, newActivity, default(CancellationToken));
CustomLoginCredentials
public class CustomLoginCredentials:ServiceClientCredentials
{
private string AuthenticationToken { get; set; }
public override void InitializeServiceClient<T>(ServiceClient<T> client)
{
System.Diagnostics.Debug.WriteLine("CustomLoginCredentials:InitializeServiceClient 1");
IPublicClientApplication publicClient = PublicClientApplicationBuilder.Create("clientid")
.WithAuthority(AzureCloudInstance.AzurePublic, "tenantId")
.Build();
AuthenticationResult authenticationResult = publicClient.AcquireTokenByUsernamePassword(new string[] { "https://graph.microsoft.com/.default" }, "personA MS email", new NetworkCredential("", "personA MS email password").SecurePassword).ExecuteAsync().GetAwaiter().GetResult();
AuthenticationToken = authenticationResult.AccessToken;
}
public override async Task ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (request == null) throw new ArgumentNullException("request");
if (AuthenticationToken == null) throw new InvalidOperationException("Token Provider Cannot Be Null");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", AuthenticationToken);
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
await base.ProcessHttpRequestAsync(request, cancellationToken);
}
}
Комментарии:
1. Вы можете использовать атрибут «от имени» для отправки сообщения от имени пользователя-Не могли бы вы проверить атрибуцию пользователя для сообщений ботов , это то, что вы ищете?
2. вы все еще сталкиваетесь с проблемой? Не могли бы вы, пожалуйста, обновить информацию?
3. Спасибо, @Nikitha-MSFT за предложение и извинения за поздний ответ, только что проверил его, и он работает. Могу ли я спросить, могу ли я каким-либо образом позже обновить / удалить это сообщение, отправленное ботом от имени пользователя (т. Е. Если бот отправит сообщение от имени Алисы, как я могу обновить / удалить это сообщение позже от имени Алисы)?
4. Пожалуйста, проверьте обновление сообщений, чтобы обновить отправленное сообщение. попробуй, если это поможет?
5. Хорошо. Также могу ли я проверить, что, хотя на нем отображается «Алиса через бота», может ли Алиса обновить/удалить сообщение бота, отправленное от ее имени в интерфейсе MS Teams?
Ответ №1:
Когда бот отправляет сообщения от имени пользователя, присвоение сообщения этому пользователю помогает вовлечению и демонстрирует более естественный поток взаимодействия. Эта функция позволяет приписать сообщение от вашего бота пользователю, от имени которого оно было отправлено. Вы можете использовать атрибут «от имени» для отправки сообщения от имени пользователя-пожалуйста, проверьте атрибуцию пользователя для сообщений ботов