Skip to content
RTILA Web Business Automation
  • Home
  • Features
  • Pricing
  • Marketplace
  • Support
    • Documentation

Cart

RTILA Web Business Automation
  • Home
  • Features
  • Pricing
  • Marketplace
  • Support
    • Documentation
Free Download
Free Download

Billing & Licensing

10
  • Change License’s registered email address
  • Upgrade a License
  • Manage License Activation Count
  • RTILA Studio local database
  • Standalone Exe Antivirus False Positive Alert
  • Team Member Activation URL & License
  • AppSumo Codes Redemption
  • Download & Activate RTILA Studio
  • AppSumo Code Stacking & Upgrade
  • Mac OS Installation Warning

Custom Commands

36
  • WordPress Posts via API (beta)
  • Webhook Send Request
  • Target Text Before After
  • Download File to Folder
  • Clipboard Copy & Paste
  • ChatGPT API Full Control
  • Generate Random Numbers and Text
  • Regex & JS Filters
  • API Bridge Get Post Requests
  • WhatsApp API send MSG
  • GET HTML
  • Slack Notification Command
  • Target Elements With Text Value
  • Directory Get Files Path
  • Folder and File Monitoring
  • Get iFrame URL
  • Get File Content
  • Verify License Easy Digital Downloads
  • Save Variable to File
  • Rename File
  • Move File to New Directory
  • Delete File
  • Mouse Events
  • Get System Info
  • Airtable Get & Update Records
  • Email Send Via SMTP
  • Wait For Element to disappear
  • OCR Passport Reader
  • Target Element in Shadow Dom
  • Airtable Get Records
  • Airtable Update Records
  • Sanitize URL
  • Email Verification
  • Get Hardware ID HWID
  • Timestamp Unix and UTC
  • Switch Tab Focus Command

How-To & Tutorials

42
  • How to target a CSS element
  • Change default Browser
  • Export Results to a CSV file
  • Profile Session Feature
  • OCR Feature: read text from images
  • Auto Download Pinterest Images
  • Save current URL using JavaScript
  • Search & Filter Projects
  • Error handling Strategy
  • Working with Arrays and Objects in RTILA
  • Auto Comment On WordPress Posts
  • Run Automations in Silent Mode
  • License Check for Standalone Executables
  • Trigger Standalone Bots via Command lines
  • How To Find Custom Collections For List type Datasets
  • Correcting & Completing Auto-Recorder Commands
  • RTILA WordPress Plugin installation & configuration
  • Using Developer Tools In RTILA Studio
  • Create A Project From Scratch
  • Bring back disappearing commands & properties
  • Export & share an RTILA project file
  • Install Browser Extensions using Profile Session
  • How To Fill a Form Using Generic Form Filler Child-Project
  • Project Settings: Import URLs manual entry, From File, From Project, and Read XML Sitemap
  • Project Settings: Import URLs manual entry
  • Use Local Storage Variable to scrape Do-follow Links
  • Schedule Launch of Automations
  • Email Results File via Gmail
  • Read from Google Sheets & Post on WordPress
  • Website Load Testing Automation
  • Read data from a txt or csv file
  • Downloading files
  • Open in a New tab
  • Using filters to complete a URL
  • Choosing the right collection
  • Set a Counter with JavaScript
  • Setup reCAPTCHA Resolution
  • Woo Categories & ChatGPT API
  • Login to Google Account & share profile session
  • Google Search Baby Steps
  • Auto-Recorder as a 1st step
  • Standalone Executable Bots

Official Commands

58
  • List Command
  • Incogniton Anti-detect browser
  • Save results to file command
  • RTILA Cloud API Documentation
  • FTP / SFTP Command
  • Custom Commands
  • Integrations
  • RPA & Desktop OS Commands
  • Add And Configure Dataset Properties
  • Inspection Panel Interface & Elements
  • Config & binaries files for Standalone
  • Focus On Element Command
  • Go To Url Command
  • Scroll Element Command
  • Execute JavaScript Code command
  • Reload Page Command
  • Compare Variables Condition
  • Take Screenshot Command
  • Smart Variable (ChatGPT API)
  • Child Projects
  • Confirm (Dialog Box) Command
  • Populate Text Field Command
  • Hover Mouse On Element Command
  • Download Page Command
  • Stop Automation Command
  • Log Message Command
  • Input (prompt box) Variable
  • Extract Results Command
  • Wait for Element to Appear Command
  • Selector (DOM element)
  • Check Radio Input Command
  • Dynamic Variable (JavaScript Code)
  • Static Variables
  • Set Checkbox State Command
  • Set Dropdown Value Command
  • Press a Keyboard Key Command
  • Upload File Command
  • Double Click On An Element Event
  • Click On An Element Event
  • Switch Browser Identity Command
  • Slack Notification Command
  • Save as Pdf Command
  • Go Back To Previous Page Command
  • Go Forward To Next Page Command
  • Proxies Built-In Rotation
  • External Proxy Rotation API
  • Regular Expressions
  • Mock Location Command
  • Close Page Command
  • Desktop Notification Command
  • Command Folder
  • Clear Cookie Command
  • Change Page Size Command
  • Break Loop Command
  • DataSet Types
  • Link Crawler Command
  • Alert Message Command
  • Wait Commands
  • Home
  • Docs
  • Official Commands
  • Custom Commands
View Categories

Custom Commands

6 min read

We are thrilled to announce an exciting new feature coming to RTILA: Custom Commands! Designed to provide unparalleled flexibility and enhance the user experience for our pro users. Take full control of RTILA and personalize it to suit your unique needs. Develop, import and use your own commands !

IMPORTANT UPDATE #

Although Custom Commands are still available as a feature, it has recently been moved to a GitHub for better control/security verification of new third party commands before use. For now only few select developers can have access to this new method, however we have instead published a new and open way for any use to modify and existing command into their own custom command without breaking the system or needing access to our GitHub. Please refer to this documentation: COMMAND EDITOR

The former method now moved to GitHub is critical only if you need to load an npm package dependency, in which case you need to send us your Custom Command files for us to review/validate and push to the main Git so that RTILA Studio can then load your target packages and have your new functionalities ready for us. Contact us for this level of customization.

How to install a Custom Command #

Custom Commands are delivered as zip files and need to be imported through the Command Panel, from the Custom Tab; From the file selection modal window, go to the folder where you saved the Custom Command zip file and select it and click open.

Or see screenshots below:

How to use a Custom Command #

Once you have imported the Custom Command, it will now appear in your Commands > Custom tab, and you can select it and add it to your flow. You can now configure this Custom Command thanks to the inputs fields and options available in that command. See screenshots below:

You can now have a whole set of new commands and functionalities immediately, without waiting for them to be developed as native commands by the RTILA team.

IMPORTANT: The zip folder “MUST” be uploaded/updated/delete only through the Add Command > Custom Tab, and RTILA will unzip and save the files in the proper folder and with the appropriate user rights. For information all Custom Commands are saved in the Documents > RTILA > Commands folder. Updating and deleting a Custom Command should also be done via the Add Command panel to avoid glitches.

How to develop a Custom Command #

We have recently opened our Command engine to be able to accept and use Custom Commands developed by third parties and our community. This presents advantages for everyone, from developers to the ultimate end-user. However as this is an advanced feature, it is made available to developers who are already familiar with JavaScript nodeJS as we do not provide direct support for the development of Custom Commands.

Composition of a Custom Command #

The zip file package #

The basic structure of a Custom Command is a folder that is named after the command, should be zipped and that should contain at least these 2 files: A config.json and a script.js which we will detail below.

The config.json file #

The config.json: This file describes the data structure and fields used within RTILA for the user to input its value and configure the said Custom Command.

The script.js file #

The script.js: that will contain both the NodeJS library download/call (if needed) as well as the JavaScript code that will interact with the json form variables that you have set on order to provide the target functionalities.

Custom Commands types & fields #

You can create different types of Custom Commands and for each type of command we are providing the corresponding fields and JavaScript that can be used to properly develop that type of command.

You can download our Test/Demo custom commands from the link below to learn from them, the time that we provide a more detailed documentation:
https://drive.google.com/file/d/1jeUZWQ-knvWiGkEfbe8XHTOw2iYCFR0V/view?usp=sharing

Action command #

User side fields screenshot:

JavaScript file content:

Copy CodeCopiedUse a different Browser
// Available global varibales:
// page
// command

const response=await fetch('https://jsonplaceholder.typicode.com/todos/1');
const json=await response.json();

await page.evaluate(function (json) {
  return alert(JSON.stringify(json));
}, json);

Json file content:

Copy CodeCopiedUse a different Browser
{
  "role": "action", 
  "type": "test-action-addon",
  "label": "Action Addon",
  "description": "Test Action Addon Description",
  "defaultValues": {
    "testText": "My default message",
  },
  "fields": [
    {
      "type": "text",
      "name": "testText",
      "label": "Test Text",
      "description": "Test Text Description."
    }
  ]
}

Condition command #

User side fields screenshot:

JavaScript file content:

Copy CodeCopiedUse a different Browser
// Available global varibales:
// page
// command
// conditionMet

conditionMet=(command.testText=="123");

Json file content:

Copy CodeCopiedUse a different Browser
{
  "role": "condition", 
  "type": "test-condition-addon",
  "label": "Condition Addon",
  "description": "Test Condition Addon Description",
  "defaultValues": {
    "testText": "",
  },
  "fields": [
    {
      "type": "text",
      "name": "testText",
      "label": "Test Text",
      "description": "Enter the secret number."
    }
  ]
}

Event command #

User side fields screenshot:

JavaScript file content:

Copy CodeCopiedUse a different Browser
// Available global varibales:
// page
// command
// element
// commandCssSelector

await page.evaluate(function (element) {
	element.animate([{ transform: "rotate(0) scale(1)" },{ transform: "rotate(360deg) scale(0)" },], {duration: 2000,iterations: 1,});
}, element);


await new Promise((resolve) => setTimeout(resolve, 3000)); // This is optional just to wait for the animation

Json file content:

Copy CodeCopiedUse a different Browser
{
  "role": "event", 
  "type": "test-event-addon",
  "label": "Event Addon",
  "description": "Test Event Addon Description",
  "defaultValues": {
  },
  "fields": []
}

Loop command #

User side fields screenshot:

JavaScript file content:

Copy CodeCopiedUse a different Browser
{
  "role": "loop", 
  "type": "test-loop-addon",
  "label": "Loop Addon",
  "description": "Test Loop Addon Description",
  "defaultValues": {value1,value2},
  "fields": []
}

Json file content:

Copy CodeCopiedUse a different Browser
// Available global varibales:
// page
// command

while (1) { // this is the main loop
  if (Bot.prototype.breakLoopCommand) {
    Bot.prototype.breakLoopCommand = false;
    break;
  }

  if (!(await Bot.prototype.loopFunction(page, command))) break;
}

// Another example
// for (let index = 0;index <= 10;index += 1) {
//   if (Bot.prototype.breakLoopCommand) {
//     Bot.prototype.breakLoopCommand = false;
//     break;
//   }
//   if (!(await Bot.prototype.loopFunction(page, command))) break;
// }

Variable command #

User side fields screenshot:

JavaScript file content:

Copy CodeCopiedUse a different Browser
// Available global varibales:
// page
// command
// commandValues

commandValues=command.testText.toUpperCase();

// Or as an array
// commandValues=[commandValues.toUpperCase()];

Json file content:

Copy CodeCopiedUse a different Browser
{
  "role": "variable", 
  "type": "test-variable-addon",
  "label": "Variable Addon",
  "description": "Test Variable Addon Description",
  "defaultValues": {
    "testText": "my variable",
  },
  "fields": [
    {
      "type": "text",
      "name": "testText",
      "label": "Test Text",
      "description": "Enter a variable"
    }
  ]
}

All possible fields #

User side fields screenshot:

JavaScript file content:

Copy CodeCopiedUse a different Browser
// -Available global varibales for all roles:
// page
// command
// -Only for events:
// element
// commandCssSelector
// -Only for variables:
// commandValues
// -Only for conditions:
// conditionMet

await page.evaluate(function (alertMessage) {
  return alert(alertMessage);
}, command.testText);

Json file content:

Copy CodeCopiedUse a different Browser
{
  "role": "action",
  "type": "blank-all-available-fields",
  "label": "All Available Fields",
  "description": "Blank All Available Fields Description",
  "defaultValues": {
    "testText": "Default text",
    "testCheckbox": true,
    "testTextarea": "Hello\nworld",
    "testNumber":  10,
    "testSelect": "value2",
  },
  "fields": [
    {
      "type": "text",
      "name": "testText",
      "label": "Test Text",
      "description": "Test Text Description."
    },
    {
      "type": "checkbox",
      "name": "testCheckbox",
      "label": "Test Checkbox",
      "description": "Test Checkbox Description."
    },
    {
      "type": "textarea",
      "name": "testTextarea",
      "label": "Test Textarea",
      "attributes": { "wrap": "off", "rows": "6" },
      "style": "resize: none",
      "description": "Test Textarea Description."
    },
    {
      "type": "number",
      "name": "testNumber",
      "label": "Test Number",
      "attributes": { "min": "1" },
      "description": "Test Number Description."
    },
    {
      "name": "testSelect",
      "type": "select",
      "label": "Test Select",
      "options": [
        { "name": "value1", "value": "Value 1" },
        { "name": "value2", "value": "Value 2" },
        { "name": "value3", "value": "Value 3" }
      ],
      "description": "Test Select Description."
    }
  ]
}

NodeJS packages install & use #

Clipboard use case #

RTILA is able to download and install almost any NodeJS package on the local machine, so that you can then call and use the new “server side” functionalities that would otherwise not be available if using only our classic Execute JavaScript command. This opens up a tremendous opportunity for rapid deployment of new commands and functionalities without waiting for a core update of RTILA software.

The Clipboard Copy Paste Custom Command is a good example of how we are downloading and using the “clipboardy” package. You need to make sure to add enough wait time for the package to download and then to be called and executed by the Custom Command. Please reverse-learn from this example the time that we provide a more detailed documentation for developers about this subject.

See below the code used and how we download/install then use an external NodeJS package:

Copy CodeCopiedUse a different Browser
await manager.install("clipboardy", "^2.3.0");
const clipboardy = manager.require("clipboardy");

commandValues = command.inputValue;

switch (command.selectMode) {
  case 'copy':
    commandValues = command.inputValue;
    clipboardy.writeSync(commandValues);
    break;
  case 'paste':
    commandValues = clipboardy.readSync();
    break;
  case 'reset':
    clipboardy.writeSync("");
    break;
}

Click here to download the Custom Command for the Clipboard to learn from it and further adapt and enhance it to match your needs.
Click here to download the related automation template for you to see how this works from user side.

Access to locaStorage variables #

To be completed by Honore soon… Check the alert custom action to see how to interact with pages. Rather than using alert() you can directly return localStorage value.

    Still stuck? How can we help?

    How can we help?

    Updated on 22/03/2025
    FTP / SFTP CommandIntegrations

    Powered by BetterDocs

    Table of Contents
    • IMPORTANT UPDATE
    • How to install a Custom Command
    • How to use a Custom Command
    • How to develop a Custom Command
      • Composition of a Custom Command
        • The zip file package
        • The config.json file
        • The script.js file
      • Custom Commands types & fields
        • Action command
        • Condition command
        • Event command
        • Loop command
        • Variable command
        • All possible fields
      • NodeJS packages install & use
        • Clipboard use case
      • Access to locaStorage variables

    INFO & LEGALS

    PRICING
    PAYMENTS & REFUND
    COOKIES - PRIVACY
    LICENSE AGREEMENT

    DOWNLOADS

    BOT LAUNCHER
    RTILA STUDIO ON GITHUB
    BOT & TEMPLATES
    PARTNERSHIPS

    RESOURCES

    VIDEO TUTORIALS
    DOCUMENTATION
    SUPPORT PORTAL
    FB COMMUNITY SUPPORT

    stay in touch

    Subscription Form

    follow us on

    • Facebook
    • YouTube
    • RTILA LinkedIn Page
    Copyright © RTILA CORPORATION