microsoft/teams.net

Public

mirrored from https://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
kavin/agents-sdk-interop

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

core/src/Microsoft.Teams.Apps/Api/Clients/ActivityClient.cs

105lines · modecode

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4using System.Diagnostics.CodeAnalysis;
5using Microsoft.Teams.Core;
6using Microsoft.Teams.Core.Schema;
7
8using CoreConversationClient = Microsoft.Teams.Core.ConversationClient;
9
10namespace 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>
16public 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