From 036859a6714f52f2c56acb1083368cd6ec9c80a3 Mon Sep 17 00:00:00 2001 From: Jakub Berlinski Date: Thu, 27 Aug 2026 10:45:02 +0200 Subject: [PATCH] teams message formatting - full width, avoid default truncation --- .../core/notification/teams/TeamsPayload.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/dev/vml/es/acm/core/notification/teams/TeamsPayload.java b/core/src/main/java/dev/vml/es/acm/core/notification/teams/TeamsPayload.java index bcf1c1d0a..99300b3d8 100644 --- a/core/src/main/java/dev/vml/es/acm/core/notification/teams/TeamsPayload.java +++ b/core/src/main/java/dev/vml/es/acm/core/notification/teams/TeamsPayload.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import dev.vml.es.acm.core.util.StringUtil; import java.io.Serializable; import java.util.*; @@ -55,13 +56,17 @@ public Builder message(String title, String text, Map fields) { return this; } - public Builder text(String text) { + public Builder text(String text, boolean wrap) { if (StringUtils.isNotBlank(text)) { - body.add(TextBlock.create(text)); + body.add(TextBlock.create(text).wrap(wrap)); } return this; } + public Builder text(String text) { + return this.text(text, true); + } + public Builder title(String title) { if (StringUtils.isNotBlank(title)) { body.add(0, TextBlock.create(title).size("Large").weight("Bolder")); @@ -110,6 +115,13 @@ public Builder facts(Map fields) { return this; } + public Builder cardElement(CardElement cardElement) { + if (cardElement != null) { + body.add(cardElement); + } + return this; + } + public Builder openUrlAction(String title, String url) { if (StringUtils.isNotBlank(title) && StringUtils.isNotBlank(url)) { actions.add(Action.openUrl(title, url)); @@ -149,6 +161,7 @@ public AdaptiveCard getContent() { } @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonPropertyOrder({"type", "$schema", "version", "msteams", "body", "actions"}) public static final class AdaptiveCard implements Serializable { private final String type = "AdaptiveCard"; @@ -158,6 +171,8 @@ public static final class AdaptiveCard implements Serializable { private final String version = "1.2"; + private final Map msteams = Collections.singletonMap("width", "full"); + private final List body; private final List actions; @@ -183,6 +198,10 @@ public String getVersion() { return version; } + public Map getMsteams() { + return msteams; + } + public List getBody() { return body; } @@ -203,7 +222,7 @@ public static final class TextBlock implements CardElement, Serializable { private String weight; - private Boolean wrap; + private Boolean wrap = true; private TextBlock(String text) { this.text = StringUtils.defaultString(text);