diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbSplitArrayMsgNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbSplitArrayMsgNode.java
index 2dc27b6f92..d018b86922 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbSplitArrayMsgNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbSplitArrayMsgNode.java
@@ -40,7 +40,7 @@ import java.util.concurrent.ExecutionException;
         name = "split array msg",
         configClazz = EmptyNodeConfiguration.class,
         nodeDescription = "Split array message into several msgs",
-        nodeDetails = "Split the array fetched from the msg body. If the msg data is not a JSON object returns the "
+        nodeDetails = "Split the array fetched from the msg body. If the msg data is not a JSON array returns the "
                 + "incoming message as outbound message with Failure chain, otherwise returns "
                 + "inner objects of the extracted array as separate messages via Success chain.",
         uiResources = {"static/rulenode/rulenode-core-config.js"},
@@ -61,7 +61,9 @@ public class TbSplitArrayMsgNode implements TbNode {
         JsonNode jsonNode = JacksonUtil.toJsonNode(msg.getData());
         if (jsonNode.isArray()) {
             ArrayNode data = (ArrayNode) jsonNode;
-            if (data.size() == 1) {
+            if (data.isEmpty()) {
+                ctx.ack(msg);
+            } else if (data.size() == 1) {
                 ctx.tellSuccess(TbMsg.transformMsg(msg, msg.getType(), msg.getOriginator(), msg.getMetaData(), JacksonUtil.toString(data.get(0))));
             } else {
                 TbMsgCallbackWrapper wrapper = new MultipleTbMsgsCallbackWrapper(data.size(), new TbMsgCallback() {