diff --git a/Directory.Packages.props b/Directory.Packages.props
index 245f7aeb..319feb20 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -5,20 +5,22 @@
-
+
-
+
-
+
+
-
-
+
+
+
@@ -27,12 +29,9 @@
-
-
+
-
-
-
+
@@ -40,12 +39,24 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Elsa.Integrations.sln b/Elsa.Integrations.sln
index 14ce290c..4672afcc 100644
--- a/Elsa.Integrations.sln
+++ b/Elsa.Integrations.sln
@@ -32,6 +32,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.Telnyx",
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.OrchardCore", "src\Elsa.Integrations.OrchardCore\Elsa.Integrations.OrchardCore.csproj", "{71D93DC7-A455-4EDC-86DB-826CCEECEEF8}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Integrations.AzureServiceBus", "src\Elsa.Integrations.AzureServiceBus\Elsa.Integrations.AzureServiceBus.csproj", "{BC283CFE-D542-4D40-AE7F-6888B876AA2B}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -58,6 +60,10 @@ Global
{71D93DC7-A455-4EDC-86DB-826CCEECEEF8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{71D93DC7-A455-4EDC-86DB-826CCEECEEF8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{71D93DC7-A455-4EDC-86DB-826CCEECEEF8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BC283CFE-D542-4D40-AE7F-6888B876AA2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BC283CFE-D542-4D40-AE7F-6888B876AA2B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BC283CFE-D542-4D40-AE7F-6888B876AA2B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BC283CFE-D542-4D40-AE7F-6888B876AA2B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -68,5 +74,6 @@ Global
{861E1230-F9CB-450C-845E-04DFDA259E26} = {A99FA26E-2098-403A-BD04-6BBCFBE3AC7D}
{128B2FC3-81A7-4327-9665-9155B05F21DA} = {527248D6-B851-4C8D-8667-E2FB0A91DABF}
{71D93DC7-A455-4EDC-86DB-826CCEECEEF8} = {527248D6-B851-4C8D-8667-E2FB0A91DABF}
+ {BC283CFE-D542-4D40-AE7F-6888B876AA2B} = {527248D6-B851-4C8D-8667-E2FB0A91DABF}
EndGlobalSection
EndGlobal
diff --git a/src/Elsa.Integrations.AzureServiceBus/Activities/MessageReceived.cs b/src/Elsa.Integrations.AzureServiceBus/Activities/MessageReceived.cs
new file mode 100644
index 00000000..ab028ae3
--- /dev/null
+++ b/src/Elsa.Integrations.AzureServiceBus/Activities/MessageReceived.cs
@@ -0,0 +1,126 @@
+using System.Runtime.CompilerServices;
+using Elsa.Common;
+using Elsa.Expressions.Models;
+using Elsa.Extensions;
+using Elsa.Integrations.AzureServiceBus.Models;
+using Elsa.Workflows;
+using Elsa.Workflows.Attributes;
+using Elsa.Workflows.Models;
+
+namespace Elsa.Integrations.AzureServiceBus.Activities;
+
+///
+/// Triggered when a message is received on a specified queue or topic and subscription.
+///
+[Activity("Elsa.AzureServiceBus", "Azure Service Bus", "Executes when a message is received from the configured queue or topic and subscription")]
+public class MessageReceived : Trigger
+{
+ internal const string InputKey = "TransportMessage";
+
+ ///
+ public MessageReceived([CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : base(source, line)
+ {
+ }
+
+ ///
+ public MessageReceived(Input queue)
+ {
+ QueueOrTopic = queue;
+ }
+
+ ///
+ public MessageReceived(string queue) : this(new Input(queue))
+ {
+ }
+
+ ///
+ public MessageReceived(Input topic, Input subscription)
+ {
+ QueueOrTopic = topic;
+ Subscription = subscription;
+ }
+
+ ///
+ public MessageReceived(string topic, string subscription) : this(new Input(topic), new Input(subscription))
+ {
+ }
+
+ ///
+ /// The name of the queue or topic to read from.
+ ///
+ [Input(Description = "The name of the queue or topic to read from.")]
+ public Input QueueOrTopic { get; set; } = null!;
+
+ ///
+ /// The name of the subscription to read from.
+ ///
+ [Input(Description = "The name of the subscription to read from.")]
+ public Input? Subscription { get; set; }
+
+ ///
+ /// The .NET type to deserialize the message into. Defaults to .
+ ///
+ [Input(Description = "The .NET type to deserialize the message into.")]
+ public Input MessageType { get; set; } = new(typeof(string));
+
+ ///
+ /// The received transport message.
+ ///
+ [Output(Description = "The received transport message.")]
+ public Output TransportMessage { get; set; } = null!;
+
+ ///
+ /// The received transport message.
+ ///
+ [Output(Description = "The received message.")]
+ public Output