diff --git a/_includes/docs/edge/troubleshooting.md b/_includes/docs/edge/troubleshooting.md
index 2d55bf189a..897d06742c 100644
--- a/_includes/docs/edge/troubleshooting.md
+++ b/_includes/docs/edge/troubleshooting.md
@@ -5,7 +5,7 @@
### MessagePack Processing Log
-To enable logging for the slowest and most frequently called rule-nodes,
+To enable logging for the slowest and most frequently called rule nodes,
[update your logging configuration](#enable-certain-logs) with the following **logger**:
```bash
diff --git a/_includes/docs/edge/user-guide/alarms.md b/_includes/docs/edge/user-guide/alarms.md
index b9c8524d91..46c56f4f1f 100644
--- a/_includes/docs/edge/user-guide/alarms.md
+++ b/_includes/docs/edge/user-guide/alarms.md
@@ -19,7 +19,7 @@ The **Edge Alarms** are created and configured in the same way as the **Cloud Al
The easiest way to create an Alarm is to use the [Alarm Rules within the Device profile](/docs/{{cloudDocsPrefix}}user-guide/device-profiles/#alarm-rules){: target="_blank"}. The majority of tasks can be configured with **Alarm Rules** with minimal effort.
-If more complex logic is required, we suggest using the alternative option, namely the ["Create Alarm"](/docs/{{cloudDocsPrefix}}user-guide/rule-engine-2-0/action-nodes/#create-alarm-node){: target="_blank"} and ["Clear Alarm"](/docs/{{cloudDocsPrefix}}user-guide/rule-engine-2-0/action-nodes/#clear-alarm-node){: target="_blank"} rule nodes in the [Rule Engine](/docs/{{cloudDocsPrefix}}user-guide/rule-engine-2-0/re-getting-started/){: target="_blank"}. This is a more advanced option that requires a certain level of programming expertise. Please refer to the [corresponding example](/docs/user-guide/rule-engine-2-0/tutorials/create-clear-alarms/){: target="_blank"}.
+If more complex logic is required, we suggest using the alternative option, namely the ["Create Alarm"](/docs/user-guide/rule-engine-2-0/nodes/action/create-alarm/){:target="_blank"} and ["Clear Alarm"](/docs/user-guide/rule-engine-2-0/nodes/action/clear-alarm/){: target="_blank"} rule nodes in the [Rule Engine](/docs/{{cloudDocsPrefix}}user-guide/rule-engine-2-0/re-getting-started/){: target="_blank"}. This is a more advanced option that requires a certain level of programming expertise. Please refer to the [corresponding example](/docs/user-guide/rule-engine-2-0/tutorials/create-clear-alarms/){: target="_blank"}.
## Alarms Pushing from the Cloud to the Edge
@@ -55,4 +55,4 @@ To push Alarms from the **Edge** to the **Cloud**, follow these steps:
## Next steps
-{% include templates/edge/guides-banner-edge.md %}
\ No newline at end of file
+{% include templates/edge/guides-banner-edge.md %}
diff --git a/_includes/docs/edge/user-guide/edge-attributes.md b/_includes/docs/edge/user-guide/edge-attributes.md
index 902ce97de7..30a337c642 100644
--- a/_includes/docs/edge/user-guide/edge-attributes.md
+++ b/_includes/docs/edge/user-guide/edge-attributes.md
@@ -85,7 +85,7 @@ To use **Edge** attributes as placeholders in the **Rule Chain template**:
* Then, find the **"rest api call"** node using the **Node search** bar. Drag and drop the node onto the **Rule Chain sheet**. In the pop-up window, enter the **node name** and click the **"Add"** button.
* **Name:** Enter the node name.
* **Headers:** Enter the request header and value. The header or value can be a static string, or pattern that is resolved using Message Metadata properties.
- * Click the **"Add"** button. Read more about the **REST API Call node configuration** [here](/docs/{{peDocsPrefix}}user-guide/rule-engine-2-0/external-nodes/#rest-api-call-node){: target="_blank"}.
+ * Click the **"Add"** button. Read more about the **REST API Call node configuration** [here](/docs/user-guide/rule-engine-2-0/nodes/external/rest-api-call/){:target="_blank"}.
* Connect the **"message type switch"** and **"related entity data"** nodes with the **“Post telemetry”** link label. Then, connect the **"related entity data"** and **"rest api call"** nodes with the **"Success"** link label. Click the **“Apply changes”** button on the **Rule Chain sheet**.
{% include images-gallery.html imageCollection="edgeAttributesAsPlaceholders" %}
diff --git a/_includes/docs/edge/user-guide/rule-engine/queues.md b/_includes/docs/edge/user-guide/rule-engine/queues.md
index c94032748e..db1f58fc7b 100644
--- a/_includes/docs/edge/user-guide/rule-engine/queues.md
+++ b/_includes/docs/edge/user-guide/rule-engine/queues.md
@@ -8,8 +8,8 @@ In **ThingsBoard**, **queues** guarantee the message processing, handle occasion
For a better understanding, read the [Platform Queues documentation](/docs/{{peDocsPrefix}}user-guide/rule-engine-2-5/queues/){: target="_blank"}.
**Tenant administrators** can use any **queue** in the **Edge Rule Chain**, the same as the **Platform Rule Chain**.
-**Queues** can be used in [checkpoint node](/docs/{{peDocsPrefix}}user-guide/rule-engine-2-0/flow-nodes/#checkpoint-node){: target="_blank"}
-or any [analytics nodes](/docs/pe/user-guide/rule-engine-2-0/analytics-nodes/){: target="_blank"} (for a Professional Edition).
+**Queues** can be used in [checkpoint node](/docs/user-guide/rule-engine-2-0/nodes/flow/checkpoint/){: target="_blank"}
+or any [analytics nodes](/docs/user-guide/rule-engine-2-0/nodes/analytics/){: target="_blank"} (for a Professional Edition).
Starting with **Edge 3.9**, Edge supports **Kafka** and **in-memory** types of message queues:
* **In-Memory:** The built-in and default queue implementation. It is useful for development or proof-of-concept (PoC) environments, but is not recommended for production or any type of clustered deployments due to limited scalability.
diff --git a/_includes/docs/edge/user-guide/telemetry-sync.md b/_includes/docs/edge/user-guide/telemetry-sync.md
index 364db1fce8..230781bad8 100644
--- a/_includes/docs/edge/user-guide/telemetry-sync.md
+++ b/_includes/docs/edge/user-guide/telemetry-sync.md
@@ -2,8 +2,8 @@
{:toc}
> **ThingsBoard Edge** does not automatically sync telemetry data.
-Instead, it's **a rule-based process**. The ["push to cloud"](/docs/{{peDocsPrefix}}user-guide/rule-engine-2-0/action-nodes/#push-to-cloud){:target="_blank"}
-and ["push to edge"](/docs/{{peDocsPrefix}}user-guide/rule-engine-2-0/action-nodes/#push-to-edge){:target="_blank"} rule nodes are responsible for
+Instead, it's **a rule-based process**. The ["push to cloud"](/docs/user-guide/rule-engine-2-0/nodes/action/push-to-cloud/){:target="_blank"}
+and ["push to edge"](/docs/user-guide/rule-engine-2-0/nodes/action/push-to-edge/){:target="_blank"} rule nodes are responsible for
the synchronization process.
### Edge → Cloud sync
@@ -36,7 +36,7 @@ The database tables updated in Cloud depend entirely on your Cloud‑side rule c
### Cloud → Edge sync
-Similarly, Cloud synchronizes data using the ["push to edge"](/docs/{{peDocsPrefix}}user-guide/rule-engine-2-0/action-nodes/#push-to-edge){:target="_blank"} rule node within a Cloud rule chain.
+Similarly, Cloud synchronizes data using the ["push to edge"](/docs/user-guide/rule-engine-2-0/nodes/action/push-to-edge/){:target="_blank"} rule node within a Cloud rule chain.
The node converts the message into an **Edge Event** and stores it in the **Edge queue** on the Cloud (_either a local database or Kafka, depending on the queue type_).
The event is then **asynchronously** pushed to the target Edge.
diff --git a/_includes/docs/pe/solution-templates/swimming-pool-scada-system.md b/_includes/docs/pe/solution-templates/swimming-pool-scada-system.md
index 85e816e538..382d7f2583 100644
--- a/_includes/docs/pe/solution-templates/swimming-pool-scada-system.md
+++ b/_includes/docs/pe/solution-templates/swimming-pool-scada-system.md
@@ -140,24 +140,24 @@ Each message passes through The **Swimming Pool Device Rule Chain**. Here, telem
**Message processing flow:**
* **Alarm generation**:
- Every message first passes through the [device profile node](/docs/{{docsPrefix}}user-guide/device-profiles/#device-profile-rule-node){:target="_blank"}. This step allows the system to generate alarms based on the conditions defined in the device profiles (such as for the heat pump, water pump, and sand filter). If the telemetry exceeds the set thresholds, alarms are triggered and displayed on the dashboard.{% include images-gallery.html imageCollection="rule-chain-1" %}
+ Every message first passes through the [device profile node](/docs/user-guide/rule-engine-2-0/nodes/action/device-profile/){:target="_blank"}. This step allows the system to generate alarms based on the conditions defined in the device profiles (such as for the heat pump, water pump, and sand filter). If the telemetry exceeds the set thresholds, alarms are triggered and displayed on the dashboard.{% include images-gallery.html imageCollection="rule-chain-1" %}
* **Message type switch**:
- After the initial profile processing, the message moves to the [message type switch node](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/filter-nodes/#message-type-switch-node){:target="_blank"}. This node routes messages based on their type, such as telemetry data, attribute updates, or RPC requests. It sends each message down the appropriate path for further processing.
+ After the initial profile processing, the message moves to the [message type switch node](/docs/user-guide/rule-engine-2-0/nodes/filter/message-type-switch/){:target="_blank"}. This node routes messages based on their type, such as telemetry data, attribute updates, or RPC requests. It sends each message down the appropriate path for further processing.
{% include images-gallery.html imageCollection="rule-chain-2" %}
* **General logic – save attributes, time series, and RPC requests**:
Independent of the message type, these actions are performed for all devices.
- * [save attributes node](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#save-attributes-node){:target="_blank"}: The telemetry data from devices is saved as attributes.
- * [save time series node](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#save-timeseries-node){:target="_blank"}: Time series data is saved for historical analysis and monitoring.
- * [rpc call request node](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#rpc-call-request-node){:target="_blank"}: The system can generate and send RPC requests to devices. These RPC commands may turn devices on/off, change operational modes, or control valve positions. For example, valves can be opened/closed, and pumps can be activated/deactivated based on predefined conditions or manual requests.
+ * [save attributes node](/docs/user-guide/rule-engine-2-0/nodes/action/save-attributes/){:target="_blank"}: The telemetry data from devices is saved as attributes.
+ * [save time series node](/docs/user-guide/rule-engine-2-0/nodes/action/save-timeseries/){:target="_blank"}: Time series data is saved for historical analysis and monitoring.
+ * [rpc call request node](/docs/user-guide/rule-engine-2-0/nodes/action/rpc-call-request/){:target="_blank"}: The system can generate and send RPC requests to devices. These RPC commands may turn devices on/off, change operational modes, or control valve positions. For example, valves can be opened/closed, and pumps can be activated/deactivated based on predefined conditions or manual requests.
{% include images-gallery.html imageCollection="rule-chain-3" %}
* **Device profile filtering**:
- Once the telemetry data is saved, the message is routed through the [device profile switch node](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/filter-nodes/#device-profile-switch){:target="_blank"}. This node filters the devices based on their profile, allowing for device-specific actions. When telemetry from the **heat pump** is detected, the system checks specific conditions—like target temperature, outdoor temperature, and pool temperature—through a [switch node](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/filter-nodes/#switch-node){:target="_blank"}. If the telemetry conditions meet the thresholds for turning the heat pump on or off, an RPC request is sent to control the heat pump’s state.
+ Once the telemetry data is saved, the message is routed through the [device profile switch node](/docs/user-guide/rule-engine-2-0/nodes/filter/device-profile-switch/){:target="_blank"}. This node filters the devices based on their profile, allowing for device-specific actions. When telemetry from the **heat pump** is detected, the system checks specific conditions—like target temperature, outdoor temperature, and pool temperature—through a [switch node](/docs/user-guide/rule-engine-2-0/nodes/filter/switch/){:target="_blank"}. If the telemetry conditions meet the thresholds for turning the heat pump on or off, an RPC request is sent to control the heat pump’s state.
{% include images-gallery.html imageCollection="rule-chain-4" %}
@@ -231,4 +231,4 @@ For more about alarms and how to configure them, read [here](/docs/{{docsPrefix}
The Swimming Pool SCADA template provides a ready-to-use framework for managing swimming pool components.
It ensures seamless integration between sensors, and ThingsBoard, allowing real-time data collection, processing, and visualization.
-This setup not only enhances operational efficiency but also provides a scalable and reliable solution for centralized supervision and control of swimming pool systems.
\ No newline at end of file
+This setup not only enhances operational efficiency but also provides a scalable and reliable solution for centralized supervision and control of swimming pool systems.
diff --git a/_includes/docs/pe/user-guide/custom-translation.md b/_includes/docs/pe/user-guide/custom-translation.md
index 75b5f279d3..070f5330af 100644
--- a/_includes/docs/pe/user-guide/custom-translation.md
+++ b/_includes/docs/pe/user-guide/custom-translation.md
@@ -282,7 +282,7 @@ First, add the "Weather" dashboard to your instance:
- [Download the dashboard configuration as a JSON file](/docs/user-guide/resources/weather_dashboard.json){:target="_blank"}.
- [Import](/docs/{{docsPrefix}}user-guide/dashboards/#import-dashboard){:target="_blank"} it into your ThingsBoard instance.
-For this dashboard, I'm emulating telemetry data using a [Generator node](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#generator-node){:target="_blank"} with the function provided below:
+For this dashboard, I'm emulating telemetry data using a [Generator node](/docs/user-guide/rule-engine-2-0/nodes/action/generator/){:target="_blank"} with the function provided below:
```js
var temperature = toFixed(Math.random()*10 + 18, 2);
@@ -726,4 +726,4 @@ If at any time you need to delete a language or reset its translations to the de
## Next steps
-{% assign currentGuide = "AdvancedFeatures" %}{% include templates/multi-project-guides-banner.md %}
\ No newline at end of file
+{% assign currentGuide = "AdvancedFeatures" %}{% include templates/multi-project-guides-banner.md %}
diff --git a/_includes/docs/pe/user-guide/file-storage.md b/_includes/docs/pe/user-guide/file-storage.md
index 5e4a730e79..eadbbdbb1d 100644
--- a/_includes/docs/pe/user-guide/file-storage.md
+++ b/_includes/docs/pe/user-guide/file-storage.md
@@ -3,10 +3,10 @@
## Overview
-ThingsBoard has ability to store binary content (files) in the DataBase.
-Currently it is used to store report files generated by [Generate Report Node](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#generate-report-node).
-Stored files are accessed by [Send Email Node](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/external-nodes/#send-email-node) to create email attachments.
-Another way to send a file is the [REST API Call Node](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/external-nodes/#rest-api-call-node).
+ThingsBoard has ability to store binary content (files) in the database.
+Currently it is used to store report files generated by [Generate Dashboard Report Node](/docs/user-guide/rule-engine-2-0/nodes/action/generate-dashboard-report/).
+Stored files are accessed by [Send Email Node](/docs/user-guide/rule-engine-2-0/nodes/external/send-email/) to create email attachments.
+Another way to send a file is the [REST API Call Node](/docs/user-guide/rule-engine-2-0/nodes/external/rest-api-call/).
User can access stored files using **Files** or **Reports** widgets which is part of **Files** Widgets Bundle.
## Files Widget
diff --git a/_includes/docs/pe/user-guide/integrations/aws-iot.md b/_includes/docs/pe/user-guide/integrations/aws-iot.md
index b6e855f727..c623129783 100644
--- a/_includes/docs/pe/user-guide/integrations/aws-iot.md
+++ b/_includes/docs/pe/user-guide/integrations/aws-iot.md
@@ -229,7 +229,7 @@ JavaScript%,%anonymous%,%templates/integration/aws-iot/aws-iot-do
{% include content-toggle.liquid content-toggle-id="awsiotdownlinkconverterconfig" toggle-spec=awsiotdownlinkconverterconfig %}
Next, configure the conditions under which a message will be sent through the AWS IoT Downlink integration.
-To do this, you need to open the Rule Chain used for the device (in our case, the default Root Rule Chain), then add an [integration downlink node](https://thingsboard.io/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#integration-downlink-node), for link condition set the Attributes Updated.
+To do this, you need to open the Rule Chain used for the device (in our case, the default Root Rule Chain), then add an [integration downlink node](https://thingsboard.io/docs/user-guide/rule-engine-2-0/nodes/action/integration-downlink/), for link condition set the Attributes Updated.
{% include images-gallery.html imageCollection="downlink_2-3" %}
diff --git a/_includes/docs/pe/user-guide/integrations/kafka.md b/_includes/docs/pe/user-guide/integrations/kafka.md
index d321d2161d..a95d4a4b75 100644
--- a/_includes/docs/pe/user-guide/integrations/kafka.md
+++ b/_includes/docs/pe/user-guide/integrations/kafka.md
@@ -139,7 +139,7 @@ Confluent Cloud
Cloud solution%,%confluent%,%/templates/integr
## Advanced Usage: Kafka Producer (Downlink)
-To get functionality such as Kafka Producer, you need to use the [Kafka Rule Node](https://thingsboard.io/docs/{{docsPrefix}}user-guide/rule-engine-2-0/external-nodes/#kafka-node) in which you can specify Bootstrap servers, Topic and other parameters to connect to the Kafka broker, you can find more details in the corresponding [guide](https://thingsboard.io/docs/{{docsPrefix}}user-guide/rule-engine-2-0/external-nodes/#kafka-node) .
+To get functionality such as Kafka Producer, you need to use the [Kafka Rule Node](https://thingsboard.io/docs/user-guide/rule-engine-2-0/nodes/external/kafka/) in which you can specify Bootstrap servers, Topic and other parameters to connect to the Kafka broker, you can find more details in the corresponding [guide](https://thingsboard.io/docs/user-guide/rule-engine-2-0/nodes/external/kafka/) .
If it is not possible to send commands directly to devices to manage from ThingsBoard, but only through a broker, then in this case you can use the Kafka Downlink Rule Node. Let's consider a small example with its Node, suppose the data came from the broker and passed the converter and, according to the config of Device Profile, were directed to the custom Rule Chain ("Monitoring-sensor") and at the end of all processing, we will send a response about success or failure back to the broker ( you can change the response to commands to control your device, etc.)
diff --git a/_includes/docs/tutorials/function-based-on-telemetry-from-two-devices.md b/_includes/docs/tutorials/function-based-on-telemetry-from-two-devices.md
index 297f426924..df630a201b 100644
--- a/_includes/docs/tutorials/function-based-on-telemetry-from-two-devices.md
+++ b/_includes/docs/tutorials/function-based-on-telemetry-from-two-devices.md
@@ -27,7 +27,7 @@ Create relationships between the **Warehouse A** asset and the **Indoor Thermome
Since we are using virtual devices, they do not send telemetry data to the ThingsBoard. However, we can simulate the transmission of such data in real time.
To do this, we will use [Rule Engine](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/overview/){:target="_blank"}.
-Let's add two [generator nodes](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#generator-node){:target="_blank"} that will periodically produce messages with random temperature readings.
+Let's add two [generator nodes](/docs/user-guide/rule-engine-2-0/nodes/action/generator/){:target="_blank"} that will periodically produce messages with random temperature readings.
Ideally, such use cases should have a dedicated [Rule Chain](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/overview/#rule-chain){:target="_blank"}, but for simplicity, we'll use the **Root Rule Chain**.
Route the messages from these nodes to the **device profile node**.
@@ -151,4 +151,4 @@ To monitor the temperature difference in real time, download and import this [da
After that, the dashboard should display the temperature delta data between the two thermometers of the **Warehouse A** asset.
-{% include images-gallery.html imageCollection="delta-temperature-dashboard" %}
\ No newline at end of file
+{% include images-gallery.html imageCollection="delta-temperature-dashboard" %}
diff --git a/_includes/docs/user-guide/advanced-guides-for-working-with-dashboard/advanced-dashboard-guide-lesson-3.md b/_includes/docs/user-guide/advanced-guides-for-working-with-dashboard/advanced-dashboard-guide-lesson-3.md
index 4dc1b6c194..2e91bdaf9f 100644
--- a/_includes/docs/user-guide/advanced-guides-for-working-with-dashboard/advanced-dashboard-guide-lesson-3.md
+++ b/_includes/docs/user-guide/advanced-guides-for-working-with-dashboard/advanced-dashboard-guide-lesson-3.md
@@ -19,8 +19,8 @@ In this part, we will add separate states for each device, simulate telemetry da
Since we are using virtual devices, they do not send telemetry data to the ThingsBoard. However, we can simulate the transmission of such data in real time.
To do this, we will use [Rule Engine](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/overview/){:target="_blank"}.
-We will add a new [Rule Chain](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/overview/#rule-chain){:target="_blank"} with four [generator nodes](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#generator-node){:target="_blank"} that will periodically generate simple messages with random telemetry readings, unique to each of our devices.
-Then, we will save this telemetry in the database using the [save timeseries](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#save-timeseries-node){:target="_blank"} node.
+We will add a new [Rule Chain](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/overview/#rule-chain){:target="_blank"} with four [generator nodes](/docs/user-guide/rule-engine-2-0/nodes/action/generator/){:target="_blank"} that will periodically generate simple messages with random telemetry readings, unique to each of our devices.
+Then, we will save this telemetry in the database using the [save time series](/docs/user-guide/rule-engine-2-0/nodes/action/save-timeseries/){:target="_blank"} node.
Let's get started.
@@ -34,7 +34,7 @@ First, create the new rule chain:
Now, let's add the necessary nodes:
-- Find the [generator node](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#generator-node){:target="_blank"} and drag it to the rule chain. With its help, we will generate telemetry values for further visualization on the dashboard. Name it "Indoor air quality data emulator", and set the number of messages to send to 100 and the sending period to 600;
+- Find the [generator node](/docs/user-guide/rule-engine-2-0/nodes/action/generator/){:target="_blank"} and drag it to the rule chain. With its help, we will generate telemetry values for further visualization on the dashboard. Name it "Indoor air quality data emulator", and set the number of messages to send to 100 and the sending period to 600;
- Specify the device "SD-001" (Indoor Air Quality Sensor) as originator;
- Copy the following script from the documentation:
@@ -123,16 +123,16 @@ return { msg: msg, metadata: metadata, msgType: msgType };
{% include images-gallery.html imageCollection="adding-new-rule-chain-5" %}
-Four generator nodes have been added. Now, we need to route incoming messages from these nodes to the "[save timeseries](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#save-timeseries-node){:target="_blank"}" node to save time-series data in the database.
+Four generator nodes have been added. Now, we need to route incoming messages from these nodes to the "[save time series](/docs/user-guide/rule-engine-2-0/nodes/action/save-timeseries/){:target="_blank"}" node to save time-series data in the database.
-- Find the "save timeseries" node and drag it to the rule chain;
+- Find the "save time series" node and drag it to the rule chain;
- Name it "save time series", and click "Add".
We have added all the necessary nodes.
{% include images-gallery.html imageCollection="adding-new-rule-chain-6" %}
-Now, we need to connect the generator nodes to the "save timeseries" node for message routing:
+Now, we need to connect the generator nodes to the "save time series" node for message routing:
{% include images-gallery.html imageCollection="adding-new-rule-chain-7" showListImageTitles="true" %}
@@ -510,4 +510,4 @@ In the next lesson, you will learn how to configure notification rules, add the
If you're ready to proceed, click the button below.
-
Lesson 4: Alarm management
\ No newline at end of file
+Lesson 4: Alarm management
diff --git a/_includes/docs/user-guide/alarms.md b/_includes/docs/user-guide/alarms.md
index f86389712f..307ebbf2ae 100644
--- a/_includes/docs/user-guide/alarms.md
+++ b/_includes/docs/user-guide/alarms.md
@@ -173,7 +173,7 @@ Learn more about notifications and how to configure them [here](/docs/{{docsPref
{% include images-gallery.html imageCollection="notification-about-alarm" %}
-Alternatively, you can configure your custom logic in the [Rule Engine](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/re-getting-started/), using the [Send Email](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/external-nodes/#send-email-node) and [Send SMS](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/external-nodes/#send-sms-node) rule nodes or others from the [External Nodes](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/external-nodes/) to configure.
+Alternatively, you can configure your custom logic in the [Rule Engine](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/re-getting-started/), using the [Send Email](/docs/user-guide/rule-engine-2-0/nodes/external/send-email/) and [Send SMS](/docs/user-guide/rule-engine-2-0/nodes/external/send-sms/) rule nodes or others from the [External Nodes](/docs/user-guide/rule-engine-2-0/nodes/external/) to configure.
You can find an example of how to send an email to a user using the rules engine [here](/docs/user-guide/rule-engine-2-0/tutorials/send-email/).
## View and manage alarms
@@ -248,4 +248,4 @@ Authorized users may add, edit, and delete their comments. System comments are n
## Alarm management using REST API
-ThingsBoard provides REST API to manage and query alarms. See demo environment [Alarm REST API](https://demo.thingsboard.io/swagger-ui.html#/alarm-controller) and general [REST API](/docs/{{docsPrefix}}reference/rest-api/) documentation for more details.
\ No newline at end of file
+ThingsBoard provides REST API to manage and query alarms. See demo environment [Alarm REST API](https://demo.thingsboard.io/swagger-ui.html#/alarm-controller) and general [REST API](/docs/{{docsPrefix}}reference/rest-api/) documentation for more details.
diff --git a/_includes/docs/user-guide/attributes.md b/_includes/docs/user-guide/attributes.md
index 6eafd00bd6..618a590322 100644
--- a/_includes/docs/user-guide/attributes.md
+++ b/_includes/docs/user-guide/attributes.md
@@ -1,8 +1,7 @@
-
* TOC
{:toc}
-## Assigning custom attributes to entities and attributes managing
+## Assigning custom attributes to entities and attributes managing
ThingsBoard provides the ability to assign custom attributes to your entities and manage these attributes.
Those attributes are stored in the database and may be used for data visualization and data processing.
@@ -13,14 +12,14 @@ For example:
```json
{
- "firmwareVersion":"v2.3.1",
- "booleanParameter":true,
- "doubleParameter":42.0,
- "longParameter":73,
+ "firmwareVersion": "v2.3.1",
+ "booleanParameter": true,
+ "doubleParameter": 42.0,
+ "longParameter": 73,
"configuration": {
"someNumber": 42,
- "someArray": [1,2,3],
- "someNestedObject": {"key": "value"}
+ "someArray": [1, 2, 3],
+ "someNestedObject": { "key": "value" }
}
}
```
@@ -290,21 +289,21 @@ You may find most popular scenarios of using attributes within rule engine below
**Generate alarms based on the logical expressions against attribute values**
Use [alarm rules](/docs/{{docsPrefix}}user-guide/device-profiles/#alarm-rules) to configure most common alarm conditions via UI
-or use [filter nodes](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/filter-nodes/) to configure more specific use cases via custom JS functions.
+or use [filter nodes](/docs/user-guide/rule-engine-2-0/nodes/filter/) to configure more specific use cases via custom JS functions.
**Modify incoming client-side attributes before they are stored in the database**
-Use [message type switch](/docs/{{docsPrefix}}/user-guide/rule-engine-2-0/filter-nodes/#message-type-switch-node) rule node to filter messages that contain "Post attributes" request.
-Then, use [transformation rule nodes](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/transformation-nodes/) to modify a particular message.
+Use [message type switch](/docs/user-guide/rule-engine-2-0/nodes/filter/message-type-switch/) rule node to filter messages that contain "Post attributes" request.
+Then, use [transformation rule nodes](/docs/user-guide/rule-engine-2-0/nodes/transformation/) to modify a particular message.
**React on the change of server-side attribute**
-Use [message type switch](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/filter-nodes/#message-type-switch-node) rule node to filter messages that contain "Attributes Updated" notification.
-Then, use [action](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/) or [external](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/external-nodes/) to react on the incoming event.
+Use [message type switch](/docs/user-guide/rule-engine-2-0/nodes/filter/message-type-switch/) rule node to filter messages that contain "Attributes Updated" notification.
+Then, use [action](/docs/user-guide/rule-engine-2-0/nodes/action/) or [external](/docs/user-guide/rule-engine-2-0/nodes/external/) to react on the incoming event.
**Fetch attribute values to analyze incoming telemetry from device**
-Use [enrichment](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/enrichment-nodes/) rule nodes to enrich incoming telemetry message with attributes of the device, related asset, customer or tenant.
+Use [enrichment](/docs/user-guide/rule-engine-2-0/nodes/enrichment/) rule nodes to enrich incoming telemetry message with attributes of the device, related asset, customer or tenant.
This is extremely powerful technique that allows to modify processing logic and parameters based on settings stored in the attributes.
{% unless docsPrefix contains "paas/" %}
diff --git a/_includes/docs/user-guide/calculated-fields.md b/_includes/docs/user-guide/calculated-fields.md
index 083fa1f385..f5abe4720a 100644
--- a/_includes/docs/user-guide/calculated-fields.md
+++ b/_includes/docs/user-guide/calculated-fields.md
@@ -18,7 +18,7 @@ This feature is particularly useful for optimizing data processing, improving an
Key benefits
- **No additional logic in rule chains**: simplifies telemetry calculations without the need for complex rule chain configurations.
-- **Real-time computations**: triggers calculations as incoming telemetry and attributes are processed by the [save time series](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#save-timeseries-node){:target="_blank"}, [save attributes](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#save-attributes-node){:target="_blank"}, or [calculated fields](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#calculated-fields-node){:target="_blank"} rule nodes, ensuring up-to-date insights.
+- **Real-time computations**: triggers calculations as incoming telemetry and attributes are processed by the [save time series](/docs/user-guide/rule-engine-2-0/nodes/action/save-timeseries/){:target="_blank"}, [save attributes](/docs/user-guide/rule-engine-2-0/nodes/action/save-attributes/){:target="_blank"}, or [calculated fields](/docs/user-guide/rule-engine-2-0/nodes/action/calculated-fields/){:target="_blank"} rule nodes, ensuring up-to-date insights.
- **Optimized performance**: reduces database queries by performing computations as data is received, improving system efficiency.
- **Cross-entity data merging**: calculate new values by combining data from multiple sources (devices, assets, etc.).
- **Flexible output**: store the results as either [attributes](/docs/{{docsPrefix}}user-guide/attributes/){:target="_blank"} or [time series data](/docs/{{docsPrefix}}user-guide/telemetry/){:target="_blank"}, depending on the use case.
@@ -217,7 +217,7 @@ Let's check the debug events by clicking the "Events" icon button. The debug
> **IMPORTANT**: When a calculated field produces an output, a new internal message — either `POST_TELEMETRY_REQUEST` or `POST_ATTRIBUTES_REQUEST`, depending on the output type — is created and pushed to the **Default Rule Chain** assigned to the target entity.
This means the output **does not bypass the rule engine**: it behaves like any other telemetry or attribute update.
-To ensure that the result is actually stored in the database, your rule chain **must include** a [save time series](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#save-timeseries-node) or [save attributes](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#save-attributes-node) nodes.
+To ensure that the result is actually stored in the database, your rule chain **must include** a [save time series](/docs/user-guide/rule-engine-2-0/nodes/action/save-timeseries/) or [save attributes](/docs/user-guide/rule-engine-2-0/nodes/action/save-attributes/) nodes.
If these nodes are missing, the result **will not be saved** and will not appear in dashboards, widgets, or API responses.
## Data reprocessing
@@ -619,4 +619,4 @@ return result;
To implement this, follow these steps:
-{% include images-gallery.html imageCollection="example-script-calculated-fields-3" showListImageTitles="true" %}
\ No newline at end of file
+{% include images-gallery.html imageCollection="example-script-calculated-fields-3" showListImageTitles="true" %}
diff --git a/_includes/docs/user-guide/contribution/rule-node-development.md b/_includes/docs/user-guide/contribution/rule-node-development.md
index 5ba9c624c5..75fff6f774 100644
--- a/_includes/docs/user-guide/contribution/rule-node-development.md
+++ b/_includes/docs/user-guide/contribution/rule-node-development.md
@@ -584,7 +584,7 @@ plugins:
## Step 6. Troubleshoot your rule node
-The easiest way to validate your custom rule node is to create a [generator](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#generator-node) rule node
+The easiest way to validate your custom rule node is to create a [generator](/docs/user-guide/rule-engine-2-0/nodes/action/generator/) rule node
and connect it to your custom rule node. This will generate configurable stream of incoming messages.
Once this is done, you should enable [debug](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/overview/#debugging) for your custom rule node to validate node output and check them for errors.
diff --git a/_includes/docs/user-guide/notifications.md b/_includes/docs/user-guide/notifications.md
index afe05621c0..d22f7de22d 100755
--- a/_includes/docs/user-guide/notifications.md
+++ b/_includes/docs/user-guide/notifications.md
@@ -398,7 +398,7 @@ The notification in ThingsBoard may look like this:
### Rule node
-The rule node template is used to send notifications from the '[send notification](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/external-nodes/#send-notification-node)' rule node.
+The rule node template is used to send notifications from the '[send notification](/docs/user-guide/rule-engine-2-0/nodes/external/send-notification/)' rule node.
You may use data or metadata from the incoming message to build the notification subject and body.
Available template parameters contain all parameters available for the [General](#general) template, plus:
@@ -962,4 +962,4 @@ The default rule 'Exceeded rate limits' will notify affected tenant administrato
Template subject: `Rate limits exceeded`
Template message: `Rate limits for ${api} exceeded for '${limitLevelEntityName}'`
-{% endunless %}
\ No newline at end of file
+{% endunless %}
diff --git a/_includes/docs/user-guide/rpc.md b/_includes/docs/user-guide/rpc.md
index 53a58df993..aafa3d03e0 100644
--- a/_includes/docs/user-guide/rpc.md
+++ b/_includes/docs/user-guide/rpc.md
@@ -75,7 +75,7 @@ You may design your [Rule Chain](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/
to process the incoming message using transformation, enrichment or any other
rule node [type](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/overview/#rule-node-types).
Once the incoming message is transformed to the response message,
-one should use [RPC Call Reply](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#rpc-call-reply-node) node to send reply to the device.
+one should use [RPC Call Reply](/docs/user-guide/rule-engine-2-0/nodes/action/rpc-call-reply/) node to send reply to the device.
For example, let's modify root Rule Chain to process "getCurrentTime" client-side RPC and reply with the current time in milliseconds.
We will use "Script" transformation node with the following JS code:
@@ -236,7 +236,7 @@ The message contains unique UUID based identifier that is stored in the "request
You may design your [Rule Chain](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/overview/#rule-chain)
to process the incoming message using transformation, enrichment or any other
rule node [type](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/overview/#rule-node-types).
-Finally, one should use [RPC Call Request](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#rpc-call-request-node) node to send the message to the device.
+Finally, one should use [RPC Call Request](/docs/user-guide/rule-engine-2-0/nodes/action/rpc-call-request/) node to send the message to the device.
You may also create the RPC using generator node:
@@ -387,4 +387,4 @@ The System administrator may completely disable the cleanup of the persistent RP
The frequency of RPC cleanup procedure is controlled using **SQL_RPC_TTL_CHECKING_INTERVAL** parameters which is set to 2 hours by default.
{% include images-gallery.html imageCollection="tenant-profile-rpc" %}
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/add-to-group.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/add-to-group.md
index 24cb5b63bb..34e4cb814d 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/add-to-group.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/add-to-group.md
@@ -47,6 +47,7 @@ The configuration allows you to specify how entities are added to groups and how
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/assign-to-customer.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/assign-to-customer.md
index 27258c49e1..23a99b0a47 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/assign-to-customer.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/assign-to-customer.md
@@ -29,6 +29,7 @@ Assigns the message originator to a specified customer.
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/calculated-fields.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/calculated-fields.md
index f996690676..f278ca3ce7 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/calculated-fields.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/calculated-fields.md
@@ -22,6 +22,7 @@ This node has no configuration options.
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
@@ -36,8 +37,10 @@ This node has no configuration options.
4. After triggering calculated field processing, the original message is forwarded to the `Success` connection
5. If an unsupported message type is received or an error occurs, the message is routed to the `Failure` connection
-> Note: The calculated results are included in the newly generated message (step 3). To persist these results to the database, you still need to use a "save time series" or "save
-> attributes" node in the rule chain.
+{% capture persistence_note %}
+**Note**: The calculated results are included in the newly generated message (step 3). To persist these results to the database, you still need to use a "save time series" or "save attributes" node in the rule chain.
+{% endcapture %}
+{% include templates/info-banner.md content=persistence_note %}
## Output connections
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/change-owner.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/change-owner.md
index 4bea95b5b9..cff7a8e049 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/change-owner.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/change-owner.md
@@ -47,6 +47,7 @@ The configuration allows you to specify the target owner type and how the system
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/clear-alarm.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/clear-alarm.md
index 597d078f4c..caf8f88434 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/clear-alarm.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/clear-alarm.md
@@ -46,6 +46,7 @@ Clears existing active alarms for the message originator.
}
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/copy-to-view.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/copy-to-view.md
index 44a6817109..f5e4c0dddc 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/copy-to-view.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/copy-to-view.md
@@ -16,6 +16,7 @@ This node has no configuration options.
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/create-alarm.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/create-alarm.md
index caf5d83dfa..b8fec730d0 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/create-alarm.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/create-alarm.md
@@ -117,6 +117,7 @@ The script has access to the following variables:
}
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/create-relation.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/create-relation.md
index 2ce776a25b..8bc9062d14 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/create-relation.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/create-relation.md
@@ -90,6 +90,7 @@ Creates relations between the message originator and a specified target entity b
}
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/delay.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/delay.md
index de2c1dc7e0..0384ef85cb 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/delay.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/delay.md
@@ -1,7 +1,10 @@
Delays incoming messages for a configurable period before forwarding them to the next rule node.
-**⚠️ This node is deprecated** due to potential data loss. It acknowledges incoming messages (removing them from the persistent queue) but stores them only in memory, which is lost
+{% capture deprecation_note %}
+**This node is deprecated** due to potential data loss. It acknowledges incoming messages (removing them from the persistent queue) but stores them only in memory, which is lost
if the server restarts or crashes.
+{% endcapture %}
+{% include templates/warn-banner.md content=deprecation_note %}
## Configuration
@@ -39,6 +42,7 @@ if the server restarts or crashes.
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/delete-relation.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/delete-relation.md
index 5ca5b048a9..6eb1f9a86f 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/delete-relation.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/delete-relation.md
@@ -68,6 +68,7 @@ Supported target entity types:
}
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/device-profile.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/device-profile.md
index a214f47d69..63c86d202a 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/device-profile.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/device-profile.md
@@ -7,8 +7,11 @@ Creates, updates and clears alarms based on the [alarm rules](/docs/{{docsPrefix
- **Enabled**: Alarm rule states are preloaded during node startup.
- **Disabled**: Alarm rule states are loaded on-demand when the first message from device is received.
-> **Note**: If you decide to you these options, we recommend having both enabled at the same time, but when you have a large number of devices, it can be
-> beneficial to disable the fetch option to improve startup time.
+{% capture alarm_rules_both_options_note %}
+**Note**: If you decide to you these options, we recommend having both enabled at the same time, but when you have a large number of devices, it can be
+beneficial to disable the fetch option to improve startup time.
+{% endcapture %}
+{% include templates/info-banner.md content=alarm_rules_both_options_note %}
### Persist state of alarm rules configuration
@@ -25,7 +28,10 @@ zero.
To solve this, **Persist state of alarm rules** configuration option allows persisting alarm rule states to the database instead of keeping them only in memory, ensuring evaluation
continuity across restarts.
-> **Note**: This comes at the cost of additional database writes for each message matching alarm conditions, which can be significant under high message volumes.
+{% capture alarm_rules_persistence_cost_note %}
+**Note**: This comes at the cost of additional database writes for each message matching alarm conditions, which can be significant under high message volumes.
+{% endcapture %}
+{% include templates/info-banner.md content=alarm_rules_persistence_cost_note %}
### JSON Schema
@@ -48,6 +54,7 @@ continuity across restarts.
}
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/device-state.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/device-state.md
index 0e6c9afab5..86ed09844e 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/device-state.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/device-state.md
@@ -133,6 +133,7 @@ Data:
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/generator.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/generator.md
index 9ec7608cc9..d42f2f0b91 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/generator.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/generator.md
@@ -123,6 +123,7 @@ The function must **return** an object containing the following keys:
}
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/gps-geofencing-events.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/gps-geofencing-events.md
index c873d84c64..7e5b833b29 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/gps-geofencing-events.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/gps-geofencing-events.md
@@ -346,10 +346,6 @@ Longitudes are normalized internally, allowing support for polygons that cross t
## Examples
-The examples below show only the **relevant** parts of the incoming message and node configuration. Unless otherwise noted, other fields can have any values.
-
----
-
### Example 1 — "On each message" strategy
**State of the system**
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/log.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/log.md
index 55c9287c96..a6d984a978 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/log.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/log.md
@@ -51,6 +51,7 @@ The function must **return** a string that will be written to the ThingsBoard lo
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/message-count.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/message-count.md
index eae390fda3..1cbc29819b 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/message-count.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/message-count.md
@@ -28,6 +28,7 @@ Counts incoming messages over a specified time interval and outputs a message co
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/remove-from-group.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/remove-from-group.md
index 21f4492090..a5b43ad493 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/remove-from-group.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/remove-from-group.md
@@ -31,6 +31,7 @@ Removes the message originator entity from an entity group based on a configurab
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/save-attributes.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/save-attributes.md
index 841ab4413c..4af5584453 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/save-attributes.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/save-attributes.md
@@ -25,7 +25,10 @@ The save attributes node can perform three distinct actions, each governed by co
For each of these actions, you can choose from the following **processing strategies**:
{% include docs/user-guide/rule-engine-2-0/processing-strategies-explanation.md %}
-> **Note**: Processing strategies are available since TB version 4.0.
+{% capture processing_strategies_availability_note %}
+**Note**: Processing strategies are available since TB version 4.0.
+{% endcapture %}
+{% include templates/info-banner.md content=processing_strategies_availability_note %}
Processing strategies can be set using either **Basic** or **Advanced processing settings**.
@@ -88,9 +91,15 @@ If the message metadata contains an invalid `scope` (e.g. `INVALID_SCOPE`) value
* **Save attributes only if the value changes** – if enabled, the node compares incoming attributes with their current stored values and only saves attributes that are new, have
changed values, or have different data types.
- > **Note**: Avoid concurrent writes of the same attributes because change-detection is not transactional and may produce unexpected results in such cases.
+{% capture concurrent_writes_note %}
+**Note**: Avoid concurrent writes of the same attributes because change-detection is not transactional and may produce unexpected results in such cases.
+{% endcapture %}
+{% include templates/info-banner.md content=concurrent_writes_note %}
- > **Note**: If the attribute save is skipped because the value has not changed, the attribute’s last updated timestamp will not be updated.
+{% capture last_updated_ts_note %}
+**Note**: If the attribute save is skipped because the value has not changed, the attribute’s last updated timestamp will not be updated.
+{% endcapture %}
+{% include templates/info-banner.md content=last_updated_ts_note %}
* **Send attributes updated notification** – if enabled, the node sends an [Attributes Updated](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/overview/#predefined-message-types)
event to the originator's default rule chain for `SHARED_SCOPE` and `SERVER_SCOPE` attributes.
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/save-timeseries.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/save-timeseries.md
index 6fd8a05767..7ea7222dc2 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/save-timeseries.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/save-timeseries.md
@@ -57,7 +57,10 @@ The save time series node can perform four distinct actions, each governed by co
For each of these actions, you can choose from the following **processing strategies**:
{% include docs/user-guide/rule-engine-2-0/processing-strategies-explanation.md %}
-> **Note**: Processing strategies are available since TB version 4.0. "Skip latest persistence" toggle from earlier TB versions corresponds to "Skip" strategy for Latest values.
+{% capture processing_strategies_availability_note %}
+**Note**: Processing strategies are available since TB version 4.0. "Skip latest persistence" toggle from earlier TB versions corresponds to "Skip" strategy for Latest values.
+{% endcapture %}
+{% include templates/info-banner.md content=processing_strategies_availability_note %}
Processing strategies can be set using either **Basic** or **Advanced processing settings**.
@@ -111,7 +114,10 @@ performance optimization rather than a strict processing guarantee.
* **Default TTL** - determines how long the stored data remains in the database.
-> **Note**: TTL value of 0 means that the data never expires.
+{% capture zero_ttl_note %}
+**Note**: TTL value of 0 means that the data never expires.
+{% endcapture %}
+{% include templates/info-banner.md content=zero_ttl_note %}
### JSON Schema
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/save-to-custom-table.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/save-to-custom-table.md
index ec5f4ef711..ed81a8f890 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/save-to-custom-table.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/save-to-custom-table.md
@@ -9,8 +9,10 @@ Stores the incoming message data in a custom Cassandra table.
- **Default TTL** - Time-To-Live in seconds for the inserted records. Set to 0 to disable TTL. When set to a positive value, records will automatically expire after the specified
duration.
-> Note: When **$entityId** is used as a message field key, the node will write the message originator ID to the corresponding table column instead of looking for this field in the
-> message data.
+{% capture entity_id_field_key_note %}
+**Note**: When **$entityId** is used as a message field key, the node will write the message originator ID to the corresponding table column instead of looking for this field in the message data.
+{% endcapture %}
+{% include templates/info-banner.md content=entity_id_field_key_note %}
### JSON Schema
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/unassign-from-customer.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/unassign-from-customer.md
index 0fe26ab85f..2ba71cd5b2 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/action/unassign-from-customer.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/action/unassign-from-customer.md
@@ -1,4 +1,4 @@
-Unassigns the message entity from a customer.
+Unassigns the message originator from a customer.
## Configuration
@@ -22,6 +22,7 @@ Unassigns the message entity from a customer.
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/calculate-delta.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/calculate-delta.md
index 4a10df8f69..c9039717bb 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/calculate-delta.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/calculate-delta.md
@@ -67,6 +67,7 @@ The node configuration allows you to define which key to use for the calculation
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/customer-attributes.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/customer-attributes.md
index 29298ad709..ee8cee37e6 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/customer-attributes.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/customer-attributes.md
@@ -64,6 +64,7 @@ The configuration allows you to specify which data to fetch from the customer an
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
@@ -88,7 +89,6 @@ The configuration allows you to specify which data to fetch from the customer an
### Example 1 — Enriching metadata
-
**Incoming message**:
Metadata:
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/customer-details.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/customer-details.md
index 987dfa951b..beeb7fbc75 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/customer-details.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/customer-details.md
@@ -64,6 +64,7 @@ The node's configuration allows you to select which customer details you want to
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/fetch-device-credentials.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/fetch-device-credentials.md
index ea18aa14a7..b35eb517dd 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/fetch-device-credentials.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/fetch-device-credentials.md
@@ -31,6 +31,7 @@ The node has a single configuration option to determine where the fetched creden
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/originator-attributes.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/originator-attributes.md
index 2543c2e4cd..186f342f82 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/originator-attributes.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/originator-attributes.md
@@ -75,6 +75,7 @@ The node's configuration allows you to specify which keys to fetch from differen
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/originator-fields.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/originator-fields.md
index 126679b0d9..e71c838782 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/originator-fields.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/originator-fields.md
@@ -48,6 +48,7 @@ The node's configuration allows you to define a mapping from the originator's en
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/originator-telemetry.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/originator-telemetry.md
index c350ea940f..3c57a1e1b8 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/originator-telemetry.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/originator-telemetry.md
@@ -118,6 +118,7 @@ The node's configuration is divided into three main sections: selecting the data
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
@@ -270,7 +271,10 @@ Metadata:
}
```
-> Note: The timestamp (`ts`) in the result corresponds to the start of the aggregation interval.
+{% capture aggregation_timestamp_note %}
+**Note**: The timestamp (`ts`) in the result corresponds to the start of the aggregation interval.
+{% endcapture %}
+{% include templates/info-banner.md content=aggregation_timestamp_note %}
### Example 4 — Using a dynamic interval from message data
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/related-entity-data.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/related-entity-data.md
index 6a854a92ad..f773502ea7 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/related-entity-data.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/related-entity-data.md
@@ -70,6 +70,7 @@ The configuration window allows you to define how to find the related entity and
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/tenant-attributes.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/tenant-attributes.md
index 0e3006b5c5..74df36debf 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/tenant-attributes.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/tenant-attributes.md
@@ -56,6 +56,7 @@ The configuration allows you to specify which data to fetch from the tenant and
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/tenant-details.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/tenant-details.md
index 93b9b2df2b..2988a072e0 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/tenant-details.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/enrichment/tenant-details.md
@@ -64,6 +64,7 @@ The node's configuration allows you to select which tenant details you want to f
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/external/azure-iot-hub.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/external/azure-iot-hub.md
index 9c43d79514..cf70ebe5bd 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/external/azure-iot-hub.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/external/azure-iot-hub.md
@@ -1,46 +1,363 @@
-
-
-
- | Since TB Version 2.5.3 |
-
-
-
+Publishes messages to [Azure IoT Hub](https://azure.microsoft.com/en-us/products/iot-hub) with QoS 1 (at least once) using
+the [MQTT protocol](https://learn.microsoft.com/en-us/azure/iot/iot-mqtt-connect-to-iot-hub#sending-device-to-cloud-messages) over secure TLS connection. Supports dynamic topic
+patterns populated with data from incoming
+messages and multiple authentication methods including SAS tokens and certificate-based authentication.
-
+## Configuration
-Configuration:
+### Topic
-
+Specifies the Azure IoT Hub topic where messages will be published. Supports [templatization](/docs/{{docsPrefix}}user-guide/templatization/).
-- **Topic** - for more information about IoT Hub topic use [link](https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-mqtt-support#sending-device-to-cloud-messages).
-- **Hostname** - Azure IoT Hub Hostname.
-- **Device ID** - Your Device ID from Azure IoT Hub.
-- **Credentials** - Azure IoT Hub connection credentials. Can be either *Shared Access Signature* or *PEM*.
+### Hostname
-Different Authentication credentials are supported for Azure IoT Hub:
+The hostname of your Azure IoT Hub in the format `.azure-devices.net`.
-- Shared Access Signature - SAS Key is used for Authentication
-- PEM - PEM certificates are used for Authentication
+{% capture port_note %}
+**Note**: The port is fixed at 8883 (Azure IoT Hub standard MQTT port).
+{% endcapture %}
+{% include templates/info-banner.md content=port_note %}
-If **Shared Access Signature** credentials type is selected, the following configuration should be provided:
-- SAS Key - it is key from your device in [Azure IoT Hub](https://docs.microsoft.com/en-us/azure/iot-edge/how-to-authenticate-downstream-device#symmetric-key-authentication)
-- CA certificate file, by default used Baltimore certificate. More about certificates [here](https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-mqtt-support#tlsssl-configuration)
+{% capture connection_behavior_note %}
+**Note**: All connections to Azure IoT Hub use the following fixed settings: SSL enabled, clean session enabled, QoS 1 (at least once), and no retained messages.
+{% endcapture %}
+{% include templates/info-banner.md content=connection_behavior_note %}
-If **PEM** credentials type is selected, the following configuration should be provided:
+### Device ID
-- CA certificate file, by default used Baltimore certificate. More about certificates [here](https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-mqtt-support#tlsssl-configuration)
-- Certificate file
-- Private key file
-- Private key password
+The device identifier for connecting to Azure IoT Hub. This field is required and must match a device ID registered in your Azure IoT Hub.
-[X.509 CA-signed authentication](https://docs.microsoft.com/en-us/azure/iot-edge/how-to-authenticate-downstream-device#x509-ca-signed-authentication)
+### Protocol version
-[CACertificates instruction](https://github.com/Azure/azure-iot-sdk-c/tree/master/tools/CACertificates)
+The MQTT protocol version used for the connection. Only **MQTT 3.1.1** is supported.
-
+### Credentials
-**Published body** - Node will send full Message payload to the Azure IoT Hub device.
-If required, Rule Chain can be configured to use chain of Transformation Nodes for sending correct Payload to the Azure IoT Hub.
+Authentication credentials for connecting to Azure IoT Hub. The node supports two credential types:
-In case of successful message publishing, original Message will be passed to the next nodes via **Success** chain,
-otherwise **Failure** chain is used.
+#### SAS Token (Shared Access Signature)
+
+Token-based authentication
+using [Azure IoT Hub Shared Access Signatures](https://learn.microsoft.com/en-us/azure/iot-edge/how-to-authenticate-downstream-device#symmetric-key-authentication). This is the
+most common authentication method for Azure IoT Hub.
+
+**Configuration**:
+
+- **SAS Key** – The shared access key for the device. This is generated when you register a device in Azure IoT Hub. The node automatically generates the SAS token from this key.
+- **CA certificate file** – Optional. The Certificate Authority (CA) certificate for verifying the Azure IoT Hub server. If not provided, the node automatically uses the DigiCert
+ Global Root G2 certificate.
+
+{% capture sas_credentials_note %}
+**Note**: The SAS key and CA certificate file can be uploaded directly or referenced from [Secrets storage](/docs/pe/user-guide/secrets-storage/){:target="_blank"} for enhanced
+security.
+{% endcapture %}
+{% include templates/info-banner.md content=sas_credentials_note %}
+
+#### PEM Certificate (X.509)
+
+Certificate-based authentication using [X.509 certificates](https://learn.microsoft.com/en-us/azure/iot-edge/how-to-authenticate-downstream-device#x509-ca-signed-authentication).
+This provides enhanced security through certificate-based mutual [TLS authentication](https://learn.microsoft.com/en-us/azure/iot/iot-mqtt-connect-to-iot-hub#tls-configuration).
+
+**Configuration**:
+
+- **CA certificate file** – Optional. The Azure IoT Hub CA certificate. If not provided, the node automatically uses the DigiCert Global Root G2 certificate.
+- **Client certificate file** – The X.509 client certificate registered with your device in Azure IoT Hub. This certificate must be uploaded to Azure IoT Hub before use.
+- **Client private key file** – The private key corresponding to the client certificate.
+- **Private key password** – Optional password if the private key file is encrypted.
+
+{% capture cert_credentials_note %}
+**Note**: Certificate and key files can be uploaded directly or referenced from [Secrets storage](/docs/pe/user-guide/secrets-storage/){:target="_blank"} for enhanced security.
+{% endcapture %}
+{% include templates/info-banner.md content=cert_credentials_note %}
+
+### Additional information
+
+#### Singleton mode
+
+The Azure IoT Hub node operates exclusively in **Singleton mode**. This means:
+
+- The rule node is launched on only one rule engine instance, regardless of how many rule engine instances are running in the cluster
+- There is only one MQTT client connection to Azure IoT Hub
+- This prevents conflicts with Azure IoT Hub's device connection policies
+
+{% capture singleton_note %}
+**Note**: Singleton mode cannot be disabled for the Azure IoT Hub node. This is a platform requirement to ensure proper device identity management with Azure IoT Hub.
+{% endcapture %}
+{% include templates/info-banner.md content=singleton_note %}
+
+#### Force acknowledgement
+
+The force acknowledgement mechanism is controlled by the `ACTORS_RULE_EXTERNAL_NODE_FORCE_ACK` environment variable. When this variable is set to `true`, it applies to all external
+nodes including the Azure IoT Hub node.
+
+**Behavior when force acknowledgement is enabled**:
+
+- The incoming message is acknowledged immediately and a copy is created
+- The Azure IoT Hub publish operation executes
+- Once the publish operation completes, the message copy is added to the queue for processing by the next node
+- This prevents message processing timeouts for slow network connections or Azure IoT Hub throttling
+
+**Behavior when force acknowledgement is disabled** (default):
+
+- The original incoming message is held until the Azure IoT Hub publish operation completes
+- The message is then passed to the next node
+
+#### MQTT retransmission
+
+The node uses the platform's internal MQTT client, which includes a retransmission mechanism to improve reliability for QoS 1 messages. When a PUBLISH message is sent, the client
+waits for an acknowledgment from Azure IoT Hub. If no acknowledgment is received within a configurable delay period, the message is retransmitted.
+
+The delay between retransmissions follows an exponential backoff strategy with jitter:
+
+- The delay starts from an initial value and doubles with each retry attempt
+- A jitter factor introduces random variance (±percentage) to prevent synchronized retries across multiple clients
+
+**Example**: With three maximum attempts, 5,000 ms initial delay, and 0.15 jitter factor, retransmissions occur at approximately:
+
+- 5,000 ms (±15%)
+- 10,000 ms (±15%)
+- 20,000 ms (±15%)
+
+If no acknowledgment is received after all retry attempts, the message is dropped and routed via the `Failure` connection with an appropriate error message.
+
+**Configuration**:
+
+Retransmission parameters are configured globally in the `thingsboard.yml` file and apply to all MQTT clients on the platform:
+
+```yaml
+mqtt:
+ client:
+ retransmission:
+ max_attempts: "${TB_MQTT_CLIENT_RETRANSMISSION_MAX_ATTEMPTS:3}"
+ initial_delay_millis: "${TB_MQTT_CLIENT_RETRANSMISSION_INITIAL_DELAY_MILLIS:5000}"
+ jitter_factor: "${TB_MQTT_CLIENT_RETRANSMISSION_JITTER_FACTOR:0.15}"
+```
+
+### JSON Schema
+
+```json
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "title": "TbAzureIotHubNodeConfiguration",
+ "type": "object",
+ "properties": {
+ "topicPattern": {
+ "type": "string",
+ "minLength": 1,
+ "default": "devices//messages/events/",
+ "description": "Azure IoT Hub topic where messages will be published (supports templatization)."
+ },
+ "host": {
+ "type": "string",
+ "minLength": 1,
+ "description": "Azure IoT Hub hostname in format .azure-devices.net"
+ },
+ "port": {
+ "type": "integer",
+ "const": 8883,
+ "description": "Port number (fixed at 8883 for Azure IoT Hub)."
+ },
+ "clientId": {
+ "type": "string",
+ "minLength": 1,
+ "description": "Device identifier (must match Azure IoT Hub device ID)."
+ },
+ "cleanSession": {
+ "type": "boolean",
+ "const": true,
+ "description": "Always true for Azure IoT Hub (no stored state)."
+ },
+ "ssl": {
+ "type": "boolean",
+ "const": true,
+ "description": "Always true for Azure IoT Hub (TLS/SSL required)."
+ },
+ "protocolVersion": {
+ "type": "string",
+ "const": "MQTT_3_1_1",
+ "description": "MQTT protocol version (only MQTT 3.1.1 is supported)."
+ },
+ "credentials": {
+ "type": "object",
+ "oneOf": [
+ {
+ "properties": {
+ "type": {
+ "const": "SAS"
+ },
+ "sasKey": {
+ "type": "string",
+ "description": "Azure IoT Hub shared access key."
+ },
+ "caCert": {
+ "type": "string",
+ "description": "Azure IoT Hub CA certificate (optional, defaults to Azure's CA)."
+ }
+ },
+ "required": [
+ "type",
+ "sasKey"
+ ]
+ },
+ {
+ "properties": {
+ "type": {
+ "const": "CERT_PEM"
+ },
+ "caCert": {
+ "type": "string",
+ "description": "Azure IoT Hub CA certificate (optional, defaults to Azure's CA)."
+ },
+ "cert": {
+ "type": "string",
+ "description": "X.509 client certificate."
+ },
+ "privateKey": {
+ "type": "string",
+ "description": "Client private key."
+ },
+ "password": {
+ "type": "string",
+ "description": "Private key password (optional)."
+ }
+ },
+ "required": [
+ "type",
+ "cert",
+ "privateKey"
+ ]
+ }
+ ],
+ "description": "Authentication credentials (SAS or X.509 certificate)."
+ }
+ },
+ "required": [
+ "topicPattern",
+ "host",
+ "port",
+ "cleanSession",
+ "ssl",
+ "protocolVersion",
+ "credentials"
+ ],
+ "additionalProperties": false
+}
+```
+{: .copy-code.expandable-3 }
+
+## Rule node initialization
+
+When the rule node is initialized, it establishes a secure connection to Azure IoT Hub. If no CA certificate is provided, the node automatically uses the DigiCert Global Root G2
+certificate. Once the connection is established, it remains open for the lifetime of the rule node, ready to publish messages to Azure IoT Hub.
+
+## Message processing
+
+For each incoming message, the node performs the following steps:
+
+1. If **Force acknowledgement** is enabled, the incoming message is acknowledged immediately and a copy is created.
+2. The node processes the **Topic** pattern, replacing templates with values from the incoming message data and metadata to construct the final Azure IoT Hub topic.
+3. The node publishes the message data to Azure IoT Hub:
+ - The message is published to the constructed topic with **QoS 1 (AT_LEAST_ONCE)**.
+ - The connection uses the automatically configured Azure IoT Hub credentials and settings.
+4. When the publish operation completes:
+ - On success, the original message (or the message copy if force acknowledgement is enabled) is forwarded via the `Success` connection.
+ - On failure, error details are added to the message metadata under the `error` key, and the message is forwarded via the `Failure` connection.
+
+## Rule node shutdown
+
+When the rule node is shut down, it disconnects from Azure IoT Hub and releases all associated resources.
+
+Shutdown occurs in the following scenarios:
+
+- **Rule node configuration is updated** – The node is destroyed and then re-initialized with the new configuration.
+- **Rule node is deleted** – The node is destroyed without re-initialization.
+
+{% capture shutdown_note %}
+**Note**: The shutdown process is not executed if the rule engine instance crashes or is forcibly terminated (e.g., SIGTERM, SIGKILL).
+{% endcapture %}
+{% include templates/info-banner.md content=shutdown_note %}
+
+## Outgoing message format
+
+**On success**:
+
+- The message is forwarded unchanged via the `Success` connection
+
+**On failure**:
+
+- Error details are added to the message metadata under the `error` key in the format: `ExceptionClass: error message`
+- All other message properties remain unchanged
+
+## Output connections
+
+- **Success**
+ - The message was successfully published to Azure IoT Hub.
+ - Azure IoT Hub acknowledged receipt of the message (QoS 1).
+- **Failure**
+ - The publish operation failed.
+ - An unexpected error occurred during processing.
+
+## Examples
+
+### Example 1 — Publishing device telemetry to Azure IoT Hub using SAS token
+
+A temperature sensor sends telemetry data that needs to be forwarded to Azure IoT Hub. The device is registered in Azure IoT Hub and uses SAS token authentication. Force
+acknowledgement is disabled.
+
+**Incoming message**
+
+Originator: `DEVICE` (Temperature Sensor)
+
+Metadata:
+
+```json
+{
+ "deviceId": "temp-sensor-001",
+ "deviceType": "TemperatureSensor",
+ "ts": 1672531200000
+}
+```
+
+Data:
+
+```json
+{
+ "temperature": 22.5,
+ "humidity": 65,
+ "pressure": 1013.25
+}
+```
+
+**Node configuration**
+
+```json
+{
+ "topicPattern": "devices/${deviceId}/messages/events/",
+ "host": "my-company-hub.azure-devices.net",
+ "port": 8883,
+ "clientId": "temp-sensor-001",
+ "cleanSession": true,
+ "ssl": true,
+ "protocolVersion": "MQTT_3_1_1",
+ "credentials": {
+ "type": "SAS",
+ "sasKey": "xlR3T8vK2mN5hQ7wP1jY9sZ4fG6bV0cX=="
+ }
+}
+```
+
+**Outgoing message**
+
+The outgoing message is the same as the incoming message. Since force acknowledgement is disabled, the original incoming message is passed to the next node after successful
+publish.
+
+**Result**
+
+The node automatically:
+
+1. Constructs the MQTT username: `my-company-hub.azure-devices.net/temp-sensor-001/?api-version=2020-09-30`
+2. Generates a SAS token from the provided SAS key
+3. Establishes a secure TLS connection on port 8883
+4. Publishes the message to topic `devices/temp-sensor-001/messages/events/`
+
+The message data is sent to Azure IoT Hub and becomes available for routing and processing by Azure services. The message is then routed via the `Success` connection.
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/external/index.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/external/index.md
index 7e3f6db7c7..5f04c6803c 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/external/index.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/external/index.md
@@ -9,15 +9,15 @@ This allows rule chains to integrate with external infrastructure and services a
- [aws lambda](/docs/user-guide/rule-engine-2-0/nodes/external/aws-lambda) — invokes AWS Lambda function with incoming message data as the payload and returns the function's response as outgoing message data.
- [aws sns](/docs/user-guide/rule-engine-2-0/nodes/external/aws-sns) — publishes incoming message data to AWS SNS topic and returns response metadata in the outgoing message.
- [aws sqs](/docs/user-guide/rule-engine-2-0/nodes/external/aws-sqs) — publishes incoming message data to AWS Simple Queue Service (SQS) queue and returns response metadata in the outgoing message.
-- [azure iot hub](/docs/user-guide/rule-engine-2-0/nodes/external/azure-iot-hub) — Node will send full Message payload to the Azure IoT Hub device.
+- [azure iot hub](/docs/user-guide/rule-engine-2-0/nodes/external/azure-iot-hub) — publishes incoming message data to [Azure IoT Hub](https://azure.microsoft.com/en-us/products/iot-hub) using MQTT protocol with QoS 1 and support for SAS token and X.509 certificate authentication.
- [gcp pubsub](/docs/user-guide/rule-engine-2-0/nodes/external/gcp-pubsub) — publishes incoming message data to [Google Cloud Pub/Sub](https://cloud.google.com/pubsub){:target="_blank"} topic and return response metadata in the outgoing message.
- [kafka](/docs/user-guide/rule-engine-2-0/nodes/external/kafka) — publishes messages to [Apache Kafka](https://kafka.apache.org/){:target="_blank"} topic, sending the incoming message data as the record value.
- [mqtt](/docs/user-guide/rule-engine-2-0/nodes/external/mqtt) — publishes incoming message data to an external MQTT broker using QoS 1 (at least once), with support for dynamic topic patterns, multiple authentication methods, and TLS/SSL encryption.
- [rabbitmq](/docs/user-guide/rule-engine-2-0/nodes/external/rabbitmq) — publishes messages to [RabbitMQ](https://www.rabbitmq.com/){:target="_blank"} exchanges, sending the incoming message data as the message body.
-- [rest api call](/docs/user-guide/rule-engine-2-0/nodes/external/rest-api-call) — Invoke REST API calls to the external REST server.
-- [send email](/docs/user-guide/rule-engine-2-0/nodes/external/send-email) — Node sends incoming message using configured Mail Server.
-- [send notification](/docs/user-guide/rule-engine-2-0/nodes/external/send-notification) — The node can send notification to recipients group using the template.
-- [send sms](/docs/user-guide/rule-engine-2-0/nodes/external/send-sms) — Node is able to construct SMS message based on the metadata fields from the incoming message and send it using AWS SNS or Twilio SMS providers.
-- [send to slack](/docs/user-guide/rule-engine-2-0/nodes/external/send-to-slack) — The node create a message based on the incoming data and metadata, and send it via Slack to a public channel, private channel or direct message.
-- [twilio sms](/docs/user-guide/rule-engine-2-0/nodes/external/twilio-sms) — Sends incoming message payload as SMS message via Twilio service.
-- [twilio voice](/docs/user-guide/rule-engine-2-0/nodes/external/twilio-voice) — Sends voice message via Twilio.
+- [rest api call](/docs/user-guide/rule-engine-2-0/nodes/external/rest-api-call) — sends HTTP requests to external endpoints using configurable methods, authentication, and proxy settings, returning the response as outgoing message data.
+- [send email](/docs/user-guide/rule-engine-2-0/nodes/external/send-email) — sends email messages via SMTP server with support for TLS encryption and proxy configuration.
+- [send notification](/docs/user-guide/rule-engine-2-0/nodes/external/send-notification) — sends notifications to specified recipients using notification templates through the [notification center](/docs/{{docsPrefix}}user-guide/notifications/){:target="_blank"}.
+- [send sms](/docs/user-guide/rule-engine-2-0/nodes/external/send-sms) — sends SMS messages to specified phone numbers via AWS SNS, Twilio, or SMPP providers with templatization support.
+- [send to slack](/docs/user-guide/rule-engine-2-0/nodes/external/send-to-slack) — sends messages to [Slack](https://slack.com/){:target="_blank"} public channels, private channels, or direct messages via Slack API.
+- [twilio sms](/docs/user-guide/rule-engine-2-0/nodes/external/twilio-sms) — sends incoming message data as SMS to specified phone numbers via [Twilio](https://www.twilio.com/messaging/channels/sms){:target="_blank"}.
+- [twilio voice](/docs/user-guide/rule-engine-2-0/nodes/external/twilio-voice) — sends incoming message data as voice messages to specified phone numbers via [Twilio](https://www.twilio.com/voice){:target="_blank"} text-to-speech service.
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/external/rest-api-call.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/external/rest-api-call.md
index 21ae1dc1ac..842844eff6 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/external/rest-api-call.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/external/rest-api-call.md
@@ -1,68 +1,449 @@
-
-
-
- | Since TB Version 2.0 |
-
-
-
+Sends HTTP requests to external endpoints with configurable request methods, headers, authentication, and proxy settings. Supports GET, POST, PUT, PATCH, and DELETE operations with
+multiple authentication methods including TLS/SSL encryption.
-
+## Configuration
-Invoke REST API calls to the external REST server.
+### Endpoint URL pattern
-Configuration:
+Specifies the endpoint URL where requests will be sent. Supports [templatization](/docs/{{docsPrefix}}user-guide/templatization/).
-
+### Request method
-- **Endpoint URL pattern** - Can be a static string, or pattern that is resolved using Message Metadata properties. For example ${deviceType}
-- **Request method** - *GET*, *POST*, *PUT*, *DELETE*
-- **Headers** - request headers, header or value can be a static string, or pattern that is resolved using Message Metadata properties.
+The HTTP method to use for the request. Available options: **GET**, **POST**, **PUT**, **PATCH**, **DELETE**.
-**Endpoint URL**
+### Headers
-URL can be a static string or a pattern. Only Message metadata is used for resolving patterns.
-So property names that are used in the patterns must exist in the Message Metadata, otherwise raw pattern will be added into URL.
+Key-value pairs of HTTP headers to include in the request. Both keys and values support [templatization](/docs/{{docsPrefix}}user-guide/templatization/).
-For example, if Message payload contains property **deviceType** with value **container**, then this pattern:
+### Message settings
-http://localhost/api/${deviceType}/update
+#### Parse to plain text
-will be resolved to
+Controls how the message data is processed before sending:
-http://localhost/api/container/update
+- **Disabled** (default) – The message data is sent as-is
+- **Enabled** – If the message data is a JSON-encoded string (wrapped in double quotes), the outer JSON encoding is removed
-**Headers**
+**Example**:
-Collection of header name/value can be configured. Those headers will be added into Rest request. Pattern should be used for configured both header name and header value.
-For example ${deviceType}. Only Message metadata is used for resolving patterns.
-So property names that are used in the pattern must exist in the Message Metadata, otherwise raw pattern will be added into header.
+Message data: `"\"Temperature is 25.5°C\""`
-**Request body** - Node will send full Message payload to the configured REST endpoint.
-If required, Rule Chain can be configured to use chain of Transformation Nodes for sending correct Payload.
+- Parse to plain text **OFF**: Sends `"\"Temperature is 25.5°C\""` (with JSON encoding)
+- Parse to plain text **ON**: Sends `"Temperature is 25.5°C"` (without outer quotes)
-**Outbound message** from this node will contain response **status**, **statusCode**, **statusReason** and responce **headers** in the Message metadata.
-Outbound Message payload will be the same as response body. Original Message type and originator will not be changed.
+{% capture parse_note %}
+**Note**: This setting only affects JSON-encoded strings (strings wrapped in double quotes). Regular JSON objects like `{"temperature":25.5}` are sent unchanged regardless of this
+setting.
+{% endcapture %}
+{% include templates/info-banner.md content=parse_note %}
-
+#### Without request body
-To send a single file as request body, add a field **attachments** to the message **metadata** with file uuid stored in DataBase. In that case any message data will be ignored and only file content will be sent.
-To define a request content type use the header setting like
+- **Disabled** (default) – Request body contains the message data for POST, PUT, PATCH, and DELETE methods
+- **Enabled** – No request body is sent, even for methods that typically include one
-Content-Type: application/json; charset=UTF-8
+{% capture attachment_note %}
+**Note**: When request body is enabled, if the message metadata contains an `attachments` field with blob entity IDs, the content of the first blob entity will be used as the
+request body instead of the message data.
+{% endcapture %}
+{% include templates/info-banner.md content=attachment_note %}
-Here an example of message **metadata** to send a single file:
+### Connection settings
-{% highlight javascript %}
+#### Read timeout (ms)
+
+The maximum time in milliseconds to wait for a response from the server.
+
+- **0** (default) – Infinite timeout (waits indefinitely)
+- **> 0** – Timeout after the specified milliseconds
+
+#### Max number of parallel requests
+
+Limits the number of concurrent requests the node can make.
+
+- **0** (default) – No limit on parallel processing
+- **> 0** – Maximum number of requests that can be in-flight simultaneously
+
+When the limit is reached, new messages wait until an in-flight request completes. If a message waits longer than the read timeout, it fails with a timeout error.
+
+#### Max response size (in KB)
+
+The maximum size of HTTP response body that can be buffered in memory. Responses exceeding this limit will fail with an error. Default: 256 KB
+
+The system enforces a maximum limit through the `tb.http.maxInMemoryBufferSizeInKb` system property (default: 25000 KB). If the configured value exceeds this limit, the node fails
+to initialize.
+
+### Proxy settings
+
+#### Enable proxy
+
+- **Disabled** (default) – Direct connection to the endpoint
+- **Enabled** – Routes requests through a proxy server
+
+When enabled, you can choose between configuring proxy settings manually or using system proxy properties.
+
+#### Use system proxy properties
+
+When **Enable proxy** is enabled, this option determines the proxy configuration source:
+
+- **Disabled** (default) – Manually configure proxy settings below
+- **Enabled** – Use system proxy properties
+
+**System properties** (at least one set must be configured):
+
+HTTP proxy:
+
+- `http.proxyHost` – HTTP proxy hostname
+- `http.proxyPort` – HTTP proxy port
+
+HTTPS proxy:
+
+- `https.proxyHost` – HTTPS proxy hostname
+- `https.proxyPort` – HTTPS proxy port
+
+SOCKS proxy:
+
+- `socksProxyHost` – SOCKS proxy hostname
+- `socksProxyPort` – SOCKS proxy port
+- `socksProxyVersion` – SOCKS version (4 or 5, defaults to 5)
+
+**Authentication properties** (for all proxy types):
+
+- `tb.proxy.user` – Proxy username
+- `tb.proxy.password` – Proxy password
+
+{% capture proxy_note %}
+**Note**: If system proxy properties are enabled but not configured, the node will fail to initialize.
+{% endcapture %}
+{% include templates/info-banner.md content=proxy_note %}
+
+#### Manual proxy configuration
+
+When **Use system proxy properties** is disabled, configure the proxy manually:
+
+- **Proxy host** – The hostname or IP address of the proxy server
+- **Proxy port** – The port number of the proxy server (1-65535)
+- **Proxy user** – Username for proxy authentication
+- **Proxy password** – Password for proxy authentication
+
+### Credentials
+
+Authentication credentials for connecting to the endpoint. The available credential types are:
+
+#### Anonymous
+
+No authentication is provided. Use this when the endpoint allows anonymous access or when authentication is handled via headers.
+
+#### Basic
+
+HTTP Basic authentication with username and password.
+
+**Configuration**:
+
+- **Username** – The username for authentication
+- **Password** – The password for authentication
+
+The credentials are automatically encoded and sent in the `Authorization` header as `Basic `.
+
+#### PEM Certificate
+
+Certificate-based authentication using PEM-encoded files. This provides mutual TLS authentication.
+
+**Configuration**:
+
+- **Server CA certificate file** – The Certificate Authority (CA) certificate that signed the server's certificate. Used to verify the server's identity.
+- **Client certificate file** – The client's public certificate. Sent to the server for client authentication.
+- **Client private key file** – The client's private key corresponding to the client certificate.
+- **Private key password** – Password if the private key file is encrypted.
+
+{% capture cert_requirement_note %}
+**Note**: Provide either a Server CA certificate file or a pair of Client certificate and Client private key files when using PEM credentials.
+{% endcapture %}
+{% include templates/info-banner.md content=cert_requirement_note %}
+
+{% capture credentials_note %}
+**Note**: Certificate and key files can be uploaded directly or referenced from [Secrets storage](/docs/pe/user-guide/secrets-storage/){:target="_blank"} for enhanced security.
+{% endcapture %}
+{% include templates/info-banner.md content=credentials_note %}
+
+### Advanced settings
+
+#### Force acknowledgement
+
+The force acknowledgement mechanism is controlled by the `ACTORS_RULE_EXTERNAL_NODE_FORCE_ACK` environment variable. When this variable is set to `true`, it applies to all external
+nodes including this REST API call node.
+
+**Behavior when force acknowledgement is enabled**:
+
+- The incoming message is acknowledged immediately
+- The HTTP request executes
+- Once the request completes, the response is placed into a new message
+- The new message is added to the queue for processing by the next node
+- This prevents message processing timeouts for slow endpoints
+
+**Behavior when force acknowledgement is disabled** (default):
+
+- The original incoming message is held until the HTTP request completes
+- The original message is transformed with the response data
+- The transformed message is then passed to the next node
+
+### JSON Schema
+
+```json
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "title": "TbRestApiCallNodeConfiguration",
+ "type": "object",
+ "properties": {
+ "restEndpointUrlPattern": {
+ "type": "string",
+ "minLength": 1,
+ "description": "Endpoint URL (supports templatization)."
+ },
+ "requestMethod": {
+ "type": "string",
+ "enum": [
+ "GET",
+ "POST",
+ "PUT",
+ "PATCH",
+ "DELETE"
+ ],
+ "description": "HTTP request method."
+ },
+ "headers": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "HTTP headers as key-value pairs (supports templatization)."
+ },
+ "readTimeoutMs": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "Read timeout in milliseconds (0 = infinite)."
+ },
+ "maxParallelRequestsCount": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "Maximum concurrent requests (0 = unlimited)."
+ },
+ "parseToPlainText": {
+ "type": "boolean",
+ "description": "Whether to convert JSON message data to plain text."
+ },
+ "enableProxy": {
+ "type": "boolean",
+ "description": "Whether to use proxy server."
+ },
+ "useSystemProxyProperties": {
+ "type": "boolean",
+ "description": "Whether to use system proxy properties."
+ },
+ "proxyHost": {
+ "type": "string",
+ "description": "Proxy server hostname (when not using system properties)."
+ },
+ "proxyPort": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 65535,
+ "description": "Proxy server port (when not using system properties)."
+ },
+ "proxyUser": {
+ "type": "string",
+ "description": "Proxy authentication username."
+ },
+ "proxyPassword": {
+ "type": "string",
+ "description": "Proxy authentication password."
+ },
+ "credentials": {
+ "type": "object",
+ "description": "Authentication credentials for the endpoint."
+ },
+ "ignoreRequestBody": {
+ "type": "boolean",
+ "description": "Whether to exclude request body for POST/PUT/PATCH/DELETE."
+ },
+ "maxInMemoryBufferSizeInKb": {
+ "type": "integer",
+ "minimum": 1,
+ "description": "Maximum in-memory buffer size in KB."
+ }
+ },
+ "additionalProperties": false
+}
+```
+{: .copy-code.expandable-4 }
+
+## Rule node initialization
+
+When the rule node is initialized, it creates an HTTP client with the configured settings. The client uses a connection pool with a maximum number of connections that can be
+configured via the `TB_RE_HTTP_CLIENT_POOL_MAX_CONNECTIONS` environment variable (defaults to a value determined by the Reactor Netty library).
+
+Once initialization completes, the client is ready to process messages.
+
+## Message processing
+
+For each incoming message, the node performs the following steps:
+
+1. If **Force acknowledgement** is enabled, the incoming message is acknowledged immediately.
+2. If **Max number of parallel requests** is configured, the node waits for an available slot. If no slot becomes available within the read timeout period, the message fails with a
+ timeout error.
+3. The node processes the **Endpoint URL pattern**, replacing templates with values from the incoming message data and metadata to construct the final URL.
+4. HTTP headers are prepared:
+ - Configured headers are added with template processing
+ - For Basic credentials, an `Authorization` header is added with base64-encoded credentials
+5. The request body is prepared:
+ - If **Without request body** is enabled, no body is sent
+ - Otherwise, for POST, PUT, PATCH, and DELETE methods:
+ - If the message metadata contains an `attachments` field with blob entity IDs, the content of the first blob entity is used as the request body
+ - Otherwise, the message data is used as the request body
+ - If **Parse to plain text** is enabled, JSON-encoded strings are unwrapped
+6. The HTTP request is sent to the endpoint.
+7. When the response is received:
+ - On success (2xx status code): The response information is added to the message and it is forwarded via the `Success` connection
+ - On failure (non-2xx status code or exception): The error information is added to the message and it is forwarded via the `Failure` connection
+ - See the "Outgoing message format" section for details on how the response/error information is structured
+8. If **Max number of parallel requests** is configured, the request slot is released for use by the next message.
+
+## Outgoing message format
+
+**On success** (2xx response):
+
+Message metadata is enriched with the following keys:
+
+- `status` – HTTP status name (e.g., "OK", "CREATED")
+- `statusCode` – HTTP status code (e.g., "200", "201")
+- `statusReason` – HTTP status reason phrase
+- Response headers – Each response header is added as a metadata key-value pair
+ - Single-value headers: Added as string values
+ - Multi-value headers: Added as JSON array strings
+
+Message data is replaced with the response body. If the response has no body, the data is set to `{}`.
+
+**On failure** (non-2xx response or exception):
+
+Message metadata is enriched with the following keys:
+
+- `error` – Error description in format `ExceptionClass: error message`
+- `status` – HTTP status name (if available)
+- `statusCode` – HTTP status code (if available)
+- `statusReason` – HTTP status reason phrase (if available)
+- `error_body` – Response body from failed request (if available)
+- Response headers – Each response header (if available)
+
+Message data remains unchanged from the original message.
+
+**Force acknowledgement behaviour:**
+
+When **Force acknowledgement** is disabled, the original incoming message is transformed with the response information described above.
+
+When **Force acknowledgement** is enabled, a new message is created with the response information described above.
+
+## Output connections
+
+- **Success**
+ - The HTTP request completed successfully with a 2xx status code
+- **Failure**
+ - The HTTP request returned a non-2xx status code
+ - The request failed due to network issues, timeout, or connection errors
+ - An unexpected error occurred during processing
+ - Timeout occurred while waiting for an available request slot
+
+## Examples
+
+### Example 1
+
+A smart device needs to send a control command to an external device management system and receive the execution result. The endpoint requires Basic authentication and expects a
+JSON command in the request body. Force acknowledgement is disabled.
+
+**Incoming message**
+
+Originator: `DEVICE` (Smart Lock)
+
+Data:
+
+```json
{
- "attachments": "e18b6950-dfca-11eb-affb-8db134b46d68"
+ "command": "unlock",
+ "duration": 30,
+ "reason": "owner_request"
}
-{% endhighlight %}
+```
+
+Metadata:
+
+```json
+{
+ "deviceId": "lock-bedroom-01",
+ "deviceType": "smartLock"
+}
+```
+
+**Node configuration**
+
+```json
+{
+ "restEndpointUrlPattern": "https://api.smart-home.com/v1/devices/${deviceId}/commands",
+ "requestMethod": "POST",
+ "headers": {
+ "Content-Type": "application/json"
+ },
+ "readTimeoutMs": 5000,
+ "maxParallelRequestsCount": 10,
+ "parseToPlainText": false,
+ "enableProxy": false,
+ "credentials": {
+ "type": "basic",
+ "username": "api-client",
+ "password": "secure-password"
+ },
+ "ignoreRequestBody": false,
+ "maxInMemoryBufferSizeInKb": 256
+}
+```
+
+**Outgoing message** (assuming successful response with status 200)
+
+Data:
+
+```json
+{
+ "commandId": "cmd-98765",
+ "status": "executed",
+ "executedAt": "2023-01-01T10:30:00Z",
+ "result": {
+ "success": true,
+ "lockState": "unlocked",
+ "autoLockIn": 30
+ }
+}
+```
+
+Metadata:
+
+```json
+{
+ "deviceId": "lock-bedroom-01",
+ "deviceType": "smartLock",
+ "status": "OK",
+ "statusCode": "200",
+ "statusReason": "OK",
+ "Content-Type": "application/json",
+ "X-Request-Id": "req-789xyz"
+}
+```
+
+**Result**
-**NOTE**: This is part of [File Storage](/docs/{{docsPrefix}}user-guide/file-storage/) feature supported by [ThingsBoard Professional Edition](/products/thingsboard-pe/).
+The node constructs the endpoint URL as `https://api.smart-home.com/v1/devices/lock-bedroom-01/commands` and prepares the following headers:
-
+- `Content-Type: application/json`
+- `Authorization: Basic YXBpLWNsaWVudDpzZWN1cmUtcGFzc3dvcmQ=`
-In case of successful request, outbound message will be passed to the next nodes via **Success** chain,
-otherwise **Failure** chain is used.
+The request body contains the command: `{"command":"unlock","duration":30,"reason":"owner_request"}` and a POST request is sent.
-
+The command was successfully sent to the external endpoint. The response confirms command execution and provides the current lock state. The message is routed via the `Success`
+connection with the execution result available for further processing by downstream nodes.
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/external/send-email.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/external/send-email.md
index cd9069a6a4..dc87e5a833 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/external/send-email.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/external/send-email.md
@@ -1,55 +1,220 @@
-
-
-
- | Since TB Version 2.0 |
-
-
-
+Sends email messages via SMTP server with configurable authentication and transport security options.
+This node expects messages with `SEND_EMAIL` type that were created using the ["to email"](/docs/user-guide/rule-engine-2-0/nodes/transformation/to-email/){:target="_blank"}* transformation node.
-
+## Configuration
-Node sends incoming message using configured Mail Server. This Node works only with messages that where created using
-[**To Email**](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/transformation-nodes/#to-email-node) transformation Node, please connect this Node with **To Email** Node using **Success** chain.
+### Use system SMTP settings
-Configuration:
+Controls whether to use platform-wide SMTP settings or node-specific configuration:
-
+- **Enabled** (default) – The node uses SMTP settings configured at the system administrator level. When enabled, all other SMTP configuration fields are hidden and ignored.
+- **Disabled** – The node uses custom SMTP settings specified in the node configuration. This allows different email nodes to use different SMTP servers or credentials.
-- **Use system SMTP settings** - if enabled default Mail Server configured on System level will be used
-- **Protocol** - Mail Server transport protocol: *SMTP* or *SMTPS*
-- **SMTP host** - Mail Server host
-- **SMTP port** - Mail Server port
-- **Timeout ms** - read timeout in milliseconds
-- **Enable TLS** - if true, enables the use of the STARTTLS command (if supported by the server)
-- **Username** - username for the account at the mail host, if any
-- **Password** - password for the account at the mail host, if any
+### SMTP settings
-This Node can work with default Mail Server configured on System level.
-Please find more details about [how to configure default System SMTP Settings.](/docs/{{docsPrefix}}user-guide/ui/mail-settings/)
+- **Protocol** – Specifies the email transport protocol to use. Available options:
+ - **SMTP** (default) – Standard SMTP protocol
+ - **SMTPS** – SMTP over SSL/TLS
+- **SMTP host** – The hostname or IP address of the SMTP mail server.
+- **SMTP port** – The port number of the SMTP server.
+- **Timeout (ms)** – Socket read timeout in milliseconds. **Default**: `10000` (10 seconds). If the socket read operation exceeds this timeout, the node fails and routes the message via the `Failure` connection.
-If specific Mail Server is required for this node - disable **Use system SMTP settings** checkbox and configure Mail Server manually.
+### Security settings
-
+- **Enable TLS** – Controls whether to use TLS encryption for the SMTP connection.
+ - **Disabled** (default) – Connection uses plain SMTP without encryption.
+ - **Enabled** – Connection uses STARTTLS to upgrade the connection to TLS encryption after initial handshake.
+- **TLS version** – Specifies which TLS protocol version to use when **Enable TLS** is enabled. **Default**: `TLSv1.2`.
+- **Username** – The username for SMTP server authentication. Leave empty if the SMTP server allows anonymous access (not recommended for production environments).
+- **Password** – The password for SMTP server authentication. Leave empty if the SMTP server allows anonymous access.
-Additionally this node can create email attachments if incoming message has prepared **attachments** metadata field with reference to files stored in DataBase.
+{% capture credentials_note %}
+**Note**: SMTP credentials can be stored in [Secrets storage](/docs/pe/user-guide/secrets-storage/){:target="_blank"} for enhanced security.
+{% endcapture %}
+{% include templates/info-banner.md content=credentials_note %}
-Multiple attachments supported. Use a comma separated no whitespace references (uuids) to send many files. Here an example of message **metadata**:
+### Proxy settings
-{% highlight javascript %}
+- **Enable proxy** – Controls whether to route SMTP traffic through a proxy server.
+ - **Disabled** (default) – Connect directly to the SMTP server.
+ - **Enabled** – Route traffic through the specified proxy server. When enabled, you must configure the proxy host and port. Proxy authentication credentials are optional.
+- **Proxy host** – The hostname or IP address of the proxy server.
+- **Proxy port** – The port number of the proxy server.
+- **Proxy user** – Optional username for proxy authentication. Leave empty if the proxy server does not require authentication.
+- **Proxy password** – Optional password for proxy authentication. Leave empty if the proxy server does not require authentication.
+
+{% capture proxy_note %}
+**Note**: Proxy credentials can be stored in [Secrets storage](/docs/pe/user-guide/secrets-storage/){:target="_blank"} for enhanced security.
+{% endcapture %}
+{% include templates/info-banner.md content=proxy_note %}
+
+### Advanced settings
+
+#### Force acknowledgement
+
+The force acknowledgement mechanism is controlled by the `ACTORS_RULE_EXTERNAL_NODE_FORCE_ACK` environment variable. When this variable is set to `true`, it applies to all external nodes including this email node.
+
+**Behavior when force acknowledgement is enabled**:
+
+- The incoming message is acknowledged immediately and a copy is created
+- The email send operation executes asynchronously
+- Once the send operation completes, the message copy is added to the queue for processing by the next node
+- This prevents message processing timeouts for slow SMTP servers or large email attachments
+
+**Behavior when force acknowledgement is disabled** (default):
+
+- The original incoming message is held until the email send operation completes
+- The message is then passed to the next node
+
+### JSON Schema
+
+```json
{
- "attachments": "e18b6950-dfca-11eb-affb-8db134b46d68,17383b4c-6000-4bb8-be04-b1cb15aa18c5"
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "title": "TbSendEmailNodeConfiguration",
+ "type": "object",
+ "properties": {
+ "useSystemSmtpSettings": {
+ "type": "boolean",
+ "description": "Whether to use platform-wide SMTP settings."
+ },
+ "smtpHost": {
+ "type": "string",
+ "description": "Hostname or IP address of the SMTP server."
+ },
+ "smtpPort": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 65535,
+ "description": "Port number of the SMTP server."
+ },
+ "smtpProtocol": {
+ "type": "string",
+ "enum": ["smtp", "smtps"],
+ "description": "Email transport protocol."
+ },
+ "timeout": {
+ "type": "integer",
+ "minimum": 1,
+ "description": "Maximum time to wait for SMTP operations (milliseconds)."
+ },
+ "enableTls": {
+ "type": "boolean",
+ "description": "Whether to use STARTTLS encryption."
+ },
+ "tlsVersion": {
+ "type": "string",
+ "description": "TLS protocol version to use."
+ },
+ "enableProxy": {
+ "type": "boolean",
+ "description": "Whether to route traffic through a proxy server."
+ },
+ "proxyHost": {
+ "type": "string",
+ "description": "Hostname or IP address of the proxy server."
+ },
+ "proxyPort": {
+ "type": "string",
+ "description": "Port number of the proxy server."
+ },
+ "proxyUser": {
+ "type": "string",
+ "description": "Optional username for proxy authentication."
+ },
+ "proxyPassword": {
+ "type": "string",
+ "description": "Optional password for proxy authentication."
+ },
+ "username": {
+ "type": "string",
+ "description": "Username for SMTP server authentication."
+ },
+ "password": {
+ "type": "string",
+ "description": "Password for SMTP server authentication."
+ }
+ },
+ "required": [
+ "useSystemSmtpSettings"
+ ],
+ "additionalProperties": false
}
-{% endhighlight %}
+```
+{: .copy-code.expandable-3 }
+
+## Message processing algorithm
+
+This node only processes messages with type `SEND_EMAIL`. Messages must be created using the "to email" transformation node, which converts message data into the proper email format.
+
+For each incoming message, the node performs the following steps:
+
+1. **Message type validation** – Verifies the message type is `SEND_EMAIL`. If not, the node fails immediately with an error message and routes via the `Failure` connection.
+
+2. **Acknowledgement** – If **Force acknowledgement** is enabled, the incoming message is acknowledged immediately and a copy is created for further processing.
+
+3. **Asynchronous email sending** – The email is sent asynchronously:
+ - If **Use system SMTP settings** is enabled, the platform's mail service sends the email using system configuration
+ - If **Use system SMTP settings** is disabled, the email is sent using node-specific configuration
-**NOTE**: This is part of [File Storage](/docs/{{docsPrefix}}user-guide/file-storage/) feature supported by [ThingsBoard Professional Edition](/products/thingsboard-pe/).
+4. **Result routing**:
+ - On success, the original message (or the message copy if force acknowledgement is enabled) is forwarded via the `Success` connection
+ - On failure, error details are added to the message metadata under the `error` key, and the message is forwarded via the `Failure` connection
-
+{% capture message_type_note %}
+**Important**: This node expects messages created by the "to email" transformation node. Connect the "to email" node to this node using the `Success` connection. Direct messages without proper email formatting will fail validation.
+{% endcapture %}
+{% include templates/warn-banner.md content=message_type_note %}
+
+## Output connections
+
+- **Success**
+ - The email was successfully sent via the SMTP server.
+- **Failure**
+ - Message type is not `SEND_EMAIL`.
+ - Incorrect SMTP configuration.
+ - Email sending operation timed out.
+ - An unexpected error occurred during processing.
+
+## Examples
+
+### Example 1 — Sending alert emails using system SMTP settings
+
+A temperature monitoring system sends alert emails when temperature exceeds thresholds. The platform is configured with system-wide SMTP settings for a Gmail account. Force acknowledgement is disabled.
+
+**Incoming message**
+
+Type: `SEND_EMAIL`
+
+Data (prepared by "to Email" transformation node):
+
+```json
+{
+ "to": "alerts@company.com",
+ "subject": "High Temperature Alert",
+ "body": "Temperature Alert
Warehouse temperature has exceeded 30°C.
Current reading: 32.5°C
"
+}
+```
+
+**Node configuration**
+
+```json
+{
+ "useSystemSmtpSettings": true,
+ "smtpHost": "localhost",
+ "smtpPort": 25,
+ "smtpProtocol": "smtp",
+ "timeout": 10000,
+ "enableTls": false,
+ "tlsVersion": "TLSv1.2",
+ "enableProxy": false
+}
+```
-In case of successful mail sending, original Message will be passed to the next nodes via **Success** chain,
-otherwise **Failure** chain is used.
+**Outgoing message**
-You can see the real life example, where this node is used, in the next tutorial:
+The outgoing message is the same as the incoming message. Since force acknowledgement is disabled, the original incoming message is passed to the next node after the email is successfully sent.
-- [Send Email](/docs/user-guide/rule-engine-2-0/tutorials/send-email/)
+**Result**
-
+The email is sent to `alerts@company.com` using the platform's system SMTP configuration. The HTML body is rendered properly in the recipient's email client. The message is then routed via the `Success` connection.
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/external/send-notification.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/external/send-notification.md
index 3350685cc0..869721bdd1 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/external/send-notification.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/external/send-notification.md
@@ -1,21 +1,220 @@
-
-
-
- | Since TB Version 3.5 |
-
-
-
+Sends notifications to specified recipients using notification templates through the [notification center](/docs/{{docsPrefix}}user-guide/notifications/){:target="_
+blank"}.
-
+## Configuration
-The node can send notification to recipients group using the template.
-The template needs to be of a 'Rule node' type. You can use incoming message data and metadata in your template (see [templatization help page](/docs/{{docsPrefix}}user-guide/notifications/#rule-node) for this notification type).
+### Template
-Configuration:
+The notification template that defines the content, format, and delivery channels (Web, Email, SMS, Slack, etc.) of the notification. Select an
+existing [notification template](/docs/{{docsPrefix}}user-guide/notifications/#templates){:target="_blank"} from your ThingsBoard instance.
-
+{% capture template_type_note %}
+**Note**: Only notification templates with type **Rule node** can be used in this rule node.
+{% endcapture %}
+{% include templates/info-banner.md content=template_type_note %}
-- **Template** - specify a notification template;
-- **Recipients** - notification recipients.
+You can use [values from the incoming message](/docs/{{docsPrefix}}user-guide/notifications/#rule-node){:target="_blank"} in your notification templates by using `${key}` syntax to
+reference message data fields, metadata, and other message properties.
-
+{% capture template_syntax_note %}
+**Note**: Even for message data fields that typically use `$[key]` syntax in rule nodes, notification templates require the `${key}` syntax.
+{% endcapture %}
+{% include templates/info-banner.md content=template_syntax_note %}
+
+### Recipients
+
+A list of [recipient groups](/docs/{{docsPrefix}}user-guide/notifications/#recipients){:target="_blank"} that will receive the notification. Multiple recipient groups can be
+selected. The notification system will automatically resolve and deduplicate recipients across all selected groups.
+
+### JSON Schema
+
+```json
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "title": "TbNotificationNodeConfiguration",
+ "type": "object",
+ "properties": {
+ "templateId": {
+ "type": "object",
+ "description": "ID of the notification template to use.",
+ "properties": {
+ "id": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "entityType": {
+ "type": "string",
+ "enum": [
+ "NOTIFICATION_TEMPLATE"
+ ]
+ }
+ },
+ "required": [
+ "id",
+ "entityType"
+ ]
+ },
+ "targets": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "minItems": 1,
+ "description": "List of recipient target UUIDs."
+ }
+ },
+ "required": [
+ "templateId",
+ "targets"
+ ],
+ "additionalProperties": false
+}
+```
+{: .copy-code.expandable-3 }
+
+## Output message format
+
+The node transforms the incoming message by adding notification request statistics to the message metadata while preserving the original message data.
+
+When a notification is successfully processed and sent, the following field is added to the message metadata:
+
+- `notificationRequestResult` – A JSON string containing statistics about the notification delivery, including:
+ - `sent` – Map of delivery channels to the number of notifications successfully sent per channel
+ - `errors` – Map of delivery channels to the number of failed deliveries per channel (if any)
+ - `totalSent` – Total number of notifications successfully sent across all channels
+ - `totalErrors` – Total number of failed deliveries across all channels
+ - `error` – Error message if the entire notification request failed (null if successful)
+
+**Example:**
+
+Original message metadata:
+
+```json
+{
+ "deviceType": "sensor"
+}
+```
+
+After successful notification, metadata becomes:
+
+```json
+{
+ "deviceType": "sensor",
+ "notificationRequestResult": "{\"sent\":{\"WEB\":1},\"errors\":{},\"totalErrors\":0,\"error\":null,\"totalSent\":1}"
+}
+```
+
+The message data remains unchanged.
+
+## Message acknowledgement behavior
+
+The node's message acknowledgement behavior is controlled by the `ACTORS_RULE_EXTERNAL_NODE_FORCE_ACK` environment variable:
+
+- **When set to `true`** – The incoming message is acknowledged and marked as successfully processed immediately upon receipt. A new message is created with the updated metadata
+ and is enqueued for processing by the next node.
+- **When set to `false`** (default) – The incoming message remains in an in-processing state throughout the entire notification operation. The message is transformed in place, its
+ metadata is updated with the notification result, and the modified message is passed to the next node after the notification completes.
+
+## Message processing algorithm
+
+1. The node creates a notification request using the incoming message data, metadata, originator information, and the configured template and recipients.
+2. The notification request is submitted asynchronously to the notification center, which sends the notification to resolved recipients.
+3. When processing completes:
+ - **Success**: Delivery statistics are added to the message metadata as `notificationRequestResult` and the message is routed to the `Success` connection.
+ - **Failure**: The message is routed to the `Failure` connection.
+
+## Output connections
+
+- **Success**
+ - The notification was successfully processed and sent to recipients.
+ - Delivery statistics (`notificationRequestResult`) are included in the outgoing message metadata, showing how many notifications were sent per channel.
+- **Failure**
+ - **Unexpected error**: An unexpected error occurred during notification processing.
+
+## Examples
+
+### Example 1 — Sending telemetry values in notification
+
+Send a notification containing the latest telemetry values from a device.
+
+**Incoming message**
+
+Data:
+
+```json
+{
+ "temperature": 23.5,
+ "humidity": 65.2,
+ "pressure": 1013.25
+}
+```
+
+Metadata:
+
+```json
+{
+ "deviceName": "Weather Station 01",
+ "deviceType": "sensor"
+}
+```
+
+**Node configuration**
+
+```json
+{
+ "templateId": {
+ "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
+ "entityType": "NOTIFICATION_TEMPLATE"
+ },
+ "targets": [
+ "784f394c-42b6-435a-983c-b7beff2784f9"
+ ]
+}
+```
+
+**Node configuration**
+
+The notification template with ID `a1b2c3d4-e5f6-7890-abcd-ef1234567890` has the following content:
+
+```text
+Weather Update from ${deviceName}
+
+Current readings:
+- Temperature: ${temperature}°C
+- Humidity: ${humidity}%
+- Pressure: ${pressure} hPa
+
+Device type: ${deviceType}
+```
+
+**Outgoing message**
+
+Data: unchanged.
+
+Metadata:
+
+```json
+{
+ "deviceName": "Weather Station 01",
+ "deviceType": "sensor",
+ "notificationRequestResult": "{\"sent\":{\"WEB\":1},\"errors\":{},\"totalErrors\":0,\"error\":null,\"totalSent\":1}"
+}
+```
+
+Routed via the `Success` connection.
+
+**Result**
+
+The notification was successfully sent to users via Web interface. The notification content:
+
+```text
+Weather Update from Weather Station 01
+
+Current readings:
+- Temperature: 23.5°C
+- Humidity: 65.2%
+- Pressure: 1013.25 hPa
+
+Device type: sensor
+```
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/external/send-sms.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/external/send-sms.md
index 3246543c03..ef4043ce98 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/external/send-sms.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/external/send-sms.md
@@ -1,24 +1,231 @@
-
-
-
- | Since TB Version 3.2 |
-
-
-
-
-Node is able to construct SMS message based on the metadata fields from the incoming message and send it using AWS SNS or Twilio SMS providers.
-We recommend enabling debug mode for the rule node.
-
-Configuration:
-
-
-
-- **Use system SMS provider settings** - if enabled default SMS Provider Server configured on System level will be used.
-{% unless docsPrefix contains "paas/" %}
-See [SMS Provider](/docs/{{docsPrefix}}user-guide/ui/sms-provider-settings) settings for more details;
-{% endunless %}
-- **Phone Numbers To template** - Allows to configure multiple phone numbers where the SMS will be sent to. Optionally, you may reference fields from the message metadata.
-- **SMS message template** - Allows to configure body of the SMS message. Optionally, you may reference fields from the message metadata.
-
-This Node can work with default SMS provider configured on System level.
-If SMS message will be sent to all recipients successfully, original Message will be passed to the next nodes via Success chain, otherwise Failure chain is used.
+Sends SMS messages to specified phone numbers via configured SMS provider.
+
+## Configuration
+
+### Phone Numbers To Template
+
+A comma-separated list of phone numbers that will receive the SMS message. This field supports [templatization](/docs/{{docsPrefix}}user-guide/templatization/){:target="_blank"}.
+
+### SMS Message Template
+
+The content of the SMS message to send. This field supports [templatization](/docs/{{docsPrefix}}user-guide/templatization/){:target="_blank"}.
+
+### Use System SMS Provider Settings
+
+When enabled, the node uses the [SMS provider configured in the system settings](/docs/{{docsPrefix}}user-guide/ui/sms-provider-settings/){:target="_blank"}.
+This allows centralized SMS provider configuration at the tenant or system level without configuring individual rule nodes.
+
+When disabled, you must configure the SMS provider directly in the rule node. The following SMS provider types are supported:
+
+#### AWS SNS
+
+Amazon Simple Notification Service for SMS delivery. Required configuration:
+
+- **AWS Access Key ID** – Your AWS IAM access key ID with SNS permissions.
+- **AWS Secret Access Key** – Your AWS IAM secret access key.
+- **AWS Region** – The AWS region for SNS (e.g., `us-east-1`, `eu-west-1`).
+
+#### Twilio
+
+Twilio messaging service. Required configuration:
+
+- **Phone Number From** – The Twilio phone number or Messaging Service SID to send from (E.164 format, e.g., `+19995550123`).
+- **Twilio Account SID** – Your Twilio account identifier.
+- **Twilio Account Token** – Your Twilio authentication token.
+
+#### SMPP
+
+SMS Messaging Peer-to-Peer protocol for direct carrier integration. For SMPP configuration details, refer to the [SMPP protocol specification](https://smpp.org/){:target="_blank"}.
+
+### JSON Schema
+
+```json
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "title": "TbSendSmsNodeConfiguration",
+ "type": "object",
+ "properties": {
+ "numbersToTemplate": {
+ "type": "string",
+ "description": "Template for target phone number(s). Supports templatization."
+ },
+ "smsMessageTemplate": {
+ "type": "string",
+ "description": "Template for SMS message content. Supports templatization."
+ },
+ "useSystemSmsSettings": {
+ "type": "boolean",
+ "description": "If true, uses system-configured SMS provider. If false, uses provider configured in this node."
+ },
+ "smsProviderConfiguration": {
+ "description": "SMS provider configuration (required when useSystemSmsSettings is false).",
+ "oneOf": [
+ {
+ "type": "object",
+ "title": "AWS SNS",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "AWS_SNS"
+ ]
+ },
+ "accessKeyId": {
+ "type": "string",
+ "description": "AWS Access Key ID"
+ },
+ "secretAccessKey": {
+ "type": "string",
+ "description": "AWS Secret Access Key"
+ },
+ "region": {
+ "type": "string",
+ "description": "AWS region (e.g., us-east-1)"
+ }
+ },
+ "required": [
+ "type",
+ "accessKeyId",
+ "secretAccessKey",
+ "region"
+ ]
+ },
+ {
+ "type": "object",
+ "title": "Twilio",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "TWILIO"
+ ]
+ },
+ "numberFrom": {
+ "type": "string",
+ "description": "Twilio phone number or Messaging Service SID"
+ },
+ "accountSid": {
+ "type": "string",
+ "description": "Twilio Account SID"
+ },
+ "accountToken": {
+ "type": "string",
+ "description": "Twilio Account Token"
+ }
+ },
+ "required": [
+ "type",
+ "numberFrom",
+ "accountSid",
+ "accountToken"
+ ]
+ },
+ {
+ "type": "object",
+ "title": "SMPP",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "SMPP"
+ ]
+ }
+ },
+ "required": [
+ "type"
+ ],
+ "description": "SMPP configuration with additional provider-specific properties"
+ }
+ ]
+ }
+ },
+ "required": [
+ "numbersToTemplate",
+ "smsMessageTemplate",
+ "useSystemSmsSettings"
+ ],
+ "additionalProperties": false
+}
+```
+{: .copy-code.expandable-3 }
+
+## Output message format
+
+The node does not modify the incoming message. Both message data and metadata are passed through unchanged to the next node in the chain.
+
+## Message acknowledgement behavior
+
+The node's message acknowledgement behavior is controlled by the `ACTORS_RULE_EXTERNAL_NODE_FORCE_ACK` environment variable:
+
+- **When set to `true`** – The incoming message is acknowledged and marked as successfully processed immediately upon receipt. A new message is created as a copy.
+ The SMS sending operation proceeds asynchronously, and after completion, the copy is enqueued for processing by the next node.
+- **When set to `false`** (default) – The incoming message remains in an in-processing state throughout the entire SMS sending operation. The message is passed to the next node
+ after the SMS operation completes.
+
+## Message processing algorithm
+
+1. The node processes the phone numbers template to extract target phone numbers from the incoming message data and metadata.
+2. The node processes the SMS message template to create the message content using values from the incoming message data and metadata.
+3. The SMS is sent asynchronously via either the system-configured SMS provider or the node-specific SMS provider configuration.
+4. When processing completes:
+ - **Success**: The message is routed to the `Success` connection.
+ - **Failure**: The message is routed to the `Failure` connection.
+
+## Output connections
+
+- **Success**
+ - The SMS was successfully sent to all specified phone numbers.
+- **Failure**
+ - An unexpected error occurred during SMS sending (e.g., invalid phone number format, SMS provider authentication failure, network error).
+
+## Examples
+
+### Example 1 — Sending temperature alert
+
+Send an SMS alert when a device reports high temperature.
+
+**Incoming message**
+
+Data:
+
+```json
+{
+ "temperature": 85.3,
+ "humidity": 45.2
+}
+```
+
+Metadata:
+
+```json
+{
+ "deviceName": "Temperature Sensor 01",
+ "userPhone": "+15551234567"
+}
+```
+
+**Node configuration**
+
+```json
+{
+ "numbersToTemplate": "${userPhone}",
+ "smsMessageTemplate": "Device ${deviceName} has high temperature $[temperature]",
+ "useSystemSmsSettings": true
+}
+```
+
+**Outgoing message**
+
+Data: unchanged.
+
+Metadata: unchanged.
+
+Routed via the `Success` connection.
+
+**Result**
+
+An SMS message is sent to +15551234567:
+
+```text
+Device Temperature Sensor 01 has high temperature 85.3
+```
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/external/send-to-slack.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/external/send-to-slack.md
index b39a606650..582309ed0f 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/external/send-to-slack.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/external/send-to-slack.md
@@ -1,24 +1,208 @@
-
-
-
- | Since TB Version 3.5 |
-
-
-
+Sends messages to [Slack](https://slack.com/){:target="_blank"} channels or users via Slack API.
-
+## Configuration
-The node create a message based on the incoming data and metadata, and send it via [Slack](https://slack.com/) to a public channel, private channel or direct message.
-If chosen to use system Slack settings, the node will take the Slack API token from system settings. Otherwise, you need to specify the token in the node configuration.
-Learn more about how to configure Slack settings in Thingsboard [here](/docs/{{docsPrefix}}user-guide/ui/slack-settings/).
+### Message Template
-Configuration:
+The content of the Slack message to send. This field supports [templatization](/docs/{{docsPrefix}}user-guide/templatization/){:target="_blank"}.
-
+### Use System Slack Settings
-- **Message template** - the template for a Slack message; you may optionally reference fields from incoming message data and metadata;
-- **Use system slack settings** - if enabled, the node will take the Slack API token from system settings;
-- **Slack API token** - token to integrate Thingsboard with Slack;
-- **Slack channel type** - send message via Slack to a public channel, private channel or direct message;
-- **Conversation** - public channel, private channel or user in Slack to send message to.
+When enabled, the node uses the [Slack token configured in the system settings](/docs/{{docsPrefix}}user-guide/ui/slack-settings/){:target="_blank"}.
+This allows centralized Slack configuration at the tenant or system level without configuring individual rule nodes.
+When disabled, you must configure the Slack token directly in the rule node.
+
+### Slack API Token
+
+The Slack token for authentication.
+
+### Slack Channel Type
+
+Specifies the destination type for the message:
+
+- **Public channel** – Send to a public Slack channel (e.g., `#general`, `#alerts`)
+- **Private channel** – Send to a private Slack channel (e.g., `#private-alerts`)
+- **Direct message** – Send a direct message to a specific user (e.g., `@john.doe`)
+
+### Conversation
+
+The target Slack conversation for the message. This field is required.
+
+The conversation is selected from a dropdown list that is dynamically populated from the Slack API. To configure this field:
+
+1. First provide a valid Slack token in the **Slack API Token** field (or ensure system Slack settings are configured)
+2. The dropdown will fetch available conversations from your Slack workspace
+3. Select the desired channel or user from the list
+
+The conversation must be accessible by the configured Slack token.
+
+### JSON Schema
+
+```json
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "title": "TbSlackNodeConfiguration",
+ "type": "object",
+ "properties": {
+ "messageTemplate": {
+ "type": "string",
+ "description": "Template for Slack message content. Supports templatization.",
+ "minLength": 1
+ },
+ "useSystemSettings": {
+ "type": "boolean",
+ "description": "If true, uses system-configured Slack token. If false, uses token configured in this node."
+ },
+ "botToken": {
+ "type": "string",
+ "description": "Slack token (xoxb-...). Required when useSystemSettings is false."
+ },
+ "conversationType": {
+ "type": "string",
+ "enum": [
+ "PUBLIC_CHANNEL",
+ "PRIVATE_CHANNEL",
+ "DIRECT"
+ ],
+ "description": "Type of Slack conversation"
+ },
+ "conversation": {
+ "type": "object",
+ "description": "Target Slack conversation",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "PUBLIC_CHANNEL",
+ "PRIVATE_CHANNEL",
+ "DIRECT"
+ ]
+ },
+ "id": {
+ "type": "string",
+ "description": "Slack conversation ID (channel or user ID)",
+ "minLength": 1
+ },
+ "name": {
+ "type": "string",
+ "description": "Conversation name or username",
+ "minLength": 1
+ },
+ "wholeName": {
+ "type": "string",
+ "description": "Full name for direct messages"
+ },
+ "email": {
+ "type": "string",
+ "description": "Email for direct messages"
+ }
+ },
+ "required": [
+ "type",
+ "id",
+ "name"
+ ]
+ }
+ },
+ "required": [
+ "messageTemplate",
+ "useSystemSettings",
+ "conversation"
+ ],
+ "additionalProperties": false
+}
+```
+{: .copy-code.expandable-3 }
+
+## Output message format
+
+The node does not modify the incoming message. Both message data and metadata are passed through unchanged to the next node in the chain.
+
+## Message acknowledgement behavior
+
+The node's message acknowledgement behavior is controlled by the `ACTORS_RULE_EXTERNAL_NODE_FORCE_ACK` environment variable:
+
+- **When set to `true`** – The incoming message is acknowledged and marked as successfully processed immediately upon receipt. A new message is created as a copy.
+ The Slack sending operation proceeds asynchronously, and after completion, the copy is enqueued for processing by the next node.
+- **When set to `false`** (default) – The incoming message remains in an in-processing state throughout the entire Slack sending operation. The message is passed to the next node
+ after the Slack operation completes.
+
+## Message processing algorithm
+
+1. The node determines which Slack token to use:
+ - If **Use System Slack Settings** is enabled, the system-configured token is retrieved
+ - Otherwise, the token from the node configuration is used
+2. The node processes the message template to create the message content using values from the incoming message data and metadata.
+3. The message is sent asynchronously to the specified Slack conversation via the Slack API.
+4. When processing completes:
+ - **Success**: The message is routed to the `Success` connection.
+ - **Failure**: The message is routed to the `Failure` connection.
+
+## Output connections
+
+- **Success**
+ - The message was successfully sent to the specified Slack conversation.
+- **Failure**
+ - An unexpected error occurred during message sending.
+
+## Examples
+
+### Example 1 — Sending temperature alert to public channel
+
+Send a Slack alert to a public channel when a device reports high temperature.
+
+**Incoming message**
+
+Data:
+
+```json
+{
+ "temperature": 85.3,
+ "humidity": 45.2
+}
+```
+
+Metadata:
+
+```json
+{
+ "deviceId": "TEMP_SENSOR_01",
+ "deviceName": "Temperature Sensor 01",
+ "location": "Server Room A"
+}
+```
+
+**Node configuration**
+
+```json
+{
+ "messageTemplate": "⚠️ *High Temperature Alert*\nDevice: ${deviceName}\nLocation: ${location}\nTemperature: $[temperature]°F",
+ "useSystemSettings": true,
+ "conversationType": "PUBLIC_CHANNEL",
+ "conversation": {
+ "type": "PUBLIC_CHANNEL",
+ "id": "C01234ABCDE",
+ "name": "alerts"
+ }
+}
+```
+
+**Outgoing message**
+
+Data: unchanged.
+
+Metadata: unchanged.
+
+Routed via the `Success` connection.
+
+**Result**
+
+A Slack message is sent to the `#alerts` channel:
+
+```text
+⚠️ High Temperature Alert
+Device: Temperature Sensor 01
+Location: Server Room A
+Temperature: 85.3°F
+```
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/external/twilio-sms.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/external/twilio-sms.md
index e00b0001b3..02bce16e5c 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/external/twilio-sms.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/external/twilio-sms.md
@@ -1,27 +1,182 @@
-
-
-
- | Since TB Version 2.0.2 |
-
-
-
+Sends SMS messages to specified phone numbers via [Twilio](https://www.twilio.com/messaging/channels/sms){:target="_blank"} messaging service.
-{% assign rulenode = "Twilio SMS" %}{% include templates/pe-rule-node-banner.md %}
+## Configuration
-
+- **Phone Number From** – The Twilio phone number or Messaging Service SID to send from. Must be in E.164 format (e.g., `+19995550123`). This field
+ supports [templatization](/docs/{{docsPrefix}}user-guide/templatization/){:target="_blank"}.
+- **Phone Numbers To** – A comma-separated list of phone numbers that will receive the SMS message. This field
+ supports [templatization](/docs/{{docsPrefix}}user-guide/templatization/){:target="_blank"}.
+- **Twilio Account SID** – Your Twilio account identifier.
+- **Twilio Account Token** – Your Twilio authentication token.
-Sends incoming message payload as SMS message via Twilio service.
+{% capture credentials_note %}
+**Note**: If you use Professional Edition, we highly recommend using [Secrets storage](/docs/pe/user-guide/secrets-storage/){:target="_blank"} to securely store your account token.
+{% endcapture %}
+{% include templates/info-banner.md content=credentials_note %}
-Configuration:
+### JSON Schema
-
+```json
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "title": "TbTwilioSmsNodeConfiguration",
+ "type": "object",
+ "properties": {
+ "numberFrom": {
+ "type": "string",
+ "description": "Twilio phone number or Messaging Service SID (E.164 format). Supports templatization."
+ },
+ "numbersTo": {
+ "type": "string",
+ "description": "Comma-separated list of target phone numbers. Supports templatization."
+ },
+ "accountSid": {
+ "type": "string",
+ "description": "Twilio Account SID"
+ },
+ "accountToken": {
+ "type": "string",
+ "description": "Twilio Account Token"
+ }
+ },
+ "required": [
+ "numberFrom",
+ "numbersTo",
+ "accountSid",
+ "accountToken"
+ ],
+ "additionalProperties": false
+}
+```
+{: .copy-code.expandable-3 }
-- **Phone Number From** - can be set direct phone number as Number From of SMS
- or pattern can be used, that will be resolved to the real Number From using Message metadata.
-- **Phone Numbers To** - comma separated recipient Phone Numbers list. Can be set direct phone numbers or pattern can be used, that will be resolved to the real phone numbers using Message metadata.
-- **Twilio Account SID** - your Account Sid at twilio.com/console
-- **Twilio Account Token** - your Account Token at twilio.com/console
+## Output message format
-SMS message will be sent to all recipients taken from **Phone Numbers To** list.
+The node does not modify the incoming message. Both message data and metadata are passed through unchanged to the next node in the chain.
-If SMS message will be sent to all recipients successfully, original Message will be passed to the next nodes via **Success** chain, otherwise **Failure** chain is used.
+## Message acknowledgement behavior
+
+The node's message acknowledgement behavior is controlled by the `ACTORS_RULE_EXTERNAL_NODE_FORCE_ACK` environment variable:
+
+- **When set to `true`** – The incoming message is acknowledged and marked as successfully processed immediately upon receipt. A new message is created as a copy.
+ The SMS sending operation proceeds asynchronously, and after completion, the copy is enqueued for processing by the next node.
+- **When set to `false`** (default) – The incoming message remains in an in-processing state throughout the entire SMS sending operation. The message is passed to the next node
+ after the SMS operation completes.
+
+## Message processing algorithm
+
+1. The node processes the phone number from template to extract the sender phone number from the incoming message data and metadata.
+2. The node processes the phone numbers to template to extract target phone numbers from the incoming message data and metadata.
+3. The SMS message content is taken directly from the incoming message data payload. Leading and trailing quotes are removed, and escaped newline characters (`\n`) are converted to
+ actual newlines.
+4. The SMS is sent asynchronously via Twilio to each specified phone number.
+5. When processing completes:
+ - **Success**: The message is routed to the `Success` connection after all SMS messages are sent successfully.
+ - **Failure**: If any SMS fails to send, the message is routed to the `Failure` connection.
+
+## Output connections
+
+- **Success**
+ - The SMS was successfully sent to all specified phone numbers.
+- **Failure**
+ - An unexpected error occurred during SMS sending.
+
+## Examples
+
+### Example 1 — Sending alarm notification
+
+Send an SMS alert when a device triggers an alarm.
+
+**Incoming message**
+
+Data:
+
+```json
+"Device Temperature Sensor 01 has triggered HIGH_TEMPERATURE alarm"
+```
+
+Metadata:
+
+```json
+{
+ "deviceName": "Temperature Sensor 01",
+ "alarmType": "HIGH_TEMPERATURE",
+ "userPhone": "+15551234567",
+ "twilioNumber": "+15559876543"
+}
+```
+
+**Node configuration**
+
+```json
+{
+ "numberFrom": "${twilioNumber}",
+ "numbersTo": "${userPhone}",
+ "accountSid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
+ "accountToken": "your_auth_token_here"
+}
+```
+
+**Outgoing message**
+
+Data: unchanged.
+
+Metadata: unchanged.
+
+Routed via the `Success` connection.
+
+**Result**
+
+An SMS message is sent from +15559876543 to +15551234567:
+
+```text
+Device Temperature Sensor 01 has triggered HIGH_TEMPERATURE alarm
+```
+
+### Example 2 — Multiple recipients
+
+Send an SMS notification to multiple phone numbers.
+
+**Incoming message**
+
+Data:
+
+```json
+"Critical: Water leak detected in Warehouse A"
+```
+
+Metadata:
+
+```json
+{
+ "emergencyContacts": "+15551234567,+15559876543,+15555555555",
+ "companyPhone": "+15551111111"
+}
+```
+
+**Node configuration**
+
+```json
+{
+ "numberFrom": "${companyPhone}",
+ "numbersTo": "${emergencyContacts}",
+ "accountSid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
+ "accountToken": "your_auth_token_here"
+}
+```
+
+**Outgoing message**
+
+Data: unchanged.
+
+Metadata: unchanged.
+
+Routed via the `Success` connection.
+
+**Result**
+
+An SMS message is sent from +15551111111 to three recipients (+15551234567, +15559876543, and +15555555555):
+
+```text
+Critical: Water leak detected in Warehouse A
+```
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/external/twilio-voice.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/external/twilio-voice.md
index 1fb6c8a7f3..70538e8958 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/external/twilio-voice.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/external/twilio-voice.md
@@ -1,6 +1,193 @@
-
+Sends voice messages to specified phone numbers via [Twilio](https://www.twilio.com/voice){:target="_blank"} voice service using text-to-speech technology.
-**Sends voice message via Twilio.**
+## Configuration
-Will send message payload as voice message via Twilio, using Twilio text to speech service.
+### Phone settings
+- **Phone Number From** – The Twilio phone number to call from. Must be in E.164 format (e.g., `+19995550123`). This field
+ supports [templatization](/docs/{{docsPrefix}}user-guide/templatization/){:target="_blank"}.
+- **Phone Numbers To** – A comma-separated list of phone numbers that will receive the voice call. This field
+ supports [templatization](/docs/{{docsPrefix}}user-guide/templatization/){:target="_blank"}.
+
+### Account settings
+
+- **Twilio Account SID** – Your Twilio account identifier.
+- **Twilio Account Token** – Your Twilio authentication token.
+
+{% capture credentials_note %}
+**Note**: If you use Professional Edition, we highly recommend using [Secrets storage](/docs/pe/user-guide/secrets-storage/){:target="_blank"} to securely store your account token.
+{% endcapture %}
+{% include templates/info-banner.md content=credentials_note %}
+
+### Voice settings
+
+- **Voice provider** – The text-to-speech voice provider to use.
+- **Language** – The language for the voice message. Corresponds to Twilio's supported languages.
+- **Voice** – The voice type to use.
+
+### Audio output settings
+
+- **Pitch** – The pitch adjustment for the voice in percentage (default: `100`). Higher values produce a higher-pitched voice, lower values produce a lower-pitched voice.
+- **Rate** – The speaking rate in percentage (default: `100`). Higher values speed up the speech, lower values slow it down.
+- **Volume** – The volume adjustment in decibels (default: `0`). Positive values increase volume, negative values decrease it.
+- **Pause before talking** – Duration in seconds to pause before the voice message begins playing.
+
+### JSON Schema
+
+```json
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "title": "TbTwilioVoiceNodeConfiguration",
+ "type": "object",
+ "properties": {
+ "numberFrom": {
+ "type": "string",
+ "description": "Twilio phone number (E.164 format). Supports templatization."
+ },
+ "numbersTo": {
+ "type": "string",
+ "description": "Comma-separated list of target phone numbers. Supports templatization."
+ },
+ "accountSid": {
+ "type": "string",
+ "description": "Twilio Account SID"
+ },
+ "accountToken": {
+ "type": "string",
+ "description": "Twilio Account Token"
+ },
+ "provider": {
+ "type": "string",
+ "description": "Voice provider"
+ },
+ "language": {
+ "type": "string",
+ "description": "Voice language"
+ },
+ "voice": {
+ "type": "string",
+ "description": "Voice type"
+ },
+ "pitch": {
+ "type": "integer",
+ "description": "Pitch percentage (default: 100)"
+ },
+ "rate": {
+ "type": "integer",
+ "description": "Speaking rate percentage (default: 100)"
+ },
+ "volume": {
+ "type": "integer",
+ "description": "Volume in decibels (default: 0)"
+ },
+ "startPause": {
+ "type": "integer",
+ "description": "Pause duration before speaking in seconds"
+ }
+ },
+ "required": [
+ "numberFrom",
+ "numbersTo",
+ "accountSid",
+ "accountToken",
+ "language",
+ "voice",
+ "pitch",
+ "rate",
+ "volume"
+ ],
+ "additionalProperties": false
+}
+```
+{: .copy-code.expandable-3 }
+
+## Output message format
+
+The node does not modify the incoming message. Both message data and metadata are passed through unchanged to the next node in the chain.
+
+## Message acknowledgement behavior
+
+The node's message acknowledgement behavior is controlled by the `ACTORS_RULE_EXTERNAL_NODE_FORCE_ACK` environment variable:
+
+- **When set to `true`** – The incoming message is acknowledged and marked as successfully processed immediately upon receipt. A new message is created as a copy. The voice call
+ operation proceeds asynchronously, and after completion, the copy is enqueued for processing by the next node.
+- **When set to `false`** (default) – The incoming message remains in an in-processing state throughout the entire voice call operation. The message is passed to the next node
+ after the voice call operation completes.
+
+## Message processing algorithm
+
+1. The node processes the phone number from template to extract the caller phone number from the incoming message data and metadata.
+2. The node processes the phone numbers to template to extract target phone numbers from the incoming message data and metadata.
+3. The voice message content is taken directly from the incoming message data. Leading and trailing quotes are removed from the data.
+4. A voice response is constructed using Twilio's TwiML with:
+ - A pause of the specified duration before speaking
+ - Text-to-speech configuration with the specified language, voice, pitch, rate, and volume settings
+5. The voice call is initiated asynchronously via Twilio to each specified phone number.
+6. When processing completes:
+ - **Success**: The message is routed to the `Success` connection after all voice calls are initiated successfully.
+ - **Failure**: If any voice call fails to initiate, the message is routed to the `Failure` connection.
+
+## Output connections
+
+- **Success**
+ - The voice call was successfully initiated to all specified phone numbers.
+- **Failure**
+ - An unexpected error occurred during voice call initiation, such as invalid phone numbers or Twilio API errors.
+
+## Examples
+
+### Example 1 — Sending alarm notification
+
+Send a voice alert when a device triggers an alarm.
+
+**Incoming message**
+
+Data:
+
+```json
+"Attention. Device Temperature Sensor 01 has triggered a high temperature alarm."
+```
+
+Metadata:
+
+```json
+{
+ "deviceName": "Temperature Sensor 01",
+ "alarmType": "HIGH_TEMPERATURE",
+ "userPhone": "+15551234567",
+ "twilioNumber": "+15559876543"
+}
+```
+
+**Node configuration**
+
+```json
+{
+ "numberFrom": "${twilioNumber}",
+ "numbersTo": "${userPhone}",
+ "accountSid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
+ "accountToken": "your_auth_token_here",
+ "language": "EN_US",
+ "voice": "WOMAN",
+ "pitch": 100,
+ "rate": 100,
+ "volume": 0,
+ "startPause": 1
+}
+```
+
+**Outgoing message**
+
+Data: unchanged.
+
+Metadata: unchanged.
+
+Routed via the `Success` connection.
+
+**Result**
+
+A voice call is initiated from +15559876543 to +15551234567. After a 1-second pause, the recipient hears:
+
+```text
+Attention. Device Temperature Sensor 01 has triggered a high temperature alarm.
+```
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/alarm-status-filter.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/alarm-status-filter.md
index e21c1dc002..f2d4d36811 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/alarm-status-filter.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/alarm-status-filter.md
@@ -106,6 +106,7 @@ Available statuses:
}
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
@@ -116,7 +117,10 @@ Available statuses:
1. If the status matches, the incoming message is routed to downstream nodes using the `True` connection.
2. If the status does not match, the incoming message is routed to downstream nodes using the `False` connection.
-> Note: The incoming message is not modified, and the `status` property is ignored for routing.
+{% capture status_property_note %}
+**Note:** `status` property is ignored for routing.
+{% endcapture %}
+{% include templates/info-banner.md content=status_property_note %}
## Output connections
@@ -387,9 +391,3 @@ Routed via **`False`**.
**Explanation**
Routing uses the **fetched** status (`CLEARED_UNACK`), not the incoming field.
-
-## Use cases
-
-Consider a scenario where you want to process alarms that are currently active.
-You can configure the rule node to filter for *Active Unacknowledged* and *Active Acknowledged* statuses
-This setup ensures that only alarms which are currently active, whether they have been acknowledged or not, are processed further.
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/asset-profile-switch.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/asset-profile-switch.md
index b52dcaf032..f7aaec6831 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/asset-profile-switch.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/asset-profile-switch.md
@@ -21,6 +21,7 @@ There are no available configuration fields.
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
@@ -30,8 +31,6 @@ There are no available configuration fields.
1. If profile was not found (possible if originator no longer exist at the time of message processing), processing ends with a `Failure`.
3. Routes the incoming message to downstream nodes using connection with a label that matches exactly with fetched profile name.
-> Note: The incoming message is not modified.
-
## Output connections
* Asset profile name:
@@ -122,13 +121,3 @@ No asset with this ID exists (e.g., it was deleted while message was in queue).
**Explanation**
The node cannot fetch the asset’s profile.
-
-## Use cases
-
-Experienced platform users utilize asset profiles and configure specific rule chains per asset profile.
-This is useful to automatically route messages the platform generates: Entity Created, Entity Deleted, Attributes Updated, etc.
-But most of the messages are derived from the sensor data.
-Let's assume we have temperature sensors in the room assets with profiles: "Freezer Room" and "Boiler Room".
-We also take it that there is a relation between the room asset and the temperature device of type "Contains".
-You can configure a rule chain that will change the originator of the message from the device to the related asset and route the incoming messages to the "Freezer Room" or "Boiler
-Room" rule chains.
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/check-fields-presence.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/check-fields-presence.md
index d2dc5310ca..d1dfeb03a8 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/check-fields-presence.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/check-fields-presence.md
@@ -12,7 +12,10 @@ Incoming message data must be a JSON object.
* **Message field names** — optional. A set of **top-level** JSON field names to look for in the message data.
* **Metadata field names** — optional. A set of metadata key names to look for in the message metadata.
-> Requirement: Although each set is optional, at least one of them must be provided with at least one field (i.e., at least one set must be non-empty).
+{% capture at_least_one_set_required_note %}
+Although each set is optional, at least one of them must be provided with at least one field (i.e., at least one set must be non-empty).
+{% endcapture %}
+{% include templates/info-banner.md content=at_least_one_set_required_note %}
* **Check that all specified fields are present** — toggle.
* **Enabled:** route `True` only if **all** listed message/metadata fields are present.
@@ -69,6 +72,7 @@ Incoming message data must be a JSON object.
]
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
@@ -78,8 +82,15 @@ Incoming message data must be a JSON object.
* If **Check all keys** is disabled: route `True` if **any** listed field exists in data **or** metadata.
3. Otherwise, route `False`. If an error occurs (e.g., payload is not a JSON object), route `Failure`.
-> * Only **top-level** keys are checked; nested paths (e.g., `sensor.temp`) are not supported.
-> * Presence means the **key exists**, regardless of its value (including `null` or empty string).
+{% capture top_level_keys_note %}
+Only **top-level** keys are checked; nested paths (e.g., `sensor.temp`) are not supported.
+{% endcapture %}
+{% include templates/info-banner.md content=top_level_keys_note %}
+
+{% capture presence_meaning_note %}
+Presence means the **key exists**, regardless of its value (including `null` or empty string).
+{% endcapture %}
+{% include templates/info-banner.md content=presence_meaning_note %}
## Output connections
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/check-relation-presence.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/check-relation-presence.md
index 2769a38e83..5f989a1bfe 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/check-relation-presence.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/check-relation-presence.md
@@ -58,6 +58,7 @@ type.
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/device-profile-switch.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/device-profile-switch.md
index 99300311fa..20f0d490cb 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/device-profile-switch.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/device-profile-switch.md
@@ -21,6 +21,7 @@ There are no available configuration fields.
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
@@ -30,8 +31,6 @@ There are no available configuration fields.
1. If profile was not found (possible if originator no longer exist at the time of message processing), processing ends with a `Failure`.
3. Routes the incoming message to downstream nodes using connection with a label that matches exactly with fetched profile name.
-> Note: The incoming message is not modified.
-
## Output connections
* Device profile name:
@@ -122,18 +121,3 @@ No device with this ID exists (e.g., it was deleted while message was in queue).
**Explanation**
The node cannot fetch the device’s profile.
-
----
-
-## Use cases
-
-Experienced platform users utilize device profiles and configure specific rule chains per device profile.
-This is useful in most of the cases, except when the device data is derived from some other message.
-For example, you may use BLE to MQTT gateway and BLE beacons. The Gateway payload typically contains MAC of the beacon and beacon data:
-
-```json
-{"mac": "7085C2F13DCD", "rssi": -25, "payload": "AABBCC"}
-```
-
-Let's assume you have different beacon profiles - indoor air quality "IAQ sensor" device profile and leak sensors "Leak sensor" device profile.
-You can create a rule chain that will change the originator of the message from gateway to device and forward the message to the corresponding rule chain.
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/entity-type-filter.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/entity-type-filter.md
index f68d8480a2..f6662a6455 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/entity-type-filter.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/entity-type-filter.md
@@ -31,6 +31,7 @@ Checks the incoming message’s originator entity type against the configured se
}
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
@@ -38,8 +39,6 @@ Checks the incoming message’s originator entity type against the configured se
1. If it matches, route the message to downstream nodes via `True`.
2. If it does not match, route the message to downstream nodes via `False`.
-> Note: The incoming message is not modified.
-
## Output connections
* `True`:
@@ -112,12 +111,3 @@ Routed via **`False`**.
**Explanation**
Incoming message originator entity type is not in the configured set, so the message is routed via `False`.
-
-## Use cases
-
-Use **entity type filter** when processing requires a binary decision (include/exclude) based on the originator type. The node routes messages to `True` if the originator entity
-type is in the configured set, and to `False` otherwise. This is ideal for guarding a pipeline, whitelisting allowed types, or pruning messages before a single downstream path.
-
-When to prefer **entity type switch** instead:
-
-- You need to branch to different sub-chains per originator type (fan-out), for example sending `DEVICE` to one path, `ASSET` to another, and `ENTITY_VIEW `to a third.
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/entity-type-switch.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/entity-type-switch.md
index d48f703f3d..1f6141f666 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/entity-type-switch.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/entity-type-switch.md
@@ -17,14 +17,13 @@ There are no available configuration fields.
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
1. Determines the incoming message’s originator entity type and looks up its normal name.
2. Routes the message to downstream nodes using the connection with a label that **exactly matches** the normal name.
-> Note: The incoming message is not modified.
-
## Output connections
* Normal name of the originator entity type
@@ -113,13 +112,3 @@ Routed via **`AI model`**.
**Explanation**
For `AI_MODEL`, the normal name is `AI model`. The node routes the message via the connection with that exact label.
-
-## Use cases
-
-Use **entity type switch** when processing must branch by originator type, sending each message to a different sub-chain via a connection labeled with that type’s
-normal name (e.g., Device, Asset, Entity View, AI model). This node is for **fan-out routing**, not yes/no decisions.
-
-When to prefer **entity type filter** instead:
-
-- You need a binary decision (include/exclude) - for example, “continue only if the originator type is `DEVICE` or `ASSET`; otherwise go `False`.” For
- branching into multiple destinations, use **entity type switch**.
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/gps-geofencing-filter.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/gps-geofencing-filter.md
index ff5e6d495c..659b7b725f 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/gps-geofencing-filter.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/gps-geofencing-filter.md
@@ -33,8 +33,6 @@ Fields below are required when the **Perimeter type** is set to *Circle* and **F
### Perimeter definition formats
-This subsection provides examples of how to define polygon and circle perimeters, depending on the configuration method (static config or metadata).
-
#### Polygon definition formats
Polygon definitions must be strings containing a valid JSON array of coordinates. Each coordinate is a two-element array: `[latitude, longitude]`.
@@ -77,7 +75,10 @@ If a polygon is completely contained inside another, it is treated as a **hole**
]
```
-> When defining polygons in metadata, the value must be a **string**, even if the content is a JSON array.
+{% capture defining_polygons_in_metadata_note %}
+When defining polygons in metadata, the value must be a **string**, even if the content is a JSON array.
+{% endcapture %}
+{% include templates/info-banner.md content=defining_polygons_in_metadata_note %}
---
@@ -104,19 +105,14 @@ Circle definitions are JSON objects with the following fields:
* `"MILE"`
* `"NAUTICAL_MILE"`
-> When storing circle definitions in metadata, the entire object must be serialized as a **string**.
-> Example metadata value:
-> ```json
-> {
-> "geo": "{\"latitude\":48.1986,\"longitude\":24.6532,\"radius\":100.0,\"radiusUnit\":\"METER\"}"
-> }
-> ```
+{% capture defining_circles_in_metadata_note %}
+When storing circle definitions in metadata, the entire object must be serialized as a **string**.
+Example metadata value: `"{\"latitude\":48.1986,\"longitude\":24.6532,\"radius\":100.0,\"radiusUnit\":\"METER\"}"`
+{% endcapture %}
+{% include templates/info-banner.md content=defining_circles_in_metadata_note %}
---
-This subsection can help users correctly prepare and troubleshoot polygon and circle definitions whether defined statically or through metadata.
-
-
### JSON Schema
```json
@@ -186,6 +182,7 @@ This subsection can help users correctly prepare and troubleshoot polygon and ci
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
@@ -213,8 +210,10 @@ This subsection can help users correctly prepare and troubleshoot polygon and ci
* If the point is **outside** → routed via the `False` connection.
* If any error occurs during parsing, coordinate extraction, or geofence resolution → routed via the `Failure` connection.
-> * Longitudes are normalized internally, allowing support for polygons that cross the ±180° meridian.
-> * A two-point polygon is interpreted as a rectangle defined by opposite corners.
+{% capture normalization_note %}
+Longitudes are normalized internally, allowing support for polygons that cross the ±180° meridian.
+{% endcapture %}
+{% include templates/info-banner.md content=normalization_note %}
## Output connections
@@ -232,18 +231,6 @@ This subsection can help users correctly prepare and troubleshoot polygon and ci
The examples below show only the **relevant** fields. Unless stated otherwise, other message fields may have any values.
----
-
-Here is the fully redone **Examples** section, rewritten for clarity, consistency, and to match the updated behavior and configuration structure (excluding legacy paths):
-
----
-
-## Examples
-
-The examples below show only the **relevant** parts of the incoming message and node configuration. Unless otherwise noted, other fields can have any values.
-
----
-
### Example 1 — Point inside static circle → `True`
**Incoming message**
@@ -601,10 +588,3 @@ Routed via **`Failure`**
**Explanation**
The value in the metadata key is not a valid JSON string, so the perimeter cannot be parsed.
-
-## Use cases
-
-* **Fleet & logistics**: Process messages only when a vehicle enters a depot or leaves a delivery zone.
-* **Asset security**: Trigger alerts if an asset exits a permitted area or enters a restricted one (use polygon with holes for internal safe zones).
-* **Facilities**: Route data differently depending on whether a device is within a site boundary vs. off-premises.
-* **Utilities & field service**: Start/stop telemetry processing when crews are within authorized work polygons.
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/message-type-filter.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/message-type-filter.md
index 01c3885f23..de5801662c 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/message-type-filter.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/message-type-filter.md
@@ -30,6 +30,7 @@ Checks the incoming message type against the configured set of message types. If
}
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
@@ -38,8 +39,6 @@ Checks the incoming message type against the configured set of message types. If
1. If it is, route the message to downstream nodes via `True`.
2. If it is not, route the message to downstream nodes via `False`.
-> Note: The incoming message is not modified.
-
## Output connections
* `True`:
@@ -51,10 +50,6 @@ Checks the incoming message type against the configured set of message types. If
## Examples
-The examples below show only the **relevant** fields of the incoming message. Unless explicitly stated otherwise, other message fields may have any values.
-
----
-
### Example 1 — Message type matches → `True`
**Incoming message**
@@ -114,7 +109,3 @@ Routed via **`False`**.
**Explanation**
The message type is not in the configured set.
-
-## Use cases
-
-Use **message type filter** when processing requires a binary decision (include/exclude) based on the message type.
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/message-type-switch.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/message-type-switch.md
index 86d5ee744c..9021db879a 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/message-type-switch.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/message-type-switch.md
@@ -18,6 +18,7 @@ There are no available configuration fields.
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
@@ -82,10 +83,6 @@ There are no available configuration fields.
## Examples
-The examples below show only the **relevant** fields of the incoming message. Unless explicitly stated otherwise, other message fields may have any values.
-
----
-
### Example 1 — Message type is `POST_TELEMETRY_REQUEST` → routed via `Post telemetry`
**Incoming message**
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/script.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/script.md
index 4dd9162f00..88874a244b 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/script.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/script.md
@@ -48,6 +48,7 @@ Supports **TBEL** and **JavaScript**.
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
@@ -72,10 +73,6 @@ Supports **TBEL** and **JavaScript**.
## Examples
-The examples below show only the **relevant** parts of the configuration and message.
-
----
-
### Example 1 — JavaScript script with dynamic threshold check → `True`
This example checks if the message type is `POST_TELEMETRY_REQUEST`.
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/switch.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/switch.md
index e09e6a7e8e..83aa83c95e 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/switch.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/filter/switch.md
@@ -49,6 +49,7 @@ Supports **TBEL** and **JavaScript**.
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
@@ -71,11 +72,6 @@ Supports **TBEL** and **JavaScript**.
## Examples
-The examples below show only the **relevant** parts of the incoming message, rule node configuration, and system state.
-Any information not explicitly shown has no effect on the processing.
-
----
-
### Example 1 — Return a single string → `A`
**Node configuration**
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/change-originator.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/change-originator.md
index d25385512d..54f0056d37 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/change-originator.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/change-originator.md
@@ -69,6 +69,7 @@ If *Entity by name pattern* is configured for *New originator*, you need to spec
]
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
@@ -86,11 +87,6 @@ If *Entity by name pattern* is configured for *New originator*, you need to spec
## Examples
-The examples below show only the **relevant** parts of the incoming message, rule node configuration, and system state.
-Any information not explicitly shown has no effect on the processing.
-
----
-
### Example 1 — Changing originator to a customer
**Incoming message**
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/copy-key-value-pairs.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/copy-key-value-pairs.md
index 62a9209eae..aff64e8812 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/copy-key-value-pairs.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/copy-key-value-pairs.md
@@ -44,6 +44,7 @@ If you're copying from the message **data**, it must be a valid JSON object. If
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
@@ -66,11 +67,6 @@ If you're copying from the message **data**, it must be a valid JSON object. If
## Examples
-The examples below show only the **relevant** parts of the incoming message, rule node configuration, and system state. Any information not explicitly shown has no effect on the
-processing.
-
------
-
### Example 1 — Copy from message data to metadata
**Incoming message**
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/delete-key-value-pairs.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/delete-key-value-pairs.md
index b2e4728cac..ff819771e1 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/delete-key-value-pairs.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/delete-key-value-pairs.md
@@ -44,6 +44,7 @@ If you're deleting from the message **data**, it must be a valid JSON object. If
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
@@ -64,11 +65,6 @@ If you're deleting from the message **data**, it must be a valid JSON object. If
## Examples
-The examples below show only the **relevant** parts of the incoming message, rule node configuration, and system state. Any information not explicitly shown has no effect on the
-processing.
-
------
-
### Example 1 — Delete from data
**Incoming message**
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/duplicate-to-group-by-name.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/duplicate-to-group-by-name.md
index 59f9d550ed..3df0da0629 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/duplicate-to-group-by-name.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/duplicate-to-group-by-name.md
@@ -53,6 +53,7 @@ The node finds a target entity group by its name. The search logic depends on th
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/duplicate-to-group.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/duplicate-to-group.md
index e69c6be18a..cf0d234aae 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/duplicate-to-group.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/duplicate-to-group.md
@@ -58,6 +58,7 @@ In this mode, the target entity group is dynamically determined from the incomin
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
@@ -89,7 +90,10 @@ Data: `{"targetTemperature": 100"}`
**Node configuration**
-> Note: The `entityGroupId` is a placeholder UUID for the `Thermostats Floor 1` group.
+{% capture status_property_note %}
+**Note:** The `entityGroupId` is a placeholder UUID for the `Thermostats Floor 1` group.
+{% endcapture %}
+{% include templates/info-banner.md content=status_property_note %}
```json
{
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/duplicate-to-related.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/duplicate-to-related.md
index 06db264ef9..084810091e 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/duplicate-to-related.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/duplicate-to-related.md
@@ -77,6 +77,7 @@ The node is configured using a **Relations query** to find the target entities.
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/json-path.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/json-path.md
index aa7447e490..4e97953468 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/json-path.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/json-path.md
@@ -31,6 +31,7 @@ The incoming message **data** must be a valid JSON object or array. If the data
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/rename-keys.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/rename-keys.md
index fd3c514996..1ba7217a42 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/rename-keys.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/rename-keys.md
@@ -1,9 +1,5 @@
Renames keys in the incoming message or its metadata based on a configured mapping.
-## Preconditions
-
-There are no requirements for the incoming message structure.
-
## Configuration
### Field descriptions
@@ -48,6 +44,7 @@ If the current key does not exist, the mapping is skipped.
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
@@ -71,11 +68,6 @@ If the current key does not exist, the mapping is skipped.
## Examples
-The examples below show only the **relevant** parts of the incoming message, rule node configuration, and system state.
-Any information not explicitly shown has no effect on the processing.
-
----
-
### Example 1 — Rename a key in message data
**Incoming message**
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/script.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/script.md
index d390f569d3..fa61f3108a 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/script.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/script.md
@@ -55,6 +55,7 @@ The function must **return** an object (for a single output message) or an array
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/split-array-msg.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/split-array-msg.md
index f7037ef00d..ae0baa58b4 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/split-array-msg.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/split-array-msg.md
@@ -15,6 +15,7 @@ This node has no configuration options.
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/to-email.md b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/to-email.md
index 139ec6cbe9..036e045e51 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/to-email.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/nodes/transformation/to-email.md
@@ -24,7 +24,10 @@ prepared message is then sent via the `Success` connection and is intended to be
data or metadata.
- **Body** - the main content of the email.
-> Note: All input fields support templatization.
+{% capture templatization_support_note %}
+**Note:** All input fields support templatization.
+{% endcapture %}
+{% include templates/info-banner.md content=templatization_support_note %}
### JSON Schema
@@ -82,6 +85,7 @@ prepared message is then sent via the `Success` connection and is intended to be
"additionalProperties": false
}
```
+{: .copy-code.expandable-3 }
## Message processing algorithm
diff --git a/_includes/docs/user-guide/rule-engine-2-0/tutorials/create-clear-alarms.md b/_includes/docs/user-guide/rule-engine-2-0/tutorials/create-clear-alarms.md
index 60d59b0a6e..24cc3466d1 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/tutorials/create-clear-alarms.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/tutorials/create-clear-alarms.md
@@ -30,13 +30,13 @@ Add Device entity in ThingsBoard. Its name is **Thermostat Home** and its type i
In this section, we explain the purpose of each node in this tutorial:
-- Node A: [**Filter Script**](/docs/user-guide/rule-engine-2-0/filter-nodes/#check-relation-filter-node) node.
+- Node A: [**Filter Script**](/docs/user-guide/rule-engine-2-0/nodes/filter/script/) node.
- This node with temperature threshold check script will verify: "if the temperature is in the expected interval, the script will return False, otherwise True will be returned".
-- Node B: [**Create alarm**](/docs/user-guide/rule-engine-2-0/action-nodes/#create-alarm-node) node.
+- Node B: [**Create alarm**](/docs/user-guide/rule-engine-2-0/nodes/action/create-alarm/) node.
- Creates or Updates an alarm if the published temperature is not at expected time range (filter script node returns True).
-- Node C: [**Clear alarm**](/docs/user-guide/rule-engine-2-0/action-nodes/#clear-alarm-node) node.
+- Node C: [**Clear alarm**](/docs/user-guide/rule-engine-2-0/nodes/action/clear-alarm/) node.
- Clears alarm if it exists in case if the published temperature is in expected time range (script node returns False).
-- Node D: [**Rule Chain**](/docs/user-guide/rule-engine-2-0/flow-nodes/#rule-chain-node) node.
+- Node D: [**Rule Chain**](/docs/user-guide/rule-engine-2-0/nodes/flow/rule-chain/) node.
- Forwards incoming Message to specified Rule Chain **Create & Clear Alarms**.
diff --git a/_includes/docs/user-guide/rule-engine-2-0/tutorials/integration-with-telegram-bot.md b/_includes/docs/user-guide/rule-engine-2-0/tutorials/integration-with-telegram-bot.md
index 0c4c865f6a..7fff6e8ce1 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/tutorials/integration-with-telegram-bot.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/tutorials/integration-with-telegram-bot.md
@@ -33,9 +33,9 @@ We assume you have completed the following guides and reviewed the articles list
In this section, we explain the purpose of each node in this tutorial:
-- Node A: [**Transform Script**](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/transformation-nodes/#script-transformation-node) node.
+- Node A: [**Transform Script**](/docs/user-guide/rule-engine-2-0/nodes/transformation/script/) node.
- This node will be used to creating a body of the Telegram message notification.
-- Node B: [**REST API Call**](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/external-nodes/#rest-api-call-node) node.
+- Node B: [**REST API Call**](/docs/user-guide/rule-engine-2-0/nodes/external/rest-api-call/) node.
- This node will send Telegram message payload to the configured REST endpoint. In our case, it is Telegram REST API.
## Creation of the Telegram Bot
diff --git a/_includes/docs/user-guide/rule-engine-2-0/tutorials/rpc-reply-tutorial.md b/_includes/docs/user-guide/rule-engine-2-0/tutorials/rpc-reply-tutorial.md
index a78e9cf2e5..d2be337d04 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/tutorials/rpc-reply-tutorial.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/tutorials/rpc-reply-tutorial.md
@@ -1,14 +1,12 @@
* TOC
{:toc}
-
-In this tutorial, we will explain how to work with [RPC call reply](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#rpc-call-reply-node) node and also how to:
-- Create and connect different rule chains using [rule chain](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/flow-nodes/#rule-chain-node) node.
-- Filter messages using filter [script](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/filter-nodes/#script-filter-node) node.
-- Transform incoming messages with transformation [script](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/transformation-nodes/#script-transformation-node) node.
-- Fetch latest telemetry data of related entities with [related entity data](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/enrichment-nodes/#related-attributes) node.
-- Log messages with [log](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/action-nodes/#log-node) node.
-
+In this tutorial, we will explain how to work with [RPC call reply](/docs/user-guide/rule-engine-2-0/nodes/action/rpc-call-reply/) node and also how to:
+- Create and connect different rule chains using [rule chain](/docs/user-guide/rule-engine-2-0/nodes/flow/rule-chain/) node.
+- Filter messages using filter [script](/docs/user-guide/rule-engine-2-0/nodes/filter/script/) node.
+- Transform incoming messages with transformation [script](/docs/user-guide/rule-engine-2-0/nodes/transformation/script/) node.
+- Fetch latest telemetry data of related entities with [related entity data](/docs/user-guide/rule-engine-2-0/nodes/enrichment/related-entity-data/) node.
+- Log messages with [log](/docs/user-guide/rule-engine-2-0/nodes/action/log/) node.
## Intro
We have 2 devices - controller and thermostat. We want to initiate [client-side RPC](/docs/{{docsPrefix}}user-guide/rpc/#client-side-rpc) call from controller and request related thermostat current temperature value.
diff --git a/_includes/docs/user-guide/rule-engine-2-0/tutorials/validate-incoming-telemetry.md b/_includes/docs/user-guide/rule-engine-2-0/tutorials/validate-incoming-telemetry.md
index 92fd986de4..ecf47b95fc 100644
--- a/_includes/docs/user-guide/rule-engine-2-0/tutorials/validate-incoming-telemetry.md
+++ b/_includes/docs/user-guide/rule-engine-2-0/tutorials/validate-incoming-telemetry.md
@@ -18,7 +18,7 @@ We assume you have completed the following guides and reviewed the articles list
## Step 1: Adding temperature validation node
-We will modify default rule chain and will add [**filter**](/docs/user-guide/rule-engine-2-0/filter-nodes/#script-filter-node) rule node with temperature validation script.
+We will modify default rule chain and will add [**filter**](/docs/user-guide/rule-engine-2-0/nodes/filter/script/) rule node with temperature validation script.
We will place this rule node between default "message type switch" and "save timeseries" rule nodes.
Please note that we have removed irrelevant rule nodes from the root rule chain as well.
diff --git a/_includes/docs/user-guide/tbel.md b/_includes/docs/user-guide/tbel.md
index 9560127808..1e97155cbc 100644
--- a/_includes/docs/user-guide/tbel.md
+++ b/_includes/docs/user-guide/tbel.md
@@ -110,7 +110,7 @@ In this expression, we simply have a single identifier (msg.temperature), which
in that the only purpose of the expression is to extract a property out of a variable or context object.
TBEL can even be used for evaluating a boolean expression.
-Assuming you are using TBEL in the Rule Engine to define a simple script [filter node](https://thingsboard.io/docs/{{docsPrefix}}user-guide/rule-engine-2-0/filter-nodes/#script-filter-node):
+Assuming you are using TBEL in the Rule Engine to define a simple script [filter node](https://thingsboard.io/docs/user-guide/rule-engine-2-0/nodes/filter/script/):
```java
return msg.temperature > 10;
diff --git a/_includes/docs/user-guide/telemetry.md b/_includes/docs/user-guide/telemetry.md
index 1f28a965b2..246e694d5f 100644
--- a/_includes/docs/user-guide/telemetry.md
+++ b/_includes/docs/user-guide/telemetry.md
@@ -11,7 +11,7 @@ ThingsBoard provides a rich set of features related to time-series data:
- **Visualize** time series data using configurable and highly customizable widgets and [dashboards](/docs/{{docsPrefix}}user-guide/dashboards/);
- **Filter and analyze** data using flexible [Rule Engine](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/re-getting-started/);
- **Generate [alarms](/docs/{{docsPrefix}}user-guide/alarms/)** based on collected data;
- - **Forward** data to external systems using [External Rule Nodes](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/external-nodes/) (e.g. Kafka or RabbitMQ Rule Nodes).
+ - **Forward** data to external systems using [External Rule Nodes](/docs/user-guide/rule-engine-2-0/nodes/external/) (e.g. Kafka or RabbitMQ Rule Nodes).
This guide provides an overview of the features listed above, and some useful links to get more details.
@@ -178,33 +178,29 @@ You may find most popular scenarios of using attributes within rule engine below
**Generate alarms based on the logical expressions against time-series values**
Use [alarm rules](/docs/{{docsPrefix}}user-guide/device-profiles/#alarm-rules) to configure most common alarm conditions via UI
-or use [filter nodes](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/filter-nodes/) to configure more specific use cases via custom JS functions.
+or use [filter nodes](/docs/user-guide/rule-engine-2-0/nodes/filter/) to configure more specific use cases via custom JS functions.
**Modify incoming time-series data before they are stored in the database**
-Use [message type switch](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/filter-nodes/#message-type-switch-node) rule node to filter messages that contain "Post telemetry" request.
-Then, use [transformation rule nodes](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/transformation-nodes/) to modify a particular message.
+Use [message type switch](/docs/user-guide/rule-engine-2-0/nodes/filter/message-type-switch/) rule node to filter messages that contain "Post telemetry" request.
+Then, use [transformation rule nodes](/docs/user-guide/rule-engine-2-0/nodes/transformation/) to modify a particular message.
**Calculate delta between previous and current time-series value**
-Use [calculate delta](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/enrichment-nodes/#calculate-delta) rule node to calculate power, water and other consumption based on smart-meter readings.
+Use [calculate delta](/docs/user-guide/rule-engine-2-0/nodes/enrichment/calculate-delta/) rule node to calculate power, water and other consumption based on smart-meter readings.
**Fetch previous time-series values to analyze incoming telemetry from device**
-Use [originator telemetry](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/enrichment-nodes/#originator-telemetry) rule node to enrich incoming time-series data message with previous time-series data of the device.
+Use [originator telemetry](/docs/user-guide/rule-engine-2-0/nodes/enrichment/originator-telemetry/) rule node to enrich incoming time-series data message with previous time-series data of the device.
**Fetch attribute values to analyze incoming telemetry from device**
-Use [enrichment](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/enrichment-nodes/) rule nodes to enrich incoming telemetry message with attributes of the device, related asset, customer or tenant.
+Use [enrichment](/docs/user-guide/rule-engine-2-0/nodes/enrichment/) rule nodes to enrich incoming telemetry message with attributes of the device, related asset, customer or tenant.
This is extremely powerful technique that allows to modify processing logic and parameters based on settings stored in the attributes.
**Use analytics rule nodes to aggregate data for related assets**
-{% if docsPrefix contains "paas/" or docsPrefix == "pe/" %}
-Use [analytics](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/analytics-nodes/) rule nodes to aggregate data from multiple devices or assets.
-{% else %}
-Use [analytics](/docs/pe/user-guide/rule-engine-2-0/analytics-nodes/) rule nodes to aggregate data from multiple devices or assets.
-{% endif %}
+Use [analytics](/docs/user-guide/rule-engine-2-0/nodes/analytics/) rule nodes to aggregate data from multiple devices or assets.
Useful to calculate total water consumption for the building/district based on data from multiple water meters.
diff --git a/_includes/docs/user-guide/ui/sms-provider-settings.md b/_includes/docs/user-guide/ui/sms-provider-settings.md
index 52d797042e..b66425db0b 100644
--- a/_includes/docs/user-guide/ui/sms-provider-settings.md
+++ b/_includes/docs/user-guide/ui/sms-provider-settings.md
@@ -8,7 +8,7 @@ For example, you can set up sending an SMS alert to the user when the sensor det
At the tenant administrator level, you can use the SMS provider settings of the system administrator or enter your settings.
{% endunless %}
-Tenant administrator is able to setup [**sms rule node**](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/external-nodes/#send-sms-node) to distribute alarms produced by [**rule engine**](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/re-getting-started/).
+Tenant administrator is able to setup [**sms rule node**](/docs/user-guide/rule-engine-2-0/nodes/external/send-sms/) to distribute alarms produced by [**rule engine**](/docs/{{docsPrefix}}user-guide/rule-engine-2-0/re-getting-started/).
To configure SMS provider settings in Thingsboard, follow these steps:
diff --git a/_includes/docs/user-guide/widgets.md b/_includes/docs/user-guide/widgets.md
index 90d830661a..b692eb284e 100644
--- a/_includes/docs/user-guide/widgets.md
+++ b/_includes/docs/user-guide/widgets.md
@@ -231,7 +231,7 @@ key in the **Latest values** widgets, the time window control will appear. You c
key individually, which you want to display and at the same time do not need to store it in the database. The time window
configuration is limited to the real-time intervals (**Current Hour/Day/Month**) and **History** time intervals. The real-time
intervals like **last 30 minutes** or **last 24 hours** are not supported for performance reasons. If you need to store the
-aggregation as telemetry, follow for more details at [the link](https://thingsboard.io/docs/pe/user-guide/rule-engine-2-0/analytics-nodes/){:target="_blank"}.
+aggregation as telemetry, follow for more details at [the link](https://thingsboard.io/docs/user-guide/rule-engine-2-0/nodes/analytics/){:target="_blank"}.
{% include images-gallery.html imageCollection="data-key-configuration-aggregation" %}
@@ -649,4 +649,4 @@ Export saves a widget's configuration (as **JSON**) so you can reuse it else
## Next steps
-{% assign currentGuide = "GettingStartedGuides" %}{% include templates/multi-project-guides-banner.md %}
\ No newline at end of file
+{% assign currentGuide = "GettingStartedGuides" %}{% include templates/multi-project-guides-banner.md %}
diff --git a/docs/edge/getting-started.md b/docs/edge/getting-started.md
index e0d426149c..b20ae27a95 100644
--- a/docs/edge/getting-started.md
+++ b/docs/edge/getting-started.md
@@ -75,7 +75,7 @@ step3:
title: 'Within your Edge instance, go to the Rule Chains section and open the "Edge Root Rule Chain".'
1:
image: /images/edge/getting-started/step-3-item-2-ce.webp
- title: 'The Push to Cloud rule node is used to transmit messages from edge to cloud after they have been stored in the local database.'
+ title: 'The Push to Cloud rule node is used to transmit messages from edge to cloud after they have been stored in the local database.'
step4:
0:
@@ -148,4 +148,4 @@ We would also greatly appreciate it if you could star our project on [GitHub](ht
{% assign currentGuide = "GettingStartedGuide" %}
{% assign docsPrefix = "edge/" %}
-{% include templates/edge/guides-banner-edge.md %}
\ No newline at end of file
+{% include templates/edge/guides-banner-edge.md %}
diff --git a/docs/pe/edge/getting-started.md b/docs/pe/edge/getting-started.md
index 4df39320a8..a0f83f995c 100644
--- a/docs/pe/edge/getting-started.md
+++ b/docs/pe/edge/getting-started.md
@@ -75,7 +75,7 @@ step3:
title: 'Within your Edge instance, go to the Rule Chains section and open the "Edge Root Rule Chain".'
1:
image: /images/pe/edge/getting-started/step-3-item-2-pe.webp
- title: 'The Push to Cloud rule node is used to transmit messages from edge to cloud after they have been stored in the local database.'
+ title: 'The Push to Cloud rule node is used to transmit messages from edge to cloud after they have been stored in the local database.'
step4:
0:
@@ -164,4 +164,4 @@ We would also greatly appreciate it if you could star our project on [GitHub](ht
{% assign currentGuide = "GettingStartedGuide" %}
{% assign docsPrefix = "pe/edge/" %}
-{% include templates/edge/guides-banner-edge.md %}
\ No newline at end of file
+{% include templates/edge/guides-banner-edge.md %}
diff --git a/docs/pe/edge/user-guide/integrations/mqtt.md b/docs/pe/edge/user-guide/integrations/mqtt.md
index 3aca80dc39..7d52ddf7dd 100644
--- a/docs/pe/edge/user-guide/integrations/mqtt.md
+++ b/docs/pe/edge/user-guide/integrations/mqtt.md
@@ -189,7 +189,7 @@ Starting with **Edge version 4.0**, you can create and edit a **Rule Chain** on
{% endcapture %}
{% include templates/info-banner.md content=edge-4 %}
-We'll need to add two rule nodes: ['originator fields'](/docs/pe/user-guide/rule-engine-2-0/enrichment-nodes/#originator-fields){: target="_blank"} and ['integration downlink'](/docs/pe/user-guide/rule-engine-2-0/action-nodes/#integration-downlink-node){: target="_blank"} nodes.
+We'll need to add two rule nodes: ['originator fields'](/docs/user-guide/rule-engine-2-0/nodes/enrichment/originator-fields/){: target="_blank"} and ['integration downlink'](/docs/user-guide/rule-engine-2-0/nodes/action/integration-downlink/){: target="_blank"} nodes.
{% include images-gallery.html imageCollection="downlink-rule" showListImageTitles="true" %}
@@ -265,4 +265,4 @@ Here 2
### Next steps
{% assign docsPrefix = "pe/edge/" %}
-{% include templates/edge/guides-banner-edge.md %}
\ No newline at end of file
+{% include templates/edge/guides-banner-edge.md %}
diff --git a/docs/pe/reference/releases.md b/docs/pe/reference/releases.md
index 5bc6d59039..1d8f2bcfbf 100644
--- a/docs/pe/reference/releases.md
+++ b/docs/pe/reference/releases.md
@@ -1,8 +1,7 @@
---
layout: docwithnav-pe
title: ThingsBoard PE Release Notes
-description: ThingsBoard architecture
-
+description: ThingsBoard Professional Edition release notes
---
* TOC
@@ -782,7 +781,7 @@ Main features:
* Update custom menu: Introduce dashboardId parameter to embed dashboard instead of using iframe;
* Azure Event Hub Integration is updated to use new SDK;
-* Added new version of ["Alarms Count Node"](/docs/pe/user-guide/rule-engine-2-0/analytics-nodes/#alarms-count-node).
+* Added new version of ["Alarms Count Node"](/docs/user-guide/rule-engine-2-0/nodes/analytics/alarms-count/).
* Added "Duplicate to group entities;
* Added ability to aggregate data on each message in the "Aggregate stream node".
* Add ability to aggregate data weekly from Sunday to Saturday in the "Aggregate stream node".
diff --git a/docs/reference/releases.md b/docs/reference/releases.md
index e6f73ecc66..e53ec06f06 100644
--- a/docs/reference/releases.md
+++ b/docs/reference/releases.md
@@ -2449,7 +2449,7 @@ Minor release with the following improvements and bug fixes:
* Migration to JDK 11;
* Rule Engine:
- * Added ["calculate delta"](/docs/user-guide/rule-engine-2-0/enrichment-nodes/#calculate-delta) rule node;
+ * Added ["calculate delta"](/docs/user-guide/rule-engine-2-0/nodes/enrichment/calculate-delta/) rule node;
* Added "current customer" and "current tenant" dynamic source types to DeviceProfile key filter. See examples [6](/docs/user-guide/device-profiles/#example-6-advanced-thresholds) and [7](/docs/user-guide/device-profiles/#example-7-dynamic-thresholds-based-on-the-tenant-or-customer-attributes);
* Added kafka consumer-groups statistics. See rule engine [troubleshooting](/docs/user-guide/rule-engine-2-0/overview/#troubleshooting) for more info;
* Attributes cache. See [Performance enhancement](/docs/user-guide/attributes/#performance-enhancement);
@@ -2555,7 +2555,7 @@ Main features:
* Update custom menu: Introduce dashboardId parameter to embed dashboard instead of using iframe;
* Azure Event Hub Integration is updated to use new SDK;
-* Added new version of ["Alarms Count Node"](/docs/pe/user-guide/rule-engine-2-0/analytics-nodes/#alarms-count-node).
+* Added new version of ["Alarms Count Node"](/docs/user-guide/rule-engine-2-0/nodes/analytics/alarms-count/).
* Added "Duplicate to group entities by group name" rule node;
* Added ability to aggregate data on each message in the "Aggregate stream node".
* Add ability to aggregate data weekly from Sunday to Saturday in the "Aggregate stream node".
@@ -2696,7 +2696,7 @@ We have also added features to track tenant API usage.
* Added support of custom [MQTT Topics](/docs/user-guide/device-profiles/#mqtt-device-topic-filters) and basic [MQTT credentials](/docs/user-guide/basic-mqtt/) as alternative to access token;
* Added support of custom device payload schema using [protocol buffers](/docs/user-guide/device-profiles/#mqtt-device-payload) for MQTT transport;
* [Device provisioning](/docs/user-guide/device-provisioning/) is now available via device profiles;
- * [SMS Provider](/docs/user-guide/ui/sms-provider-settings) and [Send SMS](/docs/user-guide/rule-engine-2-0/external-nodes/#send-sms-node) rule node;
+ * [SMS Provider](/docs/user-guide/ui/sms-provider-settings) and [Send SMS](/docs/user-guide/rule-engine-2-0/nodes/external/send-sms/) rule node;
* UI for [OAuth2](/docs/user-guide/oauth-2-support/) settings.
**Minor Improvements**
@@ -3412,7 +3412,7 @@ Main features:
Additional features:
-- added feature for resetting debug-mode in all rule-nodes;
+- added feature for resetting debug-mode in all rule nodes;
- UI: Updated Italian locale;
- UI: Added Ukrainian locale;
- UI: Added full Canadian postal code validation;
@@ -3583,7 +3583,7 @@ Websockets:
New Rule nodes:
- - [**Originator Telemetry**](/docs/user-guide/rule-engine-2-0/enrichment-nodes/#originator-telemetry)
+ - [**Originator Telemetry**](/docs/user-guide/rule-engine-2-0/nodes/enrichment/originator-telemetry/)
rule node to allow using [multiple previous telemetry records](/docs/user-guide/rule-engine-2-0/tutorials/telemetry-delta-validation/) in the rule engine;
- Create relation node;
- Assign to customer node;
diff --git a/docs/samples/sodaq/sodaq.md b/docs/samples/sodaq/sodaq.md
index c96695c300..5e4956a9a2 100644
--- a/docs/samples/sodaq/sodaq.md
+++ b/docs/samples/sodaq/sodaq.md
@@ -259,7 +259,7 @@ After Dashboard creation navigate to Tracker details state to sets the limit val
Once Rule chains and Dashboard set up you can trigger device to post the real data and verify that Integration and Rule chains work as expected.
Advanced configuration guide below demonstrates step-by-step instruction how to configure the rule chains and how they actually work.
-This steps are optional and we recommend to navigate to [Next Steps](#next-steps) for beginners.
+These steps are optional and we recommend to navigate to [Next Steps](#next-steps) for beginners.
## Advanced Configuration (Optional)
@@ -273,16 +273,16 @@ Obviously, those headers should match for data flow to work properly.
In this section, we explain the purpose of each node in this tutorial:
- - Node A: [**Originator attributes**](/docs/user-guide/rule-engine-2-0/enrichment-nodes/#originator-attributes) node.
+ - Node A: [**Originator attributes**](/docs/user-guide/rule-engine-2-0/nodes/enrichment/originator-attributes/) node.
- This node add Message Originator Attributes (client\shared\server scope) and Latest Telemetry value into Message Metadata.
- - Node **B, C, D, E**: [**Filter Script**](/docs/user-guide/rule-engine-2-0/filter-nodes/#script-filter-node) nodes.
- - These nodes with different threshold test scripts. The particular script will return ** true ** if the condition is executed, otherwise, it will return ** false ** ".- Node B: [**Create alarm**](/docs/user-guide/rule-engine-2-0/action-nodes/#create-alarm-node) node.
- - Node **F, H, G, L**: [**Create alarm**](/docs/user-guide/rule-engine-2-0/action-nodes/#create-alarm-node) nodes.
+ - Node **B, C, D, E**: [**Filter Script**](/docs/user-guide/rule-engine-2-0/nodes/filter/script/) nodes.
+ - These nodes with different threshold test scripts. The particular script will return **true** if the condition is executed, otherwise, it will return **false**.
+ - Node **F, H, G, L**: [**Create alarm**](/docs/user-guide/rule-engine-2-0/nodes/action/create-alarm/) nodes.
- Creates or Updates an alarm if the specific published telemetry is not at expected range (filter script node returns True).
- - Node **G, I, K, M**: [**Clear alarm**](/docs/user-guide/rule-engine-2-0/action-nodes/#clear-alarm-node) node.
+ - Node **G, I, K, M**: [**Clear alarm**](/docs/user-guide/rule-engine-2-0/nodes/action/clear-alarm/) node.
- Clears alarm if it exists in case if the specific published telemetry is in an expected range (filter script node returns False).
- - Node **O**: [**Rule Chain**](/docs/user-guide/rule-engine-2-0/flow-nodes/#rule-chain-node) node.
+ - Node **O**: [**Rule Chain**](/docs/user-guide/rule-engine-2-0/nodes/flow/rule-chain/) node.
- Forwards incoming Message to specified Rule Chain **Create & Clear Alarms**.
diff --git a/docs/user-guide/rule-engine-2-0/nodes/external/azure-iot-hub.md b/docs/user-guide/rule-engine-2-0/nodes/external/azure-iot-hub.md
index 43af173588..513d0b21c8 100644
--- a/docs/user-guide/rule-engine-2-0/nodes/external/azure-iot-hub.md
+++ b/docs/user-guide/rule-engine-2-0/nodes/external/azure-iot-hub.md
@@ -1,7 +1,7 @@
---
layout: docwithnav
title: azure iot hub
-description: Publishes messages to Azure IoT Hub.
+description: publishes incoming message data to Azure IoT Hub using MQTT protocol with QoS 1 and support for SAS token and X.509 certificate authentication.
breadcrumbs: "true"
breadcrumbs-steps: "2"
hidetoc: "true"
diff --git a/docs/user-guide/rule-engine-2-0/nodes/external/rest-api-call.md b/docs/user-guide/rule-engine-2-0/nodes/external/rest-api-call.md
index c1a57795ac..504b6871a2 100644
--- a/docs/user-guide/rule-engine-2-0/nodes/external/rest-api-call.md
+++ b/docs/user-guide/rule-engine-2-0/nodes/external/rest-api-call.md
@@ -1,7 +1,7 @@
---
layout: docwithnav
title: rest api call
-description: Sends HTTP requests.
+description: Sends HTTP requests to external endpoints using configurable methods, authentication, and proxy settings, returning the response as outgoing message data.
breadcrumbs: "true"
breadcrumbs-steps: "2"
hidetoc: "true"
diff --git a/docs/user-guide/rule-engine-2-0/nodes/external/send-email.md b/docs/user-guide/rule-engine-2-0/nodes/external/send-email.md
index a7b7ab7ccc..75cce91032 100644
--- a/docs/user-guide/rule-engine-2-0/nodes/external/send-email.md
+++ b/docs/user-guide/rule-engine-2-0/nodes/external/send-email.md
@@ -1,7 +1,7 @@
---
layout: docwithnav
title: send email
-description: Sends emails using configured mail server.
+description: Sends email messages via SMTP server with support for TLS encryption and proxy configuration.
breadcrumbs: "true"
breadcrumbs-steps: "2"
hidetoc: "true"
diff --git a/docs/user-guide/rule-engine-2-0/nodes/external/send-notification.md b/docs/user-guide/rule-engine-2-0/nodes/external/send-notification.md
index cf4b93d4c2..6242d11da4 100644
--- a/docs/user-guide/rule-engine-2-0/nodes/external/send-notification.md
+++ b/docs/user-guide/rule-engine-2-0/nodes/external/send-notification.md
@@ -1,7 +1,7 @@
---
layout: docwithnav
title: send notification
-description: Sends notifications to recipients group using the selected template.
+description: Sends notifications to specified recipients using notification templates through the notification center.
breadcrumbs: "true"
breadcrumbs-steps: "2"
hidetoc: "true"
diff --git a/docs/user-guide/rule-engine-2-0/nodes/external/send-sms.md b/docs/user-guide/rule-engine-2-0/nodes/external/send-sms.md
index f43014447f..722e56c266 100644
--- a/docs/user-guide/rule-engine-2-0/nodes/external/send-sms.md
+++ b/docs/user-guide/rule-engine-2-0/nodes/external/send-sms.md
@@ -1,7 +1,7 @@
---
layout: docwithnav
title: send sms
-description: Constructs SMS message based on the metadata fields from the incoming message and sends it using AWS SNS or Twilio SMS services.
+description: Sends SMS messages to specified phone numbers via AWS SNS, Twilio, or SMPP providers with templatization support.
breadcrumbs: "true"
breadcrumbs-steps: "2"
hidetoc: "true"
diff --git a/docs/user-guide/rule-engine-2-0/nodes/external/send-to-slack.md b/docs/user-guide/rule-engine-2-0/nodes/external/send-to-slack.md
index 089e5d8d96..f4fe496abd 100644
--- a/docs/user-guide/rule-engine-2-0/nodes/external/send-to-slack.md
+++ b/docs/user-guide/rule-engine-2-0/nodes/external/send-to-slack.md
@@ -1,7 +1,7 @@
---
layout: docwithnav
title: send to slack
-description: Creates a message based on the incoming data and metadata, and sends it to Slack public channel, private channel or direct message.
+description: Sends messages to Slack public channels, private channels, or direct messages via Slack API.
breadcrumbs: "true"
breadcrumbs-steps: "2"
hidetoc: "true"
diff --git a/docs/user-guide/rule-engine-2-0/nodes/external/twilio-sms.md b/docs/user-guide/rule-engine-2-0/nodes/external/twilio-sms.md
index 3d339ad76c..172b0452fb 100644
--- a/docs/user-guide/rule-engine-2-0/nodes/external/twilio-sms.md
+++ b/docs/user-guide/rule-engine-2-0/nodes/external/twilio-sms.md
@@ -1,7 +1,7 @@
---
layout: docwithnav
title: twilio sms
-description: Sends incoming message data as SMS message via Twilio service.
+description: Sends incoming message data as SMS to specified phone numbers via Twilio.
breadcrumbs: "true"
breadcrumbs-steps: "2"
hidetoc: "true"
diff --git a/docs/user-guide/rule-engine-2-0/nodes/external/twilio-voice.md b/docs/user-guide/rule-engine-2-0/nodes/external/twilio-voice.md
index f539fce1a2..d31ee446b0 100644
--- a/docs/user-guide/rule-engine-2-0/nodes/external/twilio-voice.md
+++ b/docs/user-guide/rule-engine-2-0/nodes/external/twilio-voice.md
@@ -1,7 +1,7 @@
---
layout: docwithnav
title: twilio voice
-description: Sends voice messages via Twilio.
+description: Sends incoming message data as voice messages to specified phone numbers via Twilio text-to-speech service.
breadcrumbs: "true"
breadcrumbs-steps: "2"
hidetoc: "true"
diff --git a/docs/user-guide/rule-engine-2-0/tutorials/check-relation-tutorial.md b/docs/user-guide/rule-engine-2-0/tutorials/check-relation-tutorial.md
index 699d8d3c35..0274f8213a 100644
--- a/docs/user-guide/rule-engine-2-0/tutorials/check-relation-tutorial.md
+++ b/docs/user-guide/rule-engine-2-0/tutorials/check-relation-tutorial.md
@@ -4,7 +4,7 @@ title: Check Relation between Entities
description: Check relationship
---
-The purpose of this tutorial is to show how the [**Check Relation**](/docs/user-guide/rule-engine-2-0/filter-nodes/#check-relation-filter-node) node can be used to check the relation between Entities.
+The purpose of this tutorial is to show how the [**check relation presence**](/docs/user-guide/rule-engine-2-0/nodes/filter/check-relation-presence/) node can be used to check the relation between Entities.
* TOC
{:toc}
@@ -52,21 +52,21 @@ You need to read the following guides before you start this tutorial:
In this section, we explain the purpose of each node in this tutorial:
-- Node A: [**Check Relation**](/docs/user-guide/rule-engine-2-0/filter-nodes/#check-relation-filter-node) node.
+- Node A: [**check relation presence**](/docs/user-guide/rule-engine-2-0/nodes/filter/check-relation-presence/) node.
- Checks the relation from the Device, **Fire Alarm System**, to the originator of the message **Smoke Detector** using the type and direction of relation.
-- Node B: [**Change originator**](/docs/user-guide/rule-engine-2-0/transformation-nodes/#change-originator) node.
+- Node B: [**change originator**](/docs/user-guide/rule-engine-2-0/nodes/transformation/change-originator/) node.
- Change the originator from Devices **Smoke Detector** to the related Device **Fire Alarm System** and the submitted message will be processed as a message from Device **Fire Alarm System**.
-- Node C: [**Transformation Script**](/docs/user-guide/rule-engine-2-0/transformation-nodes/#script-transformation-node).
+- Node C: [**transformation script**](/docs/user-guide/rule-engine-2-0/nodes/transformation/script/).
- Transform an original message into RPC request message.
-- Node D: [**RPC call request**](/docs/user-guide/rule-engine-2-0/action-nodes/#rpc-call-request-node) node.
+- Node D: [**RPC call request**](/docs/user-guide/rule-engine-2-0/nodes/action/rpc-call-request/) node.
- Takes the message payload and sends it as a response to the **Fire Alarm System**.
-- Node E: [**Filter Script**](/docs/user-guide/rule-engine-2-0/filter-nodes/#script-filter-node) node.
+- Node E: [**filter script**](/docs/user-guide/rule-engine-2-0/nodes/filter/script/) node.
- Checks if data of incoming message is **smoke**.
-- Node F: [**Clear alarm**](/docs/user-guide/rule-engine-2-0/action-nodes/#clear-alarm-node) node.
+- Node F: [**clear alarm**](/docs/user-guide/rule-engine-2-0/nodes/action/clear-alarm/) node.
- Loads the latest Alarm with configured Alarm Type for Message Originator **Smoke Detector** and Clears the Alarm if it exists.
-- Node G: [**Create alarm**](/docs/user-guide/rule-engine-2-0/action-nodes/#create-alarm-node) node.
+- Node G: [**create alarm**](/docs/user-guide/rule-engine-2-0/nodes/action/create-alarm/) node.
- Tries to load the latest Alarm with configured Alarm Type for Message Originator, namely **Smoke Detector**.
-- Node H: [**Rule Chain**](/docs/user-guide/rule-engine-2-0/flow-nodes/#rule-chain-node) node.
+- Node H: [**rule chain**](/docs/user-guide/rule-engine-2-0/nodes/flow/rule-chain/) node.
- Forwards incoming Message to specified Rule Chain **Related Fire Alarm System**.
@@ -330,7 +330,7 @@ Please refer to the third and fourth links under the **See Also** section to see
## See Also
-- [Switch Node](/docs/user-guide/rule-engine-2-0/filter-nodes/#switch-node) guide - for more information about how to use Switch Node in Thignsboard.
+- [Switch Node](/docs/user-guide/rule-engine-2-0/nodes/filter/switch/) guide - for more information about how to use Switch Node in Thignsboard.
- [Validate incoming telemetry](/docs/user-guide/rule-engine-2-0/tutorials/validate-incoming-telemetry/#step-1-adding-temperature-validation-node) tutorial - for more information about how to validate an incoming telemetry using the Script Filter node.
diff --git a/docs/user-guide/rule-engine-2-0/tutorials/create-clear-alarms-with-details.md b/docs/user-guide/rule-engine-2-0/tutorials/create-clear-alarms-with-details.md
index a742c67128..211d574acf 100644
--- a/docs/user-guide/rule-engine-2-0/tutorials/create-clear-alarms-with-details.md
+++ b/docs/user-guide/rule-engine-2-0/tutorials/create-clear-alarms-with-details.md
@@ -32,11 +32,11 @@ We assume you have completed the following guides and reviewed the articles list
In this section, we explain the purpose of each node in this tutorial:
-- Node A: [**Create alarm**](/docs/user-guide/rule-engine-2-0/action-nodes/#create-alarm-node) node.
+- Node A: [**Create alarm**](/docs/user-guide/rule-engine-2-0/nodes/action/create-alarm/) node.
- Creates or Updates an alarm if the published temperature is not at expected time range (filter script node returns True).
-- Node B: [**Clear alarm**](/docs/user-guide/rule-engine-2-0/action-nodes/#clear-alarm-node) node.
+- Node B: [**Clear alarm**](/docs/user-guide/rule-engine-2-0/nodes/action/clear-alarm/) node.
- Clears alarm if it exists in case if the published temperature is in expected time range (script node returns False).
-- Node C: [**Rule Chain**](/docs/user-guide/rule-engine-2-0/flow-nodes/#rule-chain-node) node.
+- Node C: [**Rule Chain**](/docs/user-guide/rule-engine-2-0/nodes/flow/rule-chain/) node.
- Forwards incoming Message to specified Rule Chain **Create & Clear Alarms with details**.
diff --git a/docs/user-guide/rule-engine-2-0/tutorials/get-weather-using-rest-api-call.md b/docs/user-guide/rule-engine-2-0/tutorials/get-weather-using-rest-api-call.md
index f8dcedc4f5..70866b1d69 100644
--- a/docs/user-guide/rule-engine-2-0/tutorials/get-weather-using-rest-api-call.md
+++ b/docs/user-guide/rule-engine-2-0/tutorials/get-weather-using-rest-api-call.md
@@ -2,11 +2,8 @@
layout: docwithnav
title: Weather reading using REST API calls
description: REST API weather guide
-
---
-
-
This tutorial will show how to get weather data using REST API.
* TOC
@@ -26,7 +23,7 @@ We assume you have completed the following guides and reviewed the articles list
* [Getting Started](/docs/getting-started-guides/helloworld/) guide.
* [Rule Engine Overview](/docs/user-guide/rule-engine-2-0/overview/).
- * [External rule nodes](/docs/user-guide/rule-engine-2-0/external-nodes/).
+ * [External rule nodes](/docs/user-guide/rule-engine-2-0/nodes/external/).
## Adding the asset
diff --git a/docs/user-guide/rule-engine-2-0/tutorials/rpc-request-tutorial.md b/docs/user-guide/rule-engine-2-0/tutorials/rpc-request-tutorial.md
index 3f4b183368..96301fb555 100644
--- a/docs/user-guide/rule-engine-2-0/tutorials/rpc-request-tutorial.md
+++ b/docs/user-guide/rule-engine-2-0/tutorials/rpc-request-tutorial.md
@@ -62,21 +62,21 @@ The Wind Turbine has two devices installed: Wind Direction Sensor and Rotating S
## Message flow
In this section, we explain the purpose of each node in this tutorial:
-- Node A: [**Message Type Switch**](/docs/user-guide/rule-engine-2-0/filter-nodes/#message-type-switch-node) node.
+- Node A: [**message type switch**](/docs/user-guide/rule-engine-2-0/nodes/filter/message-type-switch/) node.
- Routes incoming messages based on the message type.
-- Node B: [**Save Timeseries**](/docs/user-guide/rule-engine-2-0/action-nodes/#save-timeseries-node) node.
+- Node B: [**save time series**](/docs/user-guide/rule-engine-2-0/nodes/action/save-timeseries/) node.
- Stores messages telemetry from **Wind Direction Sensor** and **Rotating System** into the database.
-- Node C: [**Related attributes**](/docs/user-guide/rule-engine-2-0/enrichment-nodes/#related-attributes).
+- Node C: [**related device attributes**](/docs/user-guide/rule-engine-2-0/nodes/enrichment/related-device-attributes/).
- Loads the source telemetry **windDirection** of the related **Wind Direction Sensor** and save it into the Message metadata with the name **windDirection**.
-- Node D: [**Change originator**](/docs/user-guide/rule-engine-2-0/transformation-nodes/#change-originator) node.
+- Node D: [**change originator**](/docs/user-guide/rule-engine-2-0/nodes/transformation/change-originator/) node.
- Change the originator from Devices **Wind Direction Sensor** and **Rotating System** to the related Asset **Wind Turbine** and the submitted message will be processed as a message from Asset.
-- Node E: [**Save Timeseries**](/docs/user-guide/rule-engine-2-0/action-nodes/#save-timeseries-node) node.
+- Node E: [**save time series**](/docs/user-guide/rule-engine-2-0/nodes/action/save-timeseries/) node.
- Stores messages telemetry from Asset **Wind Turbine** into the database.
-- Node F: [**Transformation Script**](/docs/user-guide/rule-engine-2-0/transformation-nodes/#script-transformation-node).
+- Node F: [**transformation script**](/docs/user-guide/rule-engine-2-0/nodes/transformation/script/).
- Transform an original message into RPC request message.
-- Node G: [**Filter Script**](/docs/user-guide/rule-engine-2-0/filter-nodes/#script-filter-node) node.
+- Node G: [**filter script**](/docs/user-guide/rule-engine-2-0/nodes/filter/script/) node.
- Checks if msgType of incoming message is **RPC message**.
-- Node H: [**RPC call request**](/docs/user-guide/rule-engine-2-0/action-nodes/#rpc-call-request-node) node.
+- Node H: [**rpc call request**](/docs/user-guide/rule-engine-2-0/nodes/action/rpc-call-request/) node.
- Takes the message payload and sends it as a response to the **Rotating System**.
diff --git a/docs/user-guide/rule-engine-2-0/tutorials/send-email-html.md b/docs/user-guide/rule-engine-2-0/tutorials/send-email-html.md
index c50bd075a5..df335a3b3f 100644
--- a/docs/user-guide/rule-engine-2-0/tutorials/send-email-html.md
+++ b/docs/user-guide/rule-engine-2-0/tutorials/send-email-html.md
@@ -40,14 +40,14 @@ This Tutorial is to show you how to send an email message with HTML page or imag
* [Getting Started](/docs/getting-started-guides/helloworld/) guide.
* [Rule Engine Overview](/docs/user-guide/rule-engine-2-0/overview/).
-* [Send email](/docs/user-guide/rule-engine-2-0/external-nodes/#send-email-node) node.
+* [Send email](/docs/user-guide/rule-engine-2-0/nodes/external/send-email/) node.
## Message flow
-- Like a start point we will use [Generator](/docs/user-guide/rule-engine-2-0/action-nodes/#generator-node) that will imitate regular rule chain messages flow: prepared message and metadata
+- Like a start point we will use [Generator](/docs/user-guide/rule-engine-2-0/nodes/action/generator/) that will imitate regular rule chain messages flow: prepared message and metadata
where we can contain some dynamic field for **to email** node.
-- The [To email node](/docs/user-guide/rule-engine-2-0/transformation-nodes/#to-email-node) prepares data, destination email, and other for email message.
-- The [Send email node](/docs/user-guide/rule-engine-2-0/external-nodes/#send-email-node) sends a message.
+- The [To email node](/docs/user-guide/rule-engine-2-0/nodes/transformation/to-email/) prepares data, destination email, and other for email message.
+- The [Send email node](/docs/user-guide/rule-engine-2-0/nodes/external/send-email/) sends a message.
## Configuring Rule Nodes
diff --git a/docs/user-guide/rule-engine-2-0/tutorials/send-email-to-customer.md b/docs/user-guide/rule-engine-2-0/tutorials/send-email-to-customer.md
index 80ff095df6..0071d7bf77 100644
--- a/docs/user-guide/rule-engine-2-0/tutorials/send-email-to-customer.md
+++ b/docs/user-guide/rule-engine-2-0/tutorials/send-email-to-customer.md
@@ -72,13 +72,13 @@ Go to **Devices** -> **Thermostat Home** -> **Attributes** -> **Server attribute
In this section, we explain the purpose of each node that was added or modified to initial rule chains in this tutorial:
-- Node A: [**Customer attributes**](/docs/user-guide/rule-engine-2-0/enrichment-nodes/#customer-attributes) node.
+- Node A: [**Customer attributes**](/docs/user-guide/rule-engine-2-0/nodes/enrichment/customer-attributes/) node.
- This node will be used for taking email attribute of the customer and save it in Message Metadata property customerEmail
-- Node B: [**Originator attributes**](/docs/user-guide/rule-engine-2-0/enrichment-nodes/#originator-attributes) node.
+- Node B: [**Originator attributes**](/docs/user-guide/rule-engine-2-0/nodes/enrichment/originator-attributes/) node.
- This node will be used for taking address server scope attribute of the originator (device is an originator of the incoming message) and save it in the Message Metadata.
-- Node C: [**To Email**](/docs/user-guide/rule-engine-2-0/transformation-nodes/#to-email-node) node.
+- Node C: [**To Email**](/docs/user-guide/rule-engine-2-0/nodes/transformation/to-email/) node.
- This node builds actual email from the configured template.
-- Node D: [**Rule Chain**](/docs/user-guide/rule-engine-2-0/flow-nodes/#rule-chain-node) node.
+- Node D: [**Rule Chain**](/docs/user-guide/rule-engine-2-0/nodes/flow/rule-chain/) node.
- Forwards incoming Message to specified Rule Chain **Create/Clear Alarm & Send Email to Customer**.
diff --git a/docs/user-guide/rule-engine-2-0/tutorials/send-email.md b/docs/user-guide/rule-engine-2-0/tutorials/send-email.md
index 93155e302c..6ad293432c 100644
--- a/docs/user-guide/rule-engine-2-0/tutorials/send-email.md
+++ b/docs/user-guide/rule-engine-2-0/tutorials/send-email.md
@@ -35,11 +35,11 @@ We assume you have completed the following guides and reviewed the articles list
In this section, we explain the purpose of each node in this tutorial:
-- Node A: [**Transform Script**](/docs/user-guide/rule-engine-2-0/transformation-nodes/#script-transformation-node) node.
+- Node A: [**Transform Script**](/docs/user-guide/rule-engine-2-0/nodes/transformation/script/) node.
- This node will use for saving current temperature in the Message Metadata.
-- Node B: [**To Email**](/docs/user-guide/rule-engine-2-0/transformation-nodes/#to-email-node) node.
+- Node B: [**To Email**](/docs/user-guide/rule-engine-2-0/nodes/transformation/to-email/) node.
- this node builds actual email from the configured template.
-- Node C: [**Send Email**](/docs/user-guide/rule-engine-2-0/external-nodes/#send-email-node) node.
+- Node C: [**Send Email**](/docs/user-guide/rule-engine-2-0/nodes/external/send-email/) node.
- this node will actually send email from the inbound message using system SMTP settings.
diff --git a/docs/user-guide/rule-engine-2-0/tutorials/transform-incoming-telemetry.md b/docs/user-guide/rule-engine-2-0/tutorials/transform-incoming-telemetry.md
index 4a8e78445f..b2543f4958 100644
--- a/docs/user-guide/rule-engine-2-0/tutorials/transform-incoming-telemetry.md
+++ b/docs/user-guide/rule-engine-2-0/tutorials/transform-incoming-telemetry.md
@@ -27,7 +27,7 @@ We assume you have completed the following guides and reviewed the articles list
## Step 1: Adding temperature transformation node
-We will modify default rule chain and will add [**transformation**](/docs/user-guide/rule-engine-2-0/transformation-nodes/#script-transformation-node) rule node with temperature transformation script.
+We will modify default rule chain and will add [**transformation**](/docs/user-guide/rule-engine-2-0/nodes/transformation/script/) rule node with temperature transformation script.
We will place this rule node between default "message type switch" and "save timeseries" rule nodes.
Please note that we have removed irrelevant rule nodes from the root rule chain as well.
diff --git a/docs/user-guide/rule-engine-2-0/tutorials/transform-telemetry-using-previous-record.md b/docs/user-guide/rule-engine-2-0/tutorials/transform-telemetry-using-previous-record.md
index 0237bb70df..8f863ec89e 100644
--- a/docs/user-guide/rule-engine-2-0/tutorials/transform-telemetry-using-previous-record.md
+++ b/docs/user-guide/rule-engine-2-0/tutorials/transform-telemetry-using-previous-record.md
@@ -41,7 +41,7 @@ We assume you have completed the following guides and reviewed the articles list
## Step 1: Adding enrichment node
-We will modify default rule chain and will an [**enrichment**](/docs/user-guide/rule-engine-2-0/enrichment-nodes/#originator-attributes) rule node to fetch previous telemetry value from the database and put it to the message metadata.
+We will modify default rule chain and will an [**enrichment**](/docs/user-guide/rule-engine-2-0/nodes/enrichment/originator-attributes/) rule node to fetch previous telemetry value from the database and put it to the message metadata.

@@ -54,13 +54,13 @@ We will protect from this failure by setting the default previous counter on the
## Step 2: Default previous counter node
-This [**transformation**](/docs/user-guide/rule-engine-2-0/transformation-nodes/#script-transformation-node) node will set the default counter to the metadata from the incoming message. This will be used to set default "delta" value to 0 on the next step.
+This [**transformation**](/docs/user-guide/rule-engine-2-0/nodes/transformation/script/) node will set the default counter to the metadata from the incoming message. This will be used to set default "delta" value to 0 on the next step.

## Step 3: Delta transformation node
-This [**transformation**](/docs/user-guide/rule-engine-2-0/transformation-nodes/#script-transformation-node) node will calculate delta based on previous counter value from the metadata and current value from the message.
+This [**transformation**](/docs/user-guide/rule-engine-2-0/nodes/transformation/script/) node will calculate delta based on previous counter value from the metadata and current value from the message.

diff --git a/images/user-guide/rule-engine-2-0/nodes/acknowledge-failed.png b/images/user-guide/rule-engine-2-0/nodes/acknowledge-failed.png
deleted file mode 100644
index a93b316c53..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/acknowledge-failed.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/acknowledge.png b/images/user-guide/rule-engine-2-0/nodes/acknowledge.png
deleted file mode 100644
index 43b0a33208..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/acknowledge.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-assign-to-customer-node-configuration.png b/images/user-guide/rule-engine-2-0/nodes/action-assign-to-customer-node-configuration.png
deleted file mode 100644
index f58388aa15..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-assign-to-customer-node-configuration.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-assign-to-customer-node.png b/images/user-guide/rule-engine-2-0/nodes/action-assign-to-customer-node.png
deleted file mode 100644
index 07526e0ff3..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-assign-to-customer-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-calculated-fields-example-rule-chain.png b/images/user-guide/rule-engine-2-0/nodes/action-calculated-fields-example-rule-chain.png
deleted file mode 100644
index 9cff766887..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-calculated-fields-example-rule-chain.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-calculated-fields.png b/images/user-guide/rule-engine-2-0/nodes/action-calculated-fields.png
deleted file mode 100644
index e9a61f3b2b..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-calculated-fields.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-clear-alarm-config.png b/images/user-guide/rule-engine-2-0/nodes/action-clear-alarm-config.png
deleted file mode 100644
index 6278d2d854..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-clear-alarm-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-clear-alarm-fetch-alarm-type-from-metadata.png b/images/user-guide/rule-engine-2-0/nodes/action-clear-alarm-fetch-alarm-type-from-metadata.png
deleted file mode 100644
index d180aad205..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-clear-alarm-fetch-alarm-type-from-metadata.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-clear-alarm.png b/images/user-guide/rule-engine-2-0/nodes/action-clear-alarm.png
deleted file mode 100644
index ec6a5274af..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-clear-alarm.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-create-alarm-config-from-msg.png b/images/user-guide/rule-engine-2-0/nodes/action-create-alarm-config-from-msg.png
deleted file mode 100644
index 58d7ad5b29..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-create-alarm-config-from-msg.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-create-alarm-config.png b/images/user-guide/rule-engine-2-0/nodes/action-create-alarm-config.png
deleted file mode 100644
index ce1d6b17e3..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-create-alarm-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-create-alarm-propagate-list.png b/images/user-guide/rule-engine-2-0/nodes/action-create-alarm-propagate-list.png
deleted file mode 100644
index 1544dc4d16..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-create-alarm-propagate-list.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-create-alarm.png b/images/user-guide/rule-engine-2-0/nodes/action-create-alarm.png
deleted file mode 100644
index e3fbd26baa..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-create-alarm.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-create-relation-node-change-originator.png b/images/user-guide/rule-engine-2-0/nodes/action-create-relation-node-change-originator.png
deleted file mode 100644
index 35a6732ee9..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-create-relation-node-change-originator.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-create-relation-node-configuration.png b/images/user-guide/rule-engine-2-0/nodes/action-create-relation-node-configuration.png
deleted file mode 100644
index 6cf9d3e8b8..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-create-relation-node-configuration.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-create-relation-node-remove-relations.png b/images/user-guide/rule-engine-2-0/nodes/action-create-relation-node-remove-relations.png
deleted file mode 100644
index df22e3dec2..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-create-relation-node-remove-relations.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-create-relation.png b/images/user-guide/rule-engine-2-0/nodes/action-create-relation.png
deleted file mode 100644
index 3a9eaae4b6..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-create-relation.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-delay-config.png b/images/user-guide/rule-engine-2-0/nodes/action-delay-config.png
deleted file mode 100644
index b94ace5db4..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-delay-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-delay.png b/images/user-guide/rule-engine-2-0/nodes/action-delay.png
deleted file mode 100644
index 17f9dd612d..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-delay.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-delete-attributes-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/action-delete-attributes-2-ce.png
deleted file mode 100644
index deb1742126..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-delete-attributes-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-delete-attributes-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/action-delete-attributes-2-pe.png
deleted file mode 100644
index 37b8745139..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-delete-attributes-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-delete-attributes.png b/images/user-guide/rule-engine-2-0/nodes/action-delete-attributes.png
deleted file mode 100644
index 2c04c59491..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-delete-attributes.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-delete-relation-node-configuration.png b/images/user-guide/rule-engine-2-0/nodes/action-delete-relation-node-configuration.png
deleted file mode 100644
index 5816927e35..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-delete-relation-node-configuration.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-delete-relation-node-new-functionality.png b/images/user-guide/rule-engine-2-0/nodes/action-delete-relation-node-new-functionality.png
deleted file mode 100644
index 3cccb17029..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-delete-relation-node-new-functionality.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-delete-relation.png b/images/user-guide/rule-engine-2-0/nodes/action-delete-relation.png
deleted file mode 100644
index a22dcdf162..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-delete-relation.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-generator-config.png b/images/user-guide/rule-engine-2-0/nodes/action-generator-config.png
deleted file mode 100644
index 143cd1106d..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-generator-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-generator.png b/images/user-guide/rule-engine-2-0/nodes/action-generator.png
deleted file mode 100644
index 0b568aa8f0..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-generator.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-gps-geofencing-event-node-duration-config.png b/images/user-guide/rule-engine-2-0/nodes/action-gps-geofencing-event-node-duration-config.png
deleted file mode 100644
index 663214bc48..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-gps-geofencing-event-node-duration-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-gps-geofencing-event-node.png b/images/user-guide/rule-engine-2-0/nodes/action-gps-geofencing-event-node.png
deleted file mode 100644
index 44ee0beb16..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-gps-geofencing-event-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-log-config.png b/images/user-guide/rule-engine-2-0/nodes/action-log-config.png
deleted file mode 100644
index baee029efe..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-log-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-log.png b/images/user-guide/rule-engine-2-0/nodes/action-log.png
deleted file mode 100644
index 95cf3d7a31..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-log.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-rpc-call-reply-config.png b/images/user-guide/rule-engine-2-0/nodes/action-rpc-call-reply-config.png
deleted file mode 100644
index 0b249dc5ad..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-rpc-call-reply-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-rpc-call-reply.png b/images/user-guide/rule-engine-2-0/nodes/action-rpc-call-reply.png
deleted file mode 100644
index 1d9196fe24..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-rpc-call-reply.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-rpc-call-request-config.png b/images/user-guide/rule-engine-2-0/nodes/action-rpc-call-request-config.png
deleted file mode 100644
index 158f100bb9..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-rpc-call-request-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-rpc-call-request.png b/images/user-guide/rule-engine-2-0/nodes/action-rpc-call-request.png
deleted file mode 100644
index 8a3cffc3e5..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-rpc-call-request.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-save-to-custom-cassandra-table-config.png b/images/user-guide/rule-engine-2-0/nodes/action-save-to-custom-cassandra-table-config.png
deleted file mode 100644
index 9e5459f1ad..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-save-to-custom-cassandra-table-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-save-to-custom-cassandra-table-name-config.png b/images/user-guide/rule-engine-2-0/nodes/action-save-to-custom-cassandra-table-name-config.png
deleted file mode 100644
index f284b90622..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-save-to-custom-cassandra-table-name-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-save-to-custom-cassandra-table.png b/images/user-guide/rule-engine-2-0/nodes/action-save-to-custom-cassandra-table.png
deleted file mode 100644
index 2555a1ec9c..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-save-to-custom-cassandra-table.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-unassign-from-customer-node-configuration.png b/images/user-guide/rule-engine-2-0/nodes/action-unassign-from-customer-node-configuration.png
deleted file mode 100644
index c821dea61b..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-unassign-from-customer-node-configuration.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/action-unassign-from-customer-node.png b/images/user-guide/rule-engine-2-0/nodes/action-unassign-from-customer-node.png
deleted file mode 100644
index 731071dd8e..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/action-unassign-from-customer-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/asset-profile-switch-chain.png b/images/user-guide/rule-engine-2-0/nodes/asset-profile-switch-chain.png
deleted file mode 100644
index d8443b7bd6..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/asset-profile-switch-chain.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/check-alarm-status-chain.png b/images/user-guide/rule-engine-2-0/nodes/check-alarm-status-chain.png
deleted file mode 100644
index de94e75ebc..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/check-alarm-status-chain.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/check-existance-fields-config.png b/images/user-guide/rule-engine-2-0/nodes/check-existance-fields-config.png
deleted file mode 100644
index 98f09fd6d2..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/check-existance-fields-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/check-existance-fields.png b/images/user-guide/rule-engine-2-0/nodes/check-existance-fields.png
deleted file mode 100644
index a7769bab8f..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/check-existance-fields.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/check-relation-checkbox.png b/images/user-guide/rule-engine-2-0/nodes/check-relation-checkbox.png
deleted file mode 100644
index b9dddfcd46..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/check-relation-checkbox.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/copy-to-view-1.png b/images/user-guide/rule-engine-2-0/nodes/copy-to-view-1.png
deleted file mode 100644
index 39bc7ab56c..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/copy-to-view-1.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/copy-to-view-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/copy-to-view-2-ce.png
deleted file mode 100644
index 908d0a7c16..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/copy-to-view-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/copy-to-view-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/copy-to-view-2-pe.png
deleted file mode 100644
index e1e9ef232c..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/copy-to-view-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/customer-attributes-example.png b/images/user-guide/rule-engine-2-0/nodes/customer-attributes-example.png
deleted file mode 100644
index ae94aa2e1d..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/customer-attributes-example.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/customer-latest-telemetry-example.png b/images/user-guide/rule-engine-2-0/nodes/customer-latest-telemetry-example.png
deleted file mode 100644
index 0f424d3d42..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/customer-latest-telemetry-example.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/device-profile-node-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/device-profile-node-2-ce.png
deleted file mode 100755
index fd01d2d2b5..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/device-profile-node-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/device-profile-node-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/device-profile-node-2-pe.png
deleted file mode 100755
index c66211089e..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/device-profile-node-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/device-profile-node.png b/images/user-guide/rule-engine-2-0/nodes/device-profile-node.png
deleted file mode 100755
index 71d3ebd248..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/device-profile-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/device-profile-switch-chain.png b/images/user-guide/rule-engine-2-0/nodes/device-profile-switch-chain.png
deleted file mode 100644
index e96bd70faf..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/device-profile-switch-chain.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/device-state-1.png b/images/user-guide/rule-engine-2-0/nodes/device-state-1.png
deleted file mode 100644
index 19ccd7990a..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/device-state-1.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/device-state-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/device-state-2-ce.png
deleted file mode 100644
index b4692e4f20..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/device-state-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/device-state-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/device-state-2-pe.png
deleted file mode 100644
index 511191e410..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/device-state-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-calculate-delta-config.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-calculate-delta-config.png
deleted file mode 100644
index b3173fb63a..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-calculate-delta-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-calculate-delta.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-calculate-delta.png
deleted file mode 100644
index d68f366b05..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-calculate-delta.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-customer-attributes-config-example.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-customer-attributes-config-example.png
deleted file mode 100644
index 1603f7ea2e..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-customer-attributes-config-example.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-customer-details-config.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-customer-details-config.png
deleted file mode 100644
index d03e7e469d..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-customer-details-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-customer-details-example.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-customer-details-example.png
deleted file mode 100644
index 6cbdf7e211..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-customer-details-example.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-device-attributes-config-device-relations-query.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-device-attributes-config-device-relations-query.png
deleted file mode 100644
index d167971d52..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-device-attributes-config-device-relations-query.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-device-attributes-config-other.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-device-attributes-config-other.png
deleted file mode 100644
index 6a05c5edcb..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-device-attributes-config-other.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-device-attributes-config-related-device-attributes.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-device-attributes-config-related-device-attributes.png
deleted file mode 100644
index b645e7b597..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-device-attributes-config-related-device-attributes.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-device-attributes-device-telemetry.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-device-attributes-device-telemetry.png
deleted file mode 100644
index f5a7acfce0..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-device-attributes-device-telemetry.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-device-attributes-example-device-attributes.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-device-attributes-example-device-attributes.png
deleted file mode 100644
index 45d2c96d94..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-device-attributes-example-device-attributes.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-device-attributes-example-device-relations.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-device-attributes-example-device-relations.png
deleted file mode 100644
index d7068eed20..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-device-attributes-example-device-relations.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-fetch-device-credentials-config.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-fetch-device-credentials-config.png
deleted file mode 100644
index 2605cf1b5c..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-fetch-device-credentials-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/calculate-delta-node.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/calculate-delta-node.png
deleted file mode 100644
index 9491555065..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/calculate-delta-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/customer-attributes-node-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/customer-attributes-node-2-ce.png
deleted file mode 100644
index f8f3734f03..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/customer-attributes-node-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/customer-attributes-node-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/customer-attributes-node-2-pe.png
deleted file mode 100644
index 3f2ed7e1d5..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/customer-attributes-node-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/customer-attributes-node.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/customer-attributes-node.png
deleted file mode 100644
index bf34e7087b..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/customer-attributes-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/customer-details-node.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/customer-details-node.png
deleted file mode 100644
index 59b5f1e366..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/customer-details-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/fetch-device-credentials-node.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/fetch-device-credentials-node.png
deleted file mode 100644
index 5b43271c40..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/fetch-device-credentials-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/originator-attributes-node.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/originator-attributes-node.png
deleted file mode 100644
index 0017ab3c80..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/originator-attributes-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/originator-fields-node.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/originator-fields-node.png
deleted file mode 100644
index db738f3dcf..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/originator-fields-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/originator-telemetry-node.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/originator-telemetry-node.png
deleted file mode 100644
index 7063fde5af..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/originator-telemetry-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/related-device-attributes-node.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/related-device-attributes-node.png
deleted file mode 100644
index b08cd39323..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/related-device-attributes-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/related-entity-data-node.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/related-entity-data-node.png
deleted file mode 100644
index 1b30789de9..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/related-entity-data-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/tenant-attributes-node.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/tenant-attributes-node.png
deleted file mode 100644
index 7e2214545b..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/tenant-attributes-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/tenant-details-node.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/tenant-details-node.png
deleted file mode 100644
index a5f74ba11a..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-nodes/tenant-details-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-attributes-config.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-attributes-config.png
deleted file mode 100644
index 0951fbdbe1..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-attributes-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-fields-fetch-to.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-fields-fetch-to.png
deleted file mode 100644
index 617eb43880..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-fields-fetch-to.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-fields-mapping.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-fields-mapping.png
deleted file mode 100644
index c33059a0f9..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-fields-mapping.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-fields-skip-empty-fields.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-fields-skip-empty-fields.png
deleted file mode 100644
index be57372918..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-fields-skip-empty-fields.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-dynamic-interval.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-dynamic-interval.png
deleted file mode 100644
index 4ee20cd8ee..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-dynamic-interval.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-fetch-strategy-all-average-aggregation.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-fetch-strategy-all-average-aggregation.png
deleted file mode 100644
index f17e9a27d4..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-fetch-strategy-all-average-aggregation.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-fetch-strategy-all-none-aggregation.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-fetch-strategy-all-none-aggregation.png
deleted file mode 100644
index e74bce4127..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-fetch-strategy-all-none-aggregation.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-fetch-strategy-first.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-fetch-strategy-first.png
deleted file mode 100644
index ed3b3b51af..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-fetch-strategy-first.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-fetch-strategy-last.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-fetch-strategy-last.png
deleted file mode 100644
index c95ab3ce7f..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-fetch-strategy-last.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-fixed-interval.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-fixed-interval.png
deleted file mode 100644
index 08f4d7ffd4..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-fixed-interval.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-time-series-keys.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-time-series-keys.png
deleted file mode 100644
index 68a25ecd42..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-originator-telemetry-time-series-keys.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-orignator-and-device-attributes-tell-failure.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-orignator-and-device-attributes-tell-failure.png
deleted file mode 100644
index 20316d0f18..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-orignator-and-device-attributes-tell-failure.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-related-attributes-config.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-related-attributes-config.png
deleted file mode 100644
index fcfe42c88d..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-related-attributes-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-related-attributes.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-related-attributes.png
deleted file mode 100644
index 74c70d1023..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-related-attributes.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-tenant-attributes-config.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-tenant-attributes-config.png
deleted file mode 100644
index a85b6be201..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-tenant-attributes-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/enrichment-tenant-details-config.png b/images/user-guide/rule-engine-2-0/nodes/enrichment-tenant-details-config.png
deleted file mode 100644
index f7643448f0..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/enrichment-tenant-details-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/entity-type-switch-chain.png b/images/user-guide/rule-engine-2-0/nodes/entity-type-switch-chain.png
deleted file mode 100644
index 8447ad4005..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/entity-type-switch-chain.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-advanced-settings.png b/images/user-guide/rule-engine-2-0/nodes/external-ai-request-advanced-settings.png
deleted file mode 100644
index 418b274df2..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-advanced-settings.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-ai-model-ce.png b/images/user-guide/rule-engine-2-0/nodes/external-ai-request-ai-model-ce.png
deleted file mode 100644
index 084d5da353..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-ai-model-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-ai-model-pe.png b/images/user-guide/rule-engine-2-0/nodes/external-ai-request-ai-model-pe.png
deleted file mode 100644
index fb1e15e54b..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-ai-model-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-force-ack.png b/images/user-guide/rule-engine-2-0/nodes/external-ai-request-force-ack.png
deleted file mode 100644
index 7aff1464bd..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-force-ack.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-response-format-json-ce.png b/images/user-guide/rule-engine-2-0/nodes/external-ai-request-response-format-json-ce.png
deleted file mode 100644
index 8179ba7dca..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-response-format-json-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-response-format-json-pe.png b/images/user-guide/rule-engine-2-0/nodes/external-ai-request-response-format-json-pe.png
deleted file mode 100644
index 5f6d3d64f8..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-response-format-json-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-response-format-json-schema-ce.png b/images/user-guide/rule-engine-2-0/nodes/external-ai-request-response-format-json-schema-ce.png
deleted file mode 100644
index 1c75607960..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-response-format-json-schema-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-response-format-json-schema-pe.png b/images/user-guide/rule-engine-2-0/nodes/external-ai-request-response-format-json-schema-pe.png
deleted file mode 100644
index c2694385ba..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-response-format-json-schema-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-response-format-text-ce.png b/images/user-guide/rule-engine-2-0/nodes/external-ai-request-response-format-text-ce.png
deleted file mode 100644
index c1357fceee..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-response-format-text-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-response-format-text-pe.png b/images/user-guide/rule-engine-2-0/nodes/external-ai-request-response-format-text-pe.png
deleted file mode 100644
index 348e360437..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-response-format-text-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-system-prompt.png b/images/user-guide/rule-engine-2-0/nodes/external-ai-request-system-prompt.png
deleted file mode 100644
index 78b6889764..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-system-prompt.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-timeout.png b/images/user-guide/rule-engine-2-0/nodes/external-ai-request-timeout.png
deleted file mode 100644
index 1a1e5f04ad..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-timeout.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-user-prompt.png b/images/user-guide/rule-engine-2-0/nodes/external-ai-request-user-prompt.png
deleted file mode 100644
index 6e05994175..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-ai-request-user-prompt.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/aws-lambda-node-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/aws-lambda-node-2-ce.png
deleted file mode 100644
index 35beb44d22..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/aws-lambda-node-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/aws-lambda-node-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/aws-lambda-node-2-pe.png
deleted file mode 100644
index 067ca31bc6..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/aws-lambda-node-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/aws-sns-node-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/aws-sns-node-2-ce.png
deleted file mode 100644
index fe98630836..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/aws-sns-node-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/aws-sns-node-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/aws-sns-node-2-pe.png
deleted file mode 100644
index 90fecd3880..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/aws-sns-node-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-ai-request.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-ai-request.png
deleted file mode 100644
index 0e29f901ca..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-ai-request.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-aws-lambda-chain.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-aws-lambda-chain.png
deleted file mode 100644
index b22fa5078d..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-aws-lambda-chain.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-aws-lambda.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-aws-lambda.png
deleted file mode 100644
index 6bb12e8652..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-aws-lambda.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-aws-sns.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-aws-sns.png
deleted file mode 100644
index b21c52c348..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-aws-sns.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-aws-sqs-config.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-aws-sqs-config.png
deleted file mode 100644
index e76b6e3e6d..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-aws-sqs-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-aws-sqs.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-aws-sqs.png
deleted file mode 100644
index 63d26711ef..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-aws-sqs.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-iot-hub-config.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-iot-hub-config.png
deleted file mode 100644
index 47e03f20a4..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-iot-hub-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-iot-hub.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-iot-hub.png
deleted file mode 100644
index 26ad407521..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-iot-hub.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-kafka-config-ce.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-kafka-config-ce.png
deleted file mode 100644
index 1f9c3fa2cc..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-kafka-config-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-kafka-config-pe.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-kafka-config-pe.png
deleted file mode 100644
index 85503793e5..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-kafka-config-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-kafka.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-kafka.png
deleted file mode 100644
index cf85e38761..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-kafka.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-mqtt-config.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-mqtt-config.png
deleted file mode 100644
index 9f80c52c99..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-mqtt-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-mqtt.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-mqtt.png
deleted file mode 100644
index 907bf526c7..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-mqtt.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-rabbitmq-config.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-rabbitmq-config.png
deleted file mode 100644
index 6d580227b9..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-rabbitmq-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-rabbitmq.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-rabbitmq.png
deleted file mode 100644
index 17703b48ba..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-rabbitmq.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-rest-api-call-config.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-rest-api-call-config.png
deleted file mode 100644
index b58f37c8a4..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-rest-api-call-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-rest-api-call.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-rest-api-call.png
deleted file mode 100644
index 783a449918..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-rest-api-call.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-email-config.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-email-config.png
deleted file mode 100644
index 498e629b79..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-email-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-email.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-email.png
deleted file mode 100644
index 49d8a8d7f1..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-email.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-notification-config.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-notification-config.png
deleted file mode 100644
index 891190b3a8..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-notification-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-notification.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-notification.png
deleted file mode 100644
index 75bf752442..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-notification.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-sms.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-sms.png
deleted file mode 100644
index 4e832e1703..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-sms.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-to-slack-config.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-to-slack-config.png
deleted file mode 100644
index db17732761..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-to-slack-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-to-slack.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-to-slack.png
deleted file mode 100644
index 9ff396b325..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-send-to-slack.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-twilio-sms-config.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-twilio-sms-config.png
deleted file mode 100644
index f35f01ca9c..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-twilio-sms-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-twilio-sms.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-twilio-sms.png
deleted file mode 100644
index f9b62a8ea1..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/external-twilio-sms.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/gcp-pubsub-node.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/gcp-pubsub-node.png
deleted file mode 100644
index 46a5b4f83d..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/gcp-pubsub-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/external-nodes/twilio-voice-node.png b/images/user-guide/rule-engine-2-0/nodes/external-nodes/twilio-voice-node.png
deleted file mode 100644
index 0116502d5b..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/external-nodes/twilio-voice-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-check-relation-config.png b/images/user-guide/rule-engine-2-0/nodes/filter-check-relation-config.png
deleted file mode 100644
index 16d6cb8625..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-check-relation-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-check-relation.png b/images/user-guide/rule-engine-2-0/nodes/filter-check-relation.png
deleted file mode 100644
index c22c2f066f..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-check-relation.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-gps-geofencing-circle-config.png b/images/user-guide/rule-engine-2-0/nodes/filter-gps-geofencing-circle-config.png
deleted file mode 100644
index 7d80f8e89b..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-gps-geofencing-circle-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-gps-geofencing-default-config.png b/images/user-guide/rule-engine-2-0/nodes/filter-gps-geofencing-default-config.png
deleted file mode 100644
index 118cef5ec6..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-gps-geofencing-default-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-gps-geofencing-perimeter-static-configuration.png b/images/user-guide/rule-engine-2-0/nodes/filter-gps-geofencing-perimeter-static-configuration.png
deleted file mode 100644
index 7ae0f47e20..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-gps-geofencing-perimeter-static-configuration.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-gps-geofencing-polygon-config.png b/images/user-guide/rule-engine-2-0/nodes/filter-gps-geofencing-polygon-config.png
deleted file mode 100644
index 2a6979108b..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-gps-geofencing-polygon-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-gps-geofencing.png b/images/user-guide/rule-engine-2-0/nodes/filter-gps-geofencing.png
deleted file mode 100644
index 2b48204242..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-gps-geofencing.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-message-type-config.png b/images/user-guide/rule-engine-2-0/nodes/filter-message-type-config.png
deleted file mode 100644
index a57b30123c..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-message-type-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-message-type-switch.png b/images/user-guide/rule-engine-2-0/nodes/filter-message-type-switch.png
deleted file mode 100644
index 7aded27b86..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-message-type-switch.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-message-type.png b/images/user-guide/rule-engine-2-0/nodes/filter-message-type.png
deleted file mode 100644
index ec6c9a9377..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-message-type.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/alarm-status-filter-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/alarm-status-filter-2-ce.png
deleted file mode 100644
index 56a3a9eb09..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/alarm-status-filter-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/alarm-status-filter-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/alarm-status-filter-2-pe.png
deleted file mode 100644
index a09527b480..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/alarm-status-filter-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/alarm-status-filter-node.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/alarm-status-filter-node.png
deleted file mode 100644
index 6ea5f63794..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/alarm-status-filter-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/asset-profile-switch-node.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/asset-profile-switch-node.png
deleted file mode 100644
index 3b19ea4653..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/asset-profile-switch-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/check-fields-presence-configuration-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/check-fields-presence-configuration-2-ce.png
deleted file mode 100644
index 7952c7dde3..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/check-fields-presence-configuration-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/check-fields-presence-configuration-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/check-fields-presence-configuration-2-pe.png
deleted file mode 100644
index ccfeff9f5b..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/check-fields-presence-configuration-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/check-fields-presence-node.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/check-fields-presence-node.png
deleted file mode 100644
index daa45ffce6..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/check-fields-presence-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/check-relation-configuration-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/check-relation-configuration-2-ce.png
deleted file mode 100644
index 79333d9245..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/check-relation-configuration-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/check-relation-configuration-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/check-relation-configuration-2-pe.png
deleted file mode 100644
index 7d359063d0..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/check-relation-configuration-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/check-relation-presence-node.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/check-relation-presence-node.png
deleted file mode 100644
index 5410dda98a..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/check-relation-presence-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/entity-type-filter-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/entity-type-filter-2-ce.png
deleted file mode 100644
index 181a83969c..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/entity-type-filter-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/entity-type-filter-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/entity-type-filter-2-pe.png
deleted file mode 100644
index 0e854fae1b..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/entity-type-filter-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/entity-type-filter-node.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/entity-type-filter-node.png
deleted file mode 100644
index 1e2cbde0b4..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/entity-type-filter-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/entity-type-switch-node.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/entity-type-switch-node.png
deleted file mode 100644
index 080491d0f6..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/entity-type-switch-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/filter-switch.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/filter-switch.png
deleted file mode 100644
index 4e0098e753..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/filter-switch.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/gps-geofencing-circle-static-configuration-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/gps-geofencing-circle-static-configuration-2-ce.png
deleted file mode 100644
index 5aa6992abd..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/gps-geofencing-circle-static-configuration-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/gps-geofencing-circle-static-configuration-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/gps-geofencing-circle-static-configuration-2-pe.png
deleted file mode 100644
index d83cd7ea65..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/gps-geofencing-circle-static-configuration-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/gps-geofencing-filter-node.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/gps-geofencing-filter-node.png
deleted file mode 100644
index 1285c075c6..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/gps-geofencing-filter-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/message-type-filter-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/message-type-filter-2-ce.png
deleted file mode 100644
index b0e398836c..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/message-type-filter-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/message-type-filter-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/message-type-filter-2-pe.png
deleted file mode 100644
index 97d33c461b..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/message-type-filter-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/message-type-filter-node.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/message-type-filter-node.png
deleted file mode 100644
index cc9aebc211..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/message-type-filter-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/script-filter-node-configuration-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/script-filter-node-configuration-2-ce.png
deleted file mode 100644
index ed58e8ff06..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/script-filter-node-configuration-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/script-filter-node-configuration-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/script-filter-node-configuration-2-pe.png
deleted file mode 100644
index 18a4d6a064..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/script-filter-node-configuration-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/script-node.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/script-node.png
deleted file mode 100644
index eeb4ed8d83..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/script-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/switch-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/switch-2-ce.png
deleted file mode 100644
index bd7566c6bd..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/switch-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/switch-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/filter-nodes/switch-2-pe.png
deleted file mode 100644
index 73087c156e..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-nodes/switch-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-originator-type-config.png b/images/user-guide/rule-engine-2-0/nodes/filter-originator-type-config.png
deleted file mode 100644
index 5909836290..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-originator-type-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-originator-type-switch.png b/images/user-guide/rule-engine-2-0/nodes/filter-originator-type-switch.png
deleted file mode 100644
index 1c1a5196a1..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-originator-type-switch.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-originator-type.png b/images/user-guide/rule-engine-2-0/nodes/filter-originator-type.png
deleted file mode 100644
index 487d37527f..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-originator-type.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-script-config.png b/images/user-guide/rule-engine-2-0/nodes/filter-script-config.png
deleted file mode 100644
index 559b939381..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-script-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-script.png b/images/user-guide/rule-engine-2-0/nodes/filter-script.png
deleted file mode 100644
index 5908b15b72..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-script.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-switch-config.png b/images/user-guide/rule-engine-2-0/nodes/filter-switch-config.png
deleted file mode 100644
index 21e6de22db..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-switch-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/filter-switch-custom-relation.png b/images/user-guide/rule-engine-2-0/nodes/filter-switch-custom-relation.png
deleted file mode 100644
index fe5cb903ed..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/filter-switch-custom-relation.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/flow-nodes/acknowledge-node.png b/images/user-guide/rule-engine-2-0/nodes/flow-nodes/acknowledge-node.png
deleted file mode 100644
index f2d25c16a3..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/flow-nodes/acknowledge-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/flow-nodes/checkpoint-node.png b/images/user-guide/rule-engine-2-0/nodes/flow-nodes/checkpoint-node.png
deleted file mode 100644
index d786ab1074..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/flow-nodes/checkpoint-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/flow-nodes/output-node.png b/images/user-guide/rule-engine-2-0/nodes/flow-nodes/output-node.png
deleted file mode 100644
index fade743e05..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/flow-nodes/output-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/flow-nodes/rule-chain-node-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/flow-nodes/rule-chain-node-2-ce.png
deleted file mode 100644
index 107b45bc59..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/flow-nodes/rule-chain-node-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/flow-nodes/rule-chain-node-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/flow-nodes/rule-chain-node-2-pe.png
deleted file mode 100644
index 1759f2df4e..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/flow-nodes/rule-chain-node-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/flow-nodes/rule-chain-node.png b/images/user-guide/rule-engine-2-0/nodes/flow-nodes/rule-chain-node.png
deleted file mode 100644
index 096cb9a44e..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/flow-nodes/rule-chain-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/gps-circle-configuration-1.png b/images/user-guide/rule-engine-2-0/nodes/gps-circle-configuration-1.png
deleted file mode 100644
index 6f961c7127..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/gps-circle-configuration-1.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/gps-geofencing-filter-dynamic-configuration.png b/images/user-guide/rule-engine-2-0/nodes/gps-geofencing-filter-dynamic-configuration.png
deleted file mode 100644
index 78a198b3d2..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/gps-geofencing-filter-dynamic-configuration.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/gps-geofencing-filter-dynamic-example.png b/images/user-guide/rule-engine-2-0/nodes/gps-geofencing-filter-dynamic-example.png
deleted file mode 100644
index 5466c7ae9e..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/gps-geofencing-filter-dynamic-example.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/gps-geofencing-filter-farm-attribute.png b/images/user-guide/rule-engine-2-0/nodes/gps-geofencing-filter-farm-attribute.png
deleted file mode 100644
index 5d4e772b53..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/gps-geofencing-filter-farm-attribute.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/gps-geofencing-filter-farm-relation.png b/images/user-guide/rule-engine-2-0/nodes/gps-geofencing-filter-farm-relation.png
deleted file mode 100644
index 09889ec3c3..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/gps-geofencing-filter-farm-relation.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/message-count-1.png b/images/user-guide/rule-engine-2-0/nodes/message-count-1.png
deleted file mode 100644
index bd6ae8be34..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/message-count-1.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/message-count-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/message-count-2-ce.png
deleted file mode 100644
index 0eaeb72a34..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/message-count-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/message-count-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/message-count-2-pe.png
deleted file mode 100644
index ae3d4dd7bb..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/message-count-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/message-type-switch-chain.png b/images/user-guide/rule-engine-2-0/nodes/message-type-switch-chain.png
deleted file mode 100644
index 7819078a25..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/message-type-switch-chain.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/rule-chain-node-inner.png b/images/user-guide/rule-engine-2-0/nodes/rule-chain-node-inner.png
deleted file mode 100644
index f93e447638..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/rule-chain-node-inner.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/rule-chain-node-main.png b/images/user-guide/rule-engine-2-0/nodes/rule-chain-node-main.png
deleted file mode 100644
index bde1437f41..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/rule-chain-node-main.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/copy-key-value-pairs-node-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/copy-key-value-pairs-node-2-ce.png
deleted file mode 100644
index 32cf4e26ae..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/copy-key-value-pairs-node-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/copy-key-value-pairs-node-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/copy-key-value-pairs-node-2-pe.png
deleted file mode 100644
index 23c33b60e2..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/copy-key-value-pairs-node-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/copy-key-value-pairs-node.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/copy-key-value-pairs-node.png
deleted file mode 100644
index 5d71612163..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/copy-key-value-pairs-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/deduplication-node-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/deduplication-node-2-ce.png
deleted file mode 100644
index c8fdddf3bd..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/deduplication-node-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/deduplication-node-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/deduplication-node-2-pe.png
deleted file mode 100644
index 32b408fa6d..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/deduplication-node-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/delete-key-value-pairs-node-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/delete-key-value-pairs-node-2-ce.png
deleted file mode 100644
index 99b9dc1312..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/delete-key-value-pairs-node-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/delete-key-value-pairs-node-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/delete-key-value-pairs-node-2-pe.png
deleted file mode 100644
index b0552251b7..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/delete-key-value-pairs-node-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/delete-key-value-pairs-node.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/delete-key-value-pairs-node.png
deleted file mode 100644
index 4f3c92f9b7..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/delete-key-value-pairs-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/duplicate-to-group-by-name-node-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/duplicate-to-group-by-name-node-2-pe.png
deleted file mode 100644
index 51c44c6e8d..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/duplicate-to-group-by-name-node-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/duplicate-to-group-by-name-node.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/duplicate-to-group-by-name-node.png
deleted file mode 100644
index adad5a75ca..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/duplicate-to-group-by-name-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/json-path-node-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/json-path-node-2-ce.png
deleted file mode 100644
index c8a2b12e2f..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/json-path-node-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/json-path-node-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/json-path-node-2-pe.png
deleted file mode 100644
index 7af635429e..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/json-path-node-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/json-path-node.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/json-path-node.png
deleted file mode 100644
index 05291a661b..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/json-path-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/rename-keys-node-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/rename-keys-node-2-ce.png
deleted file mode 100644
index b580dd4214..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/rename-keys-node-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/rename-keys-node-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/rename-keys-node-2-pe.png
deleted file mode 100644
index 188aac88a8..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/rename-keys-node-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/rename-keys-node.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/rename-keys-node.png
deleted file mode 100644
index de4a961256..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/rename-keys-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/split-array-msg-node-2-ce.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/split-array-msg-node-2-ce.png
deleted file mode 100644
index afd1f35206..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/split-array-msg-node-2-ce.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/split-array-msg-node-2-pe.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/split-array-msg-node-2-pe.png
deleted file mode 100644
index 8e868552ad..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/split-array-msg-node-2-pe.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/split-array-msg-node.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/split-array-msg-node.png
deleted file mode 100644
index b0e5c953a8..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/split-array-msg-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/transformation-change-originator-config.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/transformation-change-originator-config.png
deleted file mode 100644
index 6621bf41e0..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/transformation-change-originator-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/transformation-change-originator.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/transformation-change-originator.png
deleted file mode 100644
index 234bb02fe3..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/transformation-change-originator.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/transformation-script-config.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/transformation-script-config.png
deleted file mode 100644
index 78e827d80a..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/transformation-script-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/transformation-script.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/transformation-script.png
deleted file mode 100644
index 8d20b5ed50..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/transformation-script.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/transformation-to-email-config.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/transformation-to-email-config.png
deleted file mode 100644
index 9afcfb0a36..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/transformation-to-email-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/transformation-to-email.png b/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/transformation-to-email.png
deleted file mode 100644
index cbb1010ba5..0000000000
Binary files a/images/user-guide/rule-engine-2-0/nodes/transformation-nodes/transformation-to-email.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/pe/nodes/action-add-to-group-config.png b/images/user-guide/rule-engine-2-0/pe/nodes/action-add-to-group-config.png
deleted file mode 100644
index 6c2c33225f..0000000000
Binary files a/images/user-guide/rule-engine-2-0/pe/nodes/action-add-to-group-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/pe/nodes/action-add-to-group.png b/images/user-guide/rule-engine-2-0/pe/nodes/action-add-to-group.png
deleted file mode 100644
index f7028df2aa..0000000000
Binary files a/images/user-guide/rule-engine-2-0/pe/nodes/action-add-to-group.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/pe/nodes/action-change-owner-node-customer-config.png b/images/user-guide/rule-engine-2-0/pe/nodes/action-change-owner-node-customer-config.png
deleted file mode 100644
index 7dbd06c84b..0000000000
Binary files a/images/user-guide/rule-engine-2-0/pe/nodes/action-change-owner-node-customer-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/pe/nodes/action-change-owner-node-tenent-config.png b/images/user-guide/rule-engine-2-0/pe/nodes/action-change-owner-node-tenent-config.png
deleted file mode 100644
index 8ce3b1bfe8..0000000000
Binary files a/images/user-guide/rule-engine-2-0/pe/nodes/action-change-owner-node-tenent-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/pe/nodes/action-change-owner-node.png b/images/user-guide/rule-engine-2-0/pe/nodes/action-change-owner-node.png
deleted file mode 100644
index 5b1d5681a0..0000000000
Binary files a/images/user-guide/rule-engine-2-0/pe/nodes/action-change-owner-node.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/pe/nodes/action-generate-report-config.png b/images/user-guide/rule-engine-2-0/pe/nodes/action-generate-report-config.png
deleted file mode 100644
index c4e489e1f8..0000000000
Binary files a/images/user-guide/rule-engine-2-0/pe/nodes/action-generate-report-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/pe/nodes/action-generate-report.png b/images/user-guide/rule-engine-2-0/pe/nodes/action-generate-report.png
deleted file mode 100644
index 39be796bad..0000000000
Binary files a/images/user-guide/rule-engine-2-0/pe/nodes/action-generate-report.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/pe/nodes/action-integration-downlink-config.png b/images/user-guide/rule-engine-2-0/pe/nodes/action-integration-downlink-config.png
deleted file mode 100644
index 2eb6ed28a6..0000000000
Binary files a/images/user-guide/rule-engine-2-0/pe/nodes/action-integration-downlink-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/pe/nodes/action-integration-downlink.png b/images/user-guide/rule-engine-2-0/pe/nodes/action-integration-downlink.png
deleted file mode 100644
index e1a0fb1e38..0000000000
Binary files a/images/user-guide/rule-engine-2-0/pe/nodes/action-integration-downlink.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/pe/nodes/action-remove-from-group-config.png b/images/user-guide/rule-engine-2-0/pe/nodes/action-remove-from-group-config.png
deleted file mode 100644
index 597edfa5d8..0000000000
Binary files a/images/user-guide/rule-engine-2-0/pe/nodes/action-remove-from-group-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/pe/nodes/action-remove-from-group.png b/images/user-guide/rule-engine-2-0/pe/nodes/action-remove-from-group.png
deleted file mode 100644
index a6b554730c..0000000000
Binary files a/images/user-guide/rule-engine-2-0/pe/nodes/action-remove-from-group.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/pe/nodes/action-rest-call-reply-config.png b/images/user-guide/rule-engine-2-0/pe/nodes/action-rest-call-reply-config.png
deleted file mode 100644
index 0d32e3fee3..0000000000
Binary files a/images/user-guide/rule-engine-2-0/pe/nodes/action-rest-call-reply-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/pe/nodes/action-rest-call-reply.png b/images/user-guide/rule-engine-2-0/pe/nodes/action-rest-call-reply.png
deleted file mode 100644
index c838039791..0000000000
Binary files a/images/user-guide/rule-engine-2-0/pe/nodes/action-rest-call-reply.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/pe/nodes/transformation-duplicate-to-group-config.png b/images/user-guide/rule-engine-2-0/pe/nodes/transformation-duplicate-to-group-config.png
deleted file mode 100644
index 87ad179872..0000000000
Binary files a/images/user-guide/rule-engine-2-0/pe/nodes/transformation-duplicate-to-group-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/pe/nodes/transformation-duplicate-to-group.png b/images/user-guide/rule-engine-2-0/pe/nodes/transformation-duplicate-to-group.png
deleted file mode 100644
index 362c16eddd..0000000000
Binary files a/images/user-guide/rule-engine-2-0/pe/nodes/transformation-duplicate-to-group.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/pe/nodes/transformation-duplicate-to-related-config.png b/images/user-guide/rule-engine-2-0/pe/nodes/transformation-duplicate-to-related-config.png
deleted file mode 100644
index d1bfccff80..0000000000
Binary files a/images/user-guide/rule-engine-2-0/pe/nodes/transformation-duplicate-to-related-config.png and /dev/null differ
diff --git a/images/user-guide/rule-engine-2-0/pe/nodes/transformation-duplicate-to-related.png b/images/user-guide/rule-engine-2-0/pe/nodes/transformation-duplicate-to-related.png
deleted file mode 100644
index db01e0e7cf..0000000000
Binary files a/images/user-guide/rule-engine-2-0/pe/nodes/transformation-duplicate-to-related.png and /dev/null differ