microsoft/teams.net

Public

mirrored fromhttps://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
docs/update-release-process

Branches

Tags

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

Clone

HTTPS

Download ZIP

core/src/Microsoft.Teams.Apps/Handlers/AdaptiveCardHandler.Response.cs

136lines · modecode

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4using System.Text.Json.Serialization;
5
6namespace Microsoft.Teams.Apps.Handlers;
7
8/// <summary>
9/// Adaptive card response types.
10/// </summary>
11public static class AdaptiveCardResponseTypes
12{
13 /// <summary>
14 /// Message type - displays a message to the user.
15 /// </summary>
16 public const string Message = "application/vnd.microsoft.activity.message";
17
18 /// <summary>
19 /// Card type - updates the card with new content.
20 /// </summary>
21 public const string Card = "application/vnd.microsoft.card.adaptive";
22}
23
24/// <summary>
25/// Response for adaptive card action activities.
26/// </summary>
27public class AdaptiveCardResponse
28{
29 /// <summary>
30 /// HTTP status code for the response.
31 /// </summary>
32 [JsonPropertyName("statusCode")]
33 public int StatusCode { get; set; } = 200;
34
35 /// <summary>
36 /// Type of response. See <see cref="AdaptiveCardResponseTypes"/> for common values.
37 /// </summary>
38 [JsonPropertyName("type")]
39 [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
40 public string? Type { get; set; }
41
42 /// <summary>
43 /// Value for the response. Can be a string message or card content.
44 /// </summary>
45 [JsonPropertyName("value")]
46 [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
47 public object? Value { get; set; }
48
49 /// <summary>
50 /// Creates a new builder for AdaptiveCardResponse.
51 /// </summary>
52 public static AdaptiveCardResponseBuilder CreateBuilder()
53 {
54 return new AdaptiveCardResponseBuilder();
55 }
56
57 /// <summary>
58 /// Creates an <see cref="InvokeResponse{TBody}"/> with a message response.
59 /// </summary>
60 /// <param name="message">The message to display to the user.</param>
61 /// <param name="statusCode">The HTTP status code (default: 200).</param>
62 public static InvokeResponse<AdaptiveCardResponse> CreateMessageResponse(string message, int statusCode = 200)
63 {
64 return new InvokeResponse<AdaptiveCardResponse>(statusCode, new AdaptiveCardResponse
65 {
66 StatusCode = statusCode,
67 Type = AdaptiveCardResponseTypes.Message,
68 Value = message
69 });
70 }
71
72 /// <summary>
73 /// Creates an <see cref="InvokeResponse{TBody}"/> with a card response.
74 /// </summary>
75 /// <param name="card">The card content to display.</param>
76 /// <param name="statusCode">The HTTP status code (default: 200).</param>
77 public static InvokeResponse<AdaptiveCardResponse> CreateCardResponse(object card, int statusCode = 200)
78 {
79 return new InvokeResponse<AdaptiveCardResponse>(statusCode, new AdaptiveCardResponse
80 {
81 StatusCode = statusCode,
82 Type = AdaptiveCardResponseTypes.Card,
83 Value = card
84 });
85 }
86}
87
88/// <summary>
89/// Builder for AdaptiveCardResponse.
90/// </summary>
91public class AdaptiveCardResponseBuilder
92{
93 private int _statusCode = 200;
94 private string? _type;
95 private object? _value;
96
97 /// <summary>
98 /// Sets the HTTP status code for the response.
99 /// </summary>
100 public AdaptiveCardResponseBuilder WithStatusCode(int statusCode)
101 {
102 _statusCode = statusCode;
103 return this;
104 }
105
106 /// <summary>
107 /// Sets the type of the response. See <see cref="AdaptiveCardResponseTypes"/> for common values.
108 /// </summary>
109 public AdaptiveCardResponseBuilder WithType(string type)
110 {
111 _type = type;
112 return this;
113 }
114
115 /// <summary>
116 /// Sets the value for the response.
117 /// </summary>
118 public AdaptiveCardResponseBuilder WithValue(object value)
119 {
120 _value = value;
121 return this;
122 }
123
124 /// <summary>
125 /// Builds the <see cref="AdaptiveCardResponse"/> and wraps it in an <see cref="InvokeResponse{TBody}"/>.
126 /// </summary>
127 public InvokeResponse<AdaptiveCardResponse> Build()
128 {
129 return new InvokeResponse<AdaptiveCardResponse>(_statusCode, new AdaptiveCardResponse
130 {
131 StatusCode = _statusCode,
132 Type = _type,
133 Value = _value
134 });
135 }
136}
137