This project is not covered by Drupal’s security advisory policy.

Project: SIS Automation on Drupal.org

Package: SIS

Drupal: 10.3+ / 11.x | PHP: 8.1+

A visual workflow automation platform for Drupal. Build automations with a drag-and-drop editor, integrate 170+ nodes (APIs, AI, Drupal entities), and run workflows via webhooks, cron, or events—with encrypted credentials and enterprise-style security.

Think of it as n8n for Drupal — the same kind of visual, node-based workflow automation you get with n8n, but built into Drupal with native entity support, Drupal permissions, and optional remote Drupal control. If you use n8n, Zapier, or similar tools, you can use SIS Automation the same way: drag nodes onto a canvas, connect them, and automate tasks without writing code.

Table of contents

  1. Overview
  2. Features and how to use
  3. Requirements and dependencies
  4. Installation
  5. Configuration
  6. Concepts
  7. Node categories and types
  8. Expressions
  9. Remote Drupal sites
  10. Triggers
  11. API usage (for developers)
  12. Permissions
  13. Extending the module
  14. Security
  15. Troubleshooting
  16. Contributing and support
  17. License

1. Overview

SIS Automation adds a visual workflow builder to Drupal — like n8n, you create workflows from nodes (triggers, actions, logic, integrations), connect them on a canvas, and run them via triggers (webhook, cron, schedule, Drupal events, or manual). Data flows between nodes; expressions ({{ }}) let you reference previous outputs and context, similar to n8n's expression syntax.

Highlights:

  • Visual editor — Drag-and-drop workflow canvas with real-time execution logs.
  • 170+ nodes — Drupal (entities, config, modules, themes, site builder), AI/LLM (OpenAI, Anthropic, Groq, Mistral, Gemini, Perplexity), Google/Microsoft, e‑commerce (Shopify, Stripe), CRM (HubSpot), communication (Slack, Discord, Telegram, etc.), logic (If/Else, Loop, Switch), data (JSON, CSV, HTTP), and more.
  • Drupal-native — Create/update/delete entities, manage content types, fields, taxonomy, media, users, blocks, menus; optional remote Drupal control via the companion module SIS Drupal Client.
  • Security — Encrypted credentials, audit logging, optional code-node sandbox, webhook signature/rate limiting.
  • Reliability — Queue-based execution, retries, cost tracking, OpenTelemetry, optional Redis.

2. Features and how to use

This section lists main features and how to use them in the UI.

Visual workflow builder (like n8n)

What it is: A canvas where you add nodes and connect them with lines. Data flows from trigger to nodes in order.

How to use: Go to Configuration → SIS → WorkflowsAdd workflow. Open the editor, drag a Trigger (e.g. Webhook or Manual) onto the canvas, then drag action nodes (e.g. HTTP Request, Drupal Entity, If/Else). Connect the trigger output to the first node, and that node to the next. Configure each node by clicking it and filling the form. Save and set status to Active to run.

Triggers

What they are: How a workflow is started (webhook, cron, schedule, Drupal event, or manual).

How to use: Add one trigger per workflow. For Webhook: add the Webhook trigger node, save the workflow, then copy the webhook URL from the node or from the workflow's webhook list — call that URL (e.g. from another app) to start a run. For Manual: use "Run" in the workflow list or editor. For Cron or Schedule: configure the trigger node with the desired timing; ensure Drupal cron runs (for cron trigger).

Credentials

What they are: Stored, encrypted API keys and secrets used by nodes (e.g. for Google, Slack, or a remote Drupal site).

How to use: Go to Credentials (in the SIS Automation menu). Add a credential, choose the type (e.g. Drupal Remote, Google, Slack), fill in the required fields (URL, API key, etc.). In a workflow node that needs that service, select this credential (e.g. by Credential or Site ID).

Expressions

What they are: {{ }} placeholders that pull in data from the current run (e.g. webhook body, previous node output).

How to use: In any node field that supports expressions, type e.g. {{ input.body.title }} to use the title from the trigger/previous node. Use Debug node to see the shape of input and context while building.

Drupal operations (this site)

What they are: Nodes that create/update/delete entities, manage content types, taxonomy, media, users, etc. on the same Drupal site.

How to use: Add a Drupal node (e.g. Drupal Entity, Content Type, Taxonomy). Configure entity type, bundle, and field mapping; use expressions like {{ input.body.title }} for values. No credential needed for the current site.

Remote Drupal sites

What they are: Controlling another Drupal site (or the same site via HTTP) from a workflow.

How to use: On the remote site, install SIS Drupal Client, enable it, and set an API key at /admin/config/services/sis-drupal-client. On this site, create a Drupal Remote credential with that site's URL and the same API key. In workflow nodes (Drupal Remote Site, Drupal JSON:API, Site Builder, etc.), set Site ID to that credential.

Templates and examples

What they are: Pre-built or shared workflows you can install and adapt.

How to use: Use the template library (if available in your menu) to browse and install a template. After install, open the new workflow, adjust nodes and credentials, then save and activate.

Execution logs and debugging

What they are: A record of each workflow run: which nodes ran, with what input/output and errors.

How to use: Go to Executions (or the execution list in the SIS menu). Open a run to see the log per node. Use the Debug node in the workflow to print data at a specific step. Fix configuration or expressions based on the logged data.

3. Requirements and dependencies

Requirement Version
Drupal ^10.3 || ^11
PHP 8.1+
Required modules user, field, options, serialization, rest, jsonapi
Required contrib Entity Share, Entity Share Client

Optional:

  • Redis — For queue and caching (recommended for production).
  • Node.js / Python — Only if using Code node with JavaScript or Python.
  • SIS Drupal Client — Install on remote Drupal sites you want to control from workflows (same or different server).

4. Installation

From Drupal.org (Composer)

composer require drupal/sis_automation
drush en sis_automation -y
drush cr

Manual

  1. Place the module in modules/custom/sis_automation (or install via Composer).
  2. Enable: Extend → enable SIS Automation, or run: drush en sis_automation -y
  3. Configure: ConfigurationSIS AutomationSettings (/admin/config/sis/settings).

First steps

  1. Go to ConfigurationSISWorkflows (/admin/config/sis/workflows).
  2. Click Add workflow.
  3. Add a trigger (e.g. Webhook or Manual), add an action node (e.g. HTTP Request or Drupal Entity), connect them, configure, save, and set status to Active.

5. Configuration

Path: /admin/config/sis/settings (configure: sis_automation.settings)

Typical sections:

  • Execution — Timeouts, max concurrent runs, retries, how long to keep execution logs.
  • Security — Enable/disable Code nodes (PHP/JS/Python), sandbox memory/time limits.
  • Webhooks — Rate limits, signature requirement.
  • Queue — Use Drupal queue (or Redis when available) for async execution.

Configure cleanup, logging, and feature toggles as needed for your environment.

6. Concepts

Concept Description
Workflow A graph of nodes and connections, stored as a config entity. Has status (draft/active) and versioning.
Node A single step: trigger, action, or logic. Each node has an ID, label, category, config schema, and execute() behavior.
Trigger Entry point: Webhook, Cron, Schedule, Drupal entity event, or Manual. Starts a run and provides initial input / context.
Execution One run of a workflow. Logs node order, outputs, errors, and duration. View at /admin/config/sis/executions (or equivalent).
Credentials Stored, encrypted API keys/tokens. Nodes reference them by credential ID (e.g. site_id for Drupal remotes).
Expressions {{ ... }} syntax to read/write data from input, context, or previous node output (e.g. {{ input.body.title }}).

Data flow: Trigger output → first action(s) → next nodes. Each node receives $input (from previous node or trigger), $parameters (node config), and $context (workflow/run context). Node returns an array; typically success (bool) and error (string on failure).

7. Node categories and types

Nodes are grouped by category in the editor. Main categories:

Category Examples
Triggers Webhook, Cron, Schedule, Manual, Drupal entity events
Drupal Remote Site, JSON:API, REST, Entity CRUD, Content Type, Field, Taxonomy, Site Builder, Module, Theme, Block, Menu, Config, etc.
AI OpenAI, Anthropic, Groq, Mistral, Perplexity, Gemini, AI Agent, Data Extraction
Core / HTTP HTTP Request, Respond to Webhook, Manual Input
Flow If/Else, Switch, Loop, Merge, Split in Batches
Data Read JSON/CSV/XML, JSON Transform, Filter, Aggregate, Sort, Merge
Utility Code, Debug, Delay, Wait, Set Variable, Sticky Note
Integrations Google (Sheets, Drive, Gmail, Calendar, Meet, Chat), Microsoft (Outlook, Teams), Slack, Discord, Telegram, HubSpot, Stripe, Shopify, Jira, GitHub, Notion, Airtable, MCP Tools, etc.
E‑commerce Shopify, Stripe
CRM HubSpot, Salesforce, Pipedrive
DevOps / CI GitHub Actions, GitLab CI, Jenkins, CircleCI, Travis CI, Azure DevOps

Node contract: Each action node implements execute(array $input, array $parameters, array $context): array. Return ['success' => true, ...] or ['success' => false, 'error' => '...'] so the executor can branch and log correctly.

8. Expressions

Use expressions in node parameters to use dynamic data.

Syntax: {{ expression }}

Examples:

  • Input (e.g. from webhook body or previous node): {{ input.body.title }}, {{ input.query.id }}, {{ input.items }}
  • Context (workflow / run): {{ context.workflow_id }}, {{ context.trigger_type }}
  • Previous node output (if the UI exposes node IDs): {{ node_1.output.data }}
  • Simple operations / filters (if supported): {{ uppercase(input.name) }}, {{ json_encode(input.data) }}, {{ date_format('Y-m-d', input.timestamp) }}

Expressions are evaluated by ExpressionEvaluatorService; supported functions and format depend on implementation. Use the Debug node to inspect input and context during development.

9. Remote Drupal sites

To control another Drupal site (or the same site over HTTP), use:

  1. SIS Drupal Client — Install and enable on the remote site. Configure an API key and (optionally) rate limiting / IP whitelist at /admin/config/services/sis-drupal-client.
  2. Credentials on this site — In SIS Automation, create a Drupal Remote credential with: Base URL of the remote site; API key (same as on the client); Auth method: API key (recommended), or basic auth / OAuth if supported.
  3. Nodes — Use Drupal Remote Site, Drupal JSON:API, Drupal REST, Drupal Entity, Site Builder, or other Drupal nodes; set Site ID to the credential ID.

The automation site uses Entity Share Client's Remote entity and remote manager to perform HTTP requests with the stored credentials. All operations go through the client's API (/api/sis-drupal/v1/{resource}/{operation} or JSON:API/REST proxy routes).

10. Triggers

Trigger Description
Webhook HTTP endpoint for this workflow. Use the generated URL to start runs (e.g. from external systems).
Cron Run on Drupal cron.
Schedule Run on a time-based schedule.
Drupal events Start on entity create/update/delete (configurable entity types).
Manual Run from the UI or via API.

Only one trigger is active per workflow run; the trigger provides the initial input and fills context (e.g. webhook_context for webhooks).

11. API usage (for developers)

Most users run workflows from the UI (manual trigger, webhook URL, or cron/schedule). The REST API is for developers who need to start workflows from their own code, external apps, or scripts (e.g. a custom module or a third-party service).

Why the API exists: So you can trigger a workflow with custom input (e.g. title, body, or any JSON) from PHP, JavaScript, or any HTTP client, and optionally fetch execution results.

Execute a workflow — Start a run and pass input data (requires permission to execute workflows):

POST /api/sis/v1/workflows/{sis_workflow}/execute
Content-Type: application/json

{
  "input": {
    "title": "Example",
    "body": "Content"
  }
}

Replace {sis_workflow} with the workflow ID (e.g. UUID or machine name, depending on your setup). The response includes execution details. Other routes (list workflows, get execution, async execute, etc.) are defined in sis_automation.routing.yml; use them when you need programmatic access.

12. Permissions

Defined in sis_automation.permissions.yml. Summary:

Permission Purpose
Administer SIS Automation Full config and all workflows.
Create / Edit / Delete / View workflows Own vs any, as defined.
Execute workflows Trigger runs.
View own / any execution Access execution logs.
Manage own / any credential Create/edit/delete credentials.
Use credentials Use credentials in workflows.
Share credentials Share with other users.
Use advanced nodes Use Code (PHP/JS/Python) and other advanced nodes.
View / Manage MCP servers MCP integration.
View audit logs Security audit.
View execution logs Detailed run logs.
Workflow templates View, create, edit, delete templates.
Approve workflows Approval workflow (if used).

Assign these to roles as needed; restrict "admin" and "advanced nodes" to trusted users.

13. Extending the module

Custom node plugin

  1. Class in your module: src/Plugin/SisNode/YourNode.php.
  2. Attribute #[SisNode(...)] with id, label, description, category, icon, optionally credential_type, trigger, deprecated.
  3. Extend Drupal\sis_automation\Plugin\SisNodeBase.
  4. Implement execute(array $input, array $parameters, array $context): array; return an array with at least success (and error on failure).
  5. Optional: getConfigSchema(), getInputSchema(), getOutputSchema(), validateParameters().

Minimal example:

<?php

namespace Drupal\your_module\Plugin\SisNode;

use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\sis_automation\Attribute\SisNode;
use Drupal\sis_automation\Plugin\SisNodeBase;

#[SisNode(
  id: 'my_custom_node',
  label: new TranslatableMarkup('My Custom Node'),
  description: new TranslatableMarkup('Does something custom.'),
  category: 'custom',
  icon: 'custom.svg',
)]
class MyCustomNode extends SisNodeBase {

  public function execute(array $input, array $parameters, array $context): array {
    return [
      'success' => true,
      'data' => $input,
    ];
  }
}

Clear cache so the plugin is discovered.

Custom trigger

Create a plugin that implements the trigger interface and is tagged as a trigger (see SisTriggerManager and existing trigger plugins). Register it in your module's Plugin/SisTrigger namespace and tag it appropriately.

Altering node definitions

Implement hook_sis_node_info_alter() to change node metadata (label, category, etc.).

14. Security

  • Credentials — Stored encrypted; use the configured encryption key and avoid exposing it.
  • Code node — If enabled, runs user-defined PHP/JS/Python in a sandbox (disallowed functions and patterns). Restrict "Use advanced nodes" to trusted roles; consider disabling Code node in strict environments.
  • Webhooks — Use signature validation and rate limiting to avoid abuse.
  • Permissions — Follow principle of least privilege; limit "Administer SIS Automation" and "Manage any credential."
  • Remote sites — Use HTTPS and strong API keys for SIS Drupal Client; use IP whitelisting if applicable.

15. Troubleshooting

Issue What to check
Workflow does not run Workflow status Active; trigger config correct; cron run (if cron trigger); execution logs and Drupal log for errors.
"Remote site not found" Credential exists and type is Drupal Remote; Site ID in node matches credential ID; remote site has SIS Drupal Client enabled and API key set.
Expression errors Syntax {{ }}; path matches actual data (e.g. input.body.title); use Debug node to inspect input/context.
Credential errors Encryption key set; credential not deleted; API key valid and not expired.
Code node disabled Configuration → SIS Automation → enable code execution; user has "Use advanced nodes" permission.
High load / slow runs Use queue (and Redis if available); reduce concurrency; optimize heavy nodes or split into smaller workflows.

16. Contributing and support

  • Issue queue: drupal.org/project/issues/sis_automation
  • Documentation: This file and in-repo docs (e.g. docs/). Help at /admin/help/sis_automation after install when provided by the module.
  • Contributions: Bug fixes, new nodes, docs, and tests are welcome. Follow Drupal coding standards and the project's contribution guidelines.

17. License

GNU General Public License v2.0 or later. See Drupal.org licensing and the module's LICENSE file if present.

SIS Automation — workflow automation for Drupal. Project page.

Project information

  • Created by dharmendra_saini on , updated
  • shield alertThis project is not covered by the security advisory policy.
    Use at your own risk! It may have publicly disclosed vulnerabilities.

Releases