diff --git a/Libraries/Microsoft.Teams.Api/Activities/Activity.cs b/Libraries/Microsoft.Teams.Api/Activities/Activity.cs
index 62bc3197..8ba5de3c 100644
--- a/Libraries/Microsoft.Teams.Api/Activities/Activity.cs
+++ b/Libraries/Microsoft.Teams.Api/Activities/Activity.cs
@@ -1,6 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
+using System.Diagnostics.CodeAnalysis;
using System.Text.Json;
using System.Text.Json.Serialization;
@@ -146,6 +147,7 @@ public partial class Activity : IActivity
public ChannelData? ChannelData { get; set; }
[JsonIgnore]
+ [Experimental("TEAMS0002")]
public bool IsTargeted { get; set; }
[JsonExtensionData]
@@ -226,13 +228,18 @@ public virtual Activity WithRelatesTo(ConversationReference value)
public virtual Activity WithRecipient(Account value)
{
+ #pragma warning disable TEAMS0002
return WithRecipient(value, false);
+ #pragma warning restore TEAMS0002
}
+ [Experimental("TEAMS0002")]
public virtual Activity WithRecipient(Account value, bool isTargeted)
{
Recipient = value;
+ #pragma warning disable TEAMS0002
IsTargeted = isTargeted;
+ #pragma warning restore TEAMS0002
return this;
}
@@ -423,10 +430,12 @@ public Activity Merge(Activity from)
LocalTimestamp ??= from.LocalTimestamp;
AddEntity(from.Entities?.ToArray() ?? []);
+ #pragma warning disable TEAMS0002
if (from.IsTargeted)
{
IsTargeted = true;
}
+ #pragma warning restore TEAMS0002
if (from.ChannelData is not null)
{
diff --git a/Libraries/Microsoft.Teams.Api/Activities/Message/MessageActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Message/MessageActivity.cs
index 1aa915ec..0a62fc05 100644
--- a/Libraries/Microsoft.Teams.Api/Activities/Message/MessageActivity.cs
+++ b/Libraries/Microsoft.Teams.Api/Activities/Message/MessageActivity.cs
@@ -1,6 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
+using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using Microsoft.Teams.Api.Entities;
@@ -63,7 +64,7 @@ public class MessageActivity : Activity
[JsonPropertyName("value")]
[JsonPropertyOrder(43)]
public object? Value { get; set; }
-
+
[JsonIgnore]
public bool IsRecipientMentioned
{
@@ -151,10 +152,13 @@ public override MessageActivity WithRecipient(Account value)
return (MessageActivity)base.WithRecipient(value);
}
+ [Experimental("TEAMS0002")]
+ #pragma warning disable TEAMS0002
public override MessageActivity WithRecipient(Account value, bool isTargeted = false)
{
return (MessageActivity)base.WithRecipient(value, isTargeted);
}
+ #pragma warning restore TEAMS0002
public MessageActivity AddAttachment(params Attachment[] value)
{
diff --git a/Libraries/Microsoft.Teams.Api/Activities/Message/MessageReactionActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Message/MessageReactionActivity.cs
index e1d40bc3..5ea4fd4e 100644
--- a/Libraries/Microsoft.Teams.Api/Activities/Message/MessageReactionActivity.cs
+++ b/Libraries/Microsoft.Teams.Api/Activities/Message/MessageReactionActivity.cs
@@ -1,6 +1,8 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
+#pragma warning disable TEAMS0001
+
using System.Text.Json.Serialization;
using Microsoft.Teams.Common;
@@ -80,4 +82,5 @@ public MessageReactionActivity RemoveReaction(Messages.ReactionType type)
ReactionsRemoved.Add(new() { Type = type });
return this;
}
-}
\ No newline at end of file
+}
+#pragma warning restore TEAMS0001
\ No newline at end of file
diff --git a/Libraries/Microsoft.Teams.Api/Clients/ActivityClient.cs b/Libraries/Microsoft.Teams.Api/Clients/ActivityClient.cs
index 4963f629..ba94b1e8 100644
--- a/Libraries/Microsoft.Teams.Api/Clients/ActivityClient.cs
+++ b/Libraries/Microsoft.Teams.Api/Clients/ActivityClient.cs
@@ -1,6 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
+using System.Diagnostics.CodeAnalysis;
using System.Text.Json;
using Microsoft.Teams.Api.Activities;
@@ -94,6 +95,7 @@ public async Task DeleteAsync(string conversationId, string id)
/// The ID of the conversation
/// The activity to create
/// The created activity resource
+ [Experimental("TEAMS0002")]
public async Task CreateTargetedAsync(string conversationId, IActivity activity)
{
var req = HttpRequest.Post(
@@ -116,6 +118,7 @@ public async Task DeleteAsync(string conversationId, string id)
/// The ID of the activity to update
/// The updated activity data
/// The updated activity resource
+ [Experimental("TEAMS0002")]
public async Task UpdateTargetedAsync(string conversationId, string id, IActivity activity)
{
var req = HttpRequest.Put(
@@ -136,6 +139,7 @@ public async Task DeleteAsync(string conversationId, string id)
///
/// The ID of the conversation
/// The ID of the activity to delete
+ [Experimental("TEAMS0002")]
public async Task DeleteTargetedAsync(string conversationId, string id)
{
var req = HttpRequest.Delete(
diff --git a/Libraries/Microsoft.Teams.Api/Clients/ConversationClient.cs b/Libraries/Microsoft.Teams.Api/Clients/ConversationClient.cs
index 3ec316aa..ded2079e 100644
--- a/Libraries/Microsoft.Teams.Api/Clients/ConversationClient.cs
+++ b/Libraries/Microsoft.Teams.Api/Clients/ConversationClient.cs
@@ -13,14 +13,18 @@ public class ConversationClient : Client
public readonly string ServiceUrl;
public readonly ActivityClient Activities;
public readonly MemberClient Members;
+ #pragma warning disable TEAMS0001
public readonly ReactionClient Reactions;
+ #pragma warning restore TEAMS0001
public ConversationClient(string serviceUrl, CancellationToken cancellationToken = default) : base(cancellationToken)
{
ServiceUrl = serviceUrl;
Activities = new ActivityClient(serviceUrl, _http, cancellationToken);
Members = new MemberClient(serviceUrl, _http, cancellationToken);
+ #pragma warning disable TEAMS0001
Reactions = new ReactionClient(serviceUrl, _http, cancellationToken);
+ #pragma warning restore TEAMS0001
}
public ConversationClient(string serviceUrl, IHttpClient client, CancellationToken cancellationToken = default) : base(client, cancellationToken)
@@ -28,7 +32,9 @@ public ConversationClient(string serviceUrl, IHttpClient client, CancellationTok
ServiceUrl = serviceUrl;
Activities = new ActivityClient(serviceUrl, _http, cancellationToken);
Members = new MemberClient(serviceUrl, _http, cancellationToken);
+ #pragma warning disable TEAMS0001
Reactions = new ReactionClient(serviceUrl, _http, cancellationToken);
+ #pragma warning restore TEAMS0001
}
public ConversationClient(string serviceUrl, IHttpClientOptions options, CancellationToken cancellationToken = default) : base(options, cancellationToken)
@@ -36,7 +42,9 @@ public ConversationClient(string serviceUrl, IHttpClientOptions options, Cancell
ServiceUrl = serviceUrl;
Activities = new ActivityClient(serviceUrl, _http, cancellationToken);
Members = new MemberClient(serviceUrl, _http, cancellationToken);
+ #pragma warning disable TEAMS0001
Reactions = new ReactionClient(serviceUrl, _http, cancellationToken);
+ #pragma warning restore TEAMS0001
}
public ConversationClient(string serviceUrl, IHttpClientFactory factory, CancellationToken cancellationToken = default) : base(factory, cancellationToken)
@@ -44,7 +52,9 @@ public ConversationClient(string serviceUrl, IHttpClientFactory factory, Cancell
ServiceUrl = serviceUrl;
Activities = new ActivityClient(serviceUrl, _http, cancellationToken);
Members = new MemberClient(serviceUrl, _http, cancellationToken);
+ #pragma warning disable TEAMS0001
Reactions = new ReactionClient(serviceUrl, _http, cancellationToken);
+ #pragma warning restore TEAMS0001
}
public async Task CreateAsync(CreateRequest request)
diff --git a/Libraries/Microsoft.Teams.Api/Clients/ReactionClient.cs b/Libraries/Microsoft.Teams.Api/Clients/ReactionClient.cs
index 85ae72a2..f5901b3c 100644
--- a/Libraries/Microsoft.Teams.Api/Clients/ReactionClient.cs
+++ b/Libraries/Microsoft.Teams.Api/Clients/ReactionClient.cs
@@ -1,6 +1,8 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
+using System.Diagnostics.CodeAnalysis;
+
using Microsoft.Teams.Api.Messages;
using Microsoft.Teams.Common.Http;
@@ -9,6 +11,7 @@ namespace Microsoft.Teams.Api.Clients;
///
/// Client for working with app message reactions for a given conversation/activity.
///
+[Experimental("TEAMS0001")]
public class ReactionClient : Client
{
public readonly string ServiceUrl;
@@ -91,4 +94,4 @@ public async Task DeleteAsync(
await _http.SendAsync(req, cancellationToken != default ? cancellationToken : _cancellationToken);
}
-}
+}
\ No newline at end of file
diff --git a/Libraries/Microsoft.Teams.Api/Messages/Message.cs b/Libraries/Microsoft.Teams.Api/Messages/Message.cs
index 6e42c693..37a93e4e 100644
--- a/Libraries/Microsoft.Teams.Api/Messages/Message.cs
+++ b/Libraries/Microsoft.Teams.Api/Messages/Message.cs
@@ -130,5 +130,7 @@ public class Message
///
[JsonPropertyName("reactions")]
[JsonPropertyOrder(16)]
+ #pragma warning disable TEAMS0001
public IList? Reactions { get; set; }
+ #pragma warning restore TEAMS0001
}
\ No newline at end of file
diff --git a/Libraries/Microsoft.Teams.Api/Messages/Reaction.cs b/Libraries/Microsoft.Teams.Api/Messages/Reaction.cs
index 974f0fd4..49603205 100644
--- a/Libraries/Microsoft.Teams.Api/Messages/Reaction.cs
+++ b/Libraries/Microsoft.Teams.Api/Messages/Reaction.cs
@@ -1,6 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
+using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using Microsoft.Teams.Common;
@@ -10,6 +11,7 @@ namespace Microsoft.Teams.Api.Messages;
///
/// The type of reaction given to the message.
///
+[Experimental("TEAMS0001")]
[JsonConverter(typeof(JsonConverter))]
public class ReactionType(string value) : StringEnum(value)
{
@@ -53,6 +55,7 @@ public class ReactionType(string value) : StringEnum(value)
///
/// Message Reaction
///
+[Experimental("TEAMS0001")]
public class Reaction
{
///
diff --git a/Libraries/Microsoft.Teams.Apps/App.cs b/Libraries/Microsoft.Teams.Apps/App.cs
index 37b27a85..fefefc81 100644
--- a/Libraries/Microsoft.Teams.Apps/App.cs
+++ b/Libraries/Microsoft.Teams.Apps/App.cs
@@ -178,10 +178,12 @@ public async Task Send(string conversationId, T activity, ConversationType
}
// Validate targeted messages in proactive context
+ #pragma warning disable TEAMS0002
if (activity is MessageActivity messageActivity && messageActivity.IsTargeted == true && messageActivity.Recipient is null)
{
throw new InvalidOperationException("Targeted messages sent proactively must specify an explicit recipient ID. Use WithRecipient(new Account { Id = recipientId }, true) with an explicit recipient.");
}
+ #pragma warning restore TEAMS0002
var reference = new ConversationReference()
{
diff --git a/Libraries/Microsoft.Teams.Plugins/Microsoft.Teams.Plugins.AspNetCore/AspNetCorePlugin.cs b/Libraries/Microsoft.Teams.Plugins/Microsoft.Teams.Plugins.AspNetCore/AspNetCorePlugin.cs
index 169ec146..9b497111 100644
--- a/Libraries/Microsoft.Teams.Plugins/Microsoft.Teams.Plugins.AspNetCore/AspNetCorePlugin.cs
+++ b/Libraries/Microsoft.Teams.Plugins/Microsoft.Teams.Plugins.AspNetCore/AspNetCorePlugin.cs
@@ -93,6 +93,7 @@ public async Task Send(TActivity activity, Api.Conversatio
// For targeted messages with an explicit Recipient (proactive sends), preserve it.
// Otherwise, use the reference User from the conversation context.
+ #pragma warning disable TEAMS0002
var isTargetedWithRecipient = activity is MessageActivity msg && msg.IsTargeted == true && msg.Recipient is not null;
if (!isTargetedWithRecipient)
{
@@ -125,6 +126,7 @@ await client
var res = isTargeted
? await client.Conversations.Activities.CreateTargetedAsync(reference.Conversation.Id, activity)
: await client.Conversations.Activities.CreateAsync(reference.Conversation.Id, activity);
+ #pragma warning restore TEAMS0002
activity.Id = res?.Id;
return activity;
diff --git a/Samples/Samples.Reactions/Samples.Reactions.csproj b/Samples/Samples.Reactions/Samples.Reactions.csproj
index 682a8f9d..53be137f 100644
--- a/Samples/Samples.Reactions/Samples.Reactions.csproj
+++ b/Samples/Samples.Reactions/Samples.Reactions.csproj
@@ -4,6 +4,7 @@
net10.0
enable
enable
+ $(NoWarn);TEAMS0001
diff --git a/Samples/Samples.TargetedMessages/Samples.TargetedMessages.csproj b/Samples/Samples.TargetedMessages/Samples.TargetedMessages.csproj
index 1c291694..780f5cbf 100644
--- a/Samples/Samples.TargetedMessages/Samples.TargetedMessages.csproj
+++ b/Samples/Samples.TargetedMessages/Samples.TargetedMessages.csproj
@@ -4,6 +4,7 @@
net10.0
enable
enable
+ $(NoWarn);TEAMS0002
diff --git a/Tests/Microsoft.Teams.Api.Tests/Microsoft.Teams.Api.Tests.csproj b/Tests/Microsoft.Teams.Api.Tests/Microsoft.Teams.Api.Tests.csproj
index 1e02c98f..7936f5df 100644
--- a/Tests/Microsoft.Teams.Api.Tests/Microsoft.Teams.Api.Tests.csproj
+++ b/Tests/Microsoft.Teams.Api.Tests/Microsoft.Teams.Api.Tests.csproj
@@ -6,6 +6,7 @@
enable
false
latest
+ $(NoWarn);TEAMS0001;TEAMS0002
diff --git a/Tests/Microsoft.Teams.Apps.Tests/Microsoft.Teams.Apps.Tests.csproj b/Tests/Microsoft.Teams.Apps.Tests/Microsoft.Teams.Apps.Tests.csproj
index 2da9ef9e..9010f1ce 100644
--- a/Tests/Microsoft.Teams.Apps.Tests/Microsoft.Teams.Apps.Tests.csproj
+++ b/Tests/Microsoft.Teams.Apps.Tests/Microsoft.Teams.Apps.Tests.csproj
@@ -5,7 +5,7 @@
enable
enable
false
- $(NoWarn);CS0618
+ $(NoWarn);CS0618;TEAMS0001;TEAMS0002