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
- Overview
- Features and how to use
- Requirements and dependencies
- Installation
- Configuration
- Concepts
- Node categories and types
- Expressions
- Remote Drupal sites
- Triggers
- API usage (for developers)
- Permissions
- Extending the module
- Security
- Troubleshooting
- Contributing and support
- 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 → Workflows → Add 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
- Place the module in
modules/custom/sis_automation(or install via Composer). - Enable: Extend → enable SIS Automation, or run:
drush en sis_automation -y - Configure: Configuration → SIS Automation → Settings (
/admin/config/sis/settings).
First steps
- Go to Configuration → SIS → Workflows (
/admin/config/sis/workflows). - Click Add workflow.
- 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:
- 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. - 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.
- 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
- Class in your module:
src/Plugin/SisNode/YourNode.php. - Attribute
#[SisNode(...)]with id, label, description, category, icon, optionally credential_type, trigger, deprecated. - Extend
Drupal\sis_automation\Plugin\SisNodeBase. - Implement
execute(array $input, array $parameters, array $context): array; return an array with at least success (and error on failure). - 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_automationafter 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
This project is not covered by the security advisory policy.
Use at your own risk! It may have publicly disclosed vulnerabilities.

