microsoft/teams.net
Publicmirrored from https://github.com/microsoft/teams.netAvailable
core/src/Microsoft.Teams.Apps/Api/Clients/ActivityClient.cs
105lines · modecode
| 1 | // Copyright (c) Microsoft Corporation. |
| 2 | // Licensed under the MIT License. |
| 3 | |
| 4 | using System.Diagnostics.CodeAnalysis; |
| 5 | using Microsoft.Teams.Core; |
| 6 | using Microsoft.Teams.Core.Schema; |
| 7 | |
| 8 | using CoreConversationClient = Microsoft.Teams.Core.ConversationClient; |
| 9 | |
| 10 | namespace Microsoft.Teams.Apps.Api.Clients; |
| 11 | |
| 12 | /// <summary> |
| 13 | /// Client for creating, updating, and deleting activities in a conversation. |
| 14 | /// Delegates to the core <see cref="CoreConversationClient"/>. |
| 15 | /// </summary> |
| 16 | public class ActivityClient |
| 17 | { |
| 18 | private readonly CoreConversationClient _client; |
| 19 | private readonly Uri _serviceUrl; |
| 20 | |
| 21 | internal ActivityClient(Uri serviceUrl, CoreConversationClient client) |
| 22 | { |
| 23 | _serviceUrl = serviceUrl; |
| 24 | _client = client; |
| 25 | } |
| 26 | |
| 27 | /// <summary> |
| 28 | /// Create a new activity in a conversation. |
| 29 | /// </summary> |
| 30 | public Task<SendActivityResponse?> CreateAsync(string conversationId, CoreActivity activity, Dictionary<string, string>? additionalHeaders = null, CancellationToken cancellationToken = default) |
| 31 | { |
| 32 | ArgumentNullException.ThrowIfNull(activity); |
| 33 | activity.ServiceUrl ??= _serviceUrl; |
| 34 | activity.Conversation ??= new Conversation(conversationId); |
| 35 | return _client.SendActivityAsync(activity, customHeaders: additionalHeaders, cancellationToken: cancellationToken); |
| 36 | } |
| 37 | |
| 38 | /// <summary> |
| 39 | /// Update an existing activity in a conversation. |
| 40 | /// </summary> |
| 41 | public Task<UpdateActivityResponse> UpdateAsync(string conversationId, string id, CoreActivity activity, Dictionary<string, string>? additionalHeaders = null, CancellationToken cancellationToken = default) |
| 42 | { |
| 43 | ArgumentNullException.ThrowIfNull(activity); |
| 44 | activity.ServiceUrl ??= _serviceUrl; |
| 45 | AgenticIdentity? agenticIdentity = AgenticIdentity.FromAccount(activity.From); |
| 46 | return _client.UpdateActivityAsync(conversationId, id, activity, agenticIdentity: agenticIdentity, customHeaders: additionalHeaders, cancellationToken: cancellationToken); |
| 47 | } |
| 48 | |
| 49 | /// <summary> |
| 50 | /// Reply to an existing activity in a conversation. |
| 51 | /// </summary> |
| 52 | public Task<SendActivityResponse?> ReplyAsync(string conversationId, string id, CoreActivity activity, Dictionary<string, string>? additionalHeaders = null, CancellationToken cancellationToken = default) |
| 53 | { |
| 54 | ArgumentNullException.ThrowIfNull(activity); |
| 55 | activity.ReplyToId = id; |
| 56 | activity.ServiceUrl ??= _serviceUrl; |
| 57 | activity.Conversation ??= new Conversation(conversationId); |
| 58 | return _client.SendActivityAsync(activity, customHeaders: additionalHeaders, cancellationToken: cancellationToken); |
| 59 | } |
| 60 | |
| 61 | /// <summary> |
| 62 | /// Delete an activity from a conversation. |
| 63 | /// </summary> |
| 64 | public Task DeleteAsync(string conversationId, string id, AgenticIdentity? agenticIdentity = null, Dictionary<string, string>? additionalHeaders = null, CancellationToken cancellationToken = default) |
| 65 | { |
| 66 | return _client.DeleteActivityAsync(conversationId, id, _serviceUrl, agenticIdentity: agenticIdentity, customHeaders: additionalHeaders, cancellationToken: cancellationToken); |
| 67 | } |
| 68 | |
| 69 | /// <summary> |
| 70 | /// Create a new targeted activity in a conversation. |
| 71 | /// Targeted activities are only visible to the specified recipient. |
| 72 | /// </summary> |
| 73 | [Experimental("ExperimentalTeamsTargeted")] |
| 74 | public Task<SendActivityResponse?> CreateTargetedAsync(string conversationId, CoreActivity activity, Dictionary<string, string>? additionalHeaders = null, CancellationToken cancellationToken = default) |
| 75 | { |
| 76 | ArgumentNullException.ThrowIfNull(activity); |
| 77 | activity.ServiceUrl ??= _serviceUrl; |
| 78 | activity.Conversation ??= new Conversation(conversationId); |
| 79 | // Ensure recipient is marked as targeted |
| 80 | if (activity.Recipient is not null) |
| 81 | { |
| 82 | activity.Recipient.IsTargeted = true; |
| 83 | } |
| 84 | return _client.SendActivityAsync(activity, customHeaders: additionalHeaders, cancellationToken: cancellationToken); |
| 85 | } |
| 86 | |
| 87 | /// <summary> |
| 88 | /// Update an existing targeted activity in a conversation. |
| 89 | /// </summary> |
| 90 | [Experimental("ExperimentalTeamsTargeted")] |
| 91 | public Task<UpdateActivityResponse> UpdateTargetedAsync(string conversationId, string id, CoreActivity activity, Dictionary<string, string>? additionalHeaders = null, CancellationToken cancellationToken = default) |
| 92 | { |
| 93 | ArgumentNullException.ThrowIfNull(activity); |
| 94 | activity.ServiceUrl ??= _serviceUrl; |
| 95 | return _client.UpdateTargetedActivityAsync(conversationId, id, activity, agenticIdentity: activity.From?.GetAgenticIdentity(), customHeaders: additionalHeaders, cancellationToken: cancellationToken); |
| 96 | } |
| 97 | |
| 98 | /// <summary> |
| 99 | /// Delete a targeted activity from a conversation. |
| 100 | /// </summary> |
| 101 | public Task DeleteTargetedAsync(string conversationId, string id, AgenticIdentity? agenticIdentity = null, Dictionary<string, string>? additionalHeaders = null, CancellationToken cancellationToken = default) |
| 102 | { |
| 103 | return _client.DeleteTargetedActivityAsync(conversationId, id, _serviceUrl, agenticIdentity: agenticIdentity, customHeaders: additionalHeaders, cancellationToken: cancellationToken); |
| 104 | } |
| 105 | } |
| 106 | |