> For the complete documentation index, see [llms.txt](https://developer.emporix.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.emporix.io/vsm-guides/value-stream-designer/process-components/process-steps.md).

# Process steps

Learn about process steps—scenarios, subflows, cloud functions, and AI agents.

Process steps are Make scenarios, other value streams, cloud functions, or AI Agents that can be combined to create a single end-to-end automated process.

## Scenarios

The first thing you can choose as a process step is a **Scenario** that represents an action to happen. Scenarios are configured for your tenant, and available scenarios appear in the dropdown list. When a new scenario is created for the tenant, the list updates automatically. Select an existing scenario from the dropdown, click **Go to scenarios** to open it in Make, or click **Create new scenario** to create one in Make and add it to the step. For example, when a new customer is created you want to welcome them with an email with some first account information—in that case, you use a scenario built for your tenant. You can choose a fixed scenario or a configurable one where you can apply additional settings.

### Fixed scenario

You can choose a predefined scenario that completes the action you want. For example, sending a welcome email. Select the scenario from the dropdown, or use **Go to scenarios** or **Create new scenario** to manage scenarios in Make.

<figure><img src="https://1024162941-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrSc4haeKWrTrOPHzdrMO%2Fuploads%2Fgit-blob-4885ef0f3e7dffee2f9537882aa41a162699bdd2%2Fvsm_fixed_scenario.png?alt=media" alt="Step configuration with the Fixed scenario tab selected and a scenario chosen from the dropdown"><figcaption><p>Fixed scenario step configuration</p></figcaption></figure>

### Configurable scenario

With the configurable option, you still choose a scenario that completes the action, but you can also configure additional parameters. For example, a mail template or a group name. The scenario is selected from a closed list that stays fixed, while its available parameters can be configured. Select the scenario from the dropdown.

Examples:

* Sending a welcome email with a template adjusted to B2B or B2C customers.

<figure><img src="https://1024162941-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrSc4haeKWrTrOPHzdrMO%2Fuploads%2Fgit-blob-1f85571c27aeb5e871f5b56b83ed75e024b33ba7%2Fvsm_configurable_scenario.png?alt=media" alt="Step configuration with the Configurable scenario tab selected and additional parameter fields shown"><figcaption><p>Configurable scenario step with additional settings</p></figcaption></figure>

* Retrieving users belonging to a specified group.

<figure><img src="https://1024162941-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrSc4haeKWrTrOPHzdrMO%2Fuploads%2Fgit-blob-c0e1073444ca4dba00f772709e13ddbd3064eced%2Fstep_user_groups.png?alt=media" alt="Configurable scenario step with group name selected from the dropdown"><figcaption><p>Configurable scenario with group name parameter</p></figcaption></figure>

### Scenario naming best practices

When multiple scenarios have similar names in Make, use a consistent naming convention so you can identify the correct one without opening each scenario.

Use this as a baseline:

* Include the value stream name first, so related scenarios are grouped together.
* Include the step purpose, so the scenario role is clear.
* Include the trigger or key event, so the invocation context is visible.
* Keep names stable and avoid generic names like `Send email` or `Validation`.

{% hint style="info" %}
If you import or copy value streams, duplicated scenario names can temporarily appear. You can identify the correct scenario by checking its folder in Make, where scenarios are grouped by the related value stream.
{% endhint %}

## Subflows

Another possibility as a process step is **Subflow**. When you use subflows, it basically means that you are embedding a different value stream into the current one. What you see in the drop-down list are the value streams already built in your tenant. An example of a subflow can be sending a coupon together with the welcome email for your new customers.

<figure><img src="https://1024162941-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrSc4haeKWrTrOPHzdrMO%2Fuploads%2Fgit-blob-11cb83fa6769a36cc37dee6913a12ad5d80c5e87%2Fvsm_subflow.png?alt=media" alt="Step configuration with the Subflows tab selected and a subflow chosen from the dropdown"><figcaption><p>Subflow step configuration</p></figcaption></figure>

## Cloud functions

A cloud function is a small piece of code that runs in the cloud without requiring server management. It is designed to execute specific tasks in response to triggers like HTTP requests, file uploads, or database changes. You can use cloud functions to process real-time data, automate workflows, handle API requests, or respond to IoT events.

When you use a cloud function as a process step, the value stream passes data from the process context to the selected function and writes the result back to the process context. You may need authentication between VSM and the cloud function service.

You can host the cloud functions in Emporix or use one of the supported providers – Azure Functions, AWS Lambda, and Google Cloud Functions.

In the **Cloud Functions** tab, you can choose an already enabled cloud function or create a connection to a new one. Select a function from **Select cloud function**.

<figure><img src="https://1024162941-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrSc4haeKWrTrOPHzdrMO%2Fuploads%2Fgit-blob-18801d779a72084dea37a033896e25a7f7ffea8e%2Fcf_dropdown.png?alt=media" alt="Step configuration with the Cloud Functions tab selected and a function chosen from the Emporix-hosted functions list"><figcaption><p>Selecting a cloud function from the drop-down</p></figcaption></figure>

{% hint style="info" %}
Emporix-hosted cloud functions do not require credentials. Select the function from **Select cloud function** and define the payload with a JQ expression. To host a function in Emporix, see [Hosting](/user-guides/management-dashboard/administration/hosting.md) in Management Dashboard.
{% endhint %}

To create a connection, select **New**. This opens the **Create cloud function** window, where you provide the function configuration. To change an existing connection, select **Edit**.

<figure><img src="https://1024162941-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrSc4haeKWrTrOPHzdrMO%2Fuploads%2Fgit-blob-4c71ab871f323b83d1595aca567a9d3b3e8c59da%2Fcf_creating.png?alt=media" alt="Create cloud function window with group, display name, HTTP method, invocation URL, cloud provider, and authentication mode fields" width="400"><figcaption><p>Create cloud function configuration</p></figcaption></figure>

Provide the following setup for a cloud function connection:

* **Group** – Group that the function belongs to, for example Azure
* **Display name** – Cloud function name
* **HTTP method** – GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS
* **Invocation URL** – URL used to call the cloud function
* **Cloud provider** – Azure, AWS, GCP, or Emporix. The providers offer the infrastructure and services that enable the function to execute in response to specific events or requests. You must select one of them to have the relevant authentication options.
* **Authentication mode** – You can create cloud functions with or without authentication. If you select Azure as the cloud provider, you can choose between the following authentications:

  * **None**
  * **Basic** – a username and password are used when making a request to a server; it is part of the HTTP protocol.
  * **OAuth2** – allows third-party applications to have limited access to the data, through an authorization server.
  * **Function Key** – a specific authentication mode used only in Microsoft Azure Functions. Access to an Azure Function is secured using a shared key, known as a function key. If you make a request to the function, you must include this key as part of the request to authenticate and gain access.

  The **Authentication mode** options correspond to the cloud provider configuration.

<figure><img src="https://1024162941-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrSc4haeKWrTrOPHzdrMO%2Fuploads%2Fgit-blob-ab017fe6c6491edc68a1e44945034e57323a7cc8%2Fcf_example.png?alt=media" alt="Edit cloud function window for an Emporix-hosted function with group, display name, HTTP method, invocation URL, and cloud provider set to Emporix"><figcaption><p>Edit cloud function with Emporix as the cloud provider</p></figcaption></figure>

Cloud functions allow for dynamic, context-aware processing where the body of the function call is determined by applying a JQ filter to the context. The filter result includes a `body` key, which becomes the function payload. Other keys map to replacement variables and can replace placeholders in the cloud function definition.

Replacement variables are defined in the function URL using the syntax `{{.varName}}`. When the JQ filter is applied, any value under the key `varName` is substituted into the corresponding placeholder in the URL. This enables flexible customization of both the function payload and its endpoint through context-specific values.

In the step sidebar, use **Cloud Function Payload (JQ Expression)** to define the payload sent to the function.

<figure><img src="https://1024162941-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrSc4haeKWrTrOPHzdrMO%2Fuploads%2Fgit-blob-c8f44e63ef85c1973c6bbc7f669ad1142da81aa4%2Fcf_sidebar.png?alt=media" alt="Step sidebar with a cloud function selected and a JQ expression in the Cloud Function Payload field"><figcaption><p>Cloud function step with JQ payload</p></figcaption></figure>

{% hint style="info" %}
To test JQ expressions, use [JQ Playground](https://www.devtoolsdaily.com/jq_playground/).
{% endhint %}

## AI Agents

VSM includes several **Predefined AI Agent** templates available out-of-the-box. These agents appear in the drop-down list and can be used directly in your processes.

* **Agentic Filters Creator Assistant** - The agent helps you create and refine [step and trigger filters](/vsm-guides/value-stream-designer/process-components/conditions.md#step-filters) for value streams. Use it to define when a trigger or process step should run by building AND/OR conditions on event types, so steps run only when the configured criteria are met.
* **Anti-Fraud Agent** - The agent analyzes customer return histories to detect and assess potential fraud risks in B2B cases. Running in the background, it acts as a fraud returns analyst that provides risk scores and flags suspicious activity for proactive intervention. By automating fraud detection, it enhances security, increases efficiency, and helps maintain a trustworthy business environment.
* **Complaint Agent** - The agent automates key aspects of customer complaint handling to improve efficiency and reduce manual work. It's designed to streamline complaint management, helps businesses save time, scale operations easily, and deliver a more customer friendly experience. As a prebuilt solution, it addresses common challenges in complaint processing.
* **Frontend Agent** - The agent connects to your commerce frontend to help customers throughout their shopping journey. It understands natural language queries and requests, operates in the authenticated customer context, and can assist with product discovery, cart and checkout, orders, quotes, and returns. When connected to RAG AI tools, it supports semantic product search without manual filters or exact keywords. See the [Frontend Agent](https://app.gitbook.com/s/8GgoeZEZYjZrpjOU6w52/agentic-intelligence/agent-library/frontend-agent) documentation for configuration details.
* **Support Agent** - The agent enhances internal communication and operational efficiency by integrating directly into collaboration tools such as Slack. It allows team members to interact with the Emporix system from within their workspace by asking questions, retrieving case details, and performing actions without switching applications. Acting as a bridge between users, Emporix agents, it improves workflows, reduces context switching, and promotes easy collaboration.
* **Translation Agent** - The agent automates the translation of data within the Emporix system, helping you with multilingual workflows and reducing manual effort. Based on this predefined agent template, you can create custom agents to handle translations for products, categories, or custom data fields across different languages. The agent can be triggered by API and integrated into existing workflows, enabling flexible automation—from translation review processes to fully automated content updates.

<figure><img src="https://1024162941-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrSc4haeKWrTrOPHzdrMO%2Fuploads%2Fgit-blob-1d1d115d9cc7d0fedd3d216e0e52611195ea96d0%2Fpredefined_agents.png?alt=media" alt="" width="300"><figcaption><p>Predefined AI agents available in the drop-down list</p></figcaption></figure>

{% hint style="info" %}
To learn more about the AI in Emporix solutions and the way the agents work, see the [ACI](https://app.gitbook.com/s/8GgoeZEZYjZrpjOU6w52/agentic-intelligence/agentic) documentation.
{% endhint %}

### Agent customization

Each predefined agent is a template that comes with a built-in name, description, and prompt. When you add a predefined agent to a process, the template is copied and becomes a separate agent instance. Once you save it, the instance is no longer a shared template, it becomes your individual agent.

For example, if you use the Complaint template in three different value streams, the system creates three independent instances of the Complaint Agent. If you reopen the step, you can see that it now refers to your agent instance, not the original template.

When you create an agent, you can edit its name, description and the prompt.

* **Change the name** - make sure your agent is easily recognizable and assign unique names to your agents, this makes it easier to identify them later.
* **Add the description** - it helps to distinguish the agents if they work around one topic and names become similar.
* **Review the prompt** - check if the prompt corresponds to your required agent action.

{% hint style="danger" %}
You can modify the prompt if needed, but be aware that it defines how the agent operates. Changing it may cause this instance of the agent to behave unexpectedly or stop working as intended.
{% endhint %}

### Customization example

You want to localize your data and have fields translated to Polish.

{% stepper %}
{% step %}

#### Add the translation agent to your process

Choose to add a new step in your process, go to AI Agents and select the Translation Agent.
{% endstep %}

{% step %}

#### Modify the name and description

Add a unique name for the agent and a description, which helps in recognizing the agent in future. For example:

* Name: Translation agent - PL
* Description: Translates specified localized fields to Polish.
  {% endstep %}

{% step %}

#### Modify the prompt

In this case, the default agent prompt translates existing language to German. To localize your data, adjust the prompt to the target language.
{% endstep %}
{% endstepper %}

To learn more about the specific agents, see the [AI Agent Library](https://app.gitbook.com/s/8GgoeZEZYjZrpjOU6w52/agentic-intelligence/agent-library) documentation.

All the agent instances you create and save are visible in **My Agents** drop-down list, across all your processes.

{% hint style="warning" %}
After customizing an agent, save the agent configuration and save the value stream. When an agent copy is created and appears in **My Agents**, it is inactive by default. To activate it, go to **Management Dashboard** -> **Agentic Intelligence** and activate the agent there.

Until the agent is activated, it appears grayed out in the list and cannot be selected.

<img src="https://1024162941-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrSc4haeKWrTrOPHzdrMO%2Fuploads%2Fgit-blob-2c08b6bf33e42cb136cae69cfaccb9d29df2a9bf%2Finactive_agent.png?alt=media" alt="Inactive agent copy visible in the My Agents list" data-size="original">
{% endhint %}

<figure><img src="https://1024162941-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrSc4haeKWrTrOPHzdrMO%2Fuploads%2Fgit-blob-8b617172e70b2372978c176a0299d2d621598480%2Fmy_agents.png?alt=media" alt="" width="300"><figcaption><p>My Agents drop-down list showing created agent instances</p></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://developer.emporix.io/vsm-guides/value-stream-designer/process-components/process-steps.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
