From 2cd84211a80cd819bb2b3ef0d6bcecc071f43668 Mon Sep 17 00:00:00 2001 From: Arif Ibrahim Mohamed Date: Mon, 2 Dec 2024 16:12:28 -0500 Subject: [PATCH 01/10] acs cpm whatsapp interactive message type addition --- .../azure-communication-messages/CHANGELOG.md | 11 +- .../main/java/MessagesSdkCustomization.java | 26 +++ .../messages/MessagesServiceVersion.java | 9 +- .../NotificationMessagesAsyncClient.java | 2 +- .../messages/NotificationMessagesClient.java | 2 +- .../NotificationMessagesClientImpl.java | 4 +- .../messages/models/ActionBindings.java | 93 ++++++++++ .../messages/models/ActionSet.java | 105 +++++++++++ .../messages/models/ActionSetContent.java | 127 +++++++++++++ .../messages/models/ActionSetItem.java | 126 +++++++++++++ .../messages/models/ButtonContent.java | 104 +++++++++++ .../messages/models/ButtonSetContent.java | 105 +++++++++++ .../models/CommunicationMessageKind.java | 18 ++ .../models/DocumentMessageContent.java | 104 +++++++++++ .../messages/models/ImageMessageContent.java | 104 +++++++++++ .../messages/models/InteractiveMessage.java | 170 ++++++++++++++++++ .../InteractiveNotificationContent.java | 118 ++++++++++++ .../models/MessageActionBindingKind.java | 63 +++++++ .../messages/models/MessageContent.java | 100 +++++++++++ .../messages/models/MessageContentKind.java | 87 +++++++++ .../messages/models/NotificationContent.java | 6 + .../models/ReactionNotificationContent.java | 139 ++++++++++++++ .../models/StickerNotificationContent.java | 118 ++++++++++++ .../messages/models/TextMessageContent.java | 104 +++++++++++ .../messages/models/UrlContent.java | 126 +++++++++++++ .../messages/models/VideoMessageContent.java | 104 +++++++++++ .../models/WhatsAppButtonActionBindings.java | 106 +++++++++++ .../models/WhatsAppListActionBindings.java | 105 +++++++++++ .../models/WhatsAppUrlActionBindings.java | 105 +++++++++++ ...unication-messages_apiview_properties.json | 21 +++ .../tsp-location.yaml | 2 +- 31 files changed, 2400 insertions(+), 14 deletions(-) create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionBindings.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSet.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSetContent.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSetItem.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonContent.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonSetContent.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/DocumentMessageContent.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ImageMessageContent.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveMessage.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveNotificationContent.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageActionBindingKind.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageContent.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageContentKind.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ReactionNotificationContent.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/StickerNotificationContent.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/TextMessageContent.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/UrlContent.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/VideoMessageContent.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppButtonActionBindings.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppListActionBindings.java create mode 100644 sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppUrlActionBindings.java diff --git a/sdk/communication/azure-communication-messages/CHANGELOG.md b/sdk/communication/azure-communication-messages/CHANGELOG.md index 58465d9ab42f3..c6918e3220d02 100644 --- a/sdk/communication/azure-communication-messages/CHANGELOG.md +++ b/sdk/communication/azure-communication-messages/CHANGELOG.md @@ -3,17 +3,14 @@ ## 1.2.0-beta.1 (Unreleased) ### Features Added - -### Breaking Changes - -### Bugs Fixed - -### Other Changes +- Added Interactive Message. +- Added Reaction Message. +- Added Sticker Message. ## 1.1.0 (2024-10-23) ### Features Added -- Added ImageNotificationContent to send image messgae. +- Added ImageNotificationContent to send image message. - Added DocumentNotificationContent to send document message. - Added VideoNotificationContent to send video message. - Added AudioNotificationContent to send audio message. diff --git a/sdk/communication/azure-communication-messages/customization/src/main/java/MessagesSdkCustomization.java b/sdk/communication/azure-communication-messages/customization/src/main/java/MessagesSdkCustomization.java index cb534b0d5ec97..9d8dd8c9de05d 100644 --- a/sdk/communication/azure-communication-messages/customization/src/main/java/MessagesSdkCustomization.java +++ b/sdk/communication/azure-communication-messages/customization/src/main/java/MessagesSdkCustomization.java @@ -32,6 +32,11 @@ public void customize(LibraryCustomization libraryCustomization, Logger logger) customizeMessageTemplateLocation(modelsPackage); customizeMessageTemplateItemModel(modelsPackage); + //Handle Interactive message content models + updateModelClassModifierToAbstract(modelsPackage, "MessageContent"); + updateModelClassModifierToAbstract(modelsPackage, "ActionBindings"); + customizeInteractiveMessage(modelsPackage); + PackageCustomization channelsModelsPackage = libraryCustomization.getPackage( "com.azure.communication.messages.models.channels"); updateWhatsAppMessageTemplateItemWithBinaryDataContent(channelsModelsPackage); @@ -174,6 +179,27 @@ private void customizeMessageTemplateLocation(PackageCustomization modelsPackage }); } + private void customizeInteractiveMessage(PackageCustomization modelsPackage) { + modelsPackage.getClass("InteractiveMessage").customizeAst(ast -> { + ast.getClassByName("InteractiveMessage").ifPresent(clazz -> { + clazz.addMethod("getHeader", Modifier.Keyword.PUBLIC) + .setType(clazz.getMethodsByName("getHeaderProperty").get(0).getType()) + .setBody(clazz.getMethodsByName("getHeaderProperty").get(0).getBody().get()) + .setJavadocComment(clazz.getMethodsByName("getHeaderProperty").get(0).getJavadocComment().get()); + + clazz.getMethodsByName("getHeaderProperty").forEach(Node::remove); + + clazz.addMethod("setHeader", Modifier.Keyword.PUBLIC) + .setParameters(clazz.getMethodsByName("setHeaderProperty").get(0).getParameters()) + .setType(clazz.getMethodsByName("setHeaderProperty").get(0).getType()) + .setBody(clazz.getMethodsByName("setHeaderProperty").get(0).getBody().get()) + .setJavadocComment(clazz.getMethodsByName("setHeaderProperty").get(0).getJavadocComment().get()); + + clazz.getMethodsByName("setHeaderProperty").forEach(Node::remove); + }); + }); + } + private void updateWhatsAppMessageTemplateItemWithBinaryDataContent(PackageCustomization channelsModelsPackage) { channelsModelsPackage.getClass("WhatsAppMessageTemplateItem").customizeAst(ast -> { // ast.addImport("com.azure.core.util.BinaryData"); diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/MessagesServiceVersion.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/MessagesServiceVersion.java index 8673e42220368..f566683f83f84 100644 --- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/MessagesServiceVersion.java +++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/MessagesServiceVersion.java @@ -18,7 +18,12 @@ public enum MessagesServiceVersion implements ServiceVersion { /** * Enum value 2024-08-30. */ - V2024_08_30("2024-08-30"); + V2024_08_30("2024-08-30"), + + /** + * Enum value 2024-11-15-preview. + */ + V2024_11_15_PREVIEW("2024-11-15-preview"); private final String version; @@ -40,6 +45,6 @@ public String getVersion() { * @return The latest {@link MessagesServiceVersion}. */ public static MessagesServiceVersion getLatest() { - return V2024_08_30; + return V2024_11_15_PREVIEW; } } diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/NotificationMessagesAsyncClient.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/NotificationMessagesAsyncClient.java index 435f82449d3b1..655037080cdaf 100644 --- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/NotificationMessagesAsyncClient.java +++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/NotificationMessagesAsyncClient.java @@ -55,7 +55,7 @@ public final class NotificationMessagesAsyncClient { *
      * {@code
      * {
-     *     kind: String(text/image/image_v0/document/video/audio/template) (Required)
+     *     kind: String(text/image/image_v0/document/video/audio/template/sticker/reaction/interactive) (Required)
      *     channelRegistrationId: String (Required)
      *     to (Required): [
      *         String (Required)
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/NotificationMessagesClient.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/NotificationMessagesClient.java
index 59266523b678f..1d4c46e92ef1d 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/NotificationMessagesClient.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/NotificationMessagesClient.java
@@ -53,7 +53,7 @@ public final class NotificationMessagesClient {
      * 
      * {@code
      * {
-     *     kind: String(text/image/image_v0/document/video/audio/template) (Required)
+     *     kind: String(text/image/image_v0/document/video/audio/template/sticker/reaction/interactive) (Required)
      *     channelRegistrationId: String (Required)
      *     to (Required): [
      *         String (Required)
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/implementation/NotificationMessagesClientImpl.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/implementation/NotificationMessagesClientImpl.java
index a9176df99148d..3d7f4d8bdabb0 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/implementation/NotificationMessagesClientImpl.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/implementation/NotificationMessagesClientImpl.java
@@ -212,7 +212,7 @@ Response downloadMediaSync(@HostParam("endpoint") String endpoint,
      * 
      * {@code
      * {
-     *     kind: String(text/image/image_v0/document/video/audio/template) (Required)
+     *     kind: String(text/image/image_v0/document/video/audio/template/sticker/reaction/interactive) (Required)
      *     channelRegistrationId: String (Required)
      *     to (Required): [
      *         String (Required)
@@ -284,7 +284,7 @@ public Mono> sendWithResponseAsync(BinaryData notificationC
      * 
      * {@code
      * {
-     *     kind: String(text/image/image_v0/document/video/audio/template) (Required)
+     *     kind: String(text/image/image_v0/document/video/audio/template/sticker/reaction/interactive) (Required)
      *     channelRegistrationId: String (Required)
      *     to (Required): [
      *         String (Required)
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionBindings.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionBindings.java
new file mode 100644
index 0000000000000..f5313c6b9590c
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionBindings.java
@@ -0,0 +1,93 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.annotation.Immutable;
+import com.azure.json.JsonReader;
+import com.azure.json.JsonSerializable;
+import com.azure.json.JsonToken;
+import com.azure.json.JsonWriter;
+import java.io.IOException;
+
+/**
+ * Binding actions to the interactive message.
+ */
+@Immutable
+public abstract class ActionBindings implements JsonSerializable {
+
+    /*
+     * Kind of the MessageActionBinding.
+     */
+    @Generated
+    private MessageActionBindingKind actionBindingKind = MessageActionBindingKind.fromString("ActionBindings");
+
+    /**
+     * Creates an instance of ActionBindings class.
+     */
+    @Generated
+    protected ActionBindings() {
+    }
+
+    /**
+     * Get the actionBindingKind property: Kind of the MessageActionBinding.
+     *
+     * @return the actionBindingKind value.
+     */
+    @Generated
+    public MessageActionBindingKind getActionBindingKind() {
+        return this.actionBindingKind;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Generated
+    @Override
+    public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
+        jsonWriter.writeStartObject();
+        jsonWriter.writeStringField("actionBindingKind",
+            this.actionBindingKind == null ? null : this.actionBindingKind.toString());
+        return jsonWriter.writeEndObject();
+    }
+
+    /**
+     * Reads an instance of ActionBindings from the JsonReader.
+     *
+     * @param jsonReader The JsonReader being read.
+     * @return An instance of ActionBindings if the JsonReader was pointing to an instance of it, or null if it was
+     * pointing to JSON null.
+     * @throws IOException If an error occurs while reading the ActionBindings.
+     */
+    @Generated
+    public static ActionBindings fromJson(JsonReader jsonReader) throws IOException {
+        return jsonReader.readObject(reader -> {
+            String discriminatorValue = null;
+            try (JsonReader readerToUse = reader.bufferObject()) {
+                // Prepare for reading
+                readerToUse.nextToken();
+                while (readerToUse.nextToken() != JsonToken.END_OBJECT) {
+                    String fieldName = readerToUse.getFieldName();
+                    readerToUse.nextToken();
+                    if ("actionBindingKind".equals(fieldName)) {
+                        discriminatorValue = readerToUse.getString();
+                        break;
+                    } else {
+                        readerToUse.skipChildren();
+                    }
+                }
+                // Use the discriminator value to determine which subtype should be deserialized.
+                if ("whatsAppListAction".equals(discriminatorValue)) {
+                    return WhatsAppListActionBindings.fromJson(readerToUse.reset());
+                } else if ("whatsAppButtonAction".equals(discriminatorValue)) {
+                    return WhatsAppButtonActionBindings.fromJson(readerToUse.reset());
+                } else if ("whatsAppUrlAction".equals(discriminatorValue)) {
+                    return WhatsAppUrlActionBindings.fromJson(readerToUse.reset());
+                } else {
+                    throw new IllegalStateException("Invalid Kind value - " + discriminatorValue);
+                }
+            }
+        });
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSet.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSet.java
new file mode 100644
index 0000000000000..e195a707da16e
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSet.java
@@ -0,0 +1,105 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.annotation.Immutable;
+import com.azure.json.JsonReader;
+import com.azure.json.JsonSerializable;
+import com.azure.json.JsonToken;
+import com.azure.json.JsonWriter;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * The Action Set content.
+ */
+@Immutable
+public final class ActionSet implements JsonSerializable {
+
+    /*
+     * Title of the ActionSet.
+     */
+    @Generated
+    private final String title;
+
+    /*
+     * Array of items in ActionSet.
+     */
+    @Generated
+    private final List items;
+
+    /**
+     * Creates an instance of ActionSet class.
+     *
+     * @param title the title value to set.
+     * @param items the items value to set.
+     */
+    @Generated
+    public ActionSet(String title, List items) {
+        this.title = title;
+        this.items = items;
+    }
+
+    /**
+     * Get the title property: Title of the ActionSet.
+     *
+     * @return the title value.
+     */
+    @Generated
+    public String getTitle() {
+        return this.title;
+    }
+
+    /**
+     * Get the items property: Array of items in ActionSet.
+     *
+     * @return the items value.
+     */
+    @Generated
+    public List getItems() {
+        return this.items;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Generated
+    @Override
+    public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
+        jsonWriter.writeStartObject();
+        jsonWriter.writeStringField("title", this.title);
+        jsonWriter.writeArrayField("items", this.items, (writer, element) -> writer.writeJson(element));
+        return jsonWriter.writeEndObject();
+    }
+
+    /**
+     * Reads an instance of ActionSet from the JsonReader.
+     *
+     * @param jsonReader The JsonReader being read.
+     * @return An instance of ActionSet if the JsonReader was pointing to an instance of it, or null if it was pointing
+     * to JSON null.
+     * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
+     * @throws IOException If an error occurs while reading the ActionSet.
+     */
+    @Generated
+    public static ActionSet fromJson(JsonReader jsonReader) throws IOException {
+        return jsonReader.readObject(reader -> {
+            String title = null;
+            List items = null;
+            while (reader.nextToken() != JsonToken.END_OBJECT) {
+                String fieldName = reader.getFieldName();
+                reader.nextToken();
+                if ("title".equals(fieldName)) {
+                    title = reader.getString();
+                } else if ("items".equals(fieldName)) {
+                    items = reader.readArray(reader1 -> ActionSetItem.fromJson(reader1));
+                } else {
+                    reader.skipChildren();
+                }
+            }
+            return new ActionSet(title, items);
+        });
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSetContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSetContent.java
new file mode 100644
index 0000000000000..10b5daa66c340
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSetContent.java
@@ -0,0 +1,127 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.annotation.Immutable;
+import com.azure.json.JsonReader;
+import com.azure.json.JsonToken;
+import com.azure.json.JsonWriter;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * The action content of type ActionSet.
+ */
+@Immutable
+public final class ActionSetContent extends MessageContent {
+
+    /*
+     * Kind of MessageContent.
+     */
+    @Generated
+    private MessageContentKind kind = MessageContentKind.ACTION_SET;
+
+    /*
+     * Title of the actionSet content.
+     */
+    @Generated
+    private final String title;
+
+    /*
+     * Set or group of actions.
+     */
+    @Generated
+    private final List actionSet;
+
+    /**
+     * Creates an instance of ActionSetContent class.
+     *
+     * @param title the title value to set.
+     * @param actionSet the actionSet value to set.
+     */
+    @Generated
+    public ActionSetContent(String title, List actionSet) {
+        this.title = title;
+        this.actionSet = actionSet;
+    }
+
+    /**
+     * Get the kind property: Kind of MessageContent.
+     *
+     * @return the kind value.
+     */
+    @Generated
+    @Override
+    public MessageContentKind getKind() {
+        return this.kind;
+    }
+
+    /**
+     * Get the title property: Title of the actionSet content.
+     *
+     * @return the title value.
+     */
+    @Generated
+    public String getTitle() {
+        return this.title;
+    }
+
+    /**
+     * Get the actionSet property: Set or group of actions.
+     *
+     * @return the actionSet value.
+     */
+    @Generated
+    public List getActionSet() {
+        return this.actionSet;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Generated
+    @Override
+    public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
+        jsonWriter.writeStartObject();
+        jsonWriter.writeStringField("title", this.title);
+        jsonWriter.writeArrayField("actionSet", this.actionSet, (writer, element) -> writer.writeJson(element));
+        jsonWriter.writeStringField("kind", this.kind == null ? null : this.kind.toString());
+        return jsonWriter.writeEndObject();
+    }
+
+    /**
+     * Reads an instance of ActionSetContent from the JsonReader.
+     *
+     * @param jsonReader The JsonReader being read.
+     * @return An instance of ActionSetContent if the JsonReader was pointing to an instance of it, or null if it was
+     * pointing to JSON null.
+     * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
+     * @throws IOException If an error occurs while reading the ActionSetContent.
+     */
+    @Generated
+    public static ActionSetContent fromJson(JsonReader jsonReader) throws IOException {
+        return jsonReader.readObject(reader -> {
+            String title = null;
+            List actionSet = null;
+            MessageContentKind kind = MessageContentKind.ACTION_SET;
+            while (reader.nextToken() != JsonToken.END_OBJECT) {
+                String fieldName = reader.getFieldName();
+                reader.nextToken();
+                if ("title".equals(fieldName)) {
+                    title = reader.getString();
+                } else if ("actionSet".equals(fieldName)) {
+                    actionSet = reader.readArray(reader1 -> ActionSet.fromJson(reader1));
+                } else if ("kind".equals(fieldName)) {
+                    kind = MessageContentKind.fromString(reader.getString());
+                } else {
+                    reader.skipChildren();
+                }
+            }
+            ActionSetContent deserializedActionSetContent = new ActionSetContent(title, actionSet);
+            deserializedActionSetContent.kind = kind;
+            return deserializedActionSetContent;
+        });
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSetItem.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSetItem.java
new file mode 100644
index 0000000000000..36ba3f1dbec0f
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSetItem.java
@@ -0,0 +1,126 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.annotation.Immutable;
+import com.azure.json.JsonReader;
+import com.azure.json.JsonSerializable;
+import com.azure.json.JsonToken;
+import com.azure.json.JsonWriter;
+import java.io.IOException;
+
+/**
+ * The Action set item in the content.
+ */
+@Immutable
+public final class ActionSetItem implements JsonSerializable {
+
+    /*
+     * Id of the Item.
+     */
+    @Generated
+    private final String id;
+
+    /*
+     * Title of the Item.
+     */
+    @Generated
+    private final String title;
+
+    /*
+     * Description of the Item.
+     */
+    @Generated
+    private final String description;
+
+    /**
+     * Creates an instance of ActionSetItem class.
+     *
+     * @param id the id value to set.
+     * @param title the title value to set.
+     * @param description the description value to set.
+     */
+    @Generated
+    public ActionSetItem(String id, String title, String description) {
+        this.id = id;
+        this.title = title;
+        this.description = description;
+    }
+
+    /**
+     * Get the id property: Id of the Item.
+     *
+     * @return the id value.
+     */
+    @Generated
+    public String getId() {
+        return this.id;
+    }
+
+    /**
+     * Get the title property: Title of the Item.
+     *
+     * @return the title value.
+     */
+    @Generated
+    public String getTitle() {
+        return this.title;
+    }
+
+    /**
+     * Get the description property: Description of the Item.
+     *
+     * @return the description value.
+     */
+    @Generated
+    public String getDescription() {
+        return this.description;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Generated
+    @Override
+    public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
+        jsonWriter.writeStartObject();
+        jsonWriter.writeStringField("id", this.id);
+        jsonWriter.writeStringField("title", this.title);
+        jsonWriter.writeStringField("description", this.description);
+        return jsonWriter.writeEndObject();
+    }
+
+    /**
+     * Reads an instance of ActionSetItem from the JsonReader.
+     *
+     * @param jsonReader The JsonReader being read.
+     * @return An instance of ActionSetItem if the JsonReader was pointing to an instance of it, or null if it was
+     * pointing to JSON null.
+     * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
+     * @throws IOException If an error occurs while reading the ActionSetItem.
+     */
+    @Generated
+    public static ActionSetItem fromJson(JsonReader jsonReader) throws IOException {
+        return jsonReader.readObject(reader -> {
+            String id = null;
+            String title = null;
+            String description = null;
+            while (reader.nextToken() != JsonToken.END_OBJECT) {
+                String fieldName = reader.getFieldName();
+                reader.nextToken();
+                if ("id".equals(fieldName)) {
+                    id = reader.getString();
+                } else if ("title".equals(fieldName)) {
+                    title = reader.getString();
+                } else if ("description".equals(fieldName)) {
+                    description = reader.getString();
+                } else {
+                    reader.skipChildren();
+                }
+            }
+            return new ActionSetItem(id, title, description);
+        });
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonContent.java
new file mode 100644
index 0000000000000..a548f12070f86
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonContent.java
@@ -0,0 +1,104 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.annotation.Immutable;
+import com.azure.json.JsonReader;
+import com.azure.json.JsonSerializable;
+import com.azure.json.JsonToken;
+import com.azure.json.JsonWriter;
+import java.io.IOException;
+
+/**
+ * The message content of type Button information.
+ */
+@Immutable
+public final class ButtonContent implements JsonSerializable {
+
+    /*
+     * Unique Id of the button content.
+     */
+    @Generated
+    private final String id;
+
+    /*
+     * Title of the button content.
+     */
+    @Generated
+    private final String title;
+
+    /**
+     * Creates an instance of ButtonContent class.
+     *
+     * @param id the id value to set.
+     * @param title the title value to set.
+     */
+    @Generated
+    public ButtonContent(String id, String title) {
+        this.id = id;
+        this.title = title;
+    }
+
+    /**
+     * Get the id property: Unique Id of the button content.
+     *
+     * @return the id value.
+     */
+    @Generated
+    public String getId() {
+        return this.id;
+    }
+
+    /**
+     * Get the title property: Title of the button content.
+     *
+     * @return the title value.
+     */
+    @Generated
+    public String getTitle() {
+        return this.title;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Generated
+    @Override
+    public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
+        jsonWriter.writeStartObject();
+        jsonWriter.writeStringField("id", this.id);
+        jsonWriter.writeStringField("title", this.title);
+        return jsonWriter.writeEndObject();
+    }
+
+    /**
+     * Reads an instance of ButtonContent from the JsonReader.
+     *
+     * @param jsonReader The JsonReader being read.
+     * @return An instance of ButtonContent if the JsonReader was pointing to an instance of it, or null if it was
+     * pointing to JSON null.
+     * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
+     * @throws IOException If an error occurs while reading the ButtonContent.
+     */
+    @Generated
+    public static ButtonContent fromJson(JsonReader jsonReader) throws IOException {
+        return jsonReader.readObject(reader -> {
+            String id = null;
+            String title = null;
+            while (reader.nextToken() != JsonToken.END_OBJECT) {
+                String fieldName = reader.getFieldName();
+                reader.nextToken();
+                if ("id".equals(fieldName)) {
+                    id = reader.getString();
+                } else if ("title".equals(fieldName)) {
+                    title = reader.getString();
+                } else {
+                    reader.skipChildren();
+                }
+            }
+            return new ButtonContent(id, title);
+        });
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonSetContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonSetContent.java
new file mode 100644
index 0000000000000..90115e67dd868
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonSetContent.java
@@ -0,0 +1,105 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.annotation.Immutable;
+import com.azure.json.JsonReader;
+import com.azure.json.JsonToken;
+import com.azure.json.JsonWriter;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * The message content of type ButtonSet/ List of buttons information.
+ */
+@Immutable
+public final class ButtonSetContent extends MessageContent {
+
+    /*
+     * Kind of MessageContent.
+     */
+    @Generated
+    private MessageContentKind kind = MessageContentKind.BUTTON_SET;
+
+    /*
+     * Unique Id of the button content.
+     */
+    @Generated
+    private final List buttons;
+
+    /**
+     * Creates an instance of ButtonSetContent class.
+     *
+     * @param buttons the buttons value to set.
+     */
+    @Generated
+    public ButtonSetContent(List buttons) {
+        this.buttons = buttons;
+    }
+
+    /**
+     * Get the kind property: Kind of MessageContent.
+     *
+     * @return the kind value.
+     */
+    @Generated
+    @Override
+    public MessageContentKind getKind() {
+        return this.kind;
+    }
+
+    /**
+     * Get the buttons property: Unique Id of the button content.
+     *
+     * @return the buttons value.
+     */
+    @Generated
+    public List getButtons() {
+        return this.buttons;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Generated
+    @Override
+    public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
+        jsonWriter.writeStartObject();
+        jsonWriter.writeArrayField("buttons", this.buttons, (writer, element) -> writer.writeJson(element));
+        jsonWriter.writeStringField("kind", this.kind == null ? null : this.kind.toString());
+        return jsonWriter.writeEndObject();
+    }
+
+    /**
+     * Reads an instance of ButtonSetContent from the JsonReader.
+     *
+     * @param jsonReader The JsonReader being read.
+     * @return An instance of ButtonSetContent if the JsonReader was pointing to an instance of it, or null if it was
+     * pointing to JSON null.
+     * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
+     * @throws IOException If an error occurs while reading the ButtonSetContent.
+     */
+    @Generated
+    public static ButtonSetContent fromJson(JsonReader jsonReader) throws IOException {
+        return jsonReader.readObject(reader -> {
+            List buttons = null;
+            MessageContentKind kind = MessageContentKind.BUTTON_SET;
+            while (reader.nextToken() != JsonToken.END_OBJECT) {
+                String fieldName = reader.getFieldName();
+                reader.nextToken();
+                if ("buttons".equals(fieldName)) {
+                    buttons = reader.readArray(reader1 -> ButtonContent.fromJson(reader1));
+                } else if ("kind".equals(fieldName)) {
+                    kind = MessageContentKind.fromString(reader.getString());
+                } else {
+                    reader.skipChildren();
+                }
+            }
+            ButtonSetContent deserializedButtonSetContent = new ButtonSetContent(buttons);
+            deserializedButtonSetContent.kind = kind;
+            return deserializedButtonSetContent;
+        });
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/CommunicationMessageKind.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/CommunicationMessageKind.java
index b07ef3e8bcbf9..6decf5ae41130 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/CommunicationMessageKind.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/CommunicationMessageKind.java
@@ -85,4 +85,22 @@ public static Collection values() {
     @Generated
     @Deprecated()
     public static final CommunicationMessageKind IMAGE_V0 = fromString("image_v0");
+
+    /**
+     * Sticker message type.
+     */
+    @Generated
+    public static final CommunicationMessageKind STICKER = fromString("sticker");
+
+    /**
+     * Reaction message type.
+     */
+    @Generated
+    public static final CommunicationMessageKind REACTION = fromString("reaction");
+
+    /**
+     * Interactive Actionable message type.
+     */
+    @Generated
+    public static final CommunicationMessageKind INTERACTIVE = fromString("interactive");
 }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/DocumentMessageContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/DocumentMessageContent.java
new file mode 100644
index 0000000000000..641c382c88ded
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/DocumentMessageContent.java
@@ -0,0 +1,104 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.annotation.Immutable;
+import com.azure.json.JsonReader;
+import com.azure.json.JsonToken;
+import com.azure.json.JsonWriter;
+import java.io.IOException;
+
+/**
+ * The message content of type document information.
+ */
+@Immutable
+public final class DocumentMessageContent extends MessageContent {
+
+    /*
+     * Kind of MessageContent.
+     */
+    @Generated
+    private MessageContentKind kind = MessageContentKind.DOCUMENT;
+
+    /*
+     * MediaUri of the media content.
+     */
+    @Generated
+    private final String mediaUri;
+
+    /**
+     * Creates an instance of DocumentMessageContent class.
+     *
+     * @param mediaUri the mediaUri value to set.
+     */
+    @Generated
+    public DocumentMessageContent(String mediaUri) {
+        this.mediaUri = mediaUri;
+    }
+
+    /**
+     * Get the kind property: Kind of MessageContent.
+     *
+     * @return the kind value.
+     */
+    @Generated
+    @Override
+    public MessageContentKind getKind() {
+        return this.kind;
+    }
+
+    /**
+     * Get the mediaUri property: MediaUri of the media content.
+     *
+     * @return the mediaUri value.
+     */
+    @Generated
+    public String getMediaUri() {
+        return this.mediaUri;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Generated
+    @Override
+    public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
+        jsonWriter.writeStartObject();
+        jsonWriter.writeStringField("mediaUri", this.mediaUri);
+        jsonWriter.writeStringField("kind", this.kind == null ? null : this.kind.toString());
+        return jsonWriter.writeEndObject();
+    }
+
+    /**
+     * Reads an instance of DocumentMessageContent from the JsonReader.
+     *
+     * @param jsonReader The JsonReader being read.
+     * @return An instance of DocumentMessageContent if the JsonReader was pointing to an instance of it, or null if it
+     * was pointing to JSON null.
+     * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
+     * @throws IOException If an error occurs while reading the DocumentMessageContent.
+     */
+    @Generated
+    public static DocumentMessageContent fromJson(JsonReader jsonReader) throws IOException {
+        return jsonReader.readObject(reader -> {
+            String mediaUri = null;
+            MessageContentKind kind = MessageContentKind.DOCUMENT;
+            while (reader.nextToken() != JsonToken.END_OBJECT) {
+                String fieldName = reader.getFieldName();
+                reader.nextToken();
+                if ("mediaUri".equals(fieldName)) {
+                    mediaUri = reader.getString();
+                } else if ("kind".equals(fieldName)) {
+                    kind = MessageContentKind.fromString(reader.getString());
+                } else {
+                    reader.skipChildren();
+                }
+            }
+            DocumentMessageContent deserializedDocumentMessageContent = new DocumentMessageContent(mediaUri);
+            deserializedDocumentMessageContent.kind = kind;
+            return deserializedDocumentMessageContent;
+        });
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ImageMessageContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ImageMessageContent.java
new file mode 100644
index 0000000000000..b6374fe8ea472
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ImageMessageContent.java
@@ -0,0 +1,104 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.annotation.Immutable;
+import com.azure.json.JsonReader;
+import com.azure.json.JsonToken;
+import com.azure.json.JsonWriter;
+import java.io.IOException;
+
+/**
+ * The message content of type image information.
+ */
+@Immutable
+public final class ImageMessageContent extends MessageContent {
+
+    /*
+     * Kind of MessageContent.
+     */
+    @Generated
+    private MessageContentKind kind = MessageContentKind.IMAGE;
+
+    /*
+     * MediaUri of the media content.
+     */
+    @Generated
+    private final String mediaUri;
+
+    /**
+     * Creates an instance of ImageMessageContent class.
+     *
+     * @param mediaUri the mediaUri value to set.
+     */
+    @Generated
+    public ImageMessageContent(String mediaUri) {
+        this.mediaUri = mediaUri;
+    }
+
+    /**
+     * Get the kind property: Kind of MessageContent.
+     *
+     * @return the kind value.
+     */
+    @Generated
+    @Override
+    public MessageContentKind getKind() {
+        return this.kind;
+    }
+
+    /**
+     * Get the mediaUri property: MediaUri of the media content.
+     *
+     * @return the mediaUri value.
+     */
+    @Generated
+    public String getMediaUri() {
+        return this.mediaUri;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Generated
+    @Override
+    public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
+        jsonWriter.writeStartObject();
+        jsonWriter.writeStringField("mediaUri", this.mediaUri);
+        jsonWriter.writeStringField("kind", this.kind == null ? null : this.kind.toString());
+        return jsonWriter.writeEndObject();
+    }
+
+    /**
+     * Reads an instance of ImageMessageContent from the JsonReader.
+     *
+     * @param jsonReader The JsonReader being read.
+     * @return An instance of ImageMessageContent if the JsonReader was pointing to an instance of it, or null if it was
+     * pointing to JSON null.
+     * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
+     * @throws IOException If an error occurs while reading the ImageMessageContent.
+     */
+    @Generated
+    public static ImageMessageContent fromJson(JsonReader jsonReader) throws IOException {
+        return jsonReader.readObject(reader -> {
+            String mediaUri = null;
+            MessageContentKind kind = MessageContentKind.IMAGE;
+            while (reader.nextToken() != JsonToken.END_OBJECT) {
+                String fieldName = reader.getFieldName();
+                reader.nextToken();
+                if ("mediaUri".equals(fieldName)) {
+                    mediaUri = reader.getString();
+                } else if ("kind".equals(fieldName)) {
+                    kind = MessageContentKind.fromString(reader.getString());
+                } else {
+                    reader.skipChildren();
+                }
+            }
+            ImageMessageContent deserializedImageMessageContent = new ImageMessageContent(mediaUri);
+            deserializedImageMessageContent.kind = kind;
+            return deserializedImageMessageContent;
+        });
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveMessage.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveMessage.java
new file mode 100644
index 0000000000000..726278c965270
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveMessage.java
@@ -0,0 +1,170 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Fluent;
+import com.azure.core.annotation.Generated;
+import com.azure.json.JsonReader;
+import com.azure.json.JsonSerializable;
+import com.azure.json.JsonToken;
+import com.azure.json.JsonWriter;
+import java.io.IOException;
+
+/**
+ * The Interactive message content to which user can read and respond.
+ */
+@Fluent
+public final class InteractiveMessage implements JsonSerializable {
+
+    /*
+     * Gets or Sets Header content. Supports the following types:text, images etc.
+     */
+    @Generated
+    private MessageContent headerProperty;
+
+    /*
+     * Gets or Sets Message body content. Emojis, markdown, and links are supported.
+     */
+    @Generated
+    private final TextMessageContent body;
+
+    /*
+     * Gets or Sets Message footer content. Emojis, markdown, and links are supported.
+     */
+    @Generated
+    private TextMessageContent footer;
+
+    /*
+     * The binding object to get or set Action which describes options user have to respond to message.
+     */
+    @Generated
+    private final ActionBindings actionBindings;
+
+    /**
+     * Creates an instance of InteractiveMessage class.
+     *
+     * @param body the body value to set.
+     * @param actionBindings the actionBindings value to set.
+     */
+    @Generated
+    public InteractiveMessage(TextMessageContent body, ActionBindings actionBindings) {
+        this.body = body;
+        this.actionBindings = actionBindings;
+    }
+
+    /**
+     * Get the body property: Gets or Sets Message body content. Emojis, markdown, and links are supported.
+     *
+     * @return the body value.
+     */
+    @Generated
+    public TextMessageContent getBody() {
+        return this.body;
+    }
+
+    /**
+     * Get the footer property: Gets or Sets Message footer content. Emojis, markdown, and links are supported.
+     *
+     * @return the footer value.
+     */
+    @Generated
+    public TextMessageContent getFooter() {
+        return this.footer;
+    }
+
+    /**
+     * Set the footer property: Gets or Sets Message footer content. Emojis, markdown, and links are supported.
+     *
+     * @param footer the footer value to set.
+     * @return the InteractiveMessage object itself.
+     */
+    @Generated
+    public InteractiveMessage setFooter(TextMessageContent footer) {
+        this.footer = footer;
+        return this;
+    }
+
+    /**
+     * Get the actionBindings property: The binding object to get or set Action which describes options user have to
+     * respond to message.
+     *
+     * @return the actionBindings value.
+     */
+    @Generated
+    public ActionBindings getActionBindings() {
+        return this.actionBindings;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Generated
+    @Override
+    public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
+        jsonWriter.writeStartObject();
+        jsonWriter.writeJsonField("body", this.body);
+        jsonWriter.writeJsonField("actionBindings", this.actionBindings);
+        jsonWriter.writeJsonField("header", this.headerProperty);
+        jsonWriter.writeJsonField("footer", this.footer);
+        return jsonWriter.writeEndObject();
+    }
+
+    /**
+     * Reads an instance of InteractiveMessage from the JsonReader.
+     *
+     * @param jsonReader The JsonReader being read.
+     * @return An instance of InteractiveMessage if the JsonReader was pointing to an instance of it, or null if it was
+     * pointing to JSON null.
+     * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
+     * @throws IOException If an error occurs while reading the InteractiveMessage.
+     */
+    @Generated
+    public static InteractiveMessage fromJson(JsonReader jsonReader) throws IOException {
+        return jsonReader.readObject(reader -> {
+            TextMessageContent body = null;
+            ActionBindings actionBindings = null;
+            MessageContent headerProperty = null;
+            TextMessageContent footer = null;
+            while (reader.nextToken() != JsonToken.END_OBJECT) {
+                String fieldName = reader.getFieldName();
+                reader.nextToken();
+                if ("body".equals(fieldName)) {
+                    body = TextMessageContent.fromJson(reader);
+                } else if ("actionBindings".equals(fieldName)) {
+                    actionBindings = ActionBindings.fromJson(reader);
+                } else if ("header".equals(fieldName)) {
+                    headerProperty = MessageContent.fromJson(reader);
+                } else if ("footer".equals(fieldName)) {
+                    footer = TextMessageContent.fromJson(reader);
+                } else {
+                    reader.skipChildren();
+                }
+            }
+            InteractiveMessage deserializedInteractiveMessage = new InteractiveMessage(body, actionBindings);
+            deserializedInteractiveMessage.headerProperty = headerProperty;
+            deserializedInteractiveMessage.footer = footer;
+            return deserializedInteractiveMessage;
+        });
+    }
+
+    /**
+     * Get the headerProperty property: Gets or Sets Header content. Supports the following types:text, images etc.
+     *
+     * @return the headerProperty value.
+     */
+    public MessageContent getHeader() {
+        return this.headerProperty;
+    }
+
+    /**
+     * Set the headerProperty property: Gets or Sets Header content. Supports the following types:text, images etc.
+     *
+     * @param headerProperty the headerProperty value to set.
+     * @return the InteractiveMessage object itself.
+     */
+    public InteractiveMessage setHeader(MessageContent headerProperty) {
+        this.headerProperty = headerProperty;
+        return this;
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveNotificationContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveNotificationContent.java
new file mode 100644
index 0000000000000..728bc397b88b3
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveNotificationContent.java
@@ -0,0 +1,118 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.annotation.Immutable;
+import com.azure.json.JsonReader;
+import com.azure.json.JsonToken;
+import com.azure.json.JsonWriter;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * A request to send an Interactive message notification.
+ */
+@Immutable
+public final class InteractiveNotificationContent extends NotificationContent {
+
+    /*
+     * The type discriminator describing a notification type.
+     */
+    @Generated
+    private CommunicationMessageKind kind = CommunicationMessageKind.INTERACTIVE;
+
+    /*
+     * The interactive message content.
+     */
+    @Generated
+    private final InteractiveMessage interactiveMessage;
+
+    /**
+     * Creates an instance of InteractiveNotificationContent class.
+     *
+     * @param channelRegistrationId the channelRegistrationId value to set.
+     * @param to the to value to set.
+     * @param interactiveMessage the interactiveMessage value to set.
+     */
+    @Generated
+    public InteractiveNotificationContent(String channelRegistrationId, List to,
+        InteractiveMessage interactiveMessage) {
+        super(channelRegistrationId, to);
+        this.interactiveMessage = interactiveMessage;
+    }
+
+    /**
+     * Get the kind property: The type discriminator describing a notification type.
+     *
+     * @return the kind value.
+     */
+    @Generated
+    @Override
+    public CommunicationMessageKind getKind() {
+        return this.kind;
+    }
+
+    /**
+     * Get the interactiveMessage property: The interactive message content.
+     *
+     * @return the interactiveMessage value.
+     */
+    @Generated
+    public InteractiveMessage getInteractiveMessage() {
+        return this.interactiveMessage;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Generated
+    @Override
+    public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
+        jsonWriter.writeStartObject();
+        jsonWriter.writeStringField("channelRegistrationId", getChannelRegistrationId());
+        jsonWriter.writeArrayField("to", getTo(), (writer, element) -> writer.writeString(element));
+        jsonWriter.writeJsonField("interactiveMessage", this.interactiveMessage);
+        jsonWriter.writeStringField("kind", this.kind == null ? null : this.kind.toString());
+        return jsonWriter.writeEndObject();
+    }
+
+    /**
+     * Reads an instance of InteractiveNotificationContent from the JsonReader.
+     *
+     * @param jsonReader The JsonReader being read.
+     * @return An instance of InteractiveNotificationContent if the JsonReader was pointing to an instance of it, or
+     * null if it was pointing to JSON null.
+     * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
+     * @throws IOException If an error occurs while reading the InteractiveNotificationContent.
+     */
+    @Generated
+    public static InteractiveNotificationContent fromJson(JsonReader jsonReader) throws IOException {
+        return jsonReader.readObject(reader -> {
+            String channelRegistrationId = null;
+            List to = null;
+            InteractiveMessage interactiveMessage = null;
+            CommunicationMessageKind kind = CommunicationMessageKind.INTERACTIVE;
+            while (reader.nextToken() != JsonToken.END_OBJECT) {
+                String fieldName = reader.getFieldName();
+                reader.nextToken();
+                if ("channelRegistrationId".equals(fieldName)) {
+                    channelRegistrationId = reader.getString();
+                } else if ("to".equals(fieldName)) {
+                    to = reader.readArray(reader1 -> reader1.getString());
+                } else if ("interactiveMessage".equals(fieldName)) {
+                    interactiveMessage = InteractiveMessage.fromJson(reader);
+                } else if ("kind".equals(fieldName)) {
+                    kind = CommunicationMessageKind.fromString(reader.getString());
+                } else {
+                    reader.skipChildren();
+                }
+            }
+            InteractiveNotificationContent deserializedInteractiveNotificationContent
+                = new InteractiveNotificationContent(channelRegistrationId, to, interactiveMessage);
+            deserializedInteractiveNotificationContent.kind = kind;
+            return deserializedInteractiveNotificationContent;
+        });
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageActionBindingKind.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageActionBindingKind.java
new file mode 100644
index 0000000000000..343f058f887ad
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageActionBindingKind.java
@@ -0,0 +1,63 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.util.ExpandableStringEnum;
+import java.util.Collection;
+
+/**
+ * The Kind of interactive message channel action binding like WhatsAppListAction.
+ */
+public final class MessageActionBindingKind extends ExpandableStringEnum {
+
+    /**
+     * The WhatsApp List action binding kind.
+     */
+    @Generated
+    public static final MessageActionBindingKind WHATS_APP_LIST_ACTION = fromString("whatsAppListAction");
+
+    /**
+     * The WhatsApp Button action binding kind.
+     */
+    @Generated
+    public static final MessageActionBindingKind WHATS_APP_BUTTON_ACTION = fromString("whatsAppButtonAction");
+
+    /**
+     * The WhatsApp Url action binding kind.
+     */
+    @Generated
+    public static final MessageActionBindingKind WHATS_APP_URL_ACTION = fromString("whatsAppUrlAction");
+
+    /**
+     * Creates a new instance of MessageActionBindingKind value.
+     *
+     * @deprecated Use the {@link #fromString(String)} factory method.
+     */
+    @Generated
+    @Deprecated
+    public MessageActionBindingKind() {
+    }
+
+    /**
+     * Creates or finds a MessageActionBindingKind from its string representation.
+     *
+     * @param name a name to look for.
+     * @return the corresponding MessageActionBindingKind.
+     */
+    @Generated
+    public static MessageActionBindingKind fromString(String name) {
+        return fromString(name, MessageActionBindingKind.class);
+    }
+
+    /**
+     * Gets known MessageActionBindingKind values.
+     *
+     * @return known MessageActionBindingKind values.
+     */
+    @Generated
+    public static Collection values() {
+        return values(MessageActionBindingKind.class);
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageContent.java
new file mode 100644
index 0000000000000..2343b4fdb491c
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageContent.java
@@ -0,0 +1,100 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.annotation.Immutable;
+import com.azure.json.JsonReader;
+import com.azure.json.JsonSerializable;
+import com.azure.json.JsonToken;
+import com.azure.json.JsonWriter;
+import java.io.IOException;
+
+/**
+ * The message content object used to create interactive messages components.
+ */
+@Immutable
+public abstract class MessageContent implements JsonSerializable {
+
+    /*
+     * Kind of MessageContent.
+     */
+    @Generated
+    private MessageContentKind kind = MessageContentKind.fromString("MessageContent");
+
+    /**
+     * Creates an instance of MessageContent class.
+     */
+    @Generated
+    protected MessageContent() {
+    }
+
+    /**
+     * Get the kind property: Kind of MessageContent.
+     *
+     * @return the kind value.
+     */
+    @Generated
+    public MessageContentKind getKind() {
+        return this.kind;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Generated
+    @Override
+    public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
+        jsonWriter.writeStartObject();
+        jsonWriter.writeStringField("kind", this.kind == null ? null : this.kind.toString());
+        return jsonWriter.writeEndObject();
+    }
+
+    /**
+     * Reads an instance of MessageContent from the JsonReader.
+     *
+     * @param jsonReader The JsonReader being read.
+     * @return An instance of MessageContent if the JsonReader was pointing to an instance of it, or null if it was
+     * pointing to JSON null.
+     * @throws IOException If an error occurs while reading the MessageContent.
+     */
+    @Generated
+    public static MessageContent fromJson(JsonReader jsonReader) throws IOException {
+        return jsonReader.readObject(reader -> {
+            String discriminatorValue = null;
+            try (JsonReader readerToUse = reader.bufferObject()) {
+                // Prepare for reading
+                readerToUse.nextToken();
+                while (readerToUse.nextToken() != JsonToken.END_OBJECT) {
+                    String fieldName = readerToUse.getFieldName();
+                    readerToUse.nextToken();
+                    if ("kind".equals(fieldName)) {
+                        discriminatorValue = readerToUse.getString();
+                        break;
+                    } else {
+                        readerToUse.skipChildren();
+                    }
+                }
+                // Use the discriminator value to determine which subtype should be deserialized.
+                if ("text".equals(discriminatorValue)) {
+                    return TextMessageContent.fromJson(readerToUse.reset());
+                } else if ("document".equals(discriminatorValue)) {
+                    return DocumentMessageContent.fromJson(readerToUse.reset());
+                } else if ("image".equals(discriminatorValue)) {
+                    return ImageMessageContent.fromJson(readerToUse.reset());
+                } else if ("video".equals(discriminatorValue)) {
+                    return VideoMessageContent.fromJson(readerToUse.reset());
+                } else if ("buttonSet".equals(discriminatorValue)) {
+                    return ButtonSetContent.fromJson(readerToUse.reset());
+                } else if ("url".equals(discriminatorValue)) {
+                    return UrlContent.fromJson(readerToUse.reset());
+                } else if ("actionSet".equals(discriminatorValue)) {
+                    return ActionSetContent.fromJson(readerToUse.reset());
+                } else {
+                    throw new IllegalStateException("Invalid Kind value - " + discriminatorValue);
+                }
+            }
+        });
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageContentKind.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageContentKind.java
new file mode 100644
index 0000000000000..2e45e712c26ef
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageContentKind.java
@@ -0,0 +1,87 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.util.ExpandableStringEnum;
+import java.util.Collection;
+
+/**
+ * The kind of Interactive message content.
+ */
+public final class MessageContentKind extends ExpandableStringEnum {
+
+    /**
+     * The text content type.
+     */
+    @Generated
+    public static final MessageContentKind TEXT = fromString("text");
+
+    /**
+     * The image content type.
+     */
+    @Generated
+    public static final MessageContentKind IMAGE = fromString("image");
+
+    /**
+     * The video content type.
+     */
+    @Generated
+    public static final MessageContentKind VIDEO = fromString("video");
+
+    /**
+     * The document content type.
+     */
+    @Generated
+    public static final MessageContentKind DOCUMENT = fromString("document");
+
+    /**
+     * The ActionSet content type.
+     */
+    @Generated
+    public static final MessageContentKind ACTION_SET = fromString("actionSet");
+
+    /**
+     * The ButtonSet content type.
+     */
+    @Generated
+    public static final MessageContentKind BUTTON_SET = fromString("buttonSet");
+
+    /**
+     * The Url content type.
+     */
+    @Generated
+    public static final MessageContentKind URL = fromString("url");
+
+    /**
+     * Creates a new instance of MessageContentKind value.
+     *
+     * @deprecated Use the {@link #fromString(String)} factory method.
+     */
+    @Generated
+    @Deprecated
+    public MessageContentKind() {
+    }
+
+    /**
+     * Creates or finds a MessageContentKind from its string representation.
+     *
+     * @param name a name to look for.
+     * @return the corresponding MessageContentKind.
+     */
+    @Generated
+    public static MessageContentKind fromString(String name) {
+        return fromString(name, MessageContentKind.class);
+    }
+
+    /**
+     * Gets known MessageContentKind values.
+     *
+     * @return known MessageContentKind values.
+     */
+    @Generated
+    public static Collection values() {
+        return values(MessageContentKind.class);
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/NotificationContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/NotificationContent.java
index cd28761960e12..7f082a0b79387 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/NotificationContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/NotificationContent.java
@@ -130,6 +130,12 @@ public static NotificationContent fromJson(JsonReader jsonReader) throws IOExcep
                     return VideoNotificationContent.fromJson(readerToUse.reset());
                 } else if ("audio".equals(discriminatorValue)) {
                     return AudioNotificationContent.fromJson(readerToUse.reset());
+                } else if ("reaction".equals(discriminatorValue)) {
+                    return ReactionNotificationContent.fromJson(readerToUse.reset());
+                } else if ("sticker".equals(discriminatorValue)) {
+                    return StickerNotificationContent.fromJson(readerToUse.reset());
+                } else if ("interactive".equals(discriminatorValue)) {
+                    return InteractiveNotificationContent.fromJson(readerToUse.reset());
                 } else if ("template".equals(discriminatorValue)) {
                     return TemplateNotificationContent.fromJson(readerToUse.reset());
                 } else {
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ReactionNotificationContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ReactionNotificationContent.java
new file mode 100644
index 0000000000000..99f5ec1bae198
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ReactionNotificationContent.java
@@ -0,0 +1,139 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.annotation.Immutable;
+import com.azure.json.JsonReader;
+import com.azure.json.JsonToken;
+import com.azure.json.JsonWriter;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * A request to send a Reaction notification.
+ */
+@Immutable
+public final class ReactionNotificationContent extends NotificationContent {
+
+    /*
+     * The type discriminator describing a notification type.
+     */
+    @Generated
+    private CommunicationMessageKind kind = CommunicationMessageKind.REACTION;
+
+    /*
+     * emoji content like \uD83D\uDE00.
+     */
+    @Generated
+    private final String emoji;
+
+    /*
+     * ID of the previous message you want to reply to.
+     */
+    @Generated
+    private final String messageId;
+
+    /**
+     * Creates an instance of ReactionNotificationContent class.
+     *
+     * @param channelRegistrationId the channelRegistrationId value to set.
+     * @param to the to value to set.
+     * @param emoji the emoji value to set.
+     * @param messageId the messageId value to set.
+     */
+    @Generated
+    public ReactionNotificationContent(String channelRegistrationId, List to, String emoji, String messageId) {
+        super(channelRegistrationId, to);
+        this.emoji = emoji;
+        this.messageId = messageId;
+    }
+
+    /**
+     * Get the kind property: The type discriminator describing a notification type.
+     *
+     * @return the kind value.
+     */
+    @Generated
+    @Override
+    public CommunicationMessageKind getKind() {
+        return this.kind;
+    }
+
+    /**
+     * Get the emoji property: emoji content like \uD83D\uDE00.
+     *
+     * @return the emoji value.
+     */
+    @Generated
+    public String getEmoji() {
+        return this.emoji;
+    }
+
+    /**
+     * Get the messageId property: ID of the previous message you want to reply to.
+     *
+     * @return the messageId value.
+     */
+    @Generated
+    public String getMessageId() {
+        return this.messageId;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Generated
+    @Override
+    public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
+        jsonWriter.writeStartObject();
+        jsonWriter.writeStringField("channelRegistrationId", getChannelRegistrationId());
+        jsonWriter.writeArrayField("to", getTo(), (writer, element) -> writer.writeString(element));
+        jsonWriter.writeStringField("emoji", this.emoji);
+        jsonWriter.writeStringField("messageId", this.messageId);
+        jsonWriter.writeStringField("kind", this.kind == null ? null : this.kind.toString());
+        return jsonWriter.writeEndObject();
+    }
+
+    /**
+     * Reads an instance of ReactionNotificationContent from the JsonReader.
+     *
+     * @param jsonReader The JsonReader being read.
+     * @return An instance of ReactionNotificationContent if the JsonReader was pointing to an instance of it, or null
+     * if it was pointing to JSON null.
+     * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
+     * @throws IOException If an error occurs while reading the ReactionNotificationContent.
+     */
+    @Generated
+    public static ReactionNotificationContent fromJson(JsonReader jsonReader) throws IOException {
+        return jsonReader.readObject(reader -> {
+            String channelRegistrationId = null;
+            List to = null;
+            String emoji = null;
+            String messageId = null;
+            CommunicationMessageKind kind = CommunicationMessageKind.REACTION;
+            while (reader.nextToken() != JsonToken.END_OBJECT) {
+                String fieldName = reader.getFieldName();
+                reader.nextToken();
+                if ("channelRegistrationId".equals(fieldName)) {
+                    channelRegistrationId = reader.getString();
+                } else if ("to".equals(fieldName)) {
+                    to = reader.readArray(reader1 -> reader1.getString());
+                } else if ("emoji".equals(fieldName)) {
+                    emoji = reader.getString();
+                } else if ("messageId".equals(fieldName)) {
+                    messageId = reader.getString();
+                } else if ("kind".equals(fieldName)) {
+                    kind = CommunicationMessageKind.fromString(reader.getString());
+                } else {
+                    reader.skipChildren();
+                }
+            }
+            ReactionNotificationContent deserializedReactionNotificationContent
+                = new ReactionNotificationContent(channelRegistrationId, to, emoji, messageId);
+            deserializedReactionNotificationContent.kind = kind;
+            return deserializedReactionNotificationContent;
+        });
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/StickerNotificationContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/StickerNotificationContent.java
new file mode 100644
index 0000000000000..d404b4eb3fb71
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/StickerNotificationContent.java
@@ -0,0 +1,118 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.annotation.Immutable;
+import com.azure.json.JsonReader;
+import com.azure.json.JsonToken;
+import com.azure.json.JsonWriter;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * A request to send a Sticker notification.
+ */
+@Immutable
+public final class StickerNotificationContent extends NotificationContent {
+
+    /*
+     * The type discriminator describing a notification type.
+     */
+    @Generated
+    private CommunicationMessageKind kind = CommunicationMessageKind.STICKER;
+
+    /*
+     * A media url for the file. Required if the type is one of the supported media types, e.g. image
+     */
+    @Generated
+    private final String mediaUrl;
+
+    /**
+     * Creates an instance of StickerNotificationContent class.
+     *
+     * @param channelRegistrationId the channelRegistrationId value to set.
+     * @param to the to value to set.
+     * @param mediaUrl the mediaUrl value to set.
+     */
+    @Generated
+    public StickerNotificationContent(String channelRegistrationId, List to, String mediaUrl) {
+        super(channelRegistrationId, to);
+        this.mediaUrl = mediaUrl;
+    }
+
+    /**
+     * Get the kind property: The type discriminator describing a notification type.
+     *
+     * @return the kind value.
+     */
+    @Generated
+    @Override
+    public CommunicationMessageKind getKind() {
+        return this.kind;
+    }
+
+    /**
+     * Get the mediaUrl property: A media url for the file. Required if the type is one of the supported media types,
+     * e.g. image.
+     *
+     * @return the mediaUrl value.
+     */
+    @Generated
+    public String getMediaUrl() {
+        return this.mediaUrl;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Generated
+    @Override
+    public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
+        jsonWriter.writeStartObject();
+        jsonWriter.writeStringField("channelRegistrationId", getChannelRegistrationId());
+        jsonWriter.writeArrayField("to", getTo(), (writer, element) -> writer.writeString(element));
+        jsonWriter.writeStringField("mediaUri", this.mediaUrl);
+        jsonWriter.writeStringField("kind", this.kind == null ? null : this.kind.toString());
+        return jsonWriter.writeEndObject();
+    }
+
+    /**
+     * Reads an instance of StickerNotificationContent from the JsonReader.
+     *
+     * @param jsonReader The JsonReader being read.
+     * @return An instance of StickerNotificationContent if the JsonReader was pointing to an instance of it, or null if
+     * it was pointing to JSON null.
+     * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
+     * @throws IOException If an error occurs while reading the StickerNotificationContent.
+     */
+    @Generated
+    public static StickerNotificationContent fromJson(JsonReader jsonReader) throws IOException {
+        return jsonReader.readObject(reader -> {
+            String channelRegistrationId = null;
+            List to = null;
+            String mediaUrl = null;
+            CommunicationMessageKind kind = CommunicationMessageKind.STICKER;
+            while (reader.nextToken() != JsonToken.END_OBJECT) {
+                String fieldName = reader.getFieldName();
+                reader.nextToken();
+                if ("channelRegistrationId".equals(fieldName)) {
+                    channelRegistrationId = reader.getString();
+                } else if ("to".equals(fieldName)) {
+                    to = reader.readArray(reader1 -> reader1.getString());
+                } else if ("mediaUri".equals(fieldName)) {
+                    mediaUrl = reader.getString();
+                } else if ("kind".equals(fieldName)) {
+                    kind = CommunicationMessageKind.fromString(reader.getString());
+                } else {
+                    reader.skipChildren();
+                }
+            }
+            StickerNotificationContent deserializedStickerNotificationContent
+                = new StickerNotificationContent(channelRegistrationId, to, mediaUrl);
+            deserializedStickerNotificationContent.kind = kind;
+            return deserializedStickerNotificationContent;
+        });
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/TextMessageContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/TextMessageContent.java
new file mode 100644
index 0000000000000..31dbc6fc15a7d
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/TextMessageContent.java
@@ -0,0 +1,104 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.annotation.Immutable;
+import com.azure.json.JsonReader;
+import com.azure.json.JsonToken;
+import com.azure.json.JsonWriter;
+import java.io.IOException;
+
+/**
+ * The message content of type text information.
+ */
+@Immutable
+public final class TextMessageContent extends MessageContent {
+
+    /*
+     * Kind of MessageContent.
+     */
+    @Generated
+    private MessageContentKind kind = MessageContentKind.TEXT;
+
+    /*
+     * The text value.
+     */
+    @Generated
+    private final String text;
+
+    /**
+     * Creates an instance of TextMessageContent class.
+     *
+     * @param text the text value to set.
+     */
+    @Generated
+    public TextMessageContent(String text) {
+        this.text = text;
+    }
+
+    /**
+     * Get the kind property: Kind of MessageContent.
+     *
+     * @return the kind value.
+     */
+    @Generated
+    @Override
+    public MessageContentKind getKind() {
+        return this.kind;
+    }
+
+    /**
+     * Get the text property: The text value.
+     *
+     * @return the text value.
+     */
+    @Generated
+    public String getText() {
+        return this.text;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Generated
+    @Override
+    public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
+        jsonWriter.writeStartObject();
+        jsonWriter.writeStringField("text", this.text);
+        jsonWriter.writeStringField("kind", this.kind == null ? null : this.kind.toString());
+        return jsonWriter.writeEndObject();
+    }
+
+    /**
+     * Reads an instance of TextMessageContent from the JsonReader.
+     *
+     * @param jsonReader The JsonReader being read.
+     * @return An instance of TextMessageContent if the JsonReader was pointing to an instance of it, or null if it was
+     * pointing to JSON null.
+     * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
+     * @throws IOException If an error occurs while reading the TextMessageContent.
+     */
+    @Generated
+    public static TextMessageContent fromJson(JsonReader jsonReader) throws IOException {
+        return jsonReader.readObject(reader -> {
+            String text = null;
+            MessageContentKind kind = MessageContentKind.TEXT;
+            while (reader.nextToken() != JsonToken.END_OBJECT) {
+                String fieldName = reader.getFieldName();
+                reader.nextToken();
+                if ("text".equals(fieldName)) {
+                    text = reader.getString();
+                } else if ("kind".equals(fieldName)) {
+                    kind = MessageContentKind.fromString(reader.getString());
+                } else {
+                    reader.skipChildren();
+                }
+            }
+            TextMessageContent deserializedTextMessageContent = new TextMessageContent(text);
+            deserializedTextMessageContent.kind = kind;
+            return deserializedTextMessageContent;
+        });
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/UrlContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/UrlContent.java
new file mode 100644
index 0000000000000..3243b8427eb86
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/UrlContent.java
@@ -0,0 +1,126 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.annotation.Immutable;
+import com.azure.json.JsonReader;
+import com.azure.json.JsonToken;
+import com.azure.json.JsonWriter;
+import java.io.IOException;
+
+/**
+ * The message content of type Url information.
+ */
+@Immutable
+public final class UrlContent extends MessageContent {
+
+    /*
+     * Kind of MessageContent.
+     */
+    @Generated
+    private MessageContentKind kind = MessageContentKind.URL;
+
+    /*
+     * Title of the url content.
+     */
+    @Generated
+    private final String title;
+
+    /*
+     * The url in the content.
+     */
+    @Generated
+    private final String url;
+
+    /**
+     * Creates an instance of UrlContent class.
+     *
+     * @param title the title value to set.
+     * @param url the url value to set.
+     */
+    @Generated
+    public UrlContent(String title, String url) {
+        this.title = title;
+        this.url = url;
+    }
+
+    /**
+     * Get the kind property: Kind of MessageContent.
+     *
+     * @return the kind value.
+     */
+    @Generated
+    @Override
+    public MessageContentKind getKind() {
+        return this.kind;
+    }
+
+    /**
+     * Get the title property: Title of the url content.
+     *
+     * @return the title value.
+     */
+    @Generated
+    public String getTitle() {
+        return this.title;
+    }
+
+    /**
+     * Get the url property: The url in the content.
+     *
+     * @return the url value.
+     */
+    @Generated
+    public String getUrl() {
+        return this.url;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Generated
+    @Override
+    public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
+        jsonWriter.writeStartObject();
+        jsonWriter.writeStringField("title", this.title);
+        jsonWriter.writeStringField("url", this.url);
+        jsonWriter.writeStringField("kind", this.kind == null ? null : this.kind.toString());
+        return jsonWriter.writeEndObject();
+    }
+
+    /**
+     * Reads an instance of UrlContent from the JsonReader.
+     *
+     * @param jsonReader The JsonReader being read.
+     * @return An instance of UrlContent if the JsonReader was pointing to an instance of it, or null if it was pointing
+     * to JSON null.
+     * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
+     * @throws IOException If an error occurs while reading the UrlContent.
+     */
+    @Generated
+    public static UrlContent fromJson(JsonReader jsonReader) throws IOException {
+        return jsonReader.readObject(reader -> {
+            String title = null;
+            String url = null;
+            MessageContentKind kind = MessageContentKind.URL;
+            while (reader.nextToken() != JsonToken.END_OBJECT) {
+                String fieldName = reader.getFieldName();
+                reader.nextToken();
+                if ("title".equals(fieldName)) {
+                    title = reader.getString();
+                } else if ("url".equals(fieldName)) {
+                    url = reader.getString();
+                } else if ("kind".equals(fieldName)) {
+                    kind = MessageContentKind.fromString(reader.getString());
+                } else {
+                    reader.skipChildren();
+                }
+            }
+            UrlContent deserializedUrlContent = new UrlContent(title, url);
+            deserializedUrlContent.kind = kind;
+            return deserializedUrlContent;
+        });
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/VideoMessageContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/VideoMessageContent.java
new file mode 100644
index 0000000000000..cc5e8c7f88350
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/VideoMessageContent.java
@@ -0,0 +1,104 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.annotation.Immutable;
+import com.azure.json.JsonReader;
+import com.azure.json.JsonToken;
+import com.azure.json.JsonWriter;
+import java.io.IOException;
+
+/**
+ * The message content of type video information.
+ */
+@Immutable
+public final class VideoMessageContent extends MessageContent {
+
+    /*
+     * Kind of MessageContent.
+     */
+    @Generated
+    private MessageContentKind kind = MessageContentKind.VIDEO;
+
+    /*
+     * MediaUri of the media content.
+     */
+    @Generated
+    private final String mediaUri;
+
+    /**
+     * Creates an instance of VideoMessageContent class.
+     *
+     * @param mediaUri the mediaUri value to set.
+     */
+    @Generated
+    public VideoMessageContent(String mediaUri) {
+        this.mediaUri = mediaUri;
+    }
+
+    /**
+     * Get the kind property: Kind of MessageContent.
+     *
+     * @return the kind value.
+     */
+    @Generated
+    @Override
+    public MessageContentKind getKind() {
+        return this.kind;
+    }
+
+    /**
+     * Get the mediaUri property: MediaUri of the media content.
+     *
+     * @return the mediaUri value.
+     */
+    @Generated
+    public String getMediaUri() {
+        return this.mediaUri;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Generated
+    @Override
+    public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
+        jsonWriter.writeStartObject();
+        jsonWriter.writeStringField("mediaUri", this.mediaUri);
+        jsonWriter.writeStringField("kind", this.kind == null ? null : this.kind.toString());
+        return jsonWriter.writeEndObject();
+    }
+
+    /**
+     * Reads an instance of VideoMessageContent from the JsonReader.
+     *
+     * @param jsonReader The JsonReader being read.
+     * @return An instance of VideoMessageContent if the JsonReader was pointing to an instance of it, or null if it was
+     * pointing to JSON null.
+     * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
+     * @throws IOException If an error occurs while reading the VideoMessageContent.
+     */
+    @Generated
+    public static VideoMessageContent fromJson(JsonReader jsonReader) throws IOException {
+        return jsonReader.readObject(reader -> {
+            String mediaUri = null;
+            MessageContentKind kind = MessageContentKind.VIDEO;
+            while (reader.nextToken() != JsonToken.END_OBJECT) {
+                String fieldName = reader.getFieldName();
+                reader.nextToken();
+                if ("mediaUri".equals(fieldName)) {
+                    mediaUri = reader.getString();
+                } else if ("kind".equals(fieldName)) {
+                    kind = MessageContentKind.fromString(reader.getString());
+                } else {
+                    reader.skipChildren();
+                }
+            }
+            VideoMessageContent deserializedVideoMessageContent = new VideoMessageContent(mediaUri);
+            deserializedVideoMessageContent.kind = kind;
+            return deserializedVideoMessageContent;
+        });
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppButtonActionBindings.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppButtonActionBindings.java
new file mode 100644
index 0000000000000..99f83d611f4a1
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppButtonActionBindings.java
@@ -0,0 +1,106 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.annotation.Immutable;
+import com.azure.json.JsonReader;
+import com.azure.json.JsonToken;
+import com.azure.json.JsonWriter;
+import java.io.IOException;
+
+/**
+ * WhatsApp Binding actions to the interactive message.
+ */
+@Immutable
+public final class WhatsAppButtonActionBindings extends ActionBindings {
+
+    /*
+     * Kind of the MessageActionBinding.
+     */
+    @Generated
+    private MessageActionBindingKind actionBindingKind = MessageActionBindingKind.WHATS_APP_BUTTON_ACTION;
+
+    /*
+     * Action content of Interactive message.
+     */
+    @Generated
+    private final ButtonSetContent action;
+
+    /**
+     * Creates an instance of WhatsAppButtonActionBindings class.
+     *
+     * @param action the action value to set.
+     */
+    @Generated
+    public WhatsAppButtonActionBindings(ButtonSetContent action) {
+        this.action = action;
+    }
+
+    /**
+     * Get the actionBindingKind property: Kind of the MessageActionBinding.
+     *
+     * @return the actionBindingKind value.
+     */
+    @Generated
+    @Override
+    public MessageActionBindingKind getActionBindingKind() {
+        return this.actionBindingKind;
+    }
+
+    /**
+     * Get the action property: Action content of Interactive message.
+     *
+     * @return the action value.
+     */
+    @Generated
+    public ButtonSetContent getAction() {
+        return this.action;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Generated
+    @Override
+    public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
+        jsonWriter.writeStartObject();
+        jsonWriter.writeJsonField("action", this.action);
+        jsonWriter.writeStringField("actionBindingKind",
+            this.actionBindingKind == null ? null : this.actionBindingKind.toString());
+        return jsonWriter.writeEndObject();
+    }
+
+    /**
+     * Reads an instance of WhatsAppButtonActionBindings from the JsonReader.
+     *
+     * @param jsonReader The JsonReader being read.
+     * @return An instance of WhatsAppButtonActionBindings if the JsonReader was pointing to an instance of it, or null
+     * if it was pointing to JSON null.
+     * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
+     * @throws IOException If an error occurs while reading the WhatsAppButtonActionBindings.
+     */
+    @Generated
+    public static WhatsAppButtonActionBindings fromJson(JsonReader jsonReader) throws IOException {
+        return jsonReader.readObject(reader -> {
+            ButtonSetContent action = null;
+            MessageActionBindingKind actionBindingKind = MessageActionBindingKind.WHATS_APP_BUTTON_ACTION;
+            while (reader.nextToken() != JsonToken.END_OBJECT) {
+                String fieldName = reader.getFieldName();
+                reader.nextToken();
+                if ("action".equals(fieldName)) {
+                    action = ButtonSetContent.fromJson(reader);
+                } else if ("actionBindingKind".equals(fieldName)) {
+                    actionBindingKind = MessageActionBindingKind.fromString(reader.getString());
+                } else {
+                    reader.skipChildren();
+                }
+            }
+            WhatsAppButtonActionBindings deserializedWhatsAppButtonActionBindings
+                = new WhatsAppButtonActionBindings(action);
+            deserializedWhatsAppButtonActionBindings.actionBindingKind = actionBindingKind;
+            return deserializedWhatsAppButtonActionBindings;
+        });
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppListActionBindings.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppListActionBindings.java
new file mode 100644
index 0000000000000..f3086fa867f27
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppListActionBindings.java
@@ -0,0 +1,105 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.annotation.Immutable;
+import com.azure.json.JsonReader;
+import com.azure.json.JsonToken;
+import com.azure.json.JsonWriter;
+import java.io.IOException;
+
+/**
+ * WhatsApp List Binding actions to the interactive message.
+ */
+@Immutable
+public final class WhatsAppListActionBindings extends ActionBindings {
+
+    /*
+     * Kind of the MessageActionBinding.
+     */
+    @Generated
+    private MessageActionBindingKind actionBindingKind = MessageActionBindingKind.WHATS_APP_LIST_ACTION;
+
+    /*
+     * Action content of Interactive message.
+     */
+    @Generated
+    private final ActionSetContent action;
+
+    /**
+     * Creates an instance of WhatsAppListActionBindings class.
+     *
+     * @param action the action value to set.
+     */
+    @Generated
+    public WhatsAppListActionBindings(ActionSetContent action) {
+        this.action = action;
+    }
+
+    /**
+     * Get the actionBindingKind property: Kind of the MessageActionBinding.
+     *
+     * @return the actionBindingKind value.
+     */
+    @Generated
+    @Override
+    public MessageActionBindingKind getActionBindingKind() {
+        return this.actionBindingKind;
+    }
+
+    /**
+     * Get the action property: Action content of Interactive message.
+     *
+     * @return the action value.
+     */
+    @Generated
+    public ActionSetContent getAction() {
+        return this.action;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Generated
+    @Override
+    public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
+        jsonWriter.writeStartObject();
+        jsonWriter.writeJsonField("action", this.action);
+        jsonWriter.writeStringField("actionBindingKind",
+            this.actionBindingKind == null ? null : this.actionBindingKind.toString());
+        return jsonWriter.writeEndObject();
+    }
+
+    /**
+     * Reads an instance of WhatsAppListActionBindings from the JsonReader.
+     *
+     * @param jsonReader The JsonReader being read.
+     * @return An instance of WhatsAppListActionBindings if the JsonReader was pointing to an instance of it, or null if
+     * it was pointing to JSON null.
+     * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
+     * @throws IOException If an error occurs while reading the WhatsAppListActionBindings.
+     */
+    @Generated
+    public static WhatsAppListActionBindings fromJson(JsonReader jsonReader) throws IOException {
+        return jsonReader.readObject(reader -> {
+            ActionSetContent action = null;
+            MessageActionBindingKind actionBindingKind = MessageActionBindingKind.WHATS_APP_LIST_ACTION;
+            while (reader.nextToken() != JsonToken.END_OBJECT) {
+                String fieldName = reader.getFieldName();
+                reader.nextToken();
+                if ("action".equals(fieldName)) {
+                    action = ActionSetContent.fromJson(reader);
+                } else if ("actionBindingKind".equals(fieldName)) {
+                    actionBindingKind = MessageActionBindingKind.fromString(reader.getString());
+                } else {
+                    reader.skipChildren();
+                }
+            }
+            WhatsAppListActionBindings deserializedWhatsAppListActionBindings = new WhatsAppListActionBindings(action);
+            deserializedWhatsAppListActionBindings.actionBindingKind = actionBindingKind;
+            return deserializedWhatsAppListActionBindings;
+        });
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppUrlActionBindings.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppUrlActionBindings.java
new file mode 100644
index 0000000000000..b01e2da34a7e9
--- /dev/null
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppUrlActionBindings.java
@@ -0,0 +1,105 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+// Code generated by Microsoft (R) TypeSpec Code Generator.
+package com.azure.communication.messages.models;
+
+import com.azure.core.annotation.Generated;
+import com.azure.core.annotation.Immutable;
+import com.azure.json.JsonReader;
+import com.azure.json.JsonToken;
+import com.azure.json.JsonWriter;
+import java.io.IOException;
+
+/**
+ * WhatsApp Binding actions to the interactive message.
+ */
+@Immutable
+public final class WhatsAppUrlActionBindings extends ActionBindings {
+
+    /*
+     * Kind of the MessageActionBinding.
+     */
+    @Generated
+    private MessageActionBindingKind actionBindingKind = MessageActionBindingKind.WHATS_APP_URL_ACTION;
+
+    /*
+     * Action content of Interactive message.
+     */
+    @Generated
+    private final UrlContent action;
+
+    /**
+     * Creates an instance of WhatsAppUrlActionBindings class.
+     *
+     * @param action the action value to set.
+     */
+    @Generated
+    public WhatsAppUrlActionBindings(UrlContent action) {
+        this.action = action;
+    }
+
+    /**
+     * Get the actionBindingKind property: Kind of the MessageActionBinding.
+     *
+     * @return the actionBindingKind value.
+     */
+    @Generated
+    @Override
+    public MessageActionBindingKind getActionBindingKind() {
+        return this.actionBindingKind;
+    }
+
+    /**
+     * Get the action property: Action content of Interactive message.
+     *
+     * @return the action value.
+     */
+    @Generated
+    public UrlContent getAction() {
+        return this.action;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Generated
+    @Override
+    public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
+        jsonWriter.writeStartObject();
+        jsonWriter.writeJsonField("action", this.action);
+        jsonWriter.writeStringField("actionBindingKind",
+            this.actionBindingKind == null ? null : this.actionBindingKind.toString());
+        return jsonWriter.writeEndObject();
+    }
+
+    /**
+     * Reads an instance of WhatsAppUrlActionBindings from the JsonReader.
+     *
+     * @param jsonReader The JsonReader being read.
+     * @return An instance of WhatsAppUrlActionBindings if the JsonReader was pointing to an instance of it, or null if
+     * it was pointing to JSON null.
+     * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
+     * @throws IOException If an error occurs while reading the WhatsAppUrlActionBindings.
+     */
+    @Generated
+    public static WhatsAppUrlActionBindings fromJson(JsonReader jsonReader) throws IOException {
+        return jsonReader.readObject(reader -> {
+            UrlContent action = null;
+            MessageActionBindingKind actionBindingKind = MessageActionBindingKind.WHATS_APP_URL_ACTION;
+            while (reader.nextToken() != JsonToken.END_OBJECT) {
+                String fieldName = reader.getFieldName();
+                reader.nextToken();
+                if ("action".equals(fieldName)) {
+                    action = UrlContent.fromJson(reader);
+                } else if ("actionBindingKind".equals(fieldName)) {
+                    actionBindingKind = MessageActionBindingKind.fromString(reader.getString());
+                } else {
+                    reader.skipChildren();
+                }
+            }
+            WhatsAppUrlActionBindings deserializedWhatsAppUrlActionBindings = new WhatsAppUrlActionBindings(action);
+            deserializedWhatsAppUrlActionBindings.actionBindingKind = actionBindingKind;
+            return deserializedWhatsAppUrlActionBindings;
+        });
+    }
+}
diff --git a/sdk/communication/azure-communication-messages/src/main/resources/META-INF/azure-communication-messages_apiview_properties.json b/sdk/communication/azure-communication-messages/src/main/resources/META-INF/azure-communication-messages_apiview_properties.json
index 47302ac76e22f..383c362f671c2 100644
--- a/sdk/communication/azure-communication-messages/src/main/resources/META-INF/azure-communication-messages_apiview_properties.json
+++ b/sdk/communication/azure-communication-messages/src/main/resources/META-INF/azure-communication-messages_apiview_properties.json
@@ -17,12 +17,25 @@
     "com.azure.communication.messages.NotificationMessagesClient.send": "Azure.Communication.MessagesService.NotificationMessagesClient.send",
     "com.azure.communication.messages.NotificationMessagesClient.sendWithResponse": "Azure.Communication.MessagesService.NotificationMessagesClient.send",
     "com.azure.communication.messages.NotificationMessagesClientBuilder": "ClientForAcsMessages.NotificationMessagesClient",
+    "com.azure.communication.messages.models.ActionBindings": "Azure.Communication.MessagesService.ActionBindings",
+    "com.azure.communication.messages.models.ActionSet": "Azure.Communication.MessagesService.ActionSet",
+    "com.azure.communication.messages.models.ActionSetContent": "Azure.Communication.MessagesService.ActionSetContent",
+    "com.azure.communication.messages.models.ActionSetItem": "Azure.Communication.MessagesService.ActionSetItem",
     "com.azure.communication.messages.models.AudioNotificationContent": "Azure.Communication.MessagesService.AudioNotificationContent",
+    "com.azure.communication.messages.models.ButtonContent": "Azure.Communication.MessagesService.ButtonContent",
+    "com.azure.communication.messages.models.ButtonSetContent": "Azure.Communication.MessagesService.ButtonSetContent",
     "com.azure.communication.messages.models.CommunicationMessageKind": "Azure.Communication.MessagesService.CommunicationMessageKind",
     "com.azure.communication.messages.models.CommunicationMessagesChannel": "Azure.Communication.MessagesService.CommunicationMessagesChannel",
+    "com.azure.communication.messages.models.DocumentMessageContent": "Azure.Communication.MessagesService.DocumentMessageContent",
     "com.azure.communication.messages.models.DocumentNotificationContent": "Azure.Communication.MessagesService.DocumentNotificationContent",
+    "com.azure.communication.messages.models.ImageMessageContent": "Azure.Communication.MessagesService.ImageMessageContent",
     "com.azure.communication.messages.models.ImageNotificationContent": "Azure.Communication.MessagesService.ImageNotificationContent",
+    "com.azure.communication.messages.models.InteractiveMessage": "Azure.Communication.MessagesService.InteractiveMessage",
+    "com.azure.communication.messages.models.InteractiveNotificationContent": "Azure.Communication.MessagesService.InteractiveNotificationContent",
     "com.azure.communication.messages.models.MediaNotificationContent": "Azure.Communication.MessagesService.MediaNotificationContent",
+    "com.azure.communication.messages.models.MessageActionBindingKind": "Azure.Communication.MessagesService.MessageActionBindingKind",
+    "com.azure.communication.messages.models.MessageContent": "Azure.Communication.MessagesService.MessageContent",
+    "com.azure.communication.messages.models.MessageContentKind": "Azure.Communication.MessagesService.MessageContentKind",
     "com.azure.communication.messages.models.MessageReceipt": "Azure.Communication.MessagesService.MessageReceipt",
     "com.azure.communication.messages.models.MessageTemplate": "Azure.Communication.MessagesService.MessageTemplate",
     "com.azure.communication.messages.models.MessageTemplateBindings": "Azure.Communication.MessagesService.MessageTemplateBindings",
@@ -38,10 +51,18 @@
     "com.azure.communication.messages.models.MessageTemplateValueKind": "Azure.Communication.MessagesService.MessageTemplateValueKind",
     "com.azure.communication.messages.models.MessageTemplateVideo": "Azure.Communication.MessagesService.MessageTemplateVideo",
     "com.azure.communication.messages.models.NotificationContent": "Azure.Communication.MessagesService.NotificationContent",
+    "com.azure.communication.messages.models.ReactionNotificationContent": "Azure.Communication.MessagesService.ReactionNotificationContent",
     "com.azure.communication.messages.models.SendMessageResult": "Azure.Communication.MessagesService.SendMessageResult",
+    "com.azure.communication.messages.models.StickerNotificationContent": "Azure.Communication.MessagesService.StickerNotificationContent",
     "com.azure.communication.messages.models.TemplateNotificationContent": "Azure.Communication.MessagesService.TemplateNotificationContent",
+    "com.azure.communication.messages.models.TextMessageContent": "Azure.Communication.MessagesService.TextMessageContent",
     "com.azure.communication.messages.models.TextNotificationContent": "Azure.Communication.MessagesService.TextNotificationContent",
+    "com.azure.communication.messages.models.UrlContent": "Azure.Communication.MessagesService.UrlContent",
+    "com.azure.communication.messages.models.VideoMessageContent": "Azure.Communication.MessagesService.VideoMessageContent",
     "com.azure.communication.messages.models.VideoNotificationContent": "Azure.Communication.MessagesService.VideoNotificationContent",
+    "com.azure.communication.messages.models.WhatsAppButtonActionBindings": "Azure.Communication.MessagesService.WhatsAppButtonActionBindings",
+    "com.azure.communication.messages.models.WhatsAppListActionBindings": "Azure.Communication.MessagesService.WhatsAppListActionBindings",
+    "com.azure.communication.messages.models.WhatsAppUrlActionBindings": "Azure.Communication.MessagesService.WhatsAppUrlActionBindings",
     "com.azure.communication.messages.models.channels.WhatsAppMessageButtonSubType": "Azure.Communication.MessagesService.WhatsAppMessageButtonSubType",
     "com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindings": "Azure.Communication.MessagesService.WhatsAppMessageTemplateBindings",
     "com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindingsButton": "Azure.Communication.MessagesService.WhatsAppMessageTemplateBindingsButton",
diff --git a/sdk/communication/azure-communication-messages/tsp-location.yaml b/sdk/communication/azure-communication-messages/tsp-location.yaml
index 277f8c2c5f5a2..1763eab69db88 100644
--- a/sdk/communication/azure-communication-messages/tsp-location.yaml
+++ b/sdk/communication/azure-communication-messages/tsp-location.yaml
@@ -1,4 +1,4 @@
 directory: specification/communication/Communication.Messages
-commit: abe3209e7c6924a58ab560ebab2349bc8fde6aa7
+commit: 3ec57056cd2a8d7d4ce1ac61ca5da625e1afadb2
 repo: Azure/azure-rest-api-specs
 additionalDirectories: null

From 0bf83f911b6306037303843b17caad76b5e76d7c Mon Sep 17 00:00:00 2001
From: Arif Ibrahim Mohamed 
Date: Mon, 2 Dec 2024 23:59:11 -0500
Subject: [PATCH 02/10] customized header property in interactive message as
 per api review comments

---
 .../main/java/MessagesSdkCustomization.java   | 31 ++++++++++++++++---
 .../messages/models/InteractiveMessage.java   |  8 ++---
 2 files changed, 31 insertions(+), 8 deletions(-)

diff --git a/sdk/communication/azure-communication-messages/customization/src/main/java/MessagesSdkCustomization.java b/sdk/communication/azure-communication-messages/customization/src/main/java/MessagesSdkCustomization.java
index 9d8dd8c9de05d..62f3b2aa49f77 100644
--- a/sdk/communication/azure-communication-messages/customization/src/main/java/MessagesSdkCustomization.java
+++ b/sdk/communication/azure-communication-messages/customization/src/main/java/MessagesSdkCustomization.java
@@ -8,6 +8,8 @@
 import com.github.javaparser.ast.Modifier;
 import com.github.javaparser.ast.Node;
 import com.github.javaparser.ast.NodeList;
+import com.github.javaparser.ast.body.MethodDeclaration;
+import com.github.javaparser.ast.body.Parameter;
 import com.github.javaparser.ast.stmt.BlockStmt;
 import com.github.javaparser.ast.type.ClassOrInterfaceType;
 import com.github.javaparser.javadoc.Javadoc;
@@ -15,6 +17,9 @@
 import com.github.javaparser.javadoc.description.JavadocSnippet;
 import org.slf4j.Logger;
 
+import java.util.List;
+import java.util.stream.Collectors;
+
 public class MessagesSdkCustomization extends Customization {
 
     @Override
@@ -189,11 +194,29 @@ private void customizeInteractiveMessage(PackageCustomization modelsPackage) {
 
                 clazz.getMethodsByName("getHeaderProperty").forEach(Node::remove);
 
+                MethodDeclaration setHeaderMethodDeclaration = clazz.getMethodsByName("setHeaderProperty").get(0);
+                List parameters = setHeaderMethodDeclaration
+                    .getParameters()
+                    .stream()
+                    .map(p -> p.setName("header"))
+                    .collect(Collectors.toList());
+                String methodBodyContent = setHeaderMethodDeclaration
+                    .getBody()
+                    .get()
+                    .toString()
+                    .replace("headerProperty;", "header;");
+
+                String docComment = setHeaderMethodDeclaration
+                    .getJavadocComment()
+                    .get()
+                    .getContent()
+                    .replace("headerProperty", "header");
+
                 clazz.addMethod("setHeader", Modifier.Keyword.PUBLIC)
-                    .setParameters(clazz.getMethodsByName("setHeaderProperty").get(0).getParameters())
-                    .setType(clazz.getMethodsByName("setHeaderProperty").get(0).getType())
-                    .setBody(clazz.getMethodsByName("setHeaderProperty").get(0).getBody().get())
-                    .setJavadocComment(clazz.getMethodsByName("setHeaderProperty").get(0).getJavadocComment().get());
+                    .setParameters(new NodeList(parameters))
+                    .setType(setHeaderMethodDeclaration.getType())
+                    .setBody(StaticJavaParser.parseBlock(methodBodyContent))
+                    .setJavadocComment(new Javadoc(JavadocDescription.parseText(docComment)));
 
                 clazz.getMethodsByName("setHeaderProperty").forEach(Node::remove);
             });
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveMessage.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveMessage.java
index 726278c965270..fc660274a6de2 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveMessage.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveMessage.java
@@ -158,13 +158,13 @@ public MessageContent getHeader() {
     }
 
     /**
-     * Set the headerProperty property: Gets or Sets Header content. Supports the following types:text, images etc.
+     * Set the header property: Gets or Sets Header content. Supports the following types:text, images etc.
      *
-     * @param headerProperty the headerProperty value to set.
+     * @param header the header value to set.
      * @return the InteractiveMessage object itself.
      */
-    public InteractiveMessage setHeader(MessageContent headerProperty) {
-        this.headerProperty = headerProperty;
+    public InteractiveMessage setHeader(MessageContent header) {
+        this.headerProperty = header;
         return this;
     }
 }

From 1b761dc854f78f9d0d0ef4afddad8830e02baf94 Mon Sep 17 00:00:00 2001
From: Arif Ibrahim Mohamed 
Date: Wed, 4 Dec 2024 15:43:29 -0500
Subject: [PATCH 03/10] SDK review comment fix

---
 .../messages/models/ActionBindings.java       | 18 ++---
 .../{ActionSet.java => ActionGroup.java}      | 47 ++++++-------
 ...etContent.java => ActionGroupContent.java} | 66 ++++++++++---------
 ...ctionSetItem.java => ActionGroupItem.java} | 31 ++++-----
 .../messages/models/ButtonContent.java        | 11 ++--
 .../messages/models/ButtonSetContent.java     | 12 ++--
 .../models/DocumentMessageContent.java        | 36 +++++-----
 .../messages/models/ImageMessageContent.java  | 36 +++++-----
 .../messages/models/InteractiveMessage.java   | 28 ++++----
 .../InteractiveNotificationContent.java       | 12 ++--
 .../{UrlContent.java => LinkContent.java}     | 36 +++++-----
 .../models/MessageActionBindingKind.java      |  8 +--
 .../messages/models/MessageContent.java       |  6 +-
 .../messages/models/MessageContentKind.java   | 10 +--
 .../models/ReactionNotificationContent.java   | 14 ++--
 .../models/StickerNotificationContent.java    | 12 ++--
 .../messages/models/TextMessageContent.java   | 12 ++--
 .../messages/models/VideoMessageContent.java  | 36 +++++-----
 .../WhatsAppButtonActionBindings.java         | 64 +++++++++---------
 .../WhatsAppListActionBindings.java           | 64 +++++++++---------
 .../WhatsAppUrlActionBindings.java            | 64 +++++++++---------
 ...unication-messages_apiview_properties.json | 16 ++---
 .../tsp-location.yaml                         |  2 +-
 23 files changed, 339 insertions(+), 302 deletions(-)
 rename sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/{ActionSet.java => ActionGroup.java} (67%)
 rename sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/{ActionSetContent.java => ActionGroupContent.java} (59%)
 rename sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/{ActionSetItem.java => ActionGroupItem.java} (82%)
 rename sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/{UrlContent.java => LinkContent.java} (81%)
 rename sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/{ => channels}/WhatsAppButtonActionBindings.java (57%)
 rename sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/{ => channels}/WhatsAppListActionBindings.java (57%)
 rename sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/{ => channels}/WhatsAppUrlActionBindings.java (58%)

diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionBindings.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionBindings.java
index f5313c6b9590c..e062c50048835 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionBindings.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionBindings.java
@@ -3,6 +3,9 @@
 // Code generated by Microsoft (R) TypeSpec Code Generator.
 package com.azure.communication.messages.models;
 
+import com.azure.communication.messages.models.channels.WhatsAppButtonActionBindings;
+import com.azure.communication.messages.models.channels.WhatsAppListActionBindings;
+import com.azure.communication.messages.models.channels.WhatsAppUrlActionBindings;
 import com.azure.core.annotation.Generated;
 import com.azure.core.annotation.Immutable;
 import com.azure.json.JsonReader;
@@ -21,7 +24,7 @@ public abstract class ActionBindings implements JsonSerializable
      * Kind of the MessageActionBinding.
      */
     @Generated
-    private MessageActionBindingKind actionBindingKind = MessageActionBindingKind.fromString("ActionBindings");
+    private MessageActionBindingKind kind = MessageActionBindingKind.fromString("ActionBindings");
 
     /**
      * Creates an instance of ActionBindings class.
@@ -31,13 +34,13 @@ protected ActionBindings() {
     }
 
     /**
-     * Get the actionBindingKind property: Kind of the MessageActionBinding.
+     * Get the kind property: Kind of the MessageActionBinding.
      *
-     * @return the actionBindingKind value.
+     * @return the kind value.
      */
     @Generated
-    public MessageActionBindingKind getActionBindingKind() {
-        return this.actionBindingKind;
+    public MessageActionBindingKind getKind() {
+        return this.kind;
     }
 
     /**
@@ -47,8 +50,7 @@ public MessageActionBindingKind getActionBindingKind() {
     @Override
     public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
         jsonWriter.writeStartObject();
-        jsonWriter.writeStringField("actionBindingKind",
-            this.actionBindingKind == null ? null : this.actionBindingKind.toString());
+        jsonWriter.writeStringField("kind", this.kind == null ? null : this.kind.toString());
         return jsonWriter.writeEndObject();
     }
 
@@ -70,7 +72,7 @@ public static ActionBindings fromJson(JsonReader jsonReader) throws IOException
                 while (readerToUse.nextToken() != JsonToken.END_OBJECT) {
                     String fieldName = readerToUse.getFieldName();
                     readerToUse.nextToken();
-                    if ("actionBindingKind".equals(fieldName)) {
+                    if ("kind".equals(fieldName)) {
                         discriminatorValue = readerToUse.getString();
                         break;
                     } else {
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSet.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroup.java
similarity index 67%
rename from sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSet.java
rename to sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroup.java
index e195a707da16e..4c4775dcfc5ea 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSet.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroup.java
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
+
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -13,38 +14,37 @@
 import java.util.List;
 
 /**
- * The Action Set content.
+ * The Action Group content.
  */
 @Immutable
-public final class ActionSet implements JsonSerializable {
-
+public final class ActionGroup implements JsonSerializable {
     /*
-     * Title of the ActionSet.
+     * Title of the ActionGroup.
      */
     @Generated
     private final String title;
 
     /*
-     * Array of items in ActionSet.
+     * Array of items in ActionGroup.
      */
     @Generated
-    private final List items;
+    private final List items;
 
     /**
-     * Creates an instance of ActionSet class.
-     *
+     * Creates an instance of ActionGroup class.
+     * 
      * @param title the title value to set.
      * @param items the items value to set.
      */
     @Generated
-    public ActionSet(String title, List items) {
+    public ActionGroup(String title, List items) {
         this.title = title;
         this.items = items;
     }
 
     /**
-     * Get the title property: Title of the ActionSet.
-     *
+     * Get the title property: Title of the ActionGroup.
+     * 
      * @return the title value.
      */
     @Generated
@@ -53,12 +53,12 @@ public String getTitle() {
     }
 
     /**
-     * Get the items property: Array of items in ActionSet.
-     *
+     * Get the items property: Array of items in ActionGroup.
+     * 
      * @return the items value.
      */
     @Generated
-    public List getItems() {
+    public List getItems() {
         return this.items;
     }
 
@@ -75,31 +75,32 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
     }
 
     /**
-     * Reads an instance of ActionSet from the JsonReader.
-     *
+     * Reads an instance of ActionGroup from the JsonReader.
+     * 
      * @param jsonReader The JsonReader being read.
-     * @return An instance of ActionSet if the JsonReader was pointing to an instance of it, or null if it was pointing
-     * to JSON null.
+     * @return An instance of ActionGroup if the JsonReader was pointing to an instance of it, or null if it was
+     * pointing to JSON null.
      * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
-     * @throws IOException If an error occurs while reading the ActionSet.
+     * @throws IOException If an error occurs while reading the ActionGroup.
      */
     @Generated
-    public static ActionSet fromJson(JsonReader jsonReader) throws IOException {
+    public static ActionGroup fromJson(JsonReader jsonReader) throws IOException {
         return jsonReader.readObject(reader -> {
             String title = null;
-            List items = null;
+            List items = null;
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
+
                 if ("title".equals(fieldName)) {
                     title = reader.getString();
                 } else if ("items".equals(fieldName)) {
-                    items = reader.readArray(reader1 -> ActionSetItem.fromJson(reader1));
+                    items = reader.readArray(reader1 -> ActionGroupItem.fromJson(reader1));
                 } else {
                     reader.skipChildren();
                 }
             }
-            return new ActionSet(title, items);
+            return new ActionGroup(title, items);
         });
     }
 }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSetContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroupContent.java
similarity index 59%
rename from sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSetContent.java
rename to sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroupContent.java
index 10b5daa66c340..68a01d6173aad 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSetContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroupContent.java
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
+
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -12,19 +13,18 @@
 import java.util.List;
 
 /**
- * The action content of type ActionSet.
+ * The action content of type ActionGroup.
  */
 @Immutable
-public final class ActionSetContent extends MessageContent {
-
+public final class ActionGroupContent extends MessageContent {
     /*
      * Kind of MessageContent.
      */
     @Generated
-    private MessageContentKind kind = MessageContentKind.ACTION_SET;
+    private MessageContentKind kind = MessageContentKind.GROUP;
 
     /*
-     * Title of the actionSet content.
+     * Title of the actionGroup content.
      */
     @Generated
     private final String title;
@@ -33,23 +33,23 @@ public final class ActionSetContent extends MessageContent {
      * Set or group of actions.
      */
     @Generated
-    private final List actionSet;
+    private final List groups;
 
     /**
-     * Creates an instance of ActionSetContent class.
-     *
+     * Creates an instance of ActionGroupContent class.
+     * 
      * @param title the title value to set.
-     * @param actionSet the actionSet value to set.
+     * @param groups the groups value to set.
      */
     @Generated
-    public ActionSetContent(String title, List actionSet) {
+    public ActionGroupContent(String title, List groups) {
         this.title = title;
-        this.actionSet = actionSet;
+        this.groups = groups;
     }
 
     /**
      * Get the kind property: Kind of MessageContent.
-     *
+     * 
      * @return the kind value.
      */
     @Generated
@@ -59,8 +59,8 @@ public MessageContentKind getKind() {
     }
 
     /**
-     * Get the title property: Title of the actionSet content.
-     *
+     * Get the title property: Title of the actionGroup content.
+     * 
      * @return the title value.
      */
     @Generated
@@ -69,13 +69,13 @@ public String getTitle() {
     }
 
     /**
-     * Get the actionSet property: Set or group of actions.
-     *
-     * @return the actionSet value.
+     * Get the groups property: Set or group of actions.
+     * 
+     * @return the groups value.
      */
     @Generated
-    public List getActionSet() {
-        return this.actionSet;
+    public List getGroups() {
+        return this.groups;
     }
 
     /**
@@ -86,42 +86,44 @@ public List getActionSet() {
     public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
         jsonWriter.writeStartObject();
         jsonWriter.writeStringField("title", this.title);
-        jsonWriter.writeArrayField("actionSet", this.actionSet, (writer, element) -> writer.writeJson(element));
+        jsonWriter.writeArrayField("groups", this.groups, (writer, element) -> writer.writeJson(element));
         jsonWriter.writeStringField("kind", this.kind == null ? null : this.kind.toString());
         return jsonWriter.writeEndObject();
     }
 
     /**
-     * Reads an instance of ActionSetContent from the JsonReader.
-     *
+     * Reads an instance of ActionGroupContent from the JsonReader.
+     * 
      * @param jsonReader The JsonReader being read.
-     * @return An instance of ActionSetContent if the JsonReader was pointing to an instance of it, or null if it was
+     * @return An instance of ActionGroupContent if the JsonReader was pointing to an instance of it, or null if it was
      * pointing to JSON null.
      * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
-     * @throws IOException If an error occurs while reading the ActionSetContent.
+     * @throws IOException If an error occurs while reading the ActionGroupContent.
      */
     @Generated
-    public static ActionSetContent fromJson(JsonReader jsonReader) throws IOException {
+    public static ActionGroupContent fromJson(JsonReader jsonReader) throws IOException {
         return jsonReader.readObject(reader -> {
             String title = null;
-            List actionSet = null;
-            MessageContentKind kind = MessageContentKind.ACTION_SET;
+            List groups = null;
+            MessageContentKind kind = MessageContentKind.GROUP;
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
+
                 if ("title".equals(fieldName)) {
                     title = reader.getString();
-                } else if ("actionSet".equals(fieldName)) {
-                    actionSet = reader.readArray(reader1 -> ActionSet.fromJson(reader1));
+                } else if ("groups".equals(fieldName)) {
+                    groups = reader.readArray(reader1 -> ActionGroup.fromJson(reader1));
                 } else if ("kind".equals(fieldName)) {
                     kind = MessageContentKind.fromString(reader.getString());
                 } else {
                     reader.skipChildren();
                 }
             }
-            ActionSetContent deserializedActionSetContent = new ActionSetContent(title, actionSet);
-            deserializedActionSetContent.kind = kind;
-            return deserializedActionSetContent;
+            ActionGroupContent deserializedActionGroupContent = new ActionGroupContent(title, groups);
+            deserializedActionGroupContent.kind = kind;
+
+            return deserializedActionGroupContent;
         });
     }
 }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSetItem.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroupItem.java
similarity index 82%
rename from sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSetItem.java
rename to sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroupItem.java
index 36ba3f1dbec0f..2aec2dcfdc2ea 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionSetItem.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroupItem.java
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
+
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -12,11 +13,10 @@
 import java.io.IOException;
 
 /**
- * The Action set item in the content.
+ * The Action group item in the content.
  */
 @Immutable
-public final class ActionSetItem implements JsonSerializable {
-
+public final class ActionGroupItem implements JsonSerializable {
     /*
      * Id of the Item.
      */
@@ -36,14 +36,14 @@ public final class ActionSetItem implements JsonSerializable {
     private final String description;
 
     /**
-     * Creates an instance of ActionSetItem class.
-     *
+     * Creates an instance of ActionGroupItem class.
+     * 
      * @param id the id value to set.
      * @param title the title value to set.
      * @param description the description value to set.
      */
     @Generated
-    public ActionSetItem(String id, String title, String description) {
+    public ActionGroupItem(String id, String title, String description) {
         this.id = id;
         this.title = title;
         this.description = description;
@@ -51,7 +51,7 @@ public ActionSetItem(String id, String title, String description) {
 
     /**
      * Get the id property: Id of the Item.
-     *
+     * 
      * @return the id value.
      */
     @Generated
@@ -61,7 +61,7 @@ public String getId() {
 
     /**
      * Get the title property: Title of the Item.
-     *
+     * 
      * @return the title value.
      */
     @Generated
@@ -71,7 +71,7 @@ public String getTitle() {
 
     /**
      * Get the description property: Description of the Item.
-     *
+     * 
      * @return the description value.
      */
     @Generated
@@ -93,16 +93,16 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
     }
 
     /**
-     * Reads an instance of ActionSetItem from the JsonReader.
-     *
+     * Reads an instance of ActionGroupItem from the JsonReader.
+     * 
      * @param jsonReader The JsonReader being read.
-     * @return An instance of ActionSetItem if the JsonReader was pointing to an instance of it, or null if it was
+     * @return An instance of ActionGroupItem if the JsonReader was pointing to an instance of it, or null if it was
      * pointing to JSON null.
      * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
-     * @throws IOException If an error occurs while reading the ActionSetItem.
+     * @throws IOException If an error occurs while reading the ActionGroupItem.
      */
     @Generated
-    public static ActionSetItem fromJson(JsonReader jsonReader) throws IOException {
+    public static ActionGroupItem fromJson(JsonReader jsonReader) throws IOException {
         return jsonReader.readObject(reader -> {
             String id = null;
             String title = null;
@@ -110,6 +110,7 @@ public static ActionSetItem fromJson(JsonReader jsonReader) throws IOException {
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
+
                 if ("id".equals(fieldName)) {
                     id = reader.getString();
                 } else if ("title".equals(fieldName)) {
@@ -120,7 +121,7 @@ public static ActionSetItem fromJson(JsonReader jsonReader) throws IOException {
                     reader.skipChildren();
                 }
             }
-            return new ActionSetItem(id, title, description);
+            return new ActionGroupItem(id, title, description);
         });
     }
 }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonContent.java
index a548f12070f86..8019ea3436cd2 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonContent.java
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
+
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -16,7 +17,6 @@
  */
 @Immutable
 public final class ButtonContent implements JsonSerializable {
-
     /*
      * Unique Id of the button content.
      */
@@ -31,7 +31,7 @@ public final class ButtonContent implements JsonSerializable {
 
     /**
      * Creates an instance of ButtonContent class.
-     *
+     * 
      * @param id the id value to set.
      * @param title the title value to set.
      */
@@ -43,7 +43,7 @@ public ButtonContent(String id, String title) {
 
     /**
      * Get the id property: Unique Id of the button content.
-     *
+     * 
      * @return the id value.
      */
     @Generated
@@ -53,7 +53,7 @@ public String getId() {
 
     /**
      * Get the title property: Title of the button content.
-     *
+     * 
      * @return the title value.
      */
     @Generated
@@ -75,7 +75,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of ButtonContent from the JsonReader.
-     *
+     * 
      * @param jsonReader The JsonReader being read.
      * @return An instance of ButtonContent if the JsonReader was pointing to an instance of it, or null if it was
      * pointing to JSON null.
@@ -90,6 +90,7 @@ public static ButtonContent fromJson(JsonReader jsonReader) throws IOException {
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
+
                 if ("id".equals(fieldName)) {
                     id = reader.getString();
                 } else if ("title".equals(fieldName)) {
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonSetContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonSetContent.java
index 90115e67dd868..845b108cf113a 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonSetContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonSetContent.java
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
+
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -16,7 +17,6 @@
  */
 @Immutable
 public final class ButtonSetContent extends MessageContent {
-
     /*
      * Kind of MessageContent.
      */
@@ -31,7 +31,7 @@ public final class ButtonSetContent extends MessageContent {
 
     /**
      * Creates an instance of ButtonSetContent class.
-     *
+     * 
      * @param buttons the buttons value to set.
      */
     @Generated
@@ -41,7 +41,7 @@ public ButtonSetContent(List buttons) {
 
     /**
      * Get the kind property: Kind of MessageContent.
-     *
+     * 
      * @return the kind value.
      */
     @Generated
@@ -52,7 +52,7 @@ public MessageContentKind getKind() {
 
     /**
      * Get the buttons property: Unique Id of the button content.
-     *
+     * 
      * @return the buttons value.
      */
     @Generated
@@ -74,7 +74,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of ButtonSetContent from the JsonReader.
-     *
+     * 
      * @param jsonReader The JsonReader being read.
      * @return An instance of ButtonSetContent if the JsonReader was pointing to an instance of it, or null if it was
      * pointing to JSON null.
@@ -89,6 +89,7 @@ public static ButtonSetContent fromJson(JsonReader jsonReader) throws IOExceptio
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
+
                 if ("buttons".equals(fieldName)) {
                     buttons = reader.readArray(reader1 -> ButtonContent.fromJson(reader1));
                 } else if ("kind".equals(fieldName)) {
@@ -99,6 +100,7 @@ public static ButtonSetContent fromJson(JsonReader jsonReader) throws IOExceptio
             }
             ButtonSetContent deserializedButtonSetContent = new ButtonSetContent(buttons);
             deserializedButtonSetContent.kind = kind;
+
             return deserializedButtonSetContent;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/DocumentMessageContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/DocumentMessageContent.java
index 641c382c88ded..3bd4c4ecc27a8 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/DocumentMessageContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/DocumentMessageContent.java
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
+
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -15,7 +16,6 @@
  */
 @Immutable
 public final class DocumentMessageContent extends MessageContent {
-
     /*
      * Kind of MessageContent.
      */
@@ -26,21 +26,21 @@ public final class DocumentMessageContent extends MessageContent {
      * MediaUri of the media content.
      */
     @Generated
-    private final String mediaUri;
+    private final String mediaUrl;
 
     /**
      * Creates an instance of DocumentMessageContent class.
-     *
-     * @param mediaUri the mediaUri value to set.
+     * 
+     * @param mediaUrl the mediaUrl value to set.
      */
     @Generated
-    public DocumentMessageContent(String mediaUri) {
-        this.mediaUri = mediaUri;
+    public DocumentMessageContent(String mediaUrl) {
+        this.mediaUrl = mediaUrl;
     }
 
     /**
      * Get the kind property: Kind of MessageContent.
-     *
+     * 
      * @return the kind value.
      */
     @Generated
@@ -50,13 +50,13 @@ public MessageContentKind getKind() {
     }
 
     /**
-     * Get the mediaUri property: MediaUri of the media content.
-     *
-     * @return the mediaUri value.
+     * Get the mediaUrl property: MediaUri of the media content.
+     * 
+     * @return the mediaUrl value.
      */
     @Generated
-    public String getMediaUri() {
-        return this.mediaUri;
+    public String getMediaUrl() {
+        return this.mediaUrl;
     }
 
     /**
@@ -66,14 +66,14 @@ public String getMediaUri() {
     @Override
     public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
         jsonWriter.writeStartObject();
-        jsonWriter.writeStringField("mediaUri", this.mediaUri);
+        jsonWriter.writeStringField("mediaUri", this.mediaUrl);
         jsonWriter.writeStringField("kind", this.kind == null ? null : this.kind.toString());
         return jsonWriter.writeEndObject();
     }
 
     /**
      * Reads an instance of DocumentMessageContent from the JsonReader.
-     *
+     * 
      * @param jsonReader The JsonReader being read.
      * @return An instance of DocumentMessageContent if the JsonReader was pointing to an instance of it, or null if it
      * was pointing to JSON null.
@@ -83,21 +83,23 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
     @Generated
     public static DocumentMessageContent fromJson(JsonReader jsonReader) throws IOException {
         return jsonReader.readObject(reader -> {
-            String mediaUri = null;
+            String mediaUrl = null;
             MessageContentKind kind = MessageContentKind.DOCUMENT;
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
+
                 if ("mediaUri".equals(fieldName)) {
-                    mediaUri = reader.getString();
+                    mediaUrl = reader.getString();
                 } else if ("kind".equals(fieldName)) {
                     kind = MessageContentKind.fromString(reader.getString());
                 } else {
                     reader.skipChildren();
                 }
             }
-            DocumentMessageContent deserializedDocumentMessageContent = new DocumentMessageContent(mediaUri);
+            DocumentMessageContent deserializedDocumentMessageContent = new DocumentMessageContent(mediaUrl);
             deserializedDocumentMessageContent.kind = kind;
+
             return deserializedDocumentMessageContent;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ImageMessageContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ImageMessageContent.java
index b6374fe8ea472..69da6055df27a 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ImageMessageContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ImageMessageContent.java
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
+
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -15,7 +16,6 @@
  */
 @Immutable
 public final class ImageMessageContent extends MessageContent {
-
     /*
      * Kind of MessageContent.
      */
@@ -26,21 +26,21 @@ public final class ImageMessageContent extends MessageContent {
      * MediaUri of the media content.
      */
     @Generated
-    private final String mediaUri;
+    private final String mediaUrl;
 
     /**
      * Creates an instance of ImageMessageContent class.
-     *
-     * @param mediaUri the mediaUri value to set.
+     * 
+     * @param mediaUrl the mediaUrl value to set.
      */
     @Generated
-    public ImageMessageContent(String mediaUri) {
-        this.mediaUri = mediaUri;
+    public ImageMessageContent(String mediaUrl) {
+        this.mediaUrl = mediaUrl;
     }
 
     /**
      * Get the kind property: Kind of MessageContent.
-     *
+     * 
      * @return the kind value.
      */
     @Generated
@@ -50,13 +50,13 @@ public MessageContentKind getKind() {
     }
 
     /**
-     * Get the mediaUri property: MediaUri of the media content.
-     *
-     * @return the mediaUri value.
+     * Get the mediaUrl property: MediaUri of the media content.
+     * 
+     * @return the mediaUrl value.
      */
     @Generated
-    public String getMediaUri() {
-        return this.mediaUri;
+    public String getMediaUrl() {
+        return this.mediaUrl;
     }
 
     /**
@@ -66,14 +66,14 @@ public String getMediaUri() {
     @Override
     public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
         jsonWriter.writeStartObject();
-        jsonWriter.writeStringField("mediaUri", this.mediaUri);
+        jsonWriter.writeStringField("mediaUri", this.mediaUrl);
         jsonWriter.writeStringField("kind", this.kind == null ? null : this.kind.toString());
         return jsonWriter.writeEndObject();
     }
 
     /**
      * Reads an instance of ImageMessageContent from the JsonReader.
-     *
+     * 
      * @param jsonReader The JsonReader being read.
      * @return An instance of ImageMessageContent if the JsonReader was pointing to an instance of it, or null if it was
      * pointing to JSON null.
@@ -83,21 +83,23 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
     @Generated
     public static ImageMessageContent fromJson(JsonReader jsonReader) throws IOException {
         return jsonReader.readObject(reader -> {
-            String mediaUri = null;
+            String mediaUrl = null;
             MessageContentKind kind = MessageContentKind.IMAGE;
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
+
                 if ("mediaUri".equals(fieldName)) {
-                    mediaUri = reader.getString();
+                    mediaUrl = reader.getString();
                 } else if ("kind".equals(fieldName)) {
                     kind = MessageContentKind.fromString(reader.getString());
                 } else {
                     reader.skipChildren();
                 }
             }
-            ImageMessageContent deserializedImageMessageContent = new ImageMessageContent(mediaUri);
+            ImageMessageContent deserializedImageMessageContent = new ImageMessageContent(mediaUrl);
             deserializedImageMessageContent.kind = kind;
+
             return deserializedImageMessageContent;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveMessage.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveMessage.java
index fc660274a6de2..1a66a31647f13 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveMessage.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveMessage.java
@@ -39,18 +39,18 @@ public final class InteractiveMessage implements JsonSerializable {
             TextMessageContent body = null;
-            ActionBindings actionBindings = null;
+            ActionBindings action = null;
             MessageContent headerProperty = null;
             TextMessageContent footer = null;
             while (reader.nextToken() != JsonToken.END_OBJECT) {
@@ -131,8 +131,8 @@ public static InteractiveMessage fromJson(JsonReader jsonReader) throws IOExcept
                 reader.nextToken();
                 if ("body".equals(fieldName)) {
                     body = TextMessageContent.fromJson(reader);
-                } else if ("actionBindings".equals(fieldName)) {
-                    actionBindings = ActionBindings.fromJson(reader);
+                } else if ("action".equals(fieldName)) {
+                    action = ActionBindings.fromJson(reader);
                 } else if ("header".equals(fieldName)) {
                     headerProperty = MessageContent.fromJson(reader);
                 } else if ("footer".equals(fieldName)) {
@@ -141,7 +141,7 @@ public static InteractiveMessage fromJson(JsonReader jsonReader) throws IOExcept
                     reader.skipChildren();
                 }
             }
-            InteractiveMessage deserializedInteractiveMessage = new InteractiveMessage(body, actionBindings);
+            InteractiveMessage deserializedInteractiveMessage = new InteractiveMessage(body, action);
             deserializedInteractiveMessage.headerProperty = headerProperty;
             deserializedInteractiveMessage.footer = footer;
             return deserializedInteractiveMessage;
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveNotificationContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveNotificationContent.java
index 728bc397b88b3..cfdcdba2ee766 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveNotificationContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveNotificationContent.java
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
+
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -16,7 +17,6 @@
  */
 @Immutable
 public final class InteractiveNotificationContent extends NotificationContent {
-
     /*
      * The type discriminator describing a notification type.
      */
@@ -31,7 +31,7 @@ public final class InteractiveNotificationContent extends NotificationContent {
 
     /**
      * Creates an instance of InteractiveNotificationContent class.
-     *
+     * 
      * @param channelRegistrationId the channelRegistrationId value to set.
      * @param to the to value to set.
      * @param interactiveMessage the interactiveMessage value to set.
@@ -45,7 +45,7 @@ public InteractiveNotificationContent(String channelRegistrationId, List
 
     /**
      * Get the kind property: The type discriminator describing a notification type.
-     *
+     * 
      * @return the kind value.
      */
     @Generated
@@ -56,7 +56,7 @@ public CommunicationMessageKind getKind() {
 
     /**
      * Get the interactiveMessage property: The interactive message content.
-     *
+     * 
      * @return the interactiveMessage value.
      */
     @Generated
@@ -80,7 +80,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of InteractiveNotificationContent from the JsonReader.
-     *
+     * 
      * @param jsonReader The JsonReader being read.
      * @return An instance of InteractiveNotificationContent if the JsonReader was pointing to an instance of it, or
      * null if it was pointing to JSON null.
@@ -97,6 +97,7 @@ public static InteractiveNotificationContent fromJson(JsonReader jsonReader) thr
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
+
                 if ("channelRegistrationId".equals(fieldName)) {
                     channelRegistrationId = reader.getString();
                 } else if ("to".equals(fieldName)) {
@@ -112,6 +113,7 @@ public static InteractiveNotificationContent fromJson(JsonReader jsonReader) thr
             InteractiveNotificationContent deserializedInteractiveNotificationContent
                 = new InteractiveNotificationContent(channelRegistrationId, to, interactiveMessage);
             deserializedInteractiveNotificationContent.kind = kind;
+
             return deserializedInteractiveNotificationContent;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/UrlContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/LinkContent.java
similarity index 81%
rename from sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/UrlContent.java
rename to sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/LinkContent.java
index 3243b8427eb86..c45cc00d06395 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/UrlContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/LinkContent.java
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
+
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -14,8 +15,7 @@
  * The message content of type Url information.
  */
 @Immutable
-public final class UrlContent extends MessageContent {
-
+public final class LinkContent extends MessageContent {
     /*
      * Kind of MessageContent.
      */
@@ -35,20 +35,20 @@ public final class UrlContent extends MessageContent {
     private final String url;
 
     /**
-     * Creates an instance of UrlContent class.
-     *
+     * Creates an instance of LinkContent class.
+     * 
      * @param title the title value to set.
      * @param url the url value to set.
      */
     @Generated
-    public UrlContent(String title, String url) {
+    public LinkContent(String title, String url) {
         this.title = title;
         this.url = url;
     }
 
     /**
      * Get the kind property: Kind of MessageContent.
-     *
+     * 
      * @return the kind value.
      */
     @Generated
@@ -59,7 +59,7 @@ public MessageContentKind getKind() {
 
     /**
      * Get the title property: Title of the url content.
-     *
+     * 
      * @return the title value.
      */
     @Generated
@@ -69,7 +69,7 @@ public String getTitle() {
 
     /**
      * Get the url property: The url in the content.
-     *
+     * 
      * @return the url value.
      */
     @Generated
@@ -91,16 +91,16 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
     }
 
     /**
-     * Reads an instance of UrlContent from the JsonReader.
-     *
+     * Reads an instance of LinkContent from the JsonReader.
+     * 
      * @param jsonReader The JsonReader being read.
-     * @return An instance of UrlContent if the JsonReader was pointing to an instance of it, or null if it was pointing
-     * to JSON null.
+     * @return An instance of LinkContent if the JsonReader was pointing to an instance of it, or null if it was
+     * pointing to JSON null.
      * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
-     * @throws IOException If an error occurs while reading the UrlContent.
+     * @throws IOException If an error occurs while reading the LinkContent.
      */
     @Generated
-    public static UrlContent fromJson(JsonReader jsonReader) throws IOException {
+    public static LinkContent fromJson(JsonReader jsonReader) throws IOException {
         return jsonReader.readObject(reader -> {
             String title = null;
             String url = null;
@@ -108,6 +108,7 @@ public static UrlContent fromJson(JsonReader jsonReader) throws IOException {
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
+
                 if ("title".equals(fieldName)) {
                     title = reader.getString();
                 } else if ("url".equals(fieldName)) {
@@ -118,9 +119,10 @@ public static UrlContent fromJson(JsonReader jsonReader) throws IOException {
                     reader.skipChildren();
                 }
             }
-            UrlContent deserializedUrlContent = new UrlContent(title, url);
-            deserializedUrlContent.kind = kind;
-            return deserializedUrlContent;
+            LinkContent deserializedLinkContent = new LinkContent(title, url);
+            deserializedLinkContent.kind = kind;
+
+            return deserializedLinkContent;
         });
     }
 }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageActionBindingKind.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageActionBindingKind.java
index 343f058f887ad..8e6c3dbb2c6f3 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageActionBindingKind.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageActionBindingKind.java
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
+
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -11,7 +12,6 @@
  * The Kind of interactive message channel action binding like WhatsAppListAction.
  */
 public final class MessageActionBindingKind extends ExpandableStringEnum {
-
     /**
      * The WhatsApp List action binding kind.
      */
@@ -32,7 +32,7 @@ public final class MessageActionBindingKind extends ExpandableStringEnum {
-
     /**
      * The text content type.
      */
@@ -40,7 +40,7 @@ public final class MessageContentKind extends ExpandableStringEnum to
 
     /**
      * Get the kind property: The type discriminator describing a notification type.
-     *
+     * 
      * @return the kind value.
      */
     @Generated
@@ -63,7 +63,7 @@ public CommunicationMessageKind getKind() {
 
     /**
      * Get the emoji property: emoji content like \uD83D\uDE00.
-     *
+     * 
      * @return the emoji value.
      */
     @Generated
@@ -73,7 +73,7 @@ public String getEmoji() {
 
     /**
      * Get the messageId property: ID of the previous message you want to reply to.
-     *
+     * 
      * @return the messageId value.
      */
     @Generated
@@ -98,7 +98,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of ReactionNotificationContent from the JsonReader.
-     *
+     * 
      * @param jsonReader The JsonReader being read.
      * @return An instance of ReactionNotificationContent if the JsonReader was pointing to an instance of it, or null
      * if it was pointing to JSON null.
@@ -116,6 +116,7 @@ public static ReactionNotificationContent fromJson(JsonReader jsonReader) throws
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
+
                 if ("channelRegistrationId".equals(fieldName)) {
                     channelRegistrationId = reader.getString();
                 } else if ("to".equals(fieldName)) {
@@ -133,6 +134,7 @@ public static ReactionNotificationContent fromJson(JsonReader jsonReader) throws
             ReactionNotificationContent deserializedReactionNotificationContent
                 = new ReactionNotificationContent(channelRegistrationId, to, emoji, messageId);
             deserializedReactionNotificationContent.kind = kind;
+
             return deserializedReactionNotificationContent;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/StickerNotificationContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/StickerNotificationContent.java
index d404b4eb3fb71..d0946b81131fb 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/StickerNotificationContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/StickerNotificationContent.java
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
+
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -16,7 +17,6 @@
  */
 @Immutable
 public final class StickerNotificationContent extends NotificationContent {
-
     /*
      * The type discriminator describing a notification type.
      */
@@ -31,7 +31,7 @@ public final class StickerNotificationContent extends NotificationContent {
 
     /**
      * Creates an instance of StickerNotificationContent class.
-     *
+     * 
      * @param channelRegistrationId the channelRegistrationId value to set.
      * @param to the to value to set.
      * @param mediaUrl the mediaUrl value to set.
@@ -44,7 +44,7 @@ public StickerNotificationContent(String channelRegistrationId, List to,
 
     /**
      * Get the kind property: The type discriminator describing a notification type.
-     *
+     * 
      * @return the kind value.
      */
     @Generated
@@ -56,7 +56,7 @@ public CommunicationMessageKind getKind() {
     /**
      * Get the mediaUrl property: A media url for the file. Required if the type is one of the supported media types,
      * e.g. image.
-     *
+     * 
      * @return the mediaUrl value.
      */
     @Generated
@@ -80,7 +80,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of StickerNotificationContent from the JsonReader.
-     *
+     * 
      * @param jsonReader The JsonReader being read.
      * @return An instance of StickerNotificationContent if the JsonReader was pointing to an instance of it, or null if
      * it was pointing to JSON null.
@@ -97,6 +97,7 @@ public static StickerNotificationContent fromJson(JsonReader jsonReader) throws
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
+
                 if ("channelRegistrationId".equals(fieldName)) {
                     channelRegistrationId = reader.getString();
                 } else if ("to".equals(fieldName)) {
@@ -112,6 +113,7 @@ public static StickerNotificationContent fromJson(JsonReader jsonReader) throws
             StickerNotificationContent deserializedStickerNotificationContent
                 = new StickerNotificationContent(channelRegistrationId, to, mediaUrl);
             deserializedStickerNotificationContent.kind = kind;
+
             return deserializedStickerNotificationContent;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/TextMessageContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/TextMessageContent.java
index 31dbc6fc15a7d..11723d4c6046e 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/TextMessageContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/TextMessageContent.java
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
+
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -15,7 +16,6 @@
  */
 @Immutable
 public final class TextMessageContent extends MessageContent {
-
     /*
      * Kind of MessageContent.
      */
@@ -30,7 +30,7 @@ public final class TextMessageContent extends MessageContent {
 
     /**
      * Creates an instance of TextMessageContent class.
-     *
+     * 
      * @param text the text value to set.
      */
     @Generated
@@ -40,7 +40,7 @@ public TextMessageContent(String text) {
 
     /**
      * Get the kind property: Kind of MessageContent.
-     *
+     * 
      * @return the kind value.
      */
     @Generated
@@ -51,7 +51,7 @@ public MessageContentKind getKind() {
 
     /**
      * Get the text property: The text value.
-     *
+     * 
      * @return the text value.
      */
     @Generated
@@ -73,7 +73,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of TextMessageContent from the JsonReader.
-     *
+     * 
      * @param jsonReader The JsonReader being read.
      * @return An instance of TextMessageContent if the JsonReader was pointing to an instance of it, or null if it was
      * pointing to JSON null.
@@ -88,6 +88,7 @@ public static TextMessageContent fromJson(JsonReader jsonReader) throws IOExcept
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
+
                 if ("text".equals(fieldName)) {
                     text = reader.getString();
                 } else if ("kind".equals(fieldName)) {
@@ -98,6 +99,7 @@ public static TextMessageContent fromJson(JsonReader jsonReader) throws IOExcept
             }
             TextMessageContent deserializedTextMessageContent = new TextMessageContent(text);
             deserializedTextMessageContent.kind = kind;
+
             return deserializedTextMessageContent;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/VideoMessageContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/VideoMessageContent.java
index cc5e8c7f88350..aa2d9a628ab29 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/VideoMessageContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/VideoMessageContent.java
@@ -1,6 +1,7 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
+
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -15,7 +16,6 @@
  */
 @Immutable
 public final class VideoMessageContent extends MessageContent {
-
     /*
      * Kind of MessageContent.
      */
@@ -26,21 +26,21 @@ public final class VideoMessageContent extends MessageContent {
      * MediaUri of the media content.
      */
     @Generated
-    private final String mediaUri;
+    private final String mediaUrl;
 
     /**
      * Creates an instance of VideoMessageContent class.
-     *
-     * @param mediaUri the mediaUri value to set.
+     * 
+     * @param mediaUrl the mediaUrl value to set.
      */
     @Generated
-    public VideoMessageContent(String mediaUri) {
-        this.mediaUri = mediaUri;
+    public VideoMessageContent(String mediaUrl) {
+        this.mediaUrl = mediaUrl;
     }
 
     /**
      * Get the kind property: Kind of MessageContent.
-     *
+     * 
      * @return the kind value.
      */
     @Generated
@@ -50,13 +50,13 @@ public MessageContentKind getKind() {
     }
 
     /**
-     * Get the mediaUri property: MediaUri of the media content.
-     *
-     * @return the mediaUri value.
+     * Get the mediaUrl property: MediaUri of the media content.
+     * 
+     * @return the mediaUrl value.
      */
     @Generated
-    public String getMediaUri() {
-        return this.mediaUri;
+    public String getMediaUrl() {
+        return this.mediaUrl;
     }
 
     /**
@@ -66,14 +66,14 @@ public String getMediaUri() {
     @Override
     public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
         jsonWriter.writeStartObject();
-        jsonWriter.writeStringField("mediaUri", this.mediaUri);
+        jsonWriter.writeStringField("mediaUri", this.mediaUrl);
         jsonWriter.writeStringField("kind", this.kind == null ? null : this.kind.toString());
         return jsonWriter.writeEndObject();
     }
 
     /**
      * Reads an instance of VideoMessageContent from the JsonReader.
-     *
+     * 
      * @param jsonReader The JsonReader being read.
      * @return An instance of VideoMessageContent if the JsonReader was pointing to an instance of it, or null if it was
      * pointing to JSON null.
@@ -83,21 +83,23 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
     @Generated
     public static VideoMessageContent fromJson(JsonReader jsonReader) throws IOException {
         return jsonReader.readObject(reader -> {
-            String mediaUri = null;
+            String mediaUrl = null;
             MessageContentKind kind = MessageContentKind.VIDEO;
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
+
                 if ("mediaUri".equals(fieldName)) {
-                    mediaUri = reader.getString();
+                    mediaUrl = reader.getString();
                 } else if ("kind".equals(fieldName)) {
                     kind = MessageContentKind.fromString(reader.getString());
                 } else {
                     reader.skipChildren();
                 }
             }
-            VideoMessageContent deserializedVideoMessageContent = new VideoMessageContent(mediaUri);
+            VideoMessageContent deserializedVideoMessageContent = new VideoMessageContent(mediaUrl);
             deserializedVideoMessageContent.kind = kind;
+
             return deserializedVideoMessageContent;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppButtonActionBindings.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppButtonActionBindings.java
similarity index 57%
rename from sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppButtonActionBindings.java
rename to sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppButtonActionBindings.java
index 99f83d611f4a1..b17410cf259e6 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppButtonActionBindings.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppButtonActionBindings.java
@@ -1,8 +1,12 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
-package com.azure.communication.messages.models;
 
+package com.azure.communication.messages.models.channels;
+
+import com.azure.communication.messages.models.ActionBindings;
+import com.azure.communication.messages.models.ButtonSetContent;
+import com.azure.communication.messages.models.MessageActionBindingKind;
 import com.azure.core.annotation.Generated;
 import com.azure.core.annotation.Immutable;
 import com.azure.json.JsonReader;
@@ -15,48 +19,47 @@
  */
 @Immutable
 public final class WhatsAppButtonActionBindings extends ActionBindings {
-
     /*
      * Kind of the MessageActionBinding.
      */
     @Generated
-    private MessageActionBindingKind actionBindingKind = MessageActionBindingKind.WHATS_APP_BUTTON_ACTION;
+    private MessageActionBindingKind kind = MessageActionBindingKind.WHATS_APP_BUTTON_ACTION;
 
     /*
      * Action content of Interactive message.
      */
     @Generated
-    private final ButtonSetContent action;
+    private final ButtonSetContent content;
 
     /**
      * Creates an instance of WhatsAppButtonActionBindings class.
-     *
-     * @param action the action value to set.
+     * 
+     * @param content the content value to set.
      */
     @Generated
-    public WhatsAppButtonActionBindings(ButtonSetContent action) {
-        this.action = action;
+    public WhatsAppButtonActionBindings(ButtonSetContent content) {
+        this.content = content;
     }
 
     /**
-     * Get the actionBindingKind property: Kind of the MessageActionBinding.
-     *
-     * @return the actionBindingKind value.
+     * Get the kind property: Kind of the MessageActionBinding.
+     * 
+     * @return the kind value.
      */
     @Generated
     @Override
-    public MessageActionBindingKind getActionBindingKind() {
-        return this.actionBindingKind;
+    public MessageActionBindingKind getKind() {
+        return this.kind;
     }
 
     /**
-     * Get the action property: Action content of Interactive message.
-     *
-     * @return the action value.
+     * Get the content property: Action content of Interactive message.
+     * 
+     * @return the content value.
      */
     @Generated
-    public ButtonSetContent getAction() {
-        return this.action;
+    public ButtonSetContent getContent() {
+        return this.content;
     }
 
     /**
@@ -66,15 +69,14 @@ public ButtonSetContent getAction() {
     @Override
     public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
         jsonWriter.writeStartObject();
-        jsonWriter.writeJsonField("action", this.action);
-        jsonWriter.writeStringField("actionBindingKind",
-            this.actionBindingKind == null ? null : this.actionBindingKind.toString());
+        jsonWriter.writeJsonField("content", this.content);
+        jsonWriter.writeStringField("kind", this.kind == null ? null : this.kind.toString());
         return jsonWriter.writeEndObject();
     }
 
     /**
      * Reads an instance of WhatsAppButtonActionBindings from the JsonReader.
-     *
+     * 
      * @param jsonReader The JsonReader being read.
      * @return An instance of WhatsAppButtonActionBindings if the JsonReader was pointing to an instance of it, or null
      * if it was pointing to JSON null.
@@ -84,22 +86,24 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
     @Generated
     public static WhatsAppButtonActionBindings fromJson(JsonReader jsonReader) throws IOException {
         return jsonReader.readObject(reader -> {
-            ButtonSetContent action = null;
-            MessageActionBindingKind actionBindingKind = MessageActionBindingKind.WHATS_APP_BUTTON_ACTION;
+            ButtonSetContent content = null;
+            MessageActionBindingKind kind = MessageActionBindingKind.WHATS_APP_BUTTON_ACTION;
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
-                if ("action".equals(fieldName)) {
-                    action = ButtonSetContent.fromJson(reader);
-                } else if ("actionBindingKind".equals(fieldName)) {
-                    actionBindingKind = MessageActionBindingKind.fromString(reader.getString());
+
+                if ("content".equals(fieldName)) {
+                    content = ButtonSetContent.fromJson(reader);
+                } else if ("kind".equals(fieldName)) {
+                    kind = MessageActionBindingKind.fromString(reader.getString());
                 } else {
                     reader.skipChildren();
                 }
             }
             WhatsAppButtonActionBindings deserializedWhatsAppButtonActionBindings
-                = new WhatsAppButtonActionBindings(action);
-            deserializedWhatsAppButtonActionBindings.actionBindingKind = actionBindingKind;
+                = new WhatsAppButtonActionBindings(content);
+            deserializedWhatsAppButtonActionBindings.kind = kind;
+
             return deserializedWhatsAppButtonActionBindings;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppListActionBindings.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppListActionBindings.java
similarity index 57%
rename from sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppListActionBindings.java
rename to sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppListActionBindings.java
index f3086fa867f27..051d154a5f7f2 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppListActionBindings.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppListActionBindings.java
@@ -1,8 +1,12 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
-package com.azure.communication.messages.models;
 
+package com.azure.communication.messages.models.channels;
+
+import com.azure.communication.messages.models.ActionBindings;
+import com.azure.communication.messages.models.ActionGroupContent;
+import com.azure.communication.messages.models.MessageActionBindingKind;
 import com.azure.core.annotation.Generated;
 import com.azure.core.annotation.Immutable;
 import com.azure.json.JsonReader;
@@ -15,48 +19,47 @@
  */
 @Immutable
 public final class WhatsAppListActionBindings extends ActionBindings {
-
     /*
      * Kind of the MessageActionBinding.
      */
     @Generated
-    private MessageActionBindingKind actionBindingKind = MessageActionBindingKind.WHATS_APP_LIST_ACTION;
+    private MessageActionBindingKind kind = MessageActionBindingKind.WHATS_APP_LIST_ACTION;
 
     /*
      * Action content of Interactive message.
      */
     @Generated
-    private final ActionSetContent action;
+    private final ActionGroupContent content;
 
     /**
      * Creates an instance of WhatsAppListActionBindings class.
-     *
-     * @param action the action value to set.
+     * 
+     * @param content the content value to set.
      */
     @Generated
-    public WhatsAppListActionBindings(ActionSetContent action) {
-        this.action = action;
+    public WhatsAppListActionBindings(ActionGroupContent content) {
+        this.content = content;
     }
 
     /**
-     * Get the actionBindingKind property: Kind of the MessageActionBinding.
-     *
-     * @return the actionBindingKind value.
+     * Get the kind property: Kind of the MessageActionBinding.
+     * 
+     * @return the kind value.
      */
     @Generated
     @Override
-    public MessageActionBindingKind getActionBindingKind() {
-        return this.actionBindingKind;
+    public MessageActionBindingKind getKind() {
+        return this.kind;
     }
 
     /**
-     * Get the action property: Action content of Interactive message.
-     *
-     * @return the action value.
+     * Get the content property: Action content of Interactive message.
+     * 
+     * @return the content value.
      */
     @Generated
-    public ActionSetContent getAction() {
-        return this.action;
+    public ActionGroupContent getContent() {
+        return this.content;
     }
 
     /**
@@ -66,15 +69,14 @@ public ActionSetContent getAction() {
     @Override
     public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
         jsonWriter.writeStartObject();
-        jsonWriter.writeJsonField("action", this.action);
-        jsonWriter.writeStringField("actionBindingKind",
-            this.actionBindingKind == null ? null : this.actionBindingKind.toString());
+        jsonWriter.writeJsonField("content", this.content);
+        jsonWriter.writeStringField("kind", this.kind == null ? null : this.kind.toString());
         return jsonWriter.writeEndObject();
     }
 
     /**
      * Reads an instance of WhatsAppListActionBindings from the JsonReader.
-     *
+     * 
      * @param jsonReader The JsonReader being read.
      * @return An instance of WhatsAppListActionBindings if the JsonReader was pointing to an instance of it, or null if
      * it was pointing to JSON null.
@@ -84,21 +86,23 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
     @Generated
     public static WhatsAppListActionBindings fromJson(JsonReader jsonReader) throws IOException {
         return jsonReader.readObject(reader -> {
-            ActionSetContent action = null;
-            MessageActionBindingKind actionBindingKind = MessageActionBindingKind.WHATS_APP_LIST_ACTION;
+            ActionGroupContent content = null;
+            MessageActionBindingKind kind = MessageActionBindingKind.WHATS_APP_LIST_ACTION;
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
-                if ("action".equals(fieldName)) {
-                    action = ActionSetContent.fromJson(reader);
-                } else if ("actionBindingKind".equals(fieldName)) {
-                    actionBindingKind = MessageActionBindingKind.fromString(reader.getString());
+
+                if ("content".equals(fieldName)) {
+                    content = ActionGroupContent.fromJson(reader);
+                } else if ("kind".equals(fieldName)) {
+                    kind = MessageActionBindingKind.fromString(reader.getString());
                 } else {
                     reader.skipChildren();
                 }
             }
-            WhatsAppListActionBindings deserializedWhatsAppListActionBindings = new WhatsAppListActionBindings(action);
-            deserializedWhatsAppListActionBindings.actionBindingKind = actionBindingKind;
+            WhatsAppListActionBindings deserializedWhatsAppListActionBindings = new WhatsAppListActionBindings(content);
+            deserializedWhatsAppListActionBindings.kind = kind;
+
             return deserializedWhatsAppListActionBindings;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppUrlActionBindings.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppUrlActionBindings.java
similarity index 58%
rename from sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppUrlActionBindings.java
rename to sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppUrlActionBindings.java
index b01e2da34a7e9..46513caa24af8 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/WhatsAppUrlActionBindings.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppUrlActionBindings.java
@@ -1,8 +1,12 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
-package com.azure.communication.messages.models;
 
+package com.azure.communication.messages.models.channels;
+
+import com.azure.communication.messages.models.ActionBindings;
+import com.azure.communication.messages.models.LinkContent;
+import com.azure.communication.messages.models.MessageActionBindingKind;
 import com.azure.core.annotation.Generated;
 import com.azure.core.annotation.Immutable;
 import com.azure.json.JsonReader;
@@ -15,48 +19,47 @@
  */
 @Immutable
 public final class WhatsAppUrlActionBindings extends ActionBindings {
-
     /*
      * Kind of the MessageActionBinding.
      */
     @Generated
-    private MessageActionBindingKind actionBindingKind = MessageActionBindingKind.WHATS_APP_URL_ACTION;
+    private MessageActionBindingKind kind = MessageActionBindingKind.WHATS_APP_URL_ACTION;
 
     /*
      * Action content of Interactive message.
      */
     @Generated
-    private final UrlContent action;
+    private final LinkContent content;
 
     /**
      * Creates an instance of WhatsAppUrlActionBindings class.
-     *
-     * @param action the action value to set.
+     * 
+     * @param content the content value to set.
      */
     @Generated
-    public WhatsAppUrlActionBindings(UrlContent action) {
-        this.action = action;
+    public WhatsAppUrlActionBindings(LinkContent content) {
+        this.content = content;
     }
 
     /**
-     * Get the actionBindingKind property: Kind of the MessageActionBinding.
-     *
-     * @return the actionBindingKind value.
+     * Get the kind property: Kind of the MessageActionBinding.
+     * 
+     * @return the kind value.
      */
     @Generated
     @Override
-    public MessageActionBindingKind getActionBindingKind() {
-        return this.actionBindingKind;
+    public MessageActionBindingKind getKind() {
+        return this.kind;
     }
 
     /**
-     * Get the action property: Action content of Interactive message.
-     *
-     * @return the action value.
+     * Get the content property: Action content of Interactive message.
+     * 
+     * @return the content value.
      */
     @Generated
-    public UrlContent getAction() {
-        return this.action;
+    public LinkContent getContent() {
+        return this.content;
     }
 
     /**
@@ -66,15 +69,14 @@ public UrlContent getAction() {
     @Override
     public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
         jsonWriter.writeStartObject();
-        jsonWriter.writeJsonField("action", this.action);
-        jsonWriter.writeStringField("actionBindingKind",
-            this.actionBindingKind == null ? null : this.actionBindingKind.toString());
+        jsonWriter.writeJsonField("content", this.content);
+        jsonWriter.writeStringField("kind", this.kind == null ? null : this.kind.toString());
         return jsonWriter.writeEndObject();
     }
 
     /**
      * Reads an instance of WhatsAppUrlActionBindings from the JsonReader.
-     *
+     * 
      * @param jsonReader The JsonReader being read.
      * @return An instance of WhatsAppUrlActionBindings if the JsonReader was pointing to an instance of it, or null if
      * it was pointing to JSON null.
@@ -84,21 +86,23 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
     @Generated
     public static WhatsAppUrlActionBindings fromJson(JsonReader jsonReader) throws IOException {
         return jsonReader.readObject(reader -> {
-            UrlContent action = null;
-            MessageActionBindingKind actionBindingKind = MessageActionBindingKind.WHATS_APP_URL_ACTION;
+            LinkContent content = null;
+            MessageActionBindingKind kind = MessageActionBindingKind.WHATS_APP_URL_ACTION;
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
-                if ("action".equals(fieldName)) {
-                    action = UrlContent.fromJson(reader);
-                } else if ("actionBindingKind".equals(fieldName)) {
-                    actionBindingKind = MessageActionBindingKind.fromString(reader.getString());
+
+                if ("content".equals(fieldName)) {
+                    content = LinkContent.fromJson(reader);
+                } else if ("kind".equals(fieldName)) {
+                    kind = MessageActionBindingKind.fromString(reader.getString());
                 } else {
                     reader.skipChildren();
                 }
             }
-            WhatsAppUrlActionBindings deserializedWhatsAppUrlActionBindings = new WhatsAppUrlActionBindings(action);
-            deserializedWhatsAppUrlActionBindings.actionBindingKind = actionBindingKind;
+            WhatsAppUrlActionBindings deserializedWhatsAppUrlActionBindings = new WhatsAppUrlActionBindings(content);
+            deserializedWhatsAppUrlActionBindings.kind = kind;
+
             return deserializedWhatsAppUrlActionBindings;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/resources/META-INF/azure-communication-messages_apiview_properties.json b/sdk/communication/azure-communication-messages/src/main/resources/META-INF/azure-communication-messages_apiview_properties.json
index 383c362f671c2..2e3d0e8156de2 100644
--- a/sdk/communication/azure-communication-messages/src/main/resources/META-INF/azure-communication-messages_apiview_properties.json
+++ b/sdk/communication/azure-communication-messages/src/main/resources/META-INF/azure-communication-messages_apiview_properties.json
@@ -18,9 +18,9 @@
     "com.azure.communication.messages.NotificationMessagesClient.sendWithResponse": "Azure.Communication.MessagesService.NotificationMessagesClient.send",
     "com.azure.communication.messages.NotificationMessagesClientBuilder": "ClientForAcsMessages.NotificationMessagesClient",
     "com.azure.communication.messages.models.ActionBindings": "Azure.Communication.MessagesService.ActionBindings",
-    "com.azure.communication.messages.models.ActionSet": "Azure.Communication.MessagesService.ActionSet",
-    "com.azure.communication.messages.models.ActionSetContent": "Azure.Communication.MessagesService.ActionSetContent",
-    "com.azure.communication.messages.models.ActionSetItem": "Azure.Communication.MessagesService.ActionSetItem",
+    "com.azure.communication.messages.models.ActionGroup": "Azure.Communication.MessagesService.ActionGroup",
+    "com.azure.communication.messages.models.ActionGroupContent": "Azure.Communication.MessagesService.ActionGroupContent",
+    "com.azure.communication.messages.models.ActionGroupItem": "Azure.Communication.MessagesService.ActionGroupItem",
     "com.azure.communication.messages.models.AudioNotificationContent": "Azure.Communication.MessagesService.AudioNotificationContent",
     "com.azure.communication.messages.models.ButtonContent": "Azure.Communication.MessagesService.ButtonContent",
     "com.azure.communication.messages.models.ButtonSetContent": "Azure.Communication.MessagesService.ButtonSetContent",
@@ -32,6 +32,7 @@
     "com.azure.communication.messages.models.ImageNotificationContent": "Azure.Communication.MessagesService.ImageNotificationContent",
     "com.azure.communication.messages.models.InteractiveMessage": "Azure.Communication.MessagesService.InteractiveMessage",
     "com.azure.communication.messages.models.InteractiveNotificationContent": "Azure.Communication.MessagesService.InteractiveNotificationContent",
+    "com.azure.communication.messages.models.LinkContent": "Azure.Communication.MessagesService.LinkContent",
     "com.azure.communication.messages.models.MediaNotificationContent": "Azure.Communication.MessagesService.MediaNotificationContent",
     "com.azure.communication.messages.models.MessageActionBindingKind": "Azure.Communication.MessagesService.MessageActionBindingKind",
     "com.azure.communication.messages.models.MessageContent": "Azure.Communication.MessagesService.MessageContent",
@@ -57,16 +58,15 @@
     "com.azure.communication.messages.models.TemplateNotificationContent": "Azure.Communication.MessagesService.TemplateNotificationContent",
     "com.azure.communication.messages.models.TextMessageContent": "Azure.Communication.MessagesService.TextMessageContent",
     "com.azure.communication.messages.models.TextNotificationContent": "Azure.Communication.MessagesService.TextNotificationContent",
-    "com.azure.communication.messages.models.UrlContent": "Azure.Communication.MessagesService.UrlContent",
     "com.azure.communication.messages.models.VideoMessageContent": "Azure.Communication.MessagesService.VideoMessageContent",
     "com.azure.communication.messages.models.VideoNotificationContent": "Azure.Communication.MessagesService.VideoNotificationContent",
-    "com.azure.communication.messages.models.WhatsAppButtonActionBindings": "Azure.Communication.MessagesService.WhatsAppButtonActionBindings",
-    "com.azure.communication.messages.models.WhatsAppListActionBindings": "Azure.Communication.MessagesService.WhatsAppListActionBindings",
-    "com.azure.communication.messages.models.WhatsAppUrlActionBindings": "Azure.Communication.MessagesService.WhatsAppUrlActionBindings",
+    "com.azure.communication.messages.models.channels.WhatsAppButtonActionBindings": "Azure.Communication.MessagesService.WhatsAppButtonActionBindings",
+    "com.azure.communication.messages.models.channels.WhatsAppListActionBindings": "Azure.Communication.MessagesService.WhatsAppListActionBindings",
     "com.azure.communication.messages.models.channels.WhatsAppMessageButtonSubType": "Azure.Communication.MessagesService.WhatsAppMessageButtonSubType",
     "com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindings": "Azure.Communication.MessagesService.WhatsAppMessageTemplateBindings",
     "com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindingsButton": "Azure.Communication.MessagesService.WhatsAppMessageTemplateBindingsButton",
     "com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindingsComponent": "Azure.Communication.MessagesService.WhatsAppMessageTemplateBindingsComponent",
-    "com.azure.communication.messages.models.channels.WhatsAppMessageTemplateItem": "Azure.Communication.MessagesService.WhatsAppMessageTemplateItem"
+    "com.azure.communication.messages.models.channels.WhatsAppMessageTemplateItem": "Azure.Communication.MessagesService.WhatsAppMessageTemplateItem",
+    "com.azure.communication.messages.models.channels.WhatsAppUrlActionBindings": "Azure.Communication.MessagesService.WhatsAppUrlActionBindings"
   }
 }
diff --git a/sdk/communication/azure-communication-messages/tsp-location.yaml b/sdk/communication/azure-communication-messages/tsp-location.yaml
index 1763eab69db88..b7fc81c780a34 100644
--- a/sdk/communication/azure-communication-messages/tsp-location.yaml
+++ b/sdk/communication/azure-communication-messages/tsp-location.yaml
@@ -1,4 +1,4 @@
 directory: specification/communication/Communication.Messages
-commit: 3ec57056cd2a8d7d4ce1ac61ca5da625e1afadb2
+commit: 0f8d893b8c67816fd63af3c7efd34f03a8aa4978
 repo: Azure/azure-rest-api-specs
 additionalDirectories: null

From 11ee3efd4905bf3e5f5bb2ddc38795b61319f54d Mon Sep 17 00:00:00 2001
From: Arif Ibrahim Mohamed 
Date: Mon, 13 Jan 2025 10:15:34 -0500
Subject: [PATCH 04/10] latest commit from azure-rest-api-spec

---
 .../messages/MessagesServiceVersion.java           |  6 +++---
 .../communication/messages/models/ActionGroup.java | 11 +++++------
 .../messages/models/ActionGroupContent.java        | 14 ++++++--------
 .../messages/models/ActionGroupItem.java           | 13 ++++++-------
 .../messages/models/ButtonContent.java             | 11 +++++------
 .../messages/models/ButtonSetContent.java          | 12 +++++-------
 .../messages/models/DocumentMessageContent.java    | 12 +++++-------
 .../messages/models/ImageMessageContent.java       | 12 +++++-------
 .../models/InteractiveNotificationContent.java     | 12 +++++-------
 .../communication/messages/models/LinkContent.java | 14 ++++++--------
 .../messages/models/MessageActionBindingKind.java  |  8 ++++----
 .../messages/models/MessageContentKind.java        |  8 ++++----
 .../models/ReactionNotificationContent.java        | 14 ++++++--------
 .../models/StickerNotificationContent.java         | 12 +++++-------
 .../messages/models/TextMessageContent.java        | 12 +++++-------
 .../messages/models/VideoMessageContent.java       | 12 +++++-------
 .../channels/WhatsAppButtonActionBindings.java     | 12 +++++-------
 .../channels/WhatsAppListActionBindings.java       | 12 +++++-------
 .../models/channels/WhatsAppUrlActionBindings.java | 12 +++++-------
 .../azure-communication-messages/tsp-location.yaml |  2 +-
 20 files changed, 96 insertions(+), 125 deletions(-)

diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/MessagesServiceVersion.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/MessagesServiceVersion.java
index f566683f83f84..462bb0b338344 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/MessagesServiceVersion.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/MessagesServiceVersion.java
@@ -21,9 +21,9 @@ public enum MessagesServiceVersion implements ServiceVersion {
     V2024_08_30("2024-08-30"),
 
     /**
-     * Enum value 2024-11-15-preview.
+     * Enum value 2025-01-15-preview.
      */
-    V2024_11_15_PREVIEW("2024-11-15-preview");
+    V2025_01_15_PREVIEW("2025-01-15-preview");
 
     private final String version;
 
@@ -45,6 +45,6 @@ public String getVersion() {
      * @return The latest {@link MessagesServiceVersion}.
      */
     public static MessagesServiceVersion getLatest() {
-        return V2024_11_15_PREVIEW;
+        return V2025_01_15_PREVIEW;
     }
 }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroup.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroup.java
index 4c4775dcfc5ea..7b8b43804a83a 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroup.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroup.java
@@ -1,7 +1,6 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
-
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -18,6 +17,7 @@
  */
 @Immutable
 public final class ActionGroup implements JsonSerializable {
+
     /*
      * Title of the ActionGroup.
      */
@@ -32,7 +32,7 @@ public final class ActionGroup implements JsonSerializable {
 
     /**
      * Creates an instance of ActionGroup class.
-     * 
+     *
      * @param title the title value to set.
      * @param items the items value to set.
      */
@@ -44,7 +44,7 @@ public ActionGroup(String title, List items) {
 
     /**
      * Get the title property: Title of the ActionGroup.
-     * 
+     *
      * @return the title value.
      */
     @Generated
@@ -54,7 +54,7 @@ public String getTitle() {
 
     /**
      * Get the items property: Array of items in ActionGroup.
-     * 
+     *
      * @return the items value.
      */
     @Generated
@@ -76,7 +76,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of ActionGroup from the JsonReader.
-     * 
+     *
      * @param jsonReader The JsonReader being read.
      * @return An instance of ActionGroup if the JsonReader was pointing to an instance of it, or null if it was
      * pointing to JSON null.
@@ -91,7 +91,6 @@ public static ActionGroup fromJson(JsonReader jsonReader) throws IOException {
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
-
                 if ("title".equals(fieldName)) {
                     title = reader.getString();
                 } else if ("items".equals(fieldName)) {
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroupContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroupContent.java
index 68a01d6173aad..3f04aa34b09ce 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroupContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroupContent.java
@@ -1,7 +1,6 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
-
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -17,6 +16,7 @@
  */
 @Immutable
 public final class ActionGroupContent extends MessageContent {
+
     /*
      * Kind of MessageContent.
      */
@@ -37,7 +37,7 @@ public final class ActionGroupContent extends MessageContent {
 
     /**
      * Creates an instance of ActionGroupContent class.
-     * 
+     *
      * @param title the title value to set.
      * @param groups the groups value to set.
      */
@@ -49,7 +49,7 @@ public ActionGroupContent(String title, List groups) {
 
     /**
      * Get the kind property: Kind of MessageContent.
-     * 
+     *
      * @return the kind value.
      */
     @Generated
@@ -60,7 +60,7 @@ public MessageContentKind getKind() {
 
     /**
      * Get the title property: Title of the actionGroup content.
-     * 
+     *
      * @return the title value.
      */
     @Generated
@@ -70,7 +70,7 @@ public String getTitle() {
 
     /**
      * Get the groups property: Set or group of actions.
-     * 
+     *
      * @return the groups value.
      */
     @Generated
@@ -93,7 +93,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of ActionGroupContent from the JsonReader.
-     * 
+     *
      * @param jsonReader The JsonReader being read.
      * @return An instance of ActionGroupContent if the JsonReader was pointing to an instance of it, or null if it was
      * pointing to JSON null.
@@ -109,7 +109,6 @@ public static ActionGroupContent fromJson(JsonReader jsonReader) throws IOExcept
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
-
                 if ("title".equals(fieldName)) {
                     title = reader.getString();
                 } else if ("groups".equals(fieldName)) {
@@ -122,7 +121,6 @@ public static ActionGroupContent fromJson(JsonReader jsonReader) throws IOExcept
             }
             ActionGroupContent deserializedActionGroupContent = new ActionGroupContent(title, groups);
             deserializedActionGroupContent.kind = kind;
-
             return deserializedActionGroupContent;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroupItem.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroupItem.java
index 2aec2dcfdc2ea..9fa292486f2df 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroupItem.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroupItem.java
@@ -1,7 +1,6 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
-
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -17,6 +16,7 @@
  */
 @Immutable
 public final class ActionGroupItem implements JsonSerializable {
+
     /*
      * Id of the Item.
      */
@@ -37,7 +37,7 @@ public final class ActionGroupItem implements JsonSerializable
 
     /**
      * Creates an instance of ActionGroupItem class.
-     * 
+     *
      * @param id the id value to set.
      * @param title the title value to set.
      * @param description the description value to set.
@@ -51,7 +51,7 @@ public ActionGroupItem(String id, String title, String description) {
 
     /**
      * Get the id property: Id of the Item.
-     * 
+     *
      * @return the id value.
      */
     @Generated
@@ -61,7 +61,7 @@ public String getId() {
 
     /**
      * Get the title property: Title of the Item.
-     * 
+     *
      * @return the title value.
      */
     @Generated
@@ -71,7 +71,7 @@ public String getTitle() {
 
     /**
      * Get the description property: Description of the Item.
-     * 
+     *
      * @return the description value.
      */
     @Generated
@@ -94,7 +94,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of ActionGroupItem from the JsonReader.
-     * 
+     *
      * @param jsonReader The JsonReader being read.
      * @return An instance of ActionGroupItem if the JsonReader was pointing to an instance of it, or null if it was
      * pointing to JSON null.
@@ -110,7 +110,6 @@ public static ActionGroupItem fromJson(JsonReader jsonReader) throws IOException
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
-
                 if ("id".equals(fieldName)) {
                     id = reader.getString();
                 } else if ("title".equals(fieldName)) {
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonContent.java
index 8019ea3436cd2..a548f12070f86 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonContent.java
@@ -1,7 +1,6 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
-
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -17,6 +16,7 @@
  */
 @Immutable
 public final class ButtonContent implements JsonSerializable {
+
     /*
      * Unique Id of the button content.
      */
@@ -31,7 +31,7 @@ public final class ButtonContent implements JsonSerializable {
 
     /**
      * Creates an instance of ButtonContent class.
-     * 
+     *
      * @param id the id value to set.
      * @param title the title value to set.
      */
@@ -43,7 +43,7 @@ public ButtonContent(String id, String title) {
 
     /**
      * Get the id property: Unique Id of the button content.
-     * 
+     *
      * @return the id value.
      */
     @Generated
@@ -53,7 +53,7 @@ public String getId() {
 
     /**
      * Get the title property: Title of the button content.
-     * 
+     *
      * @return the title value.
      */
     @Generated
@@ -75,7 +75,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of ButtonContent from the JsonReader.
-     * 
+     *
      * @param jsonReader The JsonReader being read.
      * @return An instance of ButtonContent if the JsonReader was pointing to an instance of it, or null if it was
      * pointing to JSON null.
@@ -90,7 +90,6 @@ public static ButtonContent fromJson(JsonReader jsonReader) throws IOException {
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
-
                 if ("id".equals(fieldName)) {
                     id = reader.getString();
                 } else if ("title".equals(fieldName)) {
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonSetContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonSetContent.java
index 845b108cf113a..90115e67dd868 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonSetContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonSetContent.java
@@ -1,7 +1,6 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
-
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -17,6 +16,7 @@
  */
 @Immutable
 public final class ButtonSetContent extends MessageContent {
+
     /*
      * Kind of MessageContent.
      */
@@ -31,7 +31,7 @@ public final class ButtonSetContent extends MessageContent {
 
     /**
      * Creates an instance of ButtonSetContent class.
-     * 
+     *
      * @param buttons the buttons value to set.
      */
     @Generated
@@ -41,7 +41,7 @@ public ButtonSetContent(List buttons) {
 
     /**
      * Get the kind property: Kind of MessageContent.
-     * 
+     *
      * @return the kind value.
      */
     @Generated
@@ -52,7 +52,7 @@ public MessageContentKind getKind() {
 
     /**
      * Get the buttons property: Unique Id of the button content.
-     * 
+     *
      * @return the buttons value.
      */
     @Generated
@@ -74,7 +74,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of ButtonSetContent from the JsonReader.
-     * 
+     *
      * @param jsonReader The JsonReader being read.
      * @return An instance of ButtonSetContent if the JsonReader was pointing to an instance of it, or null if it was
      * pointing to JSON null.
@@ -89,7 +89,6 @@ public static ButtonSetContent fromJson(JsonReader jsonReader) throws IOExceptio
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
-
                 if ("buttons".equals(fieldName)) {
                     buttons = reader.readArray(reader1 -> ButtonContent.fromJson(reader1));
                 } else if ("kind".equals(fieldName)) {
@@ -100,7 +99,6 @@ public static ButtonSetContent fromJson(JsonReader jsonReader) throws IOExceptio
             }
             ButtonSetContent deserializedButtonSetContent = new ButtonSetContent(buttons);
             deserializedButtonSetContent.kind = kind;
-
             return deserializedButtonSetContent;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/DocumentMessageContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/DocumentMessageContent.java
index 3bd4c4ecc27a8..e0bcd4e1ba484 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/DocumentMessageContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/DocumentMessageContent.java
@@ -1,7 +1,6 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
-
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -16,6 +15,7 @@
  */
 @Immutable
 public final class DocumentMessageContent extends MessageContent {
+
     /*
      * Kind of MessageContent.
      */
@@ -30,7 +30,7 @@ public final class DocumentMessageContent extends MessageContent {
 
     /**
      * Creates an instance of DocumentMessageContent class.
-     * 
+     *
      * @param mediaUrl the mediaUrl value to set.
      */
     @Generated
@@ -40,7 +40,7 @@ public DocumentMessageContent(String mediaUrl) {
 
     /**
      * Get the kind property: Kind of MessageContent.
-     * 
+     *
      * @return the kind value.
      */
     @Generated
@@ -51,7 +51,7 @@ public MessageContentKind getKind() {
 
     /**
      * Get the mediaUrl property: MediaUri of the media content.
-     * 
+     *
      * @return the mediaUrl value.
      */
     @Generated
@@ -73,7 +73,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of DocumentMessageContent from the JsonReader.
-     * 
+     *
      * @param jsonReader The JsonReader being read.
      * @return An instance of DocumentMessageContent if the JsonReader was pointing to an instance of it, or null if it
      * was pointing to JSON null.
@@ -88,7 +88,6 @@ public static DocumentMessageContent fromJson(JsonReader jsonReader) throws IOEx
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
-
                 if ("mediaUri".equals(fieldName)) {
                     mediaUrl = reader.getString();
                 } else if ("kind".equals(fieldName)) {
@@ -99,7 +98,6 @@ public static DocumentMessageContent fromJson(JsonReader jsonReader) throws IOEx
             }
             DocumentMessageContent deserializedDocumentMessageContent = new DocumentMessageContent(mediaUrl);
             deserializedDocumentMessageContent.kind = kind;
-
             return deserializedDocumentMessageContent;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ImageMessageContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ImageMessageContent.java
index 69da6055df27a..11a8a50887533 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ImageMessageContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ImageMessageContent.java
@@ -1,7 +1,6 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
-
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -16,6 +15,7 @@
  */
 @Immutable
 public final class ImageMessageContent extends MessageContent {
+
     /*
      * Kind of MessageContent.
      */
@@ -30,7 +30,7 @@ public final class ImageMessageContent extends MessageContent {
 
     /**
      * Creates an instance of ImageMessageContent class.
-     * 
+     *
      * @param mediaUrl the mediaUrl value to set.
      */
     @Generated
@@ -40,7 +40,7 @@ public ImageMessageContent(String mediaUrl) {
 
     /**
      * Get the kind property: Kind of MessageContent.
-     * 
+     *
      * @return the kind value.
      */
     @Generated
@@ -51,7 +51,7 @@ public MessageContentKind getKind() {
 
     /**
      * Get the mediaUrl property: MediaUri of the media content.
-     * 
+     *
      * @return the mediaUrl value.
      */
     @Generated
@@ -73,7 +73,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of ImageMessageContent from the JsonReader.
-     * 
+     *
      * @param jsonReader The JsonReader being read.
      * @return An instance of ImageMessageContent if the JsonReader was pointing to an instance of it, or null if it was
      * pointing to JSON null.
@@ -88,7 +88,6 @@ public static ImageMessageContent fromJson(JsonReader jsonReader) throws IOExcep
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
-
                 if ("mediaUri".equals(fieldName)) {
                     mediaUrl = reader.getString();
                 } else if ("kind".equals(fieldName)) {
@@ -99,7 +98,6 @@ public static ImageMessageContent fromJson(JsonReader jsonReader) throws IOExcep
             }
             ImageMessageContent deserializedImageMessageContent = new ImageMessageContent(mediaUrl);
             deserializedImageMessageContent.kind = kind;
-
             return deserializedImageMessageContent;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveNotificationContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveNotificationContent.java
index cfdcdba2ee766..728bc397b88b3 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveNotificationContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/InteractiveNotificationContent.java
@@ -1,7 +1,6 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
-
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -17,6 +16,7 @@
  */
 @Immutable
 public final class InteractiveNotificationContent extends NotificationContent {
+
     /*
      * The type discriminator describing a notification type.
      */
@@ -31,7 +31,7 @@ public final class InteractiveNotificationContent extends NotificationContent {
 
     /**
      * Creates an instance of InteractiveNotificationContent class.
-     * 
+     *
      * @param channelRegistrationId the channelRegistrationId value to set.
      * @param to the to value to set.
      * @param interactiveMessage the interactiveMessage value to set.
@@ -45,7 +45,7 @@ public InteractiveNotificationContent(String channelRegistrationId, List
 
     /**
      * Get the kind property: The type discriminator describing a notification type.
-     * 
+     *
      * @return the kind value.
      */
     @Generated
@@ -56,7 +56,7 @@ public CommunicationMessageKind getKind() {
 
     /**
      * Get the interactiveMessage property: The interactive message content.
-     * 
+     *
      * @return the interactiveMessage value.
      */
     @Generated
@@ -80,7 +80,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of InteractiveNotificationContent from the JsonReader.
-     * 
+     *
      * @param jsonReader The JsonReader being read.
      * @return An instance of InteractiveNotificationContent if the JsonReader was pointing to an instance of it, or
      * null if it was pointing to JSON null.
@@ -97,7 +97,6 @@ public static InteractiveNotificationContent fromJson(JsonReader jsonReader) thr
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
-
                 if ("channelRegistrationId".equals(fieldName)) {
                     channelRegistrationId = reader.getString();
                 } else if ("to".equals(fieldName)) {
@@ -113,7 +112,6 @@ public static InteractiveNotificationContent fromJson(JsonReader jsonReader) thr
             InteractiveNotificationContent deserializedInteractiveNotificationContent
                 = new InteractiveNotificationContent(channelRegistrationId, to, interactiveMessage);
             deserializedInteractiveNotificationContent.kind = kind;
-
             return deserializedInteractiveNotificationContent;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/LinkContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/LinkContent.java
index c45cc00d06395..9d7e2cbff8e63 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/LinkContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/LinkContent.java
@@ -1,7 +1,6 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
-
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -16,6 +15,7 @@
  */
 @Immutable
 public final class LinkContent extends MessageContent {
+
     /*
      * Kind of MessageContent.
      */
@@ -36,7 +36,7 @@ public final class LinkContent extends MessageContent {
 
     /**
      * Creates an instance of LinkContent class.
-     * 
+     *
      * @param title the title value to set.
      * @param url the url value to set.
      */
@@ -48,7 +48,7 @@ public LinkContent(String title, String url) {
 
     /**
      * Get the kind property: Kind of MessageContent.
-     * 
+     *
      * @return the kind value.
      */
     @Generated
@@ -59,7 +59,7 @@ public MessageContentKind getKind() {
 
     /**
      * Get the title property: Title of the url content.
-     * 
+     *
      * @return the title value.
      */
     @Generated
@@ -69,7 +69,7 @@ public String getTitle() {
 
     /**
      * Get the url property: The url in the content.
-     * 
+     *
      * @return the url value.
      */
     @Generated
@@ -92,7 +92,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of LinkContent from the JsonReader.
-     * 
+     *
      * @param jsonReader The JsonReader being read.
      * @return An instance of LinkContent if the JsonReader was pointing to an instance of it, or null if it was
      * pointing to JSON null.
@@ -108,7 +108,6 @@ public static LinkContent fromJson(JsonReader jsonReader) throws IOException {
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
-
                 if ("title".equals(fieldName)) {
                     title = reader.getString();
                 } else if ("url".equals(fieldName)) {
@@ -121,7 +120,6 @@ public static LinkContent fromJson(JsonReader jsonReader) throws IOException {
             }
             LinkContent deserializedLinkContent = new LinkContent(title, url);
             deserializedLinkContent.kind = kind;
-
             return deserializedLinkContent;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageActionBindingKind.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageActionBindingKind.java
index 8e6c3dbb2c6f3..343f058f887ad 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageActionBindingKind.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageActionBindingKind.java
@@ -1,7 +1,6 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
-
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -12,6 +11,7 @@
  * The Kind of interactive message channel action binding like WhatsAppListAction.
  */
 public final class MessageActionBindingKind extends ExpandableStringEnum {
+
     /**
      * The WhatsApp List action binding kind.
      */
@@ -32,7 +32,7 @@ public final class MessageActionBindingKind extends ExpandableStringEnum {
+
     /**
      * The text content type.
      */
@@ -56,7 +56,7 @@ public final class MessageContentKind extends ExpandableStringEnum to
 
     /**
      * Get the kind property: The type discriminator describing a notification type.
-     * 
+     *
      * @return the kind value.
      */
     @Generated
@@ -63,7 +63,7 @@ public CommunicationMessageKind getKind() {
 
     /**
      * Get the emoji property: emoji content like \uD83D\uDE00.
-     * 
+     *
      * @return the emoji value.
      */
     @Generated
@@ -73,7 +73,7 @@ public String getEmoji() {
 
     /**
      * Get the messageId property: ID of the previous message you want to reply to.
-     * 
+     *
      * @return the messageId value.
      */
     @Generated
@@ -98,7 +98,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of ReactionNotificationContent from the JsonReader.
-     * 
+     *
      * @param jsonReader The JsonReader being read.
      * @return An instance of ReactionNotificationContent if the JsonReader was pointing to an instance of it, or null
      * if it was pointing to JSON null.
@@ -116,7 +116,6 @@ public static ReactionNotificationContent fromJson(JsonReader jsonReader) throws
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
-
                 if ("channelRegistrationId".equals(fieldName)) {
                     channelRegistrationId = reader.getString();
                 } else if ("to".equals(fieldName)) {
@@ -134,7 +133,6 @@ public static ReactionNotificationContent fromJson(JsonReader jsonReader) throws
             ReactionNotificationContent deserializedReactionNotificationContent
                 = new ReactionNotificationContent(channelRegistrationId, to, emoji, messageId);
             deserializedReactionNotificationContent.kind = kind;
-
             return deserializedReactionNotificationContent;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/StickerNotificationContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/StickerNotificationContent.java
index d0946b81131fb..d404b4eb3fb71 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/StickerNotificationContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/StickerNotificationContent.java
@@ -1,7 +1,6 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
-
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -17,6 +16,7 @@
  */
 @Immutable
 public final class StickerNotificationContent extends NotificationContent {
+
     /*
      * The type discriminator describing a notification type.
      */
@@ -31,7 +31,7 @@ public final class StickerNotificationContent extends NotificationContent {
 
     /**
      * Creates an instance of StickerNotificationContent class.
-     * 
+     *
      * @param channelRegistrationId the channelRegistrationId value to set.
      * @param to the to value to set.
      * @param mediaUrl the mediaUrl value to set.
@@ -44,7 +44,7 @@ public StickerNotificationContent(String channelRegistrationId, List to,
 
     /**
      * Get the kind property: The type discriminator describing a notification type.
-     * 
+     *
      * @return the kind value.
      */
     @Generated
@@ -56,7 +56,7 @@ public CommunicationMessageKind getKind() {
     /**
      * Get the mediaUrl property: A media url for the file. Required if the type is one of the supported media types,
      * e.g. image.
-     * 
+     *
      * @return the mediaUrl value.
      */
     @Generated
@@ -80,7 +80,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of StickerNotificationContent from the JsonReader.
-     * 
+     *
      * @param jsonReader The JsonReader being read.
      * @return An instance of StickerNotificationContent if the JsonReader was pointing to an instance of it, or null if
      * it was pointing to JSON null.
@@ -97,7 +97,6 @@ public static StickerNotificationContent fromJson(JsonReader jsonReader) throws
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
-
                 if ("channelRegistrationId".equals(fieldName)) {
                     channelRegistrationId = reader.getString();
                 } else if ("to".equals(fieldName)) {
@@ -113,7 +112,6 @@ public static StickerNotificationContent fromJson(JsonReader jsonReader) throws
             StickerNotificationContent deserializedStickerNotificationContent
                 = new StickerNotificationContent(channelRegistrationId, to, mediaUrl);
             deserializedStickerNotificationContent.kind = kind;
-
             return deserializedStickerNotificationContent;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/TextMessageContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/TextMessageContent.java
index 11723d4c6046e..31dbc6fc15a7d 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/TextMessageContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/TextMessageContent.java
@@ -1,7 +1,6 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
-
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -16,6 +15,7 @@
  */
 @Immutable
 public final class TextMessageContent extends MessageContent {
+
     /*
      * Kind of MessageContent.
      */
@@ -30,7 +30,7 @@ public final class TextMessageContent extends MessageContent {
 
     /**
      * Creates an instance of TextMessageContent class.
-     * 
+     *
      * @param text the text value to set.
      */
     @Generated
@@ -40,7 +40,7 @@ public TextMessageContent(String text) {
 
     /**
      * Get the kind property: Kind of MessageContent.
-     * 
+     *
      * @return the kind value.
      */
     @Generated
@@ -51,7 +51,7 @@ public MessageContentKind getKind() {
 
     /**
      * Get the text property: The text value.
-     * 
+     *
      * @return the text value.
      */
     @Generated
@@ -73,7 +73,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of TextMessageContent from the JsonReader.
-     * 
+     *
      * @param jsonReader The JsonReader being read.
      * @return An instance of TextMessageContent if the JsonReader was pointing to an instance of it, or null if it was
      * pointing to JSON null.
@@ -88,7 +88,6 @@ public static TextMessageContent fromJson(JsonReader jsonReader) throws IOExcept
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
-
                 if ("text".equals(fieldName)) {
                     text = reader.getString();
                 } else if ("kind".equals(fieldName)) {
@@ -99,7 +98,6 @@ public static TextMessageContent fromJson(JsonReader jsonReader) throws IOExcept
             }
             TextMessageContent deserializedTextMessageContent = new TextMessageContent(text);
             deserializedTextMessageContent.kind = kind;
-
             return deserializedTextMessageContent;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/VideoMessageContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/VideoMessageContent.java
index aa2d9a628ab29..736d485818892 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/VideoMessageContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/VideoMessageContent.java
@@ -1,7 +1,6 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
-
 package com.azure.communication.messages.models;
 
 import com.azure.core.annotation.Generated;
@@ -16,6 +15,7 @@
  */
 @Immutable
 public final class VideoMessageContent extends MessageContent {
+
     /*
      * Kind of MessageContent.
      */
@@ -30,7 +30,7 @@ public final class VideoMessageContent extends MessageContent {
 
     /**
      * Creates an instance of VideoMessageContent class.
-     * 
+     *
      * @param mediaUrl the mediaUrl value to set.
      */
     @Generated
@@ -40,7 +40,7 @@ public VideoMessageContent(String mediaUrl) {
 
     /**
      * Get the kind property: Kind of MessageContent.
-     * 
+     *
      * @return the kind value.
      */
     @Generated
@@ -51,7 +51,7 @@ public MessageContentKind getKind() {
 
     /**
      * Get the mediaUrl property: MediaUri of the media content.
-     * 
+     *
      * @return the mediaUrl value.
      */
     @Generated
@@ -73,7 +73,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of VideoMessageContent from the JsonReader.
-     * 
+     *
      * @param jsonReader The JsonReader being read.
      * @return An instance of VideoMessageContent if the JsonReader was pointing to an instance of it, or null if it was
      * pointing to JSON null.
@@ -88,7 +88,6 @@ public static VideoMessageContent fromJson(JsonReader jsonReader) throws IOExcep
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
-
                 if ("mediaUri".equals(fieldName)) {
                     mediaUrl = reader.getString();
                 } else if ("kind".equals(fieldName)) {
@@ -99,7 +98,6 @@ public static VideoMessageContent fromJson(JsonReader jsonReader) throws IOExcep
             }
             VideoMessageContent deserializedVideoMessageContent = new VideoMessageContent(mediaUrl);
             deserializedVideoMessageContent.kind = kind;
-
             return deserializedVideoMessageContent;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppButtonActionBindings.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppButtonActionBindings.java
index b17410cf259e6..ede678fd1e871 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppButtonActionBindings.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppButtonActionBindings.java
@@ -1,7 +1,6 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
-
 package com.azure.communication.messages.models.channels;
 
 import com.azure.communication.messages.models.ActionBindings;
@@ -19,6 +18,7 @@
  */
 @Immutable
 public final class WhatsAppButtonActionBindings extends ActionBindings {
+
     /*
      * Kind of the MessageActionBinding.
      */
@@ -33,7 +33,7 @@ public final class WhatsAppButtonActionBindings extends ActionBindings {
 
     /**
      * Creates an instance of WhatsAppButtonActionBindings class.
-     * 
+     *
      * @param content the content value to set.
      */
     @Generated
@@ -43,7 +43,7 @@ public WhatsAppButtonActionBindings(ButtonSetContent content) {
 
     /**
      * Get the kind property: Kind of the MessageActionBinding.
-     * 
+     *
      * @return the kind value.
      */
     @Generated
@@ -54,7 +54,7 @@ public MessageActionBindingKind getKind() {
 
     /**
      * Get the content property: Action content of Interactive message.
-     * 
+     *
      * @return the content value.
      */
     @Generated
@@ -76,7 +76,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of WhatsAppButtonActionBindings from the JsonReader.
-     * 
+     *
      * @param jsonReader The JsonReader being read.
      * @return An instance of WhatsAppButtonActionBindings if the JsonReader was pointing to an instance of it, or null
      * if it was pointing to JSON null.
@@ -91,7 +91,6 @@ public static WhatsAppButtonActionBindings fromJson(JsonReader jsonReader) throw
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
-
                 if ("content".equals(fieldName)) {
                     content = ButtonSetContent.fromJson(reader);
                 } else if ("kind".equals(fieldName)) {
@@ -103,7 +102,6 @@ public static WhatsAppButtonActionBindings fromJson(JsonReader jsonReader) throw
             WhatsAppButtonActionBindings deserializedWhatsAppButtonActionBindings
                 = new WhatsAppButtonActionBindings(content);
             deserializedWhatsAppButtonActionBindings.kind = kind;
-
             return deserializedWhatsAppButtonActionBindings;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppListActionBindings.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppListActionBindings.java
index 051d154a5f7f2..37c144bdb88a4 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppListActionBindings.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppListActionBindings.java
@@ -1,7 +1,6 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
-
 package com.azure.communication.messages.models.channels;
 
 import com.azure.communication.messages.models.ActionBindings;
@@ -19,6 +18,7 @@
  */
 @Immutable
 public final class WhatsAppListActionBindings extends ActionBindings {
+
     /*
      * Kind of the MessageActionBinding.
      */
@@ -33,7 +33,7 @@ public final class WhatsAppListActionBindings extends ActionBindings {
 
     /**
      * Creates an instance of WhatsAppListActionBindings class.
-     * 
+     *
      * @param content the content value to set.
      */
     @Generated
@@ -43,7 +43,7 @@ public WhatsAppListActionBindings(ActionGroupContent content) {
 
     /**
      * Get the kind property: Kind of the MessageActionBinding.
-     * 
+     *
      * @return the kind value.
      */
     @Generated
@@ -54,7 +54,7 @@ public MessageActionBindingKind getKind() {
 
     /**
      * Get the content property: Action content of Interactive message.
-     * 
+     *
      * @return the content value.
      */
     @Generated
@@ -76,7 +76,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of WhatsAppListActionBindings from the JsonReader.
-     * 
+     *
      * @param jsonReader The JsonReader being read.
      * @return An instance of WhatsAppListActionBindings if the JsonReader was pointing to an instance of it, or null if
      * it was pointing to JSON null.
@@ -91,7 +91,6 @@ public static WhatsAppListActionBindings fromJson(JsonReader jsonReader) throws
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
-
                 if ("content".equals(fieldName)) {
                     content = ActionGroupContent.fromJson(reader);
                 } else if ("kind".equals(fieldName)) {
@@ -102,7 +101,6 @@ public static WhatsAppListActionBindings fromJson(JsonReader jsonReader) throws
             }
             WhatsAppListActionBindings deserializedWhatsAppListActionBindings = new WhatsAppListActionBindings(content);
             deserializedWhatsAppListActionBindings.kind = kind;
-
             return deserializedWhatsAppListActionBindings;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppUrlActionBindings.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppUrlActionBindings.java
index 46513caa24af8..2541539415992 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppUrlActionBindings.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/channels/WhatsAppUrlActionBindings.java
@@ -1,7 +1,6 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 // Code generated by Microsoft (R) TypeSpec Code Generator.
-
 package com.azure.communication.messages.models.channels;
 
 import com.azure.communication.messages.models.ActionBindings;
@@ -19,6 +18,7 @@
  */
 @Immutable
 public final class WhatsAppUrlActionBindings extends ActionBindings {
+
     /*
      * Kind of the MessageActionBinding.
      */
@@ -33,7 +33,7 @@ public final class WhatsAppUrlActionBindings extends ActionBindings {
 
     /**
      * Creates an instance of WhatsAppUrlActionBindings class.
-     * 
+     *
      * @param content the content value to set.
      */
     @Generated
@@ -43,7 +43,7 @@ public WhatsAppUrlActionBindings(LinkContent content) {
 
     /**
      * Get the kind property: Kind of the MessageActionBinding.
-     * 
+     *
      * @return the kind value.
      */
     @Generated
@@ -54,7 +54,7 @@ public MessageActionBindingKind getKind() {
 
     /**
      * Get the content property: Action content of Interactive message.
-     * 
+     *
      * @return the content value.
      */
     @Generated
@@ -76,7 +76,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
 
     /**
      * Reads an instance of WhatsAppUrlActionBindings from the JsonReader.
-     * 
+     *
      * @param jsonReader The JsonReader being read.
      * @return An instance of WhatsAppUrlActionBindings if the JsonReader was pointing to an instance of it, or null if
      * it was pointing to JSON null.
@@ -91,7 +91,6 @@ public static WhatsAppUrlActionBindings fromJson(JsonReader jsonReader) throws I
             while (reader.nextToken() != JsonToken.END_OBJECT) {
                 String fieldName = reader.getFieldName();
                 reader.nextToken();
-
                 if ("content".equals(fieldName)) {
                     content = LinkContent.fromJson(reader);
                 } else if ("kind".equals(fieldName)) {
@@ -102,7 +101,6 @@ public static WhatsAppUrlActionBindings fromJson(JsonReader jsonReader) throws I
             }
             WhatsAppUrlActionBindings deserializedWhatsAppUrlActionBindings = new WhatsAppUrlActionBindings(content);
             deserializedWhatsAppUrlActionBindings.kind = kind;
-
             return deserializedWhatsAppUrlActionBindings;
         });
     }
diff --git a/sdk/communication/azure-communication-messages/tsp-location.yaml b/sdk/communication/azure-communication-messages/tsp-location.yaml
index b7fc81c780a34..52bef653033e5 100644
--- a/sdk/communication/azure-communication-messages/tsp-location.yaml
+++ b/sdk/communication/azure-communication-messages/tsp-location.yaml
@@ -1,4 +1,4 @@
 directory: specification/communication/Communication.Messages
-commit: 0f8d893b8c67816fd63af3c7efd34f03a8aa4978
+commit: 27df71cc8589a99921d56902e20d7e0697d54da8
 repo: Azure/azure-rest-api-specs
 additionalDirectories: null

From 0d6ccea79a3726ab3db2946e7906330b92f392fa Mon Sep 17 00:00:00 2001
From: Arif Ibrahim Mohamed 
Date: Mon, 13 Jan 2025 19:18:00 -0500
Subject: [PATCH 05/10] added samples for interactive message

---
 .../messages/NotificationMessageSample.java   | 162 +++++++++++++++---
 1 file changed, 142 insertions(+), 20 deletions(-)

diff --git a/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/NotificationMessageSample.java b/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/NotificationMessageSample.java
index 748149927ce85..407debee13747 100644
--- a/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/NotificationMessageSample.java
+++ b/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/NotificationMessageSample.java
@@ -3,25 +3,8 @@
 
 package com.azure.communication.messages;
 
-import com.azure.communication.messages.models.AudioNotificationContent;
-import com.azure.communication.messages.models.DocumentNotificationContent;
-import com.azure.communication.messages.models.ImageNotificationContent;
-import com.azure.communication.messages.models.MessageTemplate;
-import com.azure.communication.messages.models.MessageTemplateBindings;
-import com.azure.communication.messages.models.MessageTemplateDocument;
-import com.azure.communication.messages.models.MessageTemplateImage;
-import com.azure.communication.messages.models.MessageTemplateQuickAction;
-import com.azure.communication.messages.models.MessageTemplateText;
-import com.azure.communication.messages.models.MessageTemplateValue;
-import com.azure.communication.messages.models.MessageTemplateVideo;
-import com.azure.communication.messages.models.TextNotificationContent;
-import com.azure.communication.messages.models.TemplateNotificationContent;
-import com.azure.communication.messages.models.VideoNotificationContent;
-import com.azure.communication.messages.models.SendMessageResult;
-import com.azure.communication.messages.models.channels.WhatsAppMessageButtonSubType;
-import com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindings;
-import com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindingsButton;
-import com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindingsComponent;
+import com.azure.communication.messages.models.*;
+import com.azure.communication.messages.models.channels.*;
 import com.azure.core.credential.AzureKeyCredential;
 import com.azure.core.credential.TokenCredential;
 import com.azure.identity.DefaultAzureCredentialBuilder;
@@ -38,7 +21,8 @@ public class NotificationMessageSample {
 
     public static void main(String[] args) {
         TO_LIST.add(RECIPIENT_IDENTIFIER);
-        sendTemplateMessageWithDocument();
+        //sendTemplateMessageWithDocument();
+        sendStickerMessage();
     }
 
     /*
@@ -391,6 +375,144 @@ public void sendDocumentMessage() {
         result.getReceipts().forEach(r -> System.out.println("Message sent to:" + r.getTo() + " and message id:" + r.getMessageId()));
     }
 
+    /*
+     * This sample shows how to send sticker message with below details
+     * Supported sticker type - (.webp)
+     * Note: Business cannot initiate conversation with media message.
+     * */
+    public static void sendStickerMessage() {
+        //Update the Media URL
+        String mediaUrl = "https://www.gstatic.com/webp/gallery/1.sm.webp";
+        NotificationMessagesClient client = createClientWithConnectionString();
+        SendMessageResult result = client.send(
+            new StickerNotificationContent(CHANNEL_ID, TO_LIST, mediaUrl));
+
+        result.getReceipts().forEach(r -> System.out.println("Message sent to:" + r.getTo() + " and message id:" + r.getMessageId()));
+    }
+
+    /*
+     * This sample shows how to send interactive message with Button Action
+     * Note: Business cannot initiate conversation with interactive message.
+     * */
+    public static void sendInteractiveMessageWithButtonAction() {
+        NotificationMessagesClient client = createClientWithConnectionString();
+        List buttonActions =  new ArrayList<>();
+        buttonActions.add( new ButtonContent("no",  "No"));
+        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
+        SendMessageResult result = client.send(
+            new InteractiveNotificationContent(CHANNEL_ID,  TO_LIST, interactiveMessage));
+
+        result.getReceipts().forEach(r -> System.out.println("Message sent to:" + r.getTo() + " and message id:" + r.getMessageId()));
+    }
+
+    /*
+     * This sample shows how to send button action interactive message with image header
+     * Note: Business cannot initiate conversation with interactive message.
+     * */
+    public static void sendInteractiveMessageWithButtonActionWithImageHeader() {
+        NotificationMessagesClient client = createClientWithConnectionString();
+        List buttonActions =  new ArrayList<>();
+        buttonActions.add( new ButtonContent("no",  "No"));
+        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
+        interactiveMessage.setHeader(new ImageMessageContent("https://wallpapercave.com/wp/wp2163723.jpg"));
+        SendMessageResult result = client.send(
+            new InteractiveNotificationContent(CHANNEL_ID,  TO_LIST, interactiveMessage));
+
+        result.getReceipts().forEach(r -> System.out.println("Message sent to:" + r.getTo() + " and message id:" + r.getMessageId()));
+    }
+
+    /*
+     * This sample shows how to send button action interactive message with document header
+     * Note: Business cannot initiate conversation with interactive message.
+     * */
+    public static void sendInteractiveMessageWithButtonActionWithDocumentHeader() {
+        NotificationMessagesClient client = createClientWithConnectionString();
+        List buttonActions =  new ArrayList<>();
+        buttonActions.add( new ButtonContent("no",  "No"));
+        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
+        interactiveMessage.setHeader(new DocumentMessageContent("https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"));
+        SendMessageResult result = client.send(
+            new InteractiveNotificationContent(CHANNEL_ID,  TO_LIST, interactiveMessage));
+
+        result.getReceipts().forEach(r -> System.out.println("Message sent to:" + r.getTo() + " and message id:" + r.getMessageId()));
+    }
+
+    /*
+     * This sample shows how to send button action interactive message with video header
+     * Note: Business cannot initiate conversation with interactive message.
+     * */
+    public static void sendInteractiveMessageWithButtonActionWithVideoHeader() {
+        NotificationMessagesClient client = createClientWithConnectionString();
+        List buttonActions =  new ArrayList<>();
+        buttonActions.add( new ButtonContent("no",  "No"));
+        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Do you like it?"), new WhatsAppButtonActionBindings(buttonSet));
+        interactiveMessage.setHeader(new VideoMessageContent("https://sample-videos.com/audio/mp3/wave.mp3"));
+        SendMessageResult result = client.send(
+            new InteractiveNotificationContent(CHANNEL_ID,  TO_LIST, interactiveMessage));
+
+        result.getReceipts().forEach(r -> System.out.println("Message sent to:" + r.getTo() + " and message id:" + r.getMessageId()));
+    }
+
+    /*
+     * This sample shows how to send list action interactive message
+     * Note: Business cannot initiate conversation with interactive message.
+     * */
+    public static void sendInteractiveMessageWithListAction() {
+        List group1 = new ArrayList<>();
+        group1.add(new ActionGroupItem("priority_express", "Priority Mail Express", "Delivered on same day!"));
+        group1.add(new ActionGroupItem("priority_mail", "Priority Mail", "Delivered in 1-2 days"));
+
+        List group2 = new ArrayList<>();
+        group2.add(new ActionGroupItem("usps_ground_advantage", "USPS Ground Advantage", "Delivered in 2-5 days"));
+        group2.add(new ActionGroupItem("media_mail", "Media Mail", "Delivered in 5-8 days"));
+
+        List options = new ArrayList<>();
+        options.add(new ActionGroup("Express Delivery", group1));
+        options.add(new ActionGroup("Normal Delivery", group2));
+
+        ActionGroupContent actionGroupContent = new ActionGroupContent("Shipping Options", options);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Which shipping option do you want?"), new WhatsAppListActionBindings(actionGroupContent));
+        interactiveMessage.setFooter(new TextMessageContent("Eagle Logistic"));
+        interactiveMessage.setHeader(new TextMessageContent("Shipping Options"));
+
+        NotificationMessagesClient client = createClientWithConnectionString();
+        SendMessageResult result = client.send(
+            new InteractiveNotificationContent(CHANNEL_ID,  TO_LIST, interactiveMessage));
+
+        result.getReceipts().forEach(r -> System.out.println("Message sent to:" + r.getTo() + " and message id:" + r.getMessageId()));
+
+    }
+
+    /*
+     * This sample shows how to send url action interactive message
+     * Note: Business cannot initiate conversation with interactive message.
+     * */
+    public static void sendInteractiveMessageWithUrlAction() {
+        LinkContent urlAction = new LinkContent("Rocket is the best!", "https://wallpapercave.com/wp/wp2163723.jpg");
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("The best Guardian of Galaxy"), new WhatsAppUrlActionBindings(urlAction));
+        interactiveMessage.setFooter(new TextMessageContent("Intergalactic New Ltd"));
+
+        NotificationMessagesClient client = createClientWithConnectionString();
+        SendMessageResult result = client.send(
+            new InteractiveNotificationContent(CHANNEL_ID,  TO_LIST, interactiveMessage));
+
+        result.getReceipts().forEach(r -> System.out.println("Message sent to:" + r.getTo() + " and message id:" + r.getMessageId()));
+    }
+
     private static NotificationMessagesClient createClientWithConnectionString() {
         return new NotificationMessagesClientBuilder()
             .connectionString(CONNECTION_STRING)

From d101a924005c854b1596fdb93b05874c3e3b2970 Mon Sep 17 00:00:00 2001
From: Arif Ibrahim Mohamed 
Date: Mon, 13 Jan 2025 23:55:38 -0500
Subject: [PATCH 06/10] added test

---
 .../communication/messages/ReadmeSamples.java | 198 ++++++++++++++++--
 .../NotificationMessageAsyncClientTest.java   | 154 +++++++++++++-
 .../NotificationMessagesClientTest.java       | 147 ++++++++++++-
 3 files changed, 476 insertions(+), 23 deletions(-)

diff --git a/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/ReadmeSamples.java b/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/ReadmeSamples.java
index 29d9a33c754cf..5813f4c68e148 100644
--- a/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/ReadmeSamples.java
+++ b/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/ReadmeSamples.java
@@ -4,21 +4,8 @@
 
 package com.azure.communication.messages;
 
-import com.azure.communication.messages.models.AudioNotificationContent;
-import com.azure.communication.messages.models.DocumentNotificationContent;
-import com.azure.communication.messages.models.ImageNotificationContent;
-import com.azure.communication.messages.models.MessageTemplate;
-import com.azure.communication.messages.models.MessageTemplateBindings;
-import com.azure.communication.messages.models.MessageTemplateItem;
-import com.azure.communication.messages.models.MessageTemplateText;
-import com.azure.communication.messages.models.MessageTemplateValue;
-import com.azure.communication.messages.models.SendMessageResult;
-import com.azure.communication.messages.models.TemplateNotificationContent;
-import com.azure.communication.messages.models.TextNotificationContent;
-import com.azure.communication.messages.models.VideoNotificationContent;
-import com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindings;
-import com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindingsComponent;
-import com.azure.communication.messages.models.channels.WhatsAppMessageTemplateItem;
+import com.azure.communication.messages.models.*;
+import com.azure.communication.messages.models.channels.*;
 import com.azure.core.credential.AzureKeyCredential;
 import com.azure.core.credential.TokenCredential;
 import com.azure.core.http.rest.PagedIterable;
@@ -239,6 +226,187 @@ public void sendDocumentMessage() {
     }
     // END: readme-sample-sendDocumentMessage
 
+    // BEGIN: readme-sample-sendStickerMessage
+    /*
+     * This sample shows how to send sticker message with below details
+     * Supported sticker type - (.webp)
+     * Note: Business cannot initiate conversation with media message.
+     * */
+    public static void sendStickerMessage() {
+        //Update the Media URL
+        String mediaUrl = "https://www.gstatic.com/webp/gallery/1.sm.webp";
+        List recipients = new ArrayList<>();
+        recipients.add("");
+        NotificationMessagesClient client = new NotificationMessagesClientBuilder()
+            .connectionString("")
+            .buildClient();
+        SendMessageResult result = client.send(
+            new StickerNotificationContent("", recipients, mediaUrl));
+
+        result.getReceipts().forEach(r -> System.out.println("Message sent to:" + r.getTo() + " and message id:" + r.getMessageId()));
+    }
+    // END: readme-sample-sendStickerMessage
+
+    // BEGIN: readme-sample-sendInteractiveMessageWithButtonAction
+    /*
+     * This sample shows how to send interactive message with Button Action
+     * Note: Business cannot initiate conversation with interactive message.
+     * */
+    public void sendInteractiveMessageWithButtonAction() {
+        List recipients = new ArrayList<>();
+        recipients.add("");
+        NotificationMessagesClient client = new NotificationMessagesClientBuilder()
+            .connectionString("")
+            .buildClient();
+        List buttonActions =  new ArrayList<>();
+        buttonActions.add( new ButtonContent("no",  "No"));
+        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
+        SendMessageResult result = client.send(
+            new InteractiveNotificationContent("",  recipients, interactiveMessage));
+
+        result.getReceipts().forEach(r -> System.out.println("Message sent to:" + r.getTo() + " and message id:" + r.getMessageId()));
+    }
+    // END: readme-sample-sendInteractiveMessageWithButtonAction
+
+    // BEGIN: readme-sample-sendInteractiveMessageWithButtonActionWithImageHeader
+    /*
+     * This sample shows how to send button action interactive message with image header
+     * Note: Business cannot initiate conversation with interactive message.
+     * */
+    public void sendInteractiveMessageWithButtonActionWithImageHeader() {
+        List recipients = new ArrayList<>();
+        recipients.add("");
+        NotificationMessagesClient client = new NotificationMessagesClientBuilder()
+            .connectionString("")
+            .buildClient();
+        List buttonActions =  new ArrayList<>();
+        buttonActions.add( new ButtonContent("no",  "No"));
+        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
+        interactiveMessage.setHeader(new ImageMessageContent("https://wallpapercave.com/wp/wp2163723.jpg"));
+        SendMessageResult result = client.send(
+            new InteractiveNotificationContent("",  recipients, interactiveMessage));
+
+        result.getReceipts().forEach(r -> System.out.println("Message sent to:" + r.getTo() + " and message id:" + r.getMessageId()));
+    }
+    // END: readme-sample-sendInteractiveMessageWithButtonActionWithImageHeader
+
+    // BEGIN: readme-sample-sendInteractiveMessageWithButtonActionWithDocumentHeader
+    /*
+     * This sample shows how to send button action interactive message with document header
+     * Note: Business cannot initiate conversation with interactive message.
+     * */
+    public static void sendInteractiveMessageWithButtonActionWithDocumentHeader() {
+        List recipients = new ArrayList<>();
+        recipients.add("");
+        NotificationMessagesClient client = new NotificationMessagesClientBuilder()
+            .connectionString("")
+            .buildClient();
+        List buttonActions =  new ArrayList<>();
+        buttonActions.add( new ButtonContent("no",  "No"));
+        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
+        interactiveMessage.setHeader(new DocumentMessageContent("https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"));
+        SendMessageResult result = client.send(
+            new InteractiveNotificationContent("",  recipients, interactiveMessage));
+
+        result.getReceipts().forEach(r -> System.out.println("Message sent to:" + r.getTo() + " and message id:" + r.getMessageId()));
+    }
+    // END: readme-sample-sendInteractiveMessageWithButtonActionWithDocumentHeader
+
+
+    // BEGIN: readme-sample-sendInteractiveMessageWithButtonActionWithVideoHeader
+    /*
+     * This sample shows how to send button action interactive message with video header
+     * Note: Business cannot initiate conversation with interactive message.
+     * */
+    public static void sendInteractiveMessageWithButtonActionWithVideoHeader() {
+        List recipients = new ArrayList<>();
+        recipients.add("");
+        NotificationMessagesClient client = new NotificationMessagesClientBuilder()
+            .connectionString("")
+            .buildClient();
+        List buttonActions =  new ArrayList<>();
+        buttonActions.add( new ButtonContent("no",  "No"));
+        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Do you like it?"), new WhatsAppButtonActionBindings(buttonSet));
+        interactiveMessage.setHeader(new VideoMessageContent("https://sample-videos.com/audio/mp3/wave.mp3"));
+        SendMessageResult result = client.send(
+            new InteractiveNotificationContent("",  recipients, interactiveMessage));
+
+        result.getReceipts().forEach(r -> System.out.println("Message sent to:" + r.getTo() + " and message id:" + r.getMessageId()));
+    }
+    // END: readme-sample-sendInteractiveMessageWithButtonActionWithVideoHeader
+
+    // BEGIN: readme-sample-sendInteractiveMessageWithListAction
+    /*
+     * This sample shows how to send list action interactive message
+     * Note: Business cannot initiate conversation with interactive message.
+     * */
+    public static void sendInteractiveMessageWithListAction() {
+        List group1 = new ArrayList<>();
+        group1.add(new ActionGroupItem("priority_express", "Priority Mail Express", "Delivered on same day!"));
+        group1.add(new ActionGroupItem("priority_mail", "Priority Mail", "Delivered in 1-2 days"));
+
+        List group2 = new ArrayList<>();
+        group2.add(new ActionGroupItem("usps_ground_advantage", "USPS Ground Advantage", "Delivered in 2-5 days"));
+        group2.add(new ActionGroupItem("media_mail", "Media Mail", "Delivered in 5-8 days"));
+
+        List options = new ArrayList<>();
+        options.add(new ActionGroup("Express Delivery", group1));
+        options.add(new ActionGroup("Normal Delivery", group2));
+
+        ActionGroupContent actionGroupContent = new ActionGroupContent("Shipping Options", options);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Which shipping option do you want?"), new WhatsAppListActionBindings(actionGroupContent));
+        interactiveMessage.setFooter(new TextMessageContent("Eagle Logistic"));
+        interactiveMessage.setHeader(new TextMessageContent("Shipping Options"));
+
+        List recipients = new ArrayList<>();
+        recipients.add("");
+        NotificationMessagesClient client = new NotificationMessagesClientBuilder()
+            .connectionString("")
+            .buildClient();
+        SendMessageResult result = client.send(
+            new InteractiveNotificationContent("",  recipients, interactiveMessage));
+
+        result.getReceipts().forEach(r -> System.out.println("Message sent to:" + r.getTo() + " and message id:" + r.getMessageId()));
+
+    }
+    // END: readme-sample-sendInteractiveMessageWithListAction
+
+    // BEGIN: readme-sample-sendInteractiveMessageWithUrlAction
+    /*
+     * This sample shows how to send url action interactive message
+     * Note: Business cannot initiate conversation with interactive message.
+     * */
+    public static void sendInteractiveMessageWithUrlAction() {
+        LinkContent urlAction = new LinkContent("Rocket is the best!", "https://wallpapercave.com/wp/wp2163723.jpg");
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("The best Guardian of Galaxy"), new WhatsAppUrlActionBindings(urlAction));
+        interactiveMessage.setFooter(new TextMessageContent("Intergalactic New Ltd"));
+
+        List recipients = new ArrayList<>();
+        recipients.add("");
+        NotificationMessagesClient client = new NotificationMessagesClientBuilder()
+            .connectionString("")
+            .buildClient();
+        SendMessageResult result = client.send(
+            new InteractiveNotificationContent("",  recipients, interactiveMessage));
+
+        result.getReceipts().forEach(r -> System.out.println("Message sent to:" + r.getTo() + " and message id:" + r.getMessageId()));
+    }
+    // END: readme-sample-sendInteractiveMessageWithUrlAction
+
     public static void getMessageTemplateWithConnectionString() {
         // BEGIN: readme-sample-ListTemplates
         MessageTemplateClient templateClient =
diff --git a/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessageAsyncClientTest.java b/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessageAsyncClientTest.java
index 352353058ceeb..086273672f1ff 100644
--- a/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessageAsyncClientTest.java
+++ b/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessageAsyncClientTest.java
@@ -4,10 +4,7 @@
 package com.azure.communication.messages;
 
 import com.azure.communication.messages.models.*;
-import com.azure.communication.messages.models.channels.WhatsAppMessageButtonSubType;
-import com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindings;
-import com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindingsButton;
-import com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindingsComponent;
+import com.azure.communication.messages.models.channels.*;
 import com.azure.core.credential.TokenCredential;
 import com.azure.core.http.HttpClient;
 import com.azure.core.test.utils.MockTokenCredential;
@@ -100,6 +97,155 @@ public void shouldSendDocumentMessage(HttpClient httpClient) {
             }).verifyComplete();
     }
 
+    @ParameterizedTest
+    @MethodSource("com.azure.core.test.TestBase#getHttpClients")
+    public void sendStickerMessage(HttpClient httpClient) {
+        String mediaUrl = "https://www.gstatic.com/webp/gallery/1.sm.webp";
+        messagesClient = buildNotificationMessagesAsyncClient(httpClient);
+        List recipients = new ArrayList<>();
+        recipients.add(RECIPIENT_IDENTIFIER);
+        StepVerifier.create(messagesClient.send(new StickerNotificationContent(CHANNEL_REGISTRATION_ID, recipients, mediaUrl)))
+            .assertNext(resp -> {
+                assertEquals(1, resp.getReceipts().size());
+                assertNotNull(resp.getReceipts().get(0).getMessageId());
+            })
+            .verifyComplete();
+    }
+
+    @ParameterizedTest
+    @MethodSource("com.azure.core.test.TestBase#getHttpClients")
+    public void sendInteractiveMessageWithButtonAction(HttpClient httpClient) {
+        messagesClient = buildNotificationMessagesAsyncClient(httpClient);
+        List recipients = new ArrayList<>();
+        recipients.add(RECIPIENT_IDENTIFIER);
+        List buttonActions =  new ArrayList<>();
+        buttonActions.add( new ButtonContent("no",  "No"));
+        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
+        StepVerifier.create(messagesClient.send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage)))
+            .assertNext(resp -> {
+                assertEquals(1, resp.getReceipts().size());
+                assertNotNull(resp.getReceipts().get(0).getMessageId());
+            })
+            .verifyComplete();
+    }
+
+    @ParameterizedTest
+    @MethodSource("com.azure.core.test.TestBase#getHttpClients")
+    public void sendInteractiveMessageWithButtonActionWithImageHeader(HttpClient httpClient) {
+        messagesClient = buildNotificationMessagesAsyncClient(httpClient);
+        List recipients = new ArrayList<>();
+        recipients.add(RECIPIENT_IDENTIFIER);
+        List buttonActions =  new ArrayList<>();
+        buttonActions.add( new ButtonContent("no",  "No"));
+        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
+        interactiveMessage.setHeader(new ImageMessageContent("https://wallpapercave.com/wp/wp2163723.jpg"));
+        StepVerifier.create(messagesClient.send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage)))
+            .assertNext(resp -> {
+                assertEquals(1, resp.getReceipts().size());
+                assertNotNull(resp.getReceipts().get(0).getMessageId());
+            })
+            .verifyComplete();
+    }
+
+    @ParameterizedTest
+    @MethodSource("com.azure.core.test.TestBase#getHttpClients")
+    public void sendInteractiveMessageWithButtonActionWithDocumentHeader(HttpClient httpClient) {
+        messagesClient = buildNotificationMessagesAsyncClient(httpClient);
+        List recipients = new ArrayList<>();
+        recipients.add(RECIPIENT_IDENTIFIER);
+        List buttonActions =  new ArrayList<>();
+        buttonActions.add( new ButtonContent("no",  "No"));
+        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
+        interactiveMessage.setHeader(new DocumentMessageContent("https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"));
+        StepVerifier.create(messagesClient.send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage)))
+            .assertNext(resp -> {
+                assertEquals(1, resp.getReceipts().size());
+                assertNotNull(resp.getReceipts().get(0).getMessageId());
+            })
+            .verifyComplete();
+    }
+
+    @ParameterizedTest
+    @MethodSource("com.azure.core.test.TestBase#getHttpClients")
+    public void sendInteractiveMessageWithButtonActionWithVideoHeader(HttpClient httpClient) {
+        messagesClient = buildNotificationMessagesAsyncClient(httpClient);
+        List recipients = new ArrayList<>();
+        recipients.add(RECIPIENT_IDENTIFIER);
+        List buttonActions =  new ArrayList<>();
+        buttonActions.add( new ButtonContent("no",  "No"));
+        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Do you like it?"), new WhatsAppButtonActionBindings(buttonSet));
+        interactiveMessage.setHeader(new VideoMessageContent("https://sample-videos.com/audio/mp3/wave.mp3"));
+        StepVerifier.create(messagesClient.send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage)))
+            .assertNext(resp -> {
+                assertEquals(1, resp.getReceipts().size());
+                assertNotNull(resp.getReceipts().get(0).getMessageId());
+            })
+            .verifyComplete();
+    }
+
+    @ParameterizedTest
+    @MethodSource("com.azure.core.test.TestBase#getHttpClients")
+    public void sendInteractiveMessageWithListAction(HttpClient httpClient) {
+        List group1 = new ArrayList<>();
+        group1.add(new ActionGroupItem("priority_express", "Priority Mail Express", "Delivered on same day!"));
+        group1.add(new ActionGroupItem("priority_mail", "Priority Mail", "Delivered in 1-2 days"));
+
+        List group2 = new ArrayList<>();
+        group2.add(new ActionGroupItem("usps_ground_advantage", "USPS Ground Advantage", "Delivered in 2-5 days"));
+        group2.add(new ActionGroupItem("media_mail", "Media Mail", "Delivered in 5-8 days"));
+
+        List options = new ArrayList<>();
+        options.add(new ActionGroup("Express Delivery", group1));
+        options.add(new ActionGroup("Normal Delivery", group2));
+
+        ActionGroupContent actionGroupContent = new ActionGroupContent("Shipping Options", options);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Which shipping option do you want?"), new WhatsAppListActionBindings(actionGroupContent));
+        interactiveMessage.setFooter(new TextMessageContent("Eagle Logistic"));
+        interactiveMessage.setHeader(new TextMessageContent("Shipping Options"));
+
+        messagesClient = buildNotificationMessagesAsyncClient(httpClient);
+        List recipients = new ArrayList<>();
+        recipients.add(RECIPIENT_IDENTIFIER);
+        StepVerifier.create(messagesClient.send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage)))
+            .assertNext(resp -> {
+                assertEquals(1, resp.getReceipts().size());
+                assertNotNull(resp.getReceipts().get(0).getMessageId());
+            })
+            .verifyComplete();
+    }
+
+    @ParameterizedTest
+    @MethodSource("com.azure.core.test.TestBase#getHttpClients")
+    public void sendInteractiveMessageWithUrlAction(HttpClient httpClient) {
+        LinkContent urlAction = new LinkContent("Rocket is the best!", "https://wallpapercave.com/wp/wp2163723.jpg");
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("The best Guardian of Galaxy"), new WhatsAppUrlActionBindings(urlAction));
+        interactiveMessage.setFooter(new TextMessageContent("Intergalactic New Ltd"));
+
+        messagesClient = buildNotificationMessagesAsyncClient(httpClient);
+        List recipients = new ArrayList<>();
+        recipients.add(RECIPIENT_IDENTIFIER);
+        StepVerifier.create(messagesClient.send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage)))
+            .assertNext(resp -> {
+                assertEquals(1, resp.getReceipts().size());
+                assertNotNull(resp.getReceipts().get(0).getMessageId());
+            })
+            .verifyComplete();
+    }
+
     @ParameterizedTest
     @MethodSource("com.azure.core.test.TestBase#getHttpClients")
     public void shouldSendMessageTemplateWithImage(HttpClient httpClient) {
diff --git a/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessagesClientTest.java b/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessagesClientTest.java
index e82a4e24ee10d..15f11d4dc4c3d 100644
--- a/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessagesClientTest.java
+++ b/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessagesClientTest.java
@@ -4,10 +4,7 @@
 package com.azure.communication.messages;
 
 import com.azure.communication.messages.models.*;
-import com.azure.communication.messages.models.channels.WhatsAppMessageButtonSubType;
-import com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindings;
-import com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindingsButton;
-import com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindingsComponent;
+import com.azure.communication.messages.models.channels.*;
 import com.azure.core.credential.TokenCredential;
 import com.azure.core.http.HttpClient;
 import com.azure.core.test.utils.MockTokenCredential;
@@ -117,6 +114,148 @@ public void shouldSendDocumentMessage(HttpClient httpClient) {
         assertNotNull(result.getReceipts().get(0).getMessageId());
     }
 
+    @ParameterizedTest
+    @MethodSource("com.azure.core.test.TestBase#getHttpClients")
+    public void sendStickerMessage(HttpClient httpClient) {
+        String mediaUrl = "https://www.gstatic.com/webp/gallery/1.sm.webp";
+        messagesClient = buildNotificationMessagesClient(httpClient);
+        List recipients = new ArrayList<>();
+        recipients.add(RECIPIENT_IDENTIFIER);
+        SendMessageResult result = messagesClient.send(
+            new StickerNotificationContent(CHANNEL_REGISTRATION_ID, recipients, mediaUrl));
+
+        assertEquals(1, result.getReceipts().size());
+        assertNotNull(result.getReceipts().get(0).getMessageId());
+    }
+
+    @ParameterizedTest
+    @MethodSource("com.azure.core.test.TestBase#getHttpClients")
+    public void sendInteractiveMessageWithButtonAction(HttpClient httpClient) {
+        messagesClient = buildNotificationMessagesClient(httpClient);
+        List recipients = new ArrayList<>();
+        recipients.add(RECIPIENT_IDENTIFIER);
+        List buttonActions =  new ArrayList<>();
+        buttonActions.add( new ButtonContent("no",  "No"));
+        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
+        SendMessageResult result = messagesClient.send(
+            new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage));
+
+        assertEquals(1, result.getReceipts().size());
+        assertNotNull(result.getReceipts().get(0).getMessageId());
+    }
+
+    @ParameterizedTest
+    @MethodSource("com.azure.core.test.TestBase#getHttpClients")
+    public void sendInteractiveMessageWithButtonActionWithImageHeader(HttpClient httpClient) {
+        messagesClient = buildNotificationMessagesClient(httpClient);
+        List recipients = new ArrayList<>();
+        recipients.add(RECIPIENT_IDENTIFIER);
+        List buttonActions =  new ArrayList<>();
+        buttonActions.add( new ButtonContent("no",  "No"));
+        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
+        interactiveMessage.setHeader(new ImageMessageContent("https://wallpapercave.com/wp/wp2163723.jpg"));
+        SendMessageResult result = messagesClient.send(
+            new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage));
+
+        assertEquals(1, result.getReceipts().size());
+        assertNotNull(result.getReceipts().get(0).getMessageId());
+    }
+
+    @ParameterizedTest
+    @MethodSource("com.azure.core.test.TestBase#getHttpClients")
+    public void sendInteractiveMessageWithButtonActionWithDocumentHeader(HttpClient httpClient) {
+        messagesClient = buildNotificationMessagesClient(httpClient);
+        List recipients = new ArrayList<>();
+        recipients.add(RECIPIENT_IDENTIFIER);
+        List buttonActions =  new ArrayList<>();
+        buttonActions.add( new ButtonContent("no",  "No"));
+        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
+        interactiveMessage.setHeader(new DocumentMessageContent("https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"));
+        SendMessageResult result = messagesClient.send(
+            new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage));
+
+        assertEquals(1, result.getReceipts().size());
+        assertNotNull(result.getReceipts().get(0).getMessageId());
+    }
+
+    @ParameterizedTest
+    @MethodSource("com.azure.core.test.TestBase#getHttpClients")
+    public void sendInteractiveMessageWithButtonActionWithVideoHeader(HttpClient httpClient) {
+        messagesClient = buildNotificationMessagesClient(httpClient);
+        List recipients = new ArrayList<>();
+        recipients.add(RECIPIENT_IDENTIFIER);
+        List buttonActions =  new ArrayList<>();
+        buttonActions.add( new ButtonContent("no",  "No"));
+        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Do you like it?"), new WhatsAppButtonActionBindings(buttonSet));
+        interactiveMessage.setHeader(new VideoMessageContent("https://sample-videos.com/audio/mp3/wave.mp3"));
+        SendMessageResult result = messagesClient.send(
+            new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage));
+
+        assertEquals(1, result.getReceipts().size());
+        assertNotNull(result.getReceipts().get(0).getMessageId());
+    }
+
+    @ParameterizedTest
+    @MethodSource("com.azure.core.test.TestBase#getHttpClients")
+    public void sendInteractiveMessageWithListAction(HttpClient httpClient) {
+        List group1 = new ArrayList<>();
+        group1.add(new ActionGroupItem("priority_express", "Priority Mail Express", "Delivered on same day!"));
+        group1.add(new ActionGroupItem("priority_mail", "Priority Mail", "Delivered in 1-2 days"));
+
+        List group2 = new ArrayList<>();
+        group2.add(new ActionGroupItem("usps_ground_advantage", "USPS Ground Advantage", "Delivered in 2-5 days"));
+        group2.add(new ActionGroupItem("media_mail", "Media Mail", "Delivered in 5-8 days"));
+
+        List options = new ArrayList<>();
+        options.add(new ActionGroup("Express Delivery", group1));
+        options.add(new ActionGroup("Normal Delivery", group2));
+
+        ActionGroupContent actionGroupContent = new ActionGroupContent("Shipping Options", options);
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("Which shipping option do you want?"), new WhatsAppListActionBindings(actionGroupContent));
+        interactiveMessage.setFooter(new TextMessageContent("Eagle Logistic"));
+        interactiveMessage.setHeader(new TextMessageContent("Shipping Options"));
+
+        messagesClient = buildNotificationMessagesClient(httpClient);
+        List recipients = new ArrayList<>();
+        recipients.add(RECIPIENT_IDENTIFIER);
+        SendMessageResult result = messagesClient.send(
+            new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage));
+
+        assertEquals(1, result.getReceipts().size());
+        assertNotNull(result.getReceipts().get(0).getMessageId());
+    }
+
+    @ParameterizedTest
+    @MethodSource("com.azure.core.test.TestBase#getHttpClients")
+    public void sendInteractiveMessageWithUrlAction(HttpClient httpClient) {
+        LinkContent urlAction = new LinkContent("Rocket is the best!", "https://wallpapercave.com/wp/wp2163723.jpg");
+        InteractiveMessage interactiveMessage = new InteractiveMessage(
+            new TextMessageContent("The best Guardian of Galaxy"), new WhatsAppUrlActionBindings(urlAction));
+        interactiveMessage.setFooter(new TextMessageContent("Intergalactic New Ltd"));
+
+        messagesClient = buildNotificationMessagesClient(httpClient);
+        List recipients = new ArrayList<>();
+        recipients.add(RECIPIENT_IDENTIFIER);
+        SendMessageResult result = messagesClient.send(
+            new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage));
+
+        assertEquals(1, result.getReceipts().size());
+        assertNotNull(result.getReceipts().get(0).getMessageId());
+    }
+
     @ParameterizedTest
     @MethodSource("com.azure.core.test.TestBase#getHttpClients")
     public void shouldSendMessageImageTemplate(HttpClient httpClient) {

From 0f27f50dd509d6cf6e0600db8999f0d5ab9bd529 Mon Sep 17 00:00:00 2001
From: Arif Ibrahim Mohamed 
Date: Tue, 14 Jan 2025 10:34:29 -0500
Subject: [PATCH 07/10] updated the test recording

---
 .../azure-communication-messages/assets.json  |  2 +-
 .../NotificationMessageAsyncClientTest.java   | 63 +++++++++++-------
 .../NotificationMessagesClientTest.java       | 64 ++++++++++---------
 3 files changed, 73 insertions(+), 56 deletions(-)

diff --git a/sdk/communication/azure-communication-messages/assets.json b/sdk/communication/azure-communication-messages/assets.json
index 99d7da0bd362f..53b52dceaf2b6 100644
--- a/sdk/communication/azure-communication-messages/assets.json
+++ b/sdk/communication/azure-communication-messages/assets.json
@@ -2,5 +2,5 @@
   "AssetsRepo" : "Azure/azure-sdk-assets",
   "AssetsRepoPrefixPath" : "java",
   "TagPrefix" : "java/communication/azure-communication-messages",
-  "Tag" : "java/communication/azure-communication-messages_d7c7441f3b"
+  "Tag" : "java/communication/azure-communication-messages_b6d2e1239f"
 }
diff --git a/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessageAsyncClientTest.java b/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessageAsyncClientTest.java
index 086273672f1ff..d68a6ec783f21 100644
--- a/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessageAsyncClientTest.java
+++ b/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessageAsyncClientTest.java
@@ -104,7 +104,8 @@ public void sendStickerMessage(HttpClient httpClient) {
         messagesClient = buildNotificationMessagesAsyncClient(httpClient);
         List recipients = new ArrayList<>();
         recipients.add(RECIPIENT_IDENTIFIER);
-        StepVerifier.create(messagesClient.send(new StickerNotificationContent(CHANNEL_REGISTRATION_ID, recipients, mediaUrl)))
+        StepVerifier
+            .create(messagesClient.send(new StickerNotificationContent(CHANNEL_REGISTRATION_ID, recipients, mediaUrl)))
             .assertNext(resp -> {
                 assertEquals(1, resp.getReceipts().size());
                 assertNotNull(resp.getReceipts().get(0).getMessageId());
@@ -118,13 +119,15 @@ public void sendInteractiveMessageWithButtonAction(HttpClient httpClient) {
         messagesClient = buildNotificationMessagesAsyncClient(httpClient);
         List recipients = new ArrayList<>();
         recipients.add(RECIPIENT_IDENTIFIER);
-        List buttonActions =  new ArrayList<>();
-        buttonActions.add( new ButtonContent("no",  "No"));
-        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        List buttonActions = new ArrayList<>();
+        buttonActions.add(new ButtonContent("no", "No"));
+        buttonActions.add(new ButtonContent("yes", "Yes"));
         ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
         InteractiveMessage interactiveMessage = new InteractiveMessage(
             new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
-        StepVerifier.create(messagesClient.send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage)))
+        StepVerifier
+            .create(messagesClient
+                .send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID, recipients, interactiveMessage)))
             .assertNext(resp -> {
                 assertEquals(1, resp.getReceipts().size());
                 assertNotNull(resp.getReceipts().get(0).getMessageId());
@@ -138,14 +141,16 @@ public void sendInteractiveMessageWithButtonActionWithImageHeader(HttpClient htt
         messagesClient = buildNotificationMessagesAsyncClient(httpClient);
         List recipients = new ArrayList<>();
         recipients.add(RECIPIENT_IDENTIFIER);
-        List buttonActions =  new ArrayList<>();
-        buttonActions.add( new ButtonContent("no",  "No"));
-        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        List buttonActions = new ArrayList<>();
+        buttonActions.add(new ButtonContent("no", "No"));
+        buttonActions.add(new ButtonContent("yes", "Yes"));
         ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
         InteractiveMessage interactiveMessage = new InteractiveMessage(
             new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
         interactiveMessage.setHeader(new ImageMessageContent("https://wallpapercave.com/wp/wp2163723.jpg"));
-        StepVerifier.create(messagesClient.send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage)))
+        StepVerifier
+            .create(messagesClient
+                .send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID, recipients, interactiveMessage)))
             .assertNext(resp -> {
                 assertEquals(1, resp.getReceipts().size());
                 assertNotNull(resp.getReceipts().get(0).getMessageId());
@@ -159,14 +164,17 @@ public void sendInteractiveMessageWithButtonActionWithDocumentHeader(HttpClient
         messagesClient = buildNotificationMessagesAsyncClient(httpClient);
         List recipients = new ArrayList<>();
         recipients.add(RECIPIENT_IDENTIFIER);
-        List buttonActions =  new ArrayList<>();
-        buttonActions.add( new ButtonContent("no",  "No"));
-        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        List buttonActions = new ArrayList<>();
+        buttonActions.add(new ButtonContent("no", "No"));
+        buttonActions.add(new ButtonContent("yes", "Yes"));
         ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
         InteractiveMessage interactiveMessage = new InteractiveMessage(
             new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
-        interactiveMessage.setHeader(new DocumentMessageContent("https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"));
-        StepVerifier.create(messagesClient.send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage)))
+        interactiveMessage.setHeader(
+            new DocumentMessageContent("https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"));
+        StepVerifier
+            .create(messagesClient
+                .send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID, recipients, interactiveMessage)))
             .assertNext(resp -> {
                 assertEquals(1, resp.getReceipts().size());
                 assertNotNull(resp.getReceipts().get(0).getMessageId());
@@ -180,14 +188,16 @@ public void sendInteractiveMessageWithButtonActionWithVideoHeader(HttpClient htt
         messagesClient = buildNotificationMessagesAsyncClient(httpClient);
         List recipients = new ArrayList<>();
         recipients.add(RECIPIENT_IDENTIFIER);
-        List buttonActions =  new ArrayList<>();
-        buttonActions.add( new ButtonContent("no",  "No"));
-        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        List buttonActions = new ArrayList<>();
+        buttonActions.add(new ButtonContent("no", "No"));
+        buttonActions.add(new ButtonContent("yes", "Yes"));
         ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
-        InteractiveMessage interactiveMessage = new InteractiveMessage(
-            new TextMessageContent("Do you like it?"), new WhatsAppButtonActionBindings(buttonSet));
+        InteractiveMessage interactiveMessage = new InteractiveMessage(new TextMessageContent("Do you like it?"),
+            new WhatsAppButtonActionBindings(buttonSet));
         interactiveMessage.setHeader(new VideoMessageContent("https://sample-videos.com/audio/mp3/wave.mp3"));
-        StepVerifier.create(messagesClient.send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage)))
+        StepVerifier
+            .create(messagesClient
+                .send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID, recipients, interactiveMessage)))
             .assertNext(resp -> {
                 assertEquals(1, resp.getReceipts().size());
                 assertNotNull(resp.getReceipts().get(0).getMessageId());
@@ -211,15 +221,18 @@ public void sendInteractiveMessageWithListAction(HttpClient httpClient) {
         options.add(new ActionGroup("Normal Delivery", group2));
 
         ActionGroupContent actionGroupContent = new ActionGroupContent("Shipping Options", options);
-        InteractiveMessage interactiveMessage = new InteractiveMessage(
-            new TextMessageContent("Which shipping option do you want?"), new WhatsAppListActionBindings(actionGroupContent));
+        InteractiveMessage interactiveMessage
+            = new InteractiveMessage(new TextMessageContent("Which shipping option do you want?"),
+                new WhatsAppListActionBindings(actionGroupContent));
         interactiveMessage.setFooter(new TextMessageContent("Eagle Logistic"));
         interactiveMessage.setHeader(new TextMessageContent("Shipping Options"));
 
         messagesClient = buildNotificationMessagesAsyncClient(httpClient);
         List recipients = new ArrayList<>();
         recipients.add(RECIPIENT_IDENTIFIER);
-        StepVerifier.create(messagesClient.send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage)))
+        StepVerifier
+            .create(messagesClient
+                .send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID, recipients, interactiveMessage)))
             .assertNext(resp -> {
                 assertEquals(1, resp.getReceipts().size());
                 assertNotNull(resp.getReceipts().get(0).getMessageId());
@@ -238,7 +251,9 @@ public void sendInteractiveMessageWithUrlAction(HttpClient httpClient) {
         messagesClient = buildNotificationMessagesAsyncClient(httpClient);
         List recipients = new ArrayList<>();
         recipients.add(RECIPIENT_IDENTIFIER);
-        StepVerifier.create(messagesClient.send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage)))
+        StepVerifier
+            .create(messagesClient
+                .send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID, recipients, interactiveMessage)))
             .assertNext(resp -> {
                 assertEquals(1, resp.getReceipts().size());
                 assertNotNull(resp.getReceipts().get(0).getMessageId());
diff --git a/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessagesClientTest.java b/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessagesClientTest.java
index 15f11d4dc4c3d..5c539b99448b2 100644
--- a/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessagesClientTest.java
+++ b/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessagesClientTest.java
@@ -121,8 +121,8 @@ public void sendStickerMessage(HttpClient httpClient) {
         messagesClient = buildNotificationMessagesClient(httpClient);
         List recipients = new ArrayList<>();
         recipients.add(RECIPIENT_IDENTIFIER);
-        SendMessageResult result = messagesClient.send(
-            new StickerNotificationContent(CHANNEL_REGISTRATION_ID, recipients, mediaUrl));
+        SendMessageResult result
+            = messagesClient.send(new StickerNotificationContent(CHANNEL_REGISTRATION_ID, recipients, mediaUrl));
 
         assertEquals(1, result.getReceipts().size());
         assertNotNull(result.getReceipts().get(0).getMessageId());
@@ -134,14 +134,14 @@ public void sendInteractiveMessageWithButtonAction(HttpClient httpClient) {
         messagesClient = buildNotificationMessagesClient(httpClient);
         List recipients = new ArrayList<>();
         recipients.add(RECIPIENT_IDENTIFIER);
-        List buttonActions =  new ArrayList<>();
-        buttonActions.add( new ButtonContent("no",  "No"));
-        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        List buttonActions = new ArrayList<>();
+        buttonActions.add(new ButtonContent("no", "No"));
+        buttonActions.add(new ButtonContent("yes", "Yes"));
         ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
         InteractiveMessage interactiveMessage = new InteractiveMessage(
             new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
-        SendMessageResult result = messagesClient.send(
-            new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage));
+        SendMessageResult result = messagesClient
+            .send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID, recipients, interactiveMessage));
 
         assertEquals(1, result.getReceipts().size());
         assertNotNull(result.getReceipts().get(0).getMessageId());
@@ -153,15 +153,15 @@ public void sendInteractiveMessageWithButtonActionWithImageHeader(HttpClient htt
         messagesClient = buildNotificationMessagesClient(httpClient);
         List recipients = new ArrayList<>();
         recipients.add(RECIPIENT_IDENTIFIER);
-        List buttonActions =  new ArrayList<>();
-        buttonActions.add( new ButtonContent("no",  "No"));
-        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        List buttonActions = new ArrayList<>();
+        buttonActions.add(new ButtonContent("no", "No"));
+        buttonActions.add(new ButtonContent("yes", "Yes"));
         ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
         InteractiveMessage interactiveMessage = new InteractiveMessage(
             new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
         interactiveMessage.setHeader(new ImageMessageContent("https://wallpapercave.com/wp/wp2163723.jpg"));
-        SendMessageResult result = messagesClient.send(
-            new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage));
+        SendMessageResult result = messagesClient
+            .send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID, recipients, interactiveMessage));
 
         assertEquals(1, result.getReceipts().size());
         assertNotNull(result.getReceipts().get(0).getMessageId());
@@ -173,15 +173,16 @@ public void sendInteractiveMessageWithButtonActionWithDocumentHeader(HttpClient
         messagesClient = buildNotificationMessagesClient(httpClient);
         List recipients = new ArrayList<>();
         recipients.add(RECIPIENT_IDENTIFIER);
-        List buttonActions =  new ArrayList<>();
-        buttonActions.add( new ButtonContent("no",  "No"));
-        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        List buttonActions = new ArrayList<>();
+        buttonActions.add(new ButtonContent("no", "No"));
+        buttonActions.add(new ButtonContent("yes", "Yes"));
         ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
         InteractiveMessage interactiveMessage = new InteractiveMessage(
             new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
-        interactiveMessage.setHeader(new DocumentMessageContent("https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"));
-        SendMessageResult result = messagesClient.send(
-            new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage));
+        interactiveMessage.setHeader(
+            new DocumentMessageContent("https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"));
+        SendMessageResult result = messagesClient
+            .send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID, recipients, interactiveMessage));
 
         assertEquals(1, result.getReceipts().size());
         assertNotNull(result.getReceipts().get(0).getMessageId());
@@ -193,15 +194,15 @@ public void sendInteractiveMessageWithButtonActionWithVideoHeader(HttpClient htt
         messagesClient = buildNotificationMessagesClient(httpClient);
         List recipients = new ArrayList<>();
         recipients.add(RECIPIENT_IDENTIFIER);
-        List buttonActions =  new ArrayList<>();
-        buttonActions.add( new ButtonContent("no",  "No"));
-        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        List buttonActions = new ArrayList<>();
+        buttonActions.add(new ButtonContent("no", "No"));
+        buttonActions.add(new ButtonContent("yes", "Yes"));
         ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
-        InteractiveMessage interactiveMessage = new InteractiveMessage(
-            new TextMessageContent("Do you like it?"), new WhatsAppButtonActionBindings(buttonSet));
+        InteractiveMessage interactiveMessage = new InteractiveMessage(new TextMessageContent("Do you like it?"),
+            new WhatsAppButtonActionBindings(buttonSet));
         interactiveMessage.setHeader(new VideoMessageContent("https://sample-videos.com/audio/mp3/wave.mp3"));
-        SendMessageResult result = messagesClient.send(
-            new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage));
+        SendMessageResult result = messagesClient
+            .send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID, recipients, interactiveMessage));
 
         assertEquals(1, result.getReceipts().size());
         assertNotNull(result.getReceipts().get(0).getMessageId());
@@ -223,16 +224,17 @@ public void sendInteractiveMessageWithListAction(HttpClient httpClient) {
         options.add(new ActionGroup("Normal Delivery", group2));
 
         ActionGroupContent actionGroupContent = new ActionGroupContent("Shipping Options", options);
-        InteractiveMessage interactiveMessage = new InteractiveMessage(
-            new TextMessageContent("Which shipping option do you want?"), new WhatsAppListActionBindings(actionGroupContent));
+        InteractiveMessage interactiveMessage
+            = new InteractiveMessage(new TextMessageContent("Which shipping option do you want?"),
+                new WhatsAppListActionBindings(actionGroupContent));
         interactiveMessage.setFooter(new TextMessageContent("Eagle Logistic"));
         interactiveMessage.setHeader(new TextMessageContent("Shipping Options"));
 
         messagesClient = buildNotificationMessagesClient(httpClient);
         List recipients = new ArrayList<>();
         recipients.add(RECIPIENT_IDENTIFIER);
-        SendMessageResult result = messagesClient.send(
-            new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage));
+        SendMessageResult result = messagesClient
+            .send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID, recipients, interactiveMessage));
 
         assertEquals(1, result.getReceipts().size());
         assertNotNull(result.getReceipts().get(0).getMessageId());
@@ -249,8 +251,8 @@ public void sendInteractiveMessageWithUrlAction(HttpClient httpClient) {
         messagesClient = buildNotificationMessagesClient(httpClient);
         List recipients = new ArrayList<>();
         recipients.add(RECIPIENT_IDENTIFIER);
-        SendMessageResult result = messagesClient.send(
-            new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID,  recipients, interactiveMessage));
+        SendMessageResult result = messagesClient
+            .send(new InteractiveNotificationContent(CHANNEL_REGISTRATION_ID, recipients, interactiveMessage));
 
         assertEquals(1, result.getReceipts().size());
         assertNotNull(result.getReceipts().get(0).getMessageId());

From b7703291c2ea4b8d83f26e3cd7504a58862cf33b Mon Sep 17 00:00:00 2001
From: Arif Ibrahim Mohamed 
Date: Thu, 16 Jan 2025 19:01:18 -0500
Subject: [PATCH 08/10] build fix

---
 .../azure-communication-messages/CHANGELOG.md |  2 +-
 .../main/java/MessagesSdkCustomization.java   | 24 ++++++++++--
 .../messages/models/ActionBindings.java       |  1 +
 .../messages/models/MessageContent.java       |  1 +
 .../messages/NotificationMessageSample.java   | 37 ++++++++++++++++++-
 .../CommunicationMessagesTestBase.java        |  2 +-
 .../NotificationMessagesClientTest.java       |  4 +-
 .../tsp-location.yaml                         |  2 +-
 8 files changed, 62 insertions(+), 11 deletions(-)

diff --git a/sdk/communication/azure-communication-messages/CHANGELOG.md b/sdk/communication/azure-communication-messages/CHANGELOG.md
index c6918e3220d02..e0585c127188e 100644
--- a/sdk/communication/azure-communication-messages/CHANGELOG.md
+++ b/sdk/communication/azure-communication-messages/CHANGELOG.md
@@ -1,6 +1,6 @@
 # Release History
 
-## 1.2.0-beta.1 (Unreleased)
+## 1.2.0-beta.1 (2025-01-15)
 
 ### Features Added
 - Added Interactive Message.
diff --git a/sdk/communication/azure-communication-messages/customization/src/main/java/MessagesSdkCustomization.java b/sdk/communication/azure-communication-messages/customization/src/main/java/MessagesSdkCustomization.java
index 62f3b2aa49f77..53d1116ef1851 100644
--- a/sdk/communication/azure-communication-messages/customization/src/main/java/MessagesSdkCustomization.java
+++ b/sdk/communication/azure-communication-messages/customization/src/main/java/MessagesSdkCustomization.java
@@ -40,15 +40,17 @@ public void customize(LibraryCustomization libraryCustomization, Logger logger)
         //Handle Interactive message content models
         updateModelClassModifierToAbstract(modelsPackage, "MessageContent");
         updateModelClassModifierToAbstract(modelsPackage, "ActionBindings");
+        updateJavaDocForMethodFromJson(modelsPackage, "ActionBindings");
+        updateJavaDocForMethodFromJson(modelsPackage, "MessageContent");
         customizeInteractiveMessage(modelsPackage);
 
         PackageCustomization channelsModelsPackage = libraryCustomization.getPackage(
             "com.azure.communication.messages.models.channels");
         updateWhatsAppMessageTemplateItemWithBinaryDataContent(channelsModelsPackage);
 
-        AddDeprecateAnnotationToMediaNotificationContent(modelsPackage);
+        addDeprecateAnnotationToMediaNotificationContent(modelsPackage);
 
-        AddDeprecateAnnotationForImageV0CommunicationKind(modelsPackage);
+        addDeprecateAnnotationForImageV0CommunicationKind(modelsPackage);
     }
 
     private void updateModelClassModifierToAbstract(PackageCustomization modelsPackage, String className) {
@@ -255,7 +257,7 @@ private void removeJsonKnownDiscriminatorMethod(PackageCustomization modelPackag
         });
     }
 
-    private void AddDeprecateAnnotationToMediaNotificationContent(PackageCustomization modelsPackage) {
+    private void addDeprecateAnnotationToMediaNotificationContent(PackageCustomization modelsPackage) {
         modelsPackage.getClass("MediaNotificationContent").customizeAst(ast -> {
             ast.getClassByName("MediaNotificationContent").ifPresent(clazz -> {
                 clazz.addAnnotation(Deprecated.class);
@@ -271,7 +273,7 @@ private void AddDeprecateAnnotationToMediaNotificationContent(PackageCustomizati
         });
     }
 
-    private  void AddDeprecateAnnotationForImageV0CommunicationKind(PackageCustomization modelsPackage) {
+    private  void addDeprecateAnnotationForImageV0CommunicationKind(PackageCustomization modelsPackage) {
         modelsPackage.getClass("CommunicationMessageKind").customizeAst(ast -> {
             ast.getClassByName("CommunicationMessageKind")
                 .flatMap(clazz -> clazz.getFieldByName("IMAGE_V0"))
@@ -289,4 +291,18 @@ private  void AddDeprecateAnnotationForImageV0CommunicationKind(PackageCustomiza
                 });
         });
     }
+
+    private void updateJavaDocForMethodFromJson(PackageCustomization modelPackage, String className) {
+        String originalDocText = String.format("@throws IOException If an error occurs while reading the %s.", className);
+        modelPackage.getClass(className).customizeAst(ast -> {
+            ast.getClassByName(className).ifPresent( clazz -> {
+                String fromJsonDoc = clazz.getMethodsByName("fromJson")
+                    .get(0).getJavadoc().get().toText()
+                    .replace(originalDocText,
+                        "@throws IllegalStateException If the deserialized JSON object was missing any required properties.\n" +
+                            originalDocText);
+                clazz.getMethodsByName("fromJson").get(0).setJavadocComment(fromJsonDoc);
+            });
+        });
+    }
 }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionBindings.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionBindings.java
index e062c50048835..e11152962e27e 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionBindings.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionBindings.java
@@ -60,6 +60,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
      * @param jsonReader The JsonReader being read.
      * @return An instance of ActionBindings if the JsonReader was pointing to an instance of it, or null if it was
      * pointing to JSON null.
+     * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
      * @throws IOException If an error occurs while reading the ActionBindings.
      */
     @Generated
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageContent.java
index 092728c2d2c85..55eab96b6f6df 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/MessageContent.java
@@ -57,6 +57,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
      * @param jsonReader The JsonReader being read.
      * @return An instance of MessageContent if the JsonReader was pointing to an instance of it, or null if it was
      * pointing to JSON null.
+     * @throws IllegalStateException If the deserialized JSON object was missing any required properties.
      * @throws IOException If an error occurs while reading the MessageContent.
      */
     @Generated
diff --git a/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/NotificationMessageSample.java b/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/NotificationMessageSample.java
index 407debee13747..f336fbfe1f3be 100644
--- a/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/NotificationMessageSample.java
+++ b/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/NotificationMessageSample.java
@@ -3,8 +3,41 @@
 
 package com.azure.communication.messages;
 
-import com.azure.communication.messages.models.*;
-import com.azure.communication.messages.models.channels.*;
+import com.azure.communication.messages.models.ActionGroup;
+import com.azure.communication.messages.models.ActionGroupContent;
+import com.azure.communication.messages.models.ActionGroupItem;
+import com.azure.communication.messages.models.AudioNotificationContent;
+import com.azure.communication.messages.models.ButtonContent;
+import com.azure.communication.messages.models.ButtonSetContent;
+import com.azure.communication.messages.models.DocumentMessageContent;
+import com.azure.communication.messages.models.DocumentNotificationContent;
+import com.azure.communication.messages.models.ImageMessageContent;
+import com.azure.communication.messages.models.ImageNotificationContent;
+import com.azure.communication.messages.models.InteractiveMessage;
+import com.azure.communication.messages.models.InteractiveNotificationContent;
+import com.azure.communication.messages.models.MessageTemplate;
+import com.azure.communication.messages.models.MessageTemplateBindings;
+import com.azure.communication.messages.models.MessageTemplateDocument;
+import com.azure.communication.messages.models.MessageTemplateImage;
+import com.azure.communication.messages.models.MessageTemplateQuickAction;
+import com.azure.communication.messages.models.MessageTemplateText;
+import com.azure.communication.messages.models.MessageTemplateValue;
+import com.azure.communication.messages.models.MessageTemplateVideo;
+import com.azure.communication.messages.models.LinkContent;
+import com.azure.communication.messages.models.StickerNotificationContent;
+import com.azure.communication.messages.models.TextMessageContent;
+import com.azure.communication.messages.models.TextNotificationContent;
+import com.azure.communication.messages.models.TemplateNotificationContent;
+import com.azure.communication.messages.models.VideoMessageContent;
+import com.azure.communication.messages.models.VideoNotificationContent;
+import com.azure.communication.messages.models.SendMessageResult;
+import com.azure.communication.messages.models.channels.WhatsAppButtonActionBindings;
+import com.azure.communication.messages.models.channels.WhatsAppMessageButtonSubType;
+import com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindings;
+import com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindingsButton;
+import com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindingsComponent;
+import com.azure.communication.messages.models.channels.WhatsAppListActionBindings;
+import com.azure.communication.messages.models.channels.WhatsAppUrlActionBindings;
 import com.azure.core.credential.AzureKeyCredential;
 import com.azure.core.credential.TokenCredential;
 import com.azure.identity.DefaultAzureCredentialBuilder;
diff --git a/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/CommunicationMessagesTestBase.java b/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/CommunicationMessagesTestBase.java
index 69595e96905d9..da4384e7f389b 100644
--- a/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/CommunicationMessagesTestBase.java
+++ b/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/CommunicationMessagesTestBase.java
@@ -28,7 +28,7 @@ public class CommunicationMessagesTestBase extends TestProxyTestBase {
             "endpoint=https://REDACTED.int.communication.azure.net;accessKey=secret");
 
     protected static final String CHANNEL_REGISTRATION_ID = Configuration.getGlobalConfiguration()
-        .get("SENDER_CHANNEL_REGISTRATION_ID", "bc73327d-d246-4983-9e13-284468af7240");
+        .get("SENDER_CHANNEL_REGISTRATION_ID", "77ffd898-ec44-42cd-b560-57a8903d05c7");
 
     protected static final String RECIPIENT_IDENTIFIER
         = Configuration.getGlobalConfiguration().get("RECIPIENT_IDENTIFIER", "+11234567788");
diff --git a/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessagesClientTest.java b/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessagesClientTest.java
index 5c539b99448b2..4181a65c388b9 100644
--- a/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessagesClientTest.java
+++ b/sdk/communication/azure-communication-messages/src/test/java/com/azure/communication/messages/NotificationMessagesClientTest.java
@@ -217,7 +217,7 @@ public void sendInteractiveMessageWithListAction(HttpClient httpClient) {
 
         List group2 = new ArrayList<>();
         group2.add(new ActionGroupItem("usps_ground_advantage", "USPS Ground Advantage", "Delivered in 2-5 days"));
-        group2.add(new ActionGroupItem("media_mail", "Media Mail", "Delivered in 5-8 days"));
+        group2.add(new ActionGroupItem("usps_mail", "USPS Mail", "Delivered in 5-8 days"));
 
         List options = new ArrayList<>();
         options.add(new ActionGroup("Express Delivery", group1));
@@ -246,7 +246,7 @@ public void sendInteractiveMessageWithUrlAction(HttpClient httpClient) {
         LinkContent urlAction = new LinkContent("Rocket is the best!", "https://wallpapercave.com/wp/wp2163723.jpg");
         InteractiveMessage interactiveMessage = new InteractiveMessage(
             new TextMessageContent("The best Guardian of Galaxy"), new WhatsAppUrlActionBindings(urlAction));
-        interactiveMessage.setFooter(new TextMessageContent("Intergalactic New Ltd"));
+        interactiveMessage.setFooter(new TextMessageContent("Intergalactic News Ltd"));
 
         messagesClient = buildNotificationMessagesClient(httpClient);
         List recipients = new ArrayList<>();
diff --git a/sdk/communication/azure-communication-messages/tsp-location.yaml b/sdk/communication/azure-communication-messages/tsp-location.yaml
index 52bef653033e5..226175670e898 100644
--- a/sdk/communication/azure-communication-messages/tsp-location.yaml
+++ b/sdk/communication/azure-communication-messages/tsp-location.yaml
@@ -1,4 +1,4 @@
 directory: specification/communication/Communication.Messages
-commit: 27df71cc8589a99921d56902e20d7e0697d54da8
+commit: 8f0670c04a112cdf6f5ca107f62fc66916ef8441
 repo: Azure/azure-rest-api-specs
 additionalDirectories: null

From 26283eaf7871859d71ac87a4bfed44207876e961 Mon Sep 17 00:00:00 2001
From: Arif Ibrahim Mohamed 
Date: Thu, 16 Jan 2025 22:29:18 -0500
Subject: [PATCH 09/10] build fixes

---
 .../messages/NotificationMessageSample.java   | 16 +++---
 .../communication/messages/ReadmeSamples.java | 49 +++++++++++++++----
 2 files changed, 47 insertions(+), 18 deletions(-)

diff --git a/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/NotificationMessageSample.java b/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/NotificationMessageSample.java
index f336fbfe1f3be..f4e21e28c29f9 100644
--- a/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/NotificationMessageSample.java
+++ b/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/NotificationMessageSample.java
@@ -430,8 +430,8 @@ public static void sendStickerMessage() {
     public static void sendInteractiveMessageWithButtonAction() {
         NotificationMessagesClient client = createClientWithConnectionString();
         List buttonActions =  new ArrayList<>();
-        buttonActions.add( new ButtonContent("no",  "No"));
-        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        buttonActions.add(new ButtonContent("no",  "No"));
+        buttonActions.add(new ButtonContent("yes",  "Yes"));
         ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
         InteractiveMessage interactiveMessage = new InteractiveMessage(
             new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
@@ -448,8 +448,8 @@ public static void sendInteractiveMessageWithButtonAction() {
     public static void sendInteractiveMessageWithButtonActionWithImageHeader() {
         NotificationMessagesClient client = createClientWithConnectionString();
         List buttonActions =  new ArrayList<>();
-        buttonActions.add( new ButtonContent("no",  "No"));
-        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        buttonActions.add(new ButtonContent("no",  "No"));
+        buttonActions.add(new ButtonContent("yes",  "Yes"));
         ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
         InteractiveMessage interactiveMessage = new InteractiveMessage(
             new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
@@ -467,8 +467,8 @@ public static void sendInteractiveMessageWithButtonActionWithImageHeader() {
     public static void sendInteractiveMessageWithButtonActionWithDocumentHeader() {
         NotificationMessagesClient client = createClientWithConnectionString();
         List buttonActions =  new ArrayList<>();
-        buttonActions.add( new ButtonContent("no",  "No"));
-        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        buttonActions.add(new ButtonContent("no",  "No"));
+        buttonActions.add(new ButtonContent("yes",  "Yes"));
         ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
         InteractiveMessage interactiveMessage = new InteractiveMessage(
             new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
@@ -486,8 +486,8 @@ public static void sendInteractiveMessageWithButtonActionWithDocumentHeader() {
     public static void sendInteractiveMessageWithButtonActionWithVideoHeader() {
         NotificationMessagesClient client = createClientWithConnectionString();
         List buttonActions =  new ArrayList<>();
-        buttonActions.add( new ButtonContent("no",  "No"));
-        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        buttonActions.add(new ButtonContent("no",  "No"));
+        buttonActions.add(new ButtonContent("yes",  "Yes"));
         ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
         InteractiveMessage interactiveMessage = new InteractiveMessage(
             new TextMessageContent("Do you like it?"), new WhatsAppButtonActionBindings(buttonSet));
diff --git a/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/ReadmeSamples.java b/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/ReadmeSamples.java
index 5813f4c68e148..7be8c8dec1187 100644
--- a/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/ReadmeSamples.java
+++ b/sdk/communication/azure-communication-messages/src/samples/java/com/azure/communication/messages/ReadmeSamples.java
@@ -4,8 +4,37 @@
 
 package com.azure.communication.messages;
 
-import com.azure.communication.messages.models.*;
-import com.azure.communication.messages.models.channels.*;
+import com.azure.communication.messages.models.ActionGroup;
+import com.azure.communication.messages.models.ActionGroupContent;
+import com.azure.communication.messages.models.ActionGroupItem;
+import com.azure.communication.messages.models.AudioNotificationContent;
+import com.azure.communication.messages.models.ButtonContent;
+import com.azure.communication.messages.models.ButtonSetContent;
+import com.azure.communication.messages.models.DocumentMessageContent;
+import com.azure.communication.messages.models.DocumentNotificationContent;
+import com.azure.communication.messages.models.ImageMessageContent;
+import com.azure.communication.messages.models.ImageNotificationContent;
+import com.azure.communication.messages.models.InteractiveMessage;
+import com.azure.communication.messages.models.InteractiveNotificationContent;
+import com.azure.communication.messages.models.MessageTemplate;
+import com.azure.communication.messages.models.MessageTemplateBindings;
+import com.azure.communication.messages.models.MessageTemplateItem;
+import com.azure.communication.messages.models.MessageTemplateText;
+import com.azure.communication.messages.models.MessageTemplateValue;
+import com.azure.communication.messages.models.LinkContent;
+import com.azure.communication.messages.models.StickerNotificationContent;
+import com.azure.communication.messages.models.TextMessageContent;
+import com.azure.communication.messages.models.TextNotificationContent;
+import com.azure.communication.messages.models.TemplateNotificationContent;
+import com.azure.communication.messages.models.VideoMessageContent;
+import com.azure.communication.messages.models.VideoNotificationContent;
+import com.azure.communication.messages.models.SendMessageResult;
+import com.azure.communication.messages.models.channels.WhatsAppButtonActionBindings;
+import com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindings;
+import com.azure.communication.messages.models.channels.WhatsAppMessageTemplateBindingsComponent;
+import com.azure.communication.messages.models.channels.WhatsAppMessageTemplateItem;
+import com.azure.communication.messages.models.channels.WhatsAppListActionBindings;
+import com.azure.communication.messages.models.channels.WhatsAppUrlActionBindings;
 import com.azure.core.credential.AzureKeyCredential;
 import com.azure.core.credential.TokenCredential;
 import com.azure.core.http.rest.PagedIterable;
@@ -259,8 +288,8 @@ public void sendInteractiveMessageWithButtonAction() {
             .connectionString("")
             .buildClient();
         List buttonActions =  new ArrayList<>();
-        buttonActions.add( new ButtonContent("no",  "No"));
-        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        buttonActions.add(new ButtonContent("no",  "No"));
+        buttonActions.add(new ButtonContent("yes",  "Yes"));
         ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
         InteractiveMessage interactiveMessage = new InteractiveMessage(
             new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
@@ -283,8 +312,8 @@ public void sendInteractiveMessageWithButtonActionWithImageHeader() {
             .connectionString("")
             .buildClient();
         List buttonActions =  new ArrayList<>();
-        buttonActions.add( new ButtonContent("no",  "No"));
-        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        buttonActions.add(new ButtonContent("no",  "No"));
+        buttonActions.add(new ButtonContent("yes",  "Yes"));
         ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
         InteractiveMessage interactiveMessage = new InteractiveMessage(
             new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
@@ -308,8 +337,8 @@ public static void sendInteractiveMessageWithButtonActionWithDocumentHeader() {
             .connectionString("")
             .buildClient();
         List buttonActions =  new ArrayList<>();
-        buttonActions.add( new ButtonContent("no",  "No"));
-        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        buttonActions.add(new ButtonContent("no",  "No"));
+        buttonActions.add(new ButtonContent("yes",  "Yes"));
         ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
         InteractiveMessage interactiveMessage = new InteractiveMessage(
             new TextMessageContent("Do you want to proceed?"), new WhatsAppButtonActionBindings(buttonSet));
@@ -334,8 +363,8 @@ public static void sendInteractiveMessageWithButtonActionWithVideoHeader() {
             .connectionString("")
             .buildClient();
         List buttonActions =  new ArrayList<>();
-        buttonActions.add( new ButtonContent("no",  "No"));
-        buttonActions.add( new ButtonContent("yes",  "Yes"));
+        buttonActions.add(new ButtonContent("no",  "No"));
+        buttonActions.add(new ButtonContent("yes",  "Yes"));
         ButtonSetContent buttonSet = new ButtonSetContent(buttonActions);
         InteractiveMessage interactiveMessage = new InteractiveMessage(
             new TextMessageContent("Do you like it?"), new WhatsAppButtonActionBindings(buttonSet));

From d5759aa99517066bd54f101eb1bde71b4f99b31f Mon Sep 17 00:00:00 2001
From: Arif Ibrahim Mohamed 
Date: Fri, 17 Jan 2025 08:31:05 -0500
Subject: [PATCH 10/10] spotbugs fixes

---
 .../main/java/MessagesSdkCustomization.java   | 59 +++++++++++++++++++
 .../messages/models/ActionGroup.java          |  5 +-
 .../messages/models/ActionGroupContent.java   |  5 +-
 .../messages/models/ButtonSetContent.java     |  5 +-
 4 files changed, 68 insertions(+), 6 deletions(-)

diff --git a/sdk/communication/azure-communication-messages/customization/src/main/java/MessagesSdkCustomization.java b/sdk/communication/azure-communication-messages/customization/src/main/java/MessagesSdkCustomization.java
index 53d1116ef1851..af713de649aed 100644
--- a/sdk/communication/azure-communication-messages/customization/src/main/java/MessagesSdkCustomization.java
+++ b/sdk/communication/azure-communication-messages/customization/src/main/java/MessagesSdkCustomization.java
@@ -17,6 +17,7 @@
 import com.github.javaparser.javadoc.description.JavadocSnippet;
 import org.slf4j.Logger;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -51,6 +52,10 @@ public void customize(LibraryCustomization libraryCustomization, Logger logger)
         addDeprecateAnnotationToMediaNotificationContent(modelsPackage);
 
         addDeprecateAnnotationForImageV0CommunicationKind(modelsPackage);
+
+        customizeActionGroup(modelsPackage);
+        customizeActionGroupContent(modelsPackage);
+        customizeButtonSetContent(modelsPackage);
     }
 
     private void updateModelClassModifierToAbstract(PackageCustomization modelsPackage, String className) {
@@ -305,4 +310,58 @@ private void updateJavaDocForMethodFromJson(PackageCustomization modelPackage, S
             });
         });
     }
+
+    private void customizeActionGroup(PackageCustomization modelsPackage) {
+        modelsPackage.getClass("ActionGroup").customizeAst(ast -> {
+            ast.getClassByName("ActionGroup")
+                .flatMap(clazz -> clazz.getConstructorByParameterTypes(String.class, List.class))
+                .ifPresent(c -> {
+                    String body = c.getBody().toString().replace("this.items = items;",
+                        "this.items = new ArrayList<>(items);");
+                    c.setBody(StaticJavaParser.parseBlock(body));
+            });
+
+            ast.getClassByName("ActionGroup").ifPresent(clazz -> {
+                String getItemsBody = clazz.getMethodsByName("getItems").get(0).getBody().get().toString()
+                    .replace("return this.items;", "return new ArrayList<>(this.items);");
+                clazz.getMethodsByName("getItems").get(0).setBody(StaticJavaParser.parseBlock(getItemsBody));
+            });
+        });
+    }
+
+    private void customizeActionGroupContent(PackageCustomization modelsPackage) {
+        modelsPackage.getClass("ActionGroupContent").customizeAst(ast -> {
+            ast.getClassByName("ActionGroupContent")
+                .flatMap(clazz -> clazz.getConstructorByParameterTypes(String.class, List.class))
+                .ifPresent(c -> {
+                    String body = c.getBody().toString().replace("this.groups = groups;",
+                        "this.groups = new ArrayList<>(groups);");
+                    c.setBody(StaticJavaParser.parseBlock(body));
+                });
+
+            ast.getClassByName("ActionGroupContent").ifPresent(clazz -> {
+                String getItemsBody = clazz.getMethodsByName("getGroups").get(0).getBody().get().toString()
+                    .replace("return this.groups;", "return new ArrayList<>(this.groups);");
+                clazz.getMethodsByName("getGroups").get(0).setBody(StaticJavaParser.parseBlock(getItemsBody));
+            });
+        });
+    }
+
+    private void customizeButtonSetContent(PackageCustomization modelsPackage) {
+        modelsPackage.getClass("ButtonSetContent").customizeAst(ast -> {
+            ast.getClassByName("ButtonSetContent")
+                .flatMap(clazz -> clazz.getConstructorByParameterTypes(List.class))
+                .ifPresent(c -> {
+                    String body = c.getBody().toString().replace("this.buttons = buttons;",
+                        "this.buttons = new ArrayList<>(buttons);");
+                    c.setBody(StaticJavaParser.parseBlock(body));
+                });
+
+            ast.getClassByName("ButtonSetContent").ifPresent(clazz -> {
+                String getItemsBody = clazz.getMethodsByName("getButtons").get(0).getBody().get().toString()
+                    .replace("return this.buttons;", "return new ArrayList<>(this.buttons);");
+                clazz.getMethodsByName("getButtons").get(0).setBody(StaticJavaParser.parseBlock(getItemsBody));
+            });
+        });
+    }
 }
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroup.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroup.java
index 7b8b43804a83a..74f4f2309fd5f 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroup.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroup.java
@@ -10,6 +10,7 @@
 import com.azure.json.JsonToken;
 import com.azure.json.JsonWriter;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -39,7 +40,7 @@ public final class ActionGroup implements JsonSerializable {
     @Generated
     public ActionGroup(String title, List items) {
         this.title = title;
-        this.items = items;
+        this.items = new ArrayList<>(items);
     }
 
     /**
@@ -59,7 +60,7 @@ public String getTitle() {
      */
     @Generated
     public List getItems() {
-        return this.items;
+        return new ArrayList<>(this.items);
     }
 
     /**
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroupContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroupContent.java
index 3f04aa34b09ce..ec8825ce37ee7 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroupContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ActionGroupContent.java
@@ -9,6 +9,7 @@
 import com.azure.json.JsonToken;
 import com.azure.json.JsonWriter;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -44,7 +45,7 @@ public final class ActionGroupContent extends MessageContent {
     @Generated
     public ActionGroupContent(String title, List groups) {
         this.title = title;
-        this.groups = groups;
+        this.groups = new ArrayList<>(groups);
     }
 
     /**
@@ -75,7 +76,7 @@ public String getTitle() {
      */
     @Generated
     public List getGroups() {
-        return this.groups;
+        return new ArrayList<>(this.groups);
     }
 
     /**
diff --git a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonSetContent.java b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonSetContent.java
index 90115e67dd868..9e5dfc65ed4c1 100644
--- a/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonSetContent.java
+++ b/sdk/communication/azure-communication-messages/src/main/java/com/azure/communication/messages/models/ButtonSetContent.java
@@ -9,6 +9,7 @@
 import com.azure.json.JsonToken;
 import com.azure.json.JsonWriter;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -36,7 +37,7 @@ public final class ButtonSetContent extends MessageContent {
      */
     @Generated
     public ButtonSetContent(List buttons) {
-        this.buttons = buttons;
+        this.buttons = new ArrayList<>(buttons);
     }
 
     /**
@@ -57,7 +58,7 @@ public MessageContentKind getKind() {
      */
     @Generated
     public List getButtons() {
-        return this.buttons;
+        return new ArrayList<>(this.buttons);
     }
 
     /**