Help
Welcome To ThinkAutomation
ThinkAutomation is a business process automation solution designed to automate on-premises and cloud based business processes that are triggered from incoming messages. Incoming messages can be messages received by email, SMS, database records, web forms, Teams messages, documents and other messages sources.
When an incoming message is received ThinkAutomation can execute one or more Automations. You design Automations using an easy to use drag-and-drop interface to run simple or complex tasks. Automations can perform many Actions, including updating company databases and CRM systems, sending outgoing emails, Teams & SMS messages, document processing, integration and much more.
ThinkAutomation also saves each incoming message in the Message Store. The Message Store contains a copy of each incoming message processed. You can view the Message Store using the ThinkAutomation Studio.
The ThinkAutomation Studio is used to setup your Message Sources and design your Automations. Multiple Message Sources and Automations can be grouped into a Solution. Any number of Solutions can be created. Solutions can contain any number of Message Sources and Automations. Once you have configured your Message Sources and Automations the ThinkAutomation Studio can be closed. Messages are processed in the background by the ThinkAutomation Services.
Visit: www.ThinkAutomation.com for more information.
Editions
ThinkAutomation is available in the following editions:
- Standard Edition
- Professional Edition: Includes all features of the Standard Edition, plus the Custom Action Designer and the Execute Script Action.
- Developer Edition: Includes all features of the Professional Edition but with a limit of 200 processed messages per day. The Developer Edition is a free edition aimed at developers & ISV's who want to create ThinkAutomation Solutions for their own customers.
- Evaluation Edition: Includes all features of the Professional Edition. The Evaluation Edition is free and will operate for 30 days. You can register an existing Evaluation Edition with a purchased serial number and retain all your configuration settings.
Professional Services
Parker Software provides professional services to assist with configuring your Automations, creating Custom Actions and for product training. Please see: www.ThinkAutomation.com/Automation-Consultation/ for more information.
Product Support
All ThinkAutomation subscriptions include access to support resources, free product updates and access to the Custom Action Library for the life of your subscription.
Support is available during office hours via email at support@parkersoftware.com. We offer extended support with 24 hour/7 day coverage at additional cost. Please contact us for details.
Installation
ThinkAutomation requires Windows 10 or Windows Server (2016 or higher) with 1GB of free disk space and 8GB or higher recommended ram. It can run on on premise or cloud hosted Virtual Machines.
Run the ThinkAutomation.exe setup to install. Once installed, use the ThinkAutomation Studio to complete the setup.
Message Store Type
ThinkAutomation can use Microsoft SQL Server, MongoDB, MySQL or SQLite for its Message Store database. You should decide on the database type prior to installing. Ensure the database is running prior to installing (unless you want to use SQLite).
Message Store Database Types
Type | Details |
---|---|
SQL Server | Use Microsoft SQL Server 2008 or higher. Any edition (including Express) can be used. |
MongoDB | Use a local or remote MongoDB instance. MongoDB will provide high performance but requires more memory. Should not be used on machines with 8GB or less ram. |
MySQL | Use MySQL version 7 or higher (or Maria DB). |
SQLite | Use the built-in SQLite database. Requires no database to be installed but provides the lowest performance. This option is useful for developing and testing Automations but should not be used in production where performance is important. |
Architecture
ThinkAutomation consists of three Windows services along with the ThinkAutomation Studio.
Service | Details |
---|---|
Main Server Service | Maintains the message process queue, message store database & metadata and serves data to ThinkAutomation Studio users. |
Message Reader Service | Reads messages from the configured Message Sources. |
Message Processor Service | Executes Automations. |
Each ThinkAutomation Service can run on the same computer, or separate computers in a distributed configuration.
ThinkAutomation Studio
The ThinkAutomation Studio is used to configure your Message Sources and Automations. It can also be used to view the Message Store of processed messages and to configure Custom Actions. The ThinkAutomation Studio can be run on the same computer running the ThinkAutomation Server or on any remote computer that can connect to it.
The ThinkAutomation Studio connects to the ThinkAutomation Server via a secure websocket connection. It does not need to be left running for messages to be processed.
When you run the ThinkAutomation Studio for the first time you will be asked to register your license (or start an Evaluation), setup your System Administrator login password and configure the Message Store database.
A default user with username 'Admin' will be created with your specified password. Use the 'Admin' user to login. You can create additional users if required using the Server Settings.
The Standard Edition of ThinkAutomation allows 2 Studio users to be connected at any one time. The Professional Edition allows up to 10 - with the option of adding more users if required.
Note: The ThinkAutomation Studio connects to the ThinkAutomation Server using a secure WebSocket connection on port 9110. This port will need to be open on your firewall if you want to use the Studio remotely.
Message Sources
A Message Source defines how ThinkAutomation will receive messages to process. You can create any number of Message Sources to read messages from various sources. Each Message Source is connected to an Automation. When a message is received the message content is passed to the assigned Automation for processing. Individual Message Sources can be enabled/disabled or paused.
To create a Message Source click the New Message Source button on the ThinkAutomation Studio ribbon. A Solution must have at least one Message Source.
Message Source Types
ThinkAutomation can receive messages from the following Message Source Types:
Source | Details |
---|---|
Email - Office 365 | Synchronize an Office 365 or online Outlook account email folder. |
Email - Exchange | Synchronize a Microsoft Exchange account email folder. |
Email - Gmail | Read email items from a Gmail account. |
Email - IMAP | Read emails from any IMAP enabled email account. |
Email - POP3 | Read emails from any POP3 enabled email account. |
Email - SendGrid | Receive new emails received via SendGrid. |
Web Forms | Create a web form to embed in your website and receive submissions for processing. |
Teams | Respond to @mentions from Microsoft Teams channels. |
Database | Monitor a SQL database for new or updated records. |
MongoDB | Monitor a MongoDB collection for new documents. |
File Pickup | Monitor a local folder for new or updated files. |
HTTP Get | Monitor a web resource for changes. |
Azure Queue | Monitor an Azure Queue. |
Twilio | Receive incoming SMS messages from Twilio. |
API | A HTTP API for receiving messages from custom sources. |
Web Forms - Custom | Post any of your existing web forms to ThinkAutomation for processing. |
Web Requests | Execute an Automation whenever the Web API URL is requested. |
Static Scheduled | Execute an Automation with a default message at preset times. |
Email - Office 365 or Outlook
Reads emails from an Office 365 or an online Outlook mailbox folder. Click the Sign In button to sign in to an Office 365 or Outlook account.
Select the Folder to synchronize.
Enable the Delete Processed Messages option to remove emails from the Office 365 folder once they have been downloaded by ThinkAutomation (optional). You can also select the Move To Folder option to move downloaded items to a different folder (optional).
Access Shared Mailbox
You can optionally read messages from a shared mailbox. Enter the shared mailbox username in the Access Shared Mailbox entry. Click the Get Folders button to read the folders for the shared mailbox. If the Shared Mailbox entry is blank then folders will be displayed for the signed-in user.
Re-Sign In
Depending on your security configuration you may need to re-sign in periodically. In these cases ThinkAutomation will pause the Message Source and send a notification to the ThinkAutomation Studio informing you to sign in again. Open the Message Source using the ThinkAutomation Studio and click the Sign In button again.
Email - Exchange
Reads emails using Microsoft Exchange Server Web Services (EWS). This works with any on-premises or hosted Exchange Server. Enter your Exchange User Name and Password and the URL and click Connect. If you do not know your Exchange Url, enter the User Name & Password and click Discover. This will attempt to find the URL from the user credentials.
Select the Folder to synchronize. Enable the Delete Processed Messages option to remove emails from the Office 365 folder once they have been downloaded by ThinkAutomation (optional). You can also select the Move To Folder option to move downloaded items to a different folder (optional).
Email - Gmail
Reads emails from any Gmail mailbox. Click the Sign In button to sign in to Gmail. Select the Folder to download messages from. Select the Move Processed Messages To Folder option if you want to move downloaded items to a different Gmail folder (optional).
Email - IMAP
Reads emails from a mail server using the IMAP protocol. Enter the IMAP Server address, port, user name & password. Click the Connect button to connect and then select the Folder to read messages from. You can select to Move or Delete processed messages (optional).
Email - POP3
Reads emails from a mail server using the POP3 protocol. Enter the POP3 Server address, port, user name & password. Click the Test Connection button to verify the connection. You should only use POP3 if IMAP is not available.
POP3 is an older and slower protocol than IMAP and does not provide an option to only download new messages since the last download. To ensure fast access you should enable the Delete Processed Messages option so that messages are removed from the POP3 account once they have been processed by ThinkAutomation.
Email - SendGrid
The SendGrid message source type receives email messages sent to any of your SendGrid domains.
SendGrid is a cloud based message delivery platform. When used with ThinkAutomation it enables ThinkAutomation to receive email messages sent to any recipients for any of your SendGrid email domains. SendGrid is a worldwide platform and the cost is based on usage. See: https://www.sendgrid.com
You need to create a SendGrid Account if you want to be able to process SendGrid received email messages using ThinkAutomation.
You then need to login to your SendGrid account and setup the Inbound Parse feature. See: https://sendgrid.com/docs/for-developers/parsing-email/setting-up-the-inbound-parse-webhook/
Set the Inbound Parse Webhook URL in your SendGrid account to the SendGrid Inbound Parse URL shown in the ThinkAutomation Message Source. As emails are received by SendGrid they will then be forwarded to ThinkAutomation for processing. This does not affect your regular SendGrid email flow - it simply sends a copy to ThinkAutomation as emails are received.
Web Forms
The Web Form message source type enables you to create a publicly accessible web form with multiple input fields. The web form has a unique secure URL hosted on Azure as part of the ThinkAutomation Web API. You can embed the web form inside your own website or send a link to the form in outgoing emails. When a web user completes the form, the results are sent to your ThinkAutomation Server for immediate processing. The Web Form can optionally display the Automation return value after the form is submitted.
Form Text
Enter the form Title and Header. This is the text that is displayed above the form itself. You can use Markdown if required. The Markdown will be converted to HTML when the form is rendered. The Title & Header are optional. You can also adjust the text for the Submit Button.
Confirmation Message
Enter the Confirmation Message. This is the text that is displayed after the form is submitted. Enable the Wait For & Include Automation Results In The Confirmation Message option if you want the Automation Return Value included in the confirmation message. If this option is enabled then the form response will wait for the Automation to complete. You should then configure your Automation to return the text or html you want displayed in the form confirmation. The max wait time is 30 seconds, so if your Automation may be long running then the Wait For option may not be applicable.
Form Fields
You can now create any number of Form Fields. Click Add to add a field.
Enter a Name and Label Text. You can also optionally specify Help Text that will display in a smaller font below the input field.
The Field Type can be Text, Email, Password, Number, Date, Time or Boolean. For text field types you can specify the Max Length. The Max Lines option allows you to define the maximum lines.
The Attributes tab allows you to specify a default value, change case & validation rules. When the web user completes the form they will not be able to submit it until all of the fields pass validation.
You can arrange the order of fields on the form using the Up & Down buttons.
Scheme
The web form uses Bootstrap 4 for its responsive layout. Select the Bordered option to show the form inside a bordered card. Use the Scheme list to select a color scheme for the card. You can also change the Background & Foreground colors. The Foreground color can only be changed if not using a bordered card. Specify a Header Image URL to display an image above the title.
You can also specify a Custom Style Sheet Link URL. You can use this to override the default Bootstrap styles. If a custom style sheet is used then the Background/Foreground colors are ignored.
Click the Preview button to display a local preview of how the form will look.
Redirect
You can optionally specify a Redirect URL. This is a URL the web user will be redirected to on completion of the form. If a redirect URL is specified then the Confirmation Message will not be displayed to the user.
WhosOn Live Chat
WhosOn is Parker Software's live chat and visitor tracking solution. See: https://www.whoson.com. If you are a WhosOn user you can add the WhosOn page tag to your form so that visitors to the form show in real time in your WhosOn Client. You can optionally Show Chat Button on your form. Your WhosOn Server & Domain details are specified in the ThinkAutomation Server Settings.
Captcha
You can add a Google reCAPTCHA box to your forms to ensure human only responses. Go to reCAPTCHA (google.com). Use the Admin Console to create a reCAPTCHA. Set the type to reCAPTCHA v2. In the domain enter api.thinkautomation.com. Select the reCAPTCHA keys section and enter your Site Key and Secret Key.
Public Form URL
This entry shows the unique public URL for the web form. You can link to this from your website, send it in outgoing emails or embed it into your web site pages using an iframe tag. Whenever a web visitor completes the form the Automation assigned to the Message Source will be executed with the form contents.
How it Works
When you save the Message Source the ThinkAutomation Server uploads the form details to the ThinkAutomation Web API server. The form can then be used immediately. Any changes you make will be updated.
When a web user completes the form the ThinkAutomation Web API sends the results to your ThinkAutomation Server. The message body will be Json containing the form fields. For example:
{ "fname": "Alice", "lname": "Bamber" }
You can then use Extract Field actions to extract the data from the message and perform any other Automation actions. If your ThinkAutomation Server is not active when a web form is submitted it will be queued by the ThinkAutomation Web API for up to 48 hours.
Additional Headers
The following headers will be added to the ThinkAutomation message headers:
Header | Details |
---|---|
RemoteHost | The IP address of the web user submitting the form. |
User-Agent | The browser user-agent of the web user submitting the form. |
Origin | The origin header of the web user submitting the form. |
You can access these values in your Automations. For example, you could use the GeoIP Lookup action to lookup the country for the user's IP address, or use the Get Browser Info action to get the browser name.
Security
The web form URL is unique to your ThinkAutomation instance and Message Source and has a secure hash. The web form is hosted on Microsoft Azure and is delivered via https only - meaning all form submissions are encrypted. The ThinkAutomation Web API sends completed forms to your ThinkAutomation Server over a secure websocket connection. The Web API server does not keep copies of submitted forms. If your ThinkAutomation Server is not active then any form data is stored in a queue for up to 48 hours and sent when your ThinkAutomation Server becomes active. This storage queue is encrypted.
Embedding The Form In Your Website
You can add the form to any of your web pages using an iframe tag. For example:
<iframe src="https://api.thinkautomation.com/form?taid=5f7b421a6e1f408c384863256fbe68b36edf4097704f7743eSiEZ0XtRpq8GeF5WEZGhDpzbhNH007%2f" style="width:300px; height: 570px; border: none;" scrolling="no"></iframe>
Once the form is embedded any changes you make to Message Source Web Form properties will be updated on the form on your site. If you delete the Message Source from your ThinkAutomation settings you will need to remove the embedded link from your site.
Note: You can also post any of your existing web forms to ThinkAutomation for processing. See: Web Forms- Custom.
Microsoft Teams
The Teams message source type receives outgoing webhook requests from Microsoft Teams. Users of Teams can use @mentions to trigger a request. Your Automation return value is then sent back as a response.
To Setup In Microsoft Teams
- In Microsoft Teams select the appropriate team and choose Manage team from the (•••) drop-down menu.
- Choose the Apps tab from the navigation bar.
- Select Create an outgoing webhook.
- Specify the Name - users can then enter @{name} to send to ThinkAutomation.
- Paste the Microsoft Teams Outgoing Webhook Callback URL into the Callback URL entry.
- Paste the Security Token shown after the Teams webhook is created into the Security Token entry in ThinkAutomation.
See: Add custom bots to Microsoft Teams with outgoing webhooks - Teams | Microsoft Docs for more information.
When you create a new Teams message source, ThinkAutomation will automatically add Extract Field actions to the Automation to extract the message text.
Use the Return action type to send back the text you want to respond with. The response text can contain HTML or Markdown.
An Example: You could create a teams outgoing webhook with the name "GetAccount". Whenever a Teams user types '@GetAccount Test Customer' - your Automation will execute. The 'text' Extracted field will be set to 'GetAccount Test Customer'. You could then lookup customer details from a database or perform other actions and return a response - which will be displayed in the Teams conversation.
The Microsoft Teams message source type uses the ThinkAutomation Web API to forward messages from Teams to your ThinkAutomation Server. The ThinkAutomation Web API sends messages to your ThinkAutomation Server over a secure websocket connection. The Web API server does not keep copies of forwarded messages.
The Automation you execute on receiving a message should not be long running. Teams will wait for 5 seconds for a response.
Database
The Database message source type monitors a database for new or updated records. Rows returned from a database query will be passed to an Automation for processing. Select the Database Type (Microsoft SQL Server, MySQL, SQLite, Oracle, PostgreSQL, DB2, Firebird or OLDBC/OLEDB). Enter the Connection String or click the ...
button to build and test the connection.
Enter the SQL Statement to execute against the database for new records. For example:
SELECT * FROM Person WHERE PersonId > @Id
The SQL Statement can contain Parameters. You should then complete the Parameters table to provide each parameter type and value.
The query should include at least 1 column that provides a unique value. Enter this column name in the Unique Id Column box.
ThinkAutomation automatically caches the Unique Id Column value each time it requests data from the database. You can use this cached value as a Parameter value by setting a parameter value to %LastDatabaseId%.
In the above example the Unique Column Name is PersonId. We set the @Id parameter value to %LastDatabaseId%. This means that each time ThinkAutomation requests data from the database it only requests records with a higher PersonId since the last request (making the query much faster).
Test & Create Automation
You should test your query before saving the Message Source. Click the Test button. When you use the Test option on a new Message Source, ThinkAutomation will ask if you want to create a new Automation to process the records. It will then create a new Automation and create Extracted Fields on the Automation that match the columns returned by the query.
Creating The ThinkAutomation Message
Each new record returned from the database will be passed to the Automation for processing. You can choose to pass all columns to the Automation or a single column. Set the Assign All Columns To Message Body to send all columns returned by the query.
The database record will be passed to the Automation in the following format:
{ "PersonId": 1, "PersonType": "EM", "NameStyle": false, "Title": "", "FirstName": "Ken", "MiddleName": "J", "LastName": "Sánchez", "Suffix": "", "EmailPromotion": 0, "AdditionalContactInfo": "", "ModifiedDate": "2009-01-07" }
If you used the Test option then Extracted Fields will have been created automatically to extract each column value.
You can optionally set the message Subject, From Address and Date. The Subject will default to '%TableName% (%LastDatabaseId%)' - where %TableName% will be the table name extracted from the SQL statement used for the query. You can change this and include text and column values for the current row. To use column values, use %ColumnName% replacements. For example:
Record Id %LastDatabaseId% For %FirstName% %LastName%
would set the subject to 'Record Id 1 For Ken Sánchez'.
The Message Date will default to the current date & time. You can optionally set it to a column value. For example, %ModifiedDate%.
MongoDB
The MongoDB message source type monitors a MongoDB database collection for new or updated documents. Each document found will then be passed to an Automation for processing.
Enter the MongoDB Connection String, Database Name and Collection Name. Enter the Query json and optionally the Projection and Sort json. Click the Test button to test the connection and query.
ThinkAutomation automatically caches the Document _id value between requests. This can be used in the Query json. For example:
{ "_id": { "$gt": "%LastDatabaseId%" } }
This Query will retrieve all documents where the _id value is greater than then last requested _id.
Each document returned from the query will be passed to the Automation for processing in its Json format. You can then create Extracted Fields on your Automation to extract each value that you need in your Automation. Extracted Fields have an Extract Json option for easy extraction of Json data.
File Pickup
The File Pickup message source type will monitor a local folder on the ThinkAutomation computer. Each new or updated file found in the folder will be passed to the Automation for processing. The Subject of the message will be set to the file path.
Select the From Folder and File Name or Mask.
Add File Contents
Enable the Add File Contents option if you want ThinkAutomation to add the file contents to the message passed to ThinkAutomation for processing. Text based files will be passed as the Message Body. Any other files will be passed as an Attachment.
Add File Contents - Email Messages
Files with extensions .eml and .msg (Outlook Messages) will be added as regular email messages (with Body, Subject, From, To, Headers etc set.).
No File Contents
If Add File Contents is not enabled then only the file details will be passed to the Automation. The file details are passed as Json in the Message Body, in the following format:
{ "Path": "D:\\Setup Files\\ThinkAutomation.exe", "Name": "ThinkAutomation.exe", "Extension": "exe", "Size": 167815264, "Created": "2020-11-20 14:58:02", "Modified": "2020-11-20 14:58:05", "Description": "ThinkAutomation Installer", "CompanyName": "Parker Software", "Version": "5.0.261.2", "Product": "ThinkAutomation" }
The Subject will be set to the file path.
In an Automation you can then access the file path using %Msg.Subject% and extract other file information using Extract Field actions.
Enable the Delete Files After Pickup option if you want ThinkAutomation to delete files once they have been processed.
CSV & Excel Files
When using the File Pickup message source type, CSV & Excel files can be treated differently. Instead of the complete file, ThinkAutomation can select any new Rows added to the CSV or Excel file and send these as single messages to the Automation for processing.
For Example, consider the following CSV file:
Product | Name | Quantity | Value |
---|---|---|---|
Item 1 | Item 1 description | 100 | 1.20 |
Item 2 | Item 2 description | 200 | 1.30 |
When ThinkAutomation reads this CSV file (or Excel file) it will create 2 messages in the following format:
Message 1:
{ "xName": "items.csv", "xRow": 1, "Product": "Item 1", "Name": "Item 1 description", "Quantity": 100, "Value": 1.20 }
Message 2:
{ "xName": "items.csv", "xRow": 2, "Product": "Item 2", "Name": "Item 2 description", "Quantity": 200, "Value": 1.30 }
The subject of the message will be: [filename] Row x
The message body will be set to each column on a line of its own in the format 'header row text: column value'.
Enable the For CSV & Excel Files Create Single Messages For Each New Row option to enable single row message processing. For Excel files you can also optionally specify the Worksheet name to use and the Headers Row number containing header values.
For CSV files, if the CSV file has now header row, enable the CSV Has No Header Row option.
By default all columns in the CSV or Excel file will be passed to the Automation. If you only need certain column values enable the Read Values From Specific Cells option and then specify a list of Column Headers or Column Numbers.
Creating Extracted Fields For CSV & Excel Files
When using single row processing ThinkAutomation can create the Extract Field actions for you. Click the Create Extracted Fields button. ThinkAutomation will then read the CSV or Excel file specified in the File Name entry and create an Extract Field action for each column.
Resetting The Last Row Pointer
Each time ThinkAutomation reads the CSV or Excel file for new rows, it stores the last row number in its database, so only newly added rows since the last scan are processed. During testing you may need to reset this to allow a new full scan. Click the Reset Last Rows button.
Monitor Web Resource
The HTTP Get message source type reads the response from any web URL. If the response content has changed the content will be passed to an Automation for processing.
Specify the Get URL
If the web page requires a login specify the credentials in the Authentication section.
If the URL returns HTML the HTML content can be converted to PlainText or XML. The converted text will then become the message body of the message passed to the Automation. Json responses will be passed unchanged.
Any other content-types will be passed as an Attachment.
If the HTTP Get fails you have the option to:
- No Action.
- Set the Message content passed to the Automation to the HTTP status (eg: 404 File Not Found).
- Pause the Message Source
Each time the HTTP content is read ThinkAutomation will compare the response to the last received response. Only if the response has changed does it add a new message for processing.
Note: Many websites prevent automated tools from reading web content, so this Message Source type may not work in all cases. Its primary use is for monitoring HTTP API's or web resources that allow automated access.
Monitor Azure Queue
The Azure Queue message source type monitors a Microsoft Azure queue for new messages.
Enter your Azure Queue Account Name & Access Key.
Enter the Queue Name.
Click the Verify button to verify that ThinkAutomation can read from the queue.
ThinkAutomation will read each message from the queue and use the message contents as the message body. You can then parse the contents and perform Automation actions. The Message will be removed from the queue once read.
Twilio
The Twilio message source type receives SMS text messages sent from any mobile phone to any of your Twilio phone numbers.
Twilio is a cloud communications platform. It enables developers to programmatically make phone calls and to send & receive text messages using its web service API's. When used with ThinkAutomation, it enables ThinkAutomation to receive SMS messages. Twilio is a worldwide platform and the cost is based on usage. See: https://www.twilio.com
You need to create a Twilio Account if you want to be able to process received SMS text messages using ThinkAutomation. In Twilio, create a Twilio Phone Number to receive messages. In the Twilio Phone Number Properties set the Messaging - A Message Comes In - Webhook URL to the Set Your Twilio Messaging 'A Message Comes In' Webhook URL To shown in the ThinkAutomation Message Source properties.
Once assigned, any SMS messages sent to your Twilio number will be sent to ThinkAutomation for processing. You can create different ThinkAutomation Message Sources and assign each Webhook URL to each of your Twilio Phone numbers, or you can use a single ThinkAutomation Message Source and assign the same URL to all of your Twilio Phone Numbers and then parse the 'To' number out of the received message.
When a SMS message is received ThinkAutomation will create a new message that can be processed by your Automations. The message will be in the following format:
{ "from": "+447799123456", "fromCountry": "GB", "fromCity": "", "fromState": "", "fromZip": "", "to": "+447779678901", "toCountry": "GB", "toCity": "", "toState": "", "toZip": "", "smsStatus": "received", "body": "Test SMS Message Received", "numMedia": "0", "numSegments": "1", "messageSid": "SMe0000000000000000000000000000000", "accountSid": "AC00000000000000000000000000000000", "apiVersion": "2010-04-01" }
You can then parse this message and perform Automation Actions, such as sending an outgoing SMS replies or recording the message details in a database.
When you create a Twilio Message Source using the New Message Source Wizard an Automation will be automatically created with Extracted Field Actions setup to extract the above data.
You can reply to the incoming SMS using the Twilio Send SMS Message action and setting the To value to the %from% extracted field value. The %body% extracted field value will contain the incoming message text.
API
Local API
Messages can be posted to ThinkAutomation via a local HTTP API. Each Message Source has a unique local API URL. You can view/copy the local URL on the Message Source properties page.
See: Using The Local API
Web API
Messages can also be posted to ThinkAutomation via the Web API. The Web API provides a secure web public endpoint allowing messages to be posted to ThinkAutomation from your own or 3rd party solutions from any location. Each Message Source has a unique Web API URL. You can view/copy the URL on the Message Source properties page.
For the Web API you have the option of specifying Allowed Origins. Specify a comma separated list of allowed URL's that can post to the Web API endpoint. If this entry is blank then the endpoint can be posted to from anywhere. Full URL's should be specified, eg: https://www.mysite.com
- without any path or page name.
See: Using The Web API
Web Forms - Custom
The ThinkAutomation Web API can accept HTTP POST requests from your own web forms. Simply set the form action to the Web API URL. For example:
<html> <body> <form action="https://api.thinkautomation.com/addmessage?taid=5f7b421a6e1f408c38488397179ab14c6e1f405c7cbf955cd9%2fwxO9qltjQwt0pU7d4GRErBl5njQP%2f" method="post"> <label for="fname">First name:</label> <input type="text" id="fname" name="fname"><br><br> <label for="lname">Last name:</label> <input type="text" id="lname" name="lname"><br><br> <input type="submit" value="Submit"> </form> </body> </html>
You can add a &redirect={url} parameter to the API URL query string if you want the server to respond with a 303 Redirect once the message has been accepted.
When the form is posted to ThinkAutomation a new message will be sent to your Automation in Json format. For example:
{ "fname": "Alice", "lname": "Bamber" }
The RemoteHost, User-Agent & Origin headers will also be added to the ThinkAutomation message headers. You can access these values in your Automation.
You can then use Extract Field actions to extract the data from the message and perform any other Automation actions. If your ThinkAutomation Server is not active when a web form is submitted it will be queued by the ThinkAutomation API for up to 48 hours.
Note: Ensure the Allowed Origins entry on the Message Source API properties contains the URL for the site containing the forms you will be posting to ThinkAutomation.
Web Requests
The ThinkAutomation Web API also accept HTTP GET requests. You can specify the message content as part of the URL. Whenever the URL is requested a new ThinkAutomation message will be created.
The body, subject, from & to addresses can be specified on the query string:
https://api.thinkautomation.com/addmessage?taid=5f7b421a6e1f408c38488397179ab14c6e1f405c7cbf955cd9%2fwxO9qltjQwt0pU7d4GRErBl5njQP%2f &from=alice%40test.com &subject=unsubscribe &body=testmessage
The body, subject, from and to query string parameters are optional.
You can add a &redirect={url} parameter to the API URL query string if you want the server to respond with a 303 Redirect once the message has been accepted.
Passing Field/Value Pairs
You can also pass specific parameters using x-parametername=value
. In this case the message passed to ThinkAutomation will be in Json format with each parameter value (excluding the 'x-').
For example:
https://api.thinkautomation.com/addmessage?taid=5f7b421a6e1f408c38488397179ab14c6e1f405c7cbf955cd9%2fwxO9qltjQwt0pU7d4GRErBl5njQP%2f &from=alice%40test.com &subject=unsubscribe &x-name=Alice+Bamber &x-email=alice%40test.com
The message body which would be sent to ThinkAutomation as:
{ "name": "Alice Bamber", "email": "alice@test.com" }
If you do not want to use field=value pairs you can pass the raw body text using the &body=
query string parameter. The ThinkAutomation message body will be set to the contents of the body parameter with no conversion.
The RemoteHost, User-Agent & Origin headers will also be added to the ThinkAutomation message headers. You can access these values in your Automation.
You can then use Extract Field actions to extract the data from the message and perform any other Automation actions. If your ThinkAutomation Server is not active when a web request is made it will be queued by the ThinkAutomation API for up to 48 hours.
See: Using The Web API
Static Scheduled
This message source type is useful if you simply want to run an Automation at a preset schedule without a specific incoming message. It enables you to execute an Automation based on the Schedule (for example, every 10 minutes). It uses a static default message (that can be blank).
At the scheduled time a new message is added to the process queue. The Automation assigned to the Message Source will be executed.
Message Source Schedules
Message Sources can be assigned a Schedule. This defines how often the Message Source should be checked for new messages. Schedules can be every x minutes or at specific times. You can also select the days of the week that the Message Source should be active. Select the Schedule tab on the Message Source properties page to edit the schedule. A default schedule will be created for new Message Sources if required.
Web Form, File Pickup, SendGrid, Twilio, Teams and API message source types do not need a schedule. Any new messages for these Message Source types will be processed immediately.
Automations
An Automation is executed for each incoming message from the configured Message Source. Automations can contain any number of Actions. Automations themselves can Call other Automations and the returned value from the called Automation can be assigned to a variable in the parent.
Field Replacements
All Actions that have parameters allow you to use %field% replacements.
This means you can specify a ThinkAutomation extracted field name, variable or constant as the parameter (or part of) that will be replaced at execution time with the value of the variable. Field names must be enclosed with % symbols.
For example, outgoing emails can contain values extracted from the incoming message by simply inserting %fieldname% (where 'fieldname' is the name of your field) into the email text (or any other fields).
Another example: The Process Attachments action allows you save attachments from the incoming message to folders on your system. If you had created a field called OrderNumber you could save the attachment as C:\Orders\order%OrderNumber%.pdf. If %OrderNumber% contained '1234' then the file would be saved as C:\Orders\order1234.pdf.
Built-In Fields
In addition to extracted fields and variables that you create in your Automation, you can also use any of the following built-in fields:
Field Name | Details |
---|---|
%Msg_Body% | The incoming message body in plain text format. If the incoming message is HTML only then the plain text body will be created from the HTML with all tags removed. |
%Msg_Html% | The incoming message html body. |
%Msg_Mime% | The full mime text of the incoming message. |
%Msg_Json% | Json text representing the incoming message. |
%Msg_Text% | The mime text without headers. |
%Msg_Subject% | The incoming message subject. |
%Msg_Digest% | The first 750 characters of the message body with blank lines & whitespace trimmed. |
%Msg_To% | The 'to' address. Email addresses without names. |
%Msg_ToWithNames% | The 'to' address including names (if available). |
%Msg_From% | The 'from' address. |
%Msg_FromEmail% | The 'from' address email address without the name portion. |
%Msg_FromName% | The 'from' address name portion only (if available). |
%Msg_FromIP% | The IP address of the sender (extracted from the Received header). |
%Msg_CC%, %Msg_CCWithNames% | The 'cc' address. |
%Msg_BCC%, %Msg_BCCWithNames% | The 'bcc' address. |
%Msg_ReplyTo% | The 'reply to' address. |
%Msg_References% | The 'references' header. |
%Msg_Return-Path% | The 'return-path' header. |
%Msg_Sender% | The 'sender' header. |
%Msg_Date% | The date of the message. |
%Msg_DateSent% | The date the message was originally sent. |
%Msg_Size% | The total size of the message including attachments. |
%Msg_Headers% | The full headers section of the mime text. |
%Msg_Attachments% | Attachment file names (separated with CrLf). |
%Msg_AttachmentCount% | The number of attachments. |
%Msg_AttachmentInlineCount% | The number of inline attachments. |
%Msg_AttachmentsSavedTo% | A string containing the file system location of each saved attachment (if Attachment saving action has been used). |
%Msg_AttachmentListWithSizes% | A string containing each attachment & size separated by commas eg: 'document1.pdf (2mb), document2.pdf (500kb)' |
%Msg_CharSet% | The character set of the incoming message. |
%Msg_MessageId% | The unique message identifier. |
%Msg_WordIndex% | Unique keywords extracted from the message body (space separated excluding common words). |
%Msg_WordIndexSorted% | Unique keywords sorted by word count (highest first). |
%Msg_WordIndexWithCount% | Unique keywords with word count. |
%Msg_WordIndexWithCountSorted% | Unique keywords with word count sorted (highest first). |
%Msg_ValidationUrl% | A link to the user response web page for the current message. Used by the Wait For User Response action. |
%Msg_WebCallbackUrl% | A link to a custom webhook callback for the current message. Used by the Wait For Webhook action. |
Solution Constants
You can also create Solution Constants. These are solution-wide constants that can be used as %field% replacements on any Automation within a Solution. To create Solution Constants click the Edit Solution button on the ThinkAutomation Studio Explorer ribbon. Select the Constants tab.
You can then specify any number of Constant Name and Constant Value pairs.
For example: If you create a solution constant with name 'VatNumber' and value 'GB12345678' then if you can specify %VatNumber% on any Action property on any Automation within the Solution, the value 'GB12345678' will be replaced when messages are processed.
System Constants
A number of system constants can also be used:
Field Name | Details |
---|---|
%Date% | The current date. |
%DateYesterday% | Yesterdays date. |
%Time% | The current local time. |
%Hour% | The current local time hour number. |
%Minute% | The current local time minute number. |
%Year% | The current year. |
%DateTime% | The current local date & time. |
%DateTimeUtc% | The current utc date & time. |
%SQLDate% | The current date in yyyy-mm-dd format |
%SQLDateYesterday% | Yesterdays date in yyyy-mm-dd format. |
%SQLDateTime% | The current local date & time in yyyy-mm-dd hh:mm:ss format. |
%SQLDateTimeUtc% | The current utc date & time in yyyy-mm-dd hh:mm:ss format. |
%Timer% | The number of elapsed milliseconds since midnight. |
%DayOfWeek% | The current day of the week name. |
%WeekdayNumber% | The current day of the week number (1=Sunday, 2=Monday etc.). |
%MonthNumber% | The current month number. |
%MonthName% | The current month name. |
%LastErrorNumber% | This will contain a numeric error number returned from an Action that has failed for some reason. |
%LastErrorText% | This will contain a description of the last error. |
%FreeDiscSpace% | The current system drive free space in bytes. |
%Root% | The solution root folder. Corresponds to: ProgramData\Parker Software\ThinkAutomation.NET\%SolutionName%\ |
%AutomationLog% | The current Automation execution log for the message. |
%MessageSourceName% | The name of the Message Source for the current message. |
%AutomationName% | The name of the Automation executing for the current message. |
%AutomationId% | The id of the Automation executing for the current message. |
%SolutionName% | The name of the Solution for the current message. |
%SolutionId% | The id of the Solution for the current message. |
%SolutionEmail% | The email address assigned to the Solution. |
%SolutionContact% | The contact name assigned to the Solution. |
%CR% | A carriage return. |
%LF% | A line feed character. |
%CRLF% | A carriage return and line feed. |
%TAB% | A tab character. |
You can also create your own constants for each Solution. See the Solution Constants tab on the Solution Properties page. These Constants can be used on any Automation within the Solution.
The Root Folder
The %Root% system constant will contain a folder path to:
\ProgramData\Parker Software\ThinkAutomation.NET\%SolutionName%\
For example, if your solution name is 'Orders' and your system drive is 'C:\' then %Root% will contain:
C:\Program Data\Parker Software\ThinkAutomation.NET\Orders\
The %Root% field replacement is useful for any Actions that need to save files locally. ThinkAutomation ensures that the folder exists and the ThinkAutomation Message Processor service will always have access to it.
For example: If using the Create Document action to create a PDF document you can set the Save To property of this action to %Root%.
InLine Functions
The field replacement %func% can be used to execute a number of inline functions. The function will be executed and the returned value replaced. InLine functions can be used inside any action entry as with fields/variables.
The format of inline functions is: %func%:FunctionName(Value[,parameter][,parameter])
The value & parameters can be any fixed text or a %field% replacement.
For example, in the text:
Dear %func%:ToProperCase(%fullname%),
If %fullname% was set to 'alice bob' - when replaced the text would be:
Dear Alice Bob,
The following functions can be used:
Function | Details |
---|---|
Upper(value) | Converts the value to uppercase. |
Lower(value) | Converts the value to lowercase. |
ToProperCase(value) | Capitalizes each word in value. |
Right(value,count) | Returns the rightmost count characters in value. |
Left(value,count) | Returns the leftmost count characters in value. |
IndexOf(value,searchtext) | Returns the character position where searchtext occurs in the value. |
Clean(value) | Returns the cleaned version of value. All whitespace, control characters, blank lines are removed. |
PlainText(value) | Returns the plaintext version of value. If value contains HTML then all HTML tags are removed. |
Html(value) | Returns the value as is - without any HTML encoding. Useful when embedding %fields% in HTML email content where the %field% content is already html. |
Trim(value) | Returns the trimmed version of value. |
Truncate(value,count) | Returns value truncated to a maximum length of count. |
SubString(value,start [,number]) | Returns the substring of value starting as position specified in start (zero based). If number is specified then the number of characters from the start position is returned, otherwise the characters from start until the end of the value are returned. |
Replace(value,find,replacewith) | Returns the value with the find parameter replaced with the replacewith parameter. |
PadLeft(value,characters) | Returns the value padded with spaces to the left if required to reach the total number of characters. |
PadRight(value,characters) | Returns the value padded with spaces to the right if required to reach the total number of characters. |
Format(value, formatstring) | Returns the formatted value using the formatstring. Formatstring can be any .NET format string. |
Length(value) | Returns the number of characters contain in the value. |
EmailAddress(value) | Returns the first email address found in value. |
Url(value) | Returns the first URL found in value. |
Base64Encode(value) | Returns the base64 encoded version of value. |
Base64Decode(value) | Returns the text value of the base64 encoded value. |
URLEncode(value) | Returns the URL encoded version of value. |
URLDecode(value) | Returns the text value of the URL encoded value. |
DateAdd(value,interval,number) | Returns a date with number of days, months, seconds or years added. The interval should be s=seconds,n=minutes,h=hours,d=day,yyyy=years. |
DateDiff(interval,date1,date2) | Returns a numeric value for the interval between date1 and date2. The interval should be s=seconds,n=minutes,h=hours,d=days,ww=weeks,yyyy=years. |
Day(value) | Returns the day number if value is a date. |
Month(value) | Returns the month number if value is a date. |
MonthName(value) | Returns the month name if value is a date. |
Year(value) | Returns the year number if value is a date. |
HyperLink(value,linktext) | Returns a HTML ref. The first URL or email address found in value will be used for the link URL. The linktext parameter will be used for the hyperlink text if specified. |
PlainTextToHTML(value) | Returns HTML from plaintext. Converts all line-feed characters to , encodes special characters and encloses any URLS or email addresses in tags. |
Format Examples:
Order Date: %func%:Format(%Msg_Date%,U) :
replaced the text would be:
Order Date: 09 November 2020 09:00:00 :
If a parameter includes a comma you need to enclose it in quotes. Eg:
Order Date: %func%:Format(%Msg_Date%,"hh:mm tt, ddd-MM-MMM yyyy gg") :
Would be:
09:00 AM, Mon-11-Nov 2020 A.D.
Automation Actions
An Automation can contain any number of Actions. Each of the actions are optional. You can run one or more of the actions depending on your requirements. You can add multiple instances of each action type - so for example, you can send multiple Outgoing emails by adding multiple Send Email actions.
To add an Action double-click an action in the Toolbox, or press ENTER on the selected action. You can also drag and drop an action to the Actions List. You can also add an action by typing the action name and selecting from the list. Press the TAB key to select the first action in the list based on the letters you have typed.
When you add an action the corresponding property page for the action type will be displayed. To edit an existing action double-click it or press ENTER. When editing an action property page, each action property that accepts text data can include %field% replacements. Drag a %field% from the variables list on to the property or type the %field% name. These %field% holders will be replaced with the Extracted Field, Variable, Built-In Field or Constant value when the Automation executes. See: Field Replacements.
When a Message is processed the actions will be executed in the order they appear in the Actions list. You can re-order actions using Move Up/Move Down buttons.
You can create If [else] End If or Select Case blocks to conditionally execute blocks of Actions and you can assign a Condition to each action.
ThinkAutomation includes a default set of built-in actions (shown below). You can also add additional Custom Actions from our on-line library or create your own using the Custom Action Designer
Tip: When designing your Automation you should disable the Message Source. This will prevent messages being retrieved until you have completed and tested your Automation. You can still send test messages to process using the Send Message option when the Message Source is disabled.
Available Built-In Actions
ThinkAutomation includes a collection of built-in Actions for common tasks. You can also download more Actions from the on-line library and you can create your own custom actions using the Custom Action Designer.
Not all actions may be listed here. Parker Software regularly adds additional Action types.
Common
- Extract Field : Extract data from the incoming message and assign to a field name.
- Set Variable : Assign a value to a variable.
- Execute Script : Execute custom C# or Visual Basic .NET code.
- Update A Database : Update a SQL database using fields extracted from the incoming message.
- Process Attachments : Save incoming attachments to folders.
- Comment
Data
- Lookup From A Database : Execute a SQL database query and assign columns to Variables.
- Open Database Reader : Open a database reader for use with a For..Each block.
- Execute A Database Command : Execute a database command or stored procedure.
- Update A Database Using Custom SQL : Execute custom Update or Insert commands.
- Update MongoDB : Create or update MongoDB documents.
- Lookup From A MongoDB Database : Lookup a document from a MongoDB database and assign it to a Variable.
- Update Excel File : Update A Microsoft Excel file.
- Update CSV File : Add a row to a CSV file.
- Counter: Update a counter value.
Outgoing
- Send Email : Send an outgoing email. Emails can also be flagged as scheduled to send on a future date.
- Remove Scheduled Outgoing Message : Remove scheduled emails.
- Forward Original Message : Forward the incoming message and optionally add or drop attachments.
- Wait For User Response : Request confirmation from a user before continuing execution.
- Send Appointment : Creates an appointment in any iCalendar compatible Calendar Server.
- Send Slack Message: Send a message to a Slack channel.
Documents
- Create Document : Create a formatted document which can include %field% replacements.
- Convert Document : Convert a document or incoming attachment from and to various formats.
- Convert Document To Text : Converts documents from various formats to plain text.
- Convert PDF Document : Convert a PDF document or attachment to various formats.
- Sign PDF Document : Add a digital signature to a PDF document.
- Save As PDF : Save the incoming message or any html file or URL as a PDF document.
- Word Merge : Performs a mail merge on a Word document or Attachments and saves the merged document as a new file.
- Print : Print the incoming message and/or attachments.
- Run A Report : Creates a report using a pre-defined report template and exports it to various formats.
Office 365
- Get/Update Contact : Get or update a contact for an Office 365 account.
- Create Appointment : Create an appointment for an Office 365 account.
- Send Teams Message: Send a message to a Microsoft Teams Channel.
General
- String Operation : Perform various operations on string values.
- Date Operation : Perform various operations on date values.
- File Operation : Perform various operations on files & folders.
- Math : Perform mathematical calculations and save the result to a variable.
- Parse CSV Line : Extract column data from comma separated text value.
- Encryption : Encrypt/decrypt text data or files.
- Compression : Compress/decompress text data or files.
- Create Hash : Create hash values for text data or files.
- Set Logging Level : Set the amount of detail recorded in the Automation log.
- Create Passcode : Creates a random Passcode and assigns the value to a variable.
- Find and Replace : Finds and replaces text in any variable.
- Create JSON : Create a Json Document.
- Read/Write Text File : Read or write to a text file.
- Tokenize : Tokenize any text.
- Text To Speech: Convert text to a speech WAV file.
Network
- DNS Lookup : Performs a DNS Lookup and assigns the returned data to a variable.
- Ping : Pings any host and returns the results to a variable.
- Execute Secure Shell Command : Execute SSH commands against any host.
CRM
- Get CRM Entity : Reads entity values from a CRM system.
- Update/Create CRM Entity : Adds data to a CRM system.
Web
- HTTP Get : Reads any web page and assigns the returned HTML or plain text to a Variable.
- HTTP Post : Post data to any web page using a HTTP POST.
- Download File : Download a file via HTTP.
- OAuth SignIn: Obtain a authorization token from an OAuth end point.
- Cloud Storage: Download or Upload files to various cloud storage providers.
- Read JSON Document : Parses a JSON document from any URL and assigns element values variables.
- Wait For Webhook: Waits for a 3rd party webhook call.
- Call A Soap Web Service : Executes a SOAP or .NET Web Service and returns the results to variables.
- FTP Upload : Uploads files or attachments to an FTP or SFTP server.
- FTP Download : Download files from an FTP or SFTP server.
- Get Browser Info : Extract browser name, version and operating system info from a User Agent.
Location
- Translate : Translate text from one language to another and assign the result to a variable.
- Detect Language : Detects the language of any text and assigns the language code to a variable.
- Speak Text : Returns a URL of a WAV or MP3 file containing spoken text in the desired language.
- GeoIP Lookup : Performs a GeoIP lookup for any IP address, domain/email.
Twilio
- Twilio Make A Telephone Call : Make a telephone call and connect two numbers.
- Twilio Send SMS Message : Send a SMS message via Twilio.
- Twilio Wait For SMS Reply : Send a SMS message via Twilio and wait for a reply.
- Normalize Phone Number : Convert a phone number to the correct internationalized version for use with Twilio.
Sentiment
- Get Sentiment Score : Performs Sentiment Analysis on any text and returns the score to a variable.
- Train Sentiment Analyzer : Trains the Sentiment Analysis database.
Azure
- Azure File : Download or Upload files to Azure Storage shares.
- Azure File Get Link : Get URLs to files in an Azure Storage share.
- Azure Cosmos DB : Update Or Query Documents In A Cosmos Container.
- Azure Blob : Get or Put Azure Blobs.
- Azure Table : Get or Put Azure Table Entities.
- Azure Queue : Get or Put Azure Queue Messages.
System
- Execute PowerShell: Execute PowerShell commands and return results.
- Run A Program: Execute a Windows executable file.
Custom Actions
ThinkAutomation also includes Custom Actions. These are additional actions that can be downloaded from our on-line library. You can add actions from the on-line library for use on any of your Automations.
On-line Library
To explore the online library, click the Custom Actions tab on the ThinkAutomation Studio ribbon and then click Explore Online Library button.
You can then view custom actions in the online library. Use the Search box to search for specific terms. Select a custom action that you wish to use and then click Install. This will download the custom action from the online library and add it to your local library. The custom action can then be used on any of your Automations in the same way as the built-in actions.
Create Your Own
ThinkAutomation Professional Edition includes the ability to create your own Custom Actions. Custom Actions include a UI builder for configuring the Action settings and a C# or VB.NET editor for editing the execution code. Once a Custom Action has been created it appears in the available actions list and can be used like any other action on any Automations. You can also share your custom action with the ThinkAutomation community.
Extracting Fields
For each Automation you can create any number of Extract Field actions. An Extracted Field is a distinct piece of data that ThinkAutomation will extract from the incoming message and assign it a 'Field Name'. You can use these extracted field values on other action properties using %Field% replacements.
To create an Extracted Field drag the Extract Field action to your Automation.
Testing Automations
During Automation development you can test your Automation without enabling the Message Source. Click the Send Message button on the Automation actions list toolbar. Enter the message text and click Send.
The test message will be processed immediately. The Results and Automation Log will be displayed along with any errors and Comment action values.
Use the Comment & Return actions to provide feedback. Comments will be shown in the Send Message view. Comments can include %field% replacement, so if you need to see the value of a variable - simply add a Comment action containing the %fieldname%.
The Automation %Return% value will also be displayed if you have added any Return actions.
Undoing Saved Changes
The ThinkAutomation server automatically keeps a record of all changes made to Automations. You can revert to the previous version by clicking the Revert button on the Automation actions list toolbar. You can continue to do this until the Automation is reverted back to the first version.
Automation Flow
Logical operations allow you to control the flow of actions, call other Automations and conditionally execute actions (or blocks of actions).
Call Automation
The Call action enables you to call another Automation with a value and assign the result to a variable. Select the Automation to call - this must be within the same Solution or an Automation saved to the Library. From the With Message Body Set To list - select the variable to pass to the called Automation. The called Automation will receive this value as its incoming message body value (%Msg_Body%). You can also optionally add Attachments.
Wait For Completion
Automations can return a value using the Return action. Enable the Wait For Completion option and select the variable to receive the returned value from the Assign Return Value To list. The current Automation will wait until the called Automation has completed.
If Wait For Completion is not enabled, then a new message for the selected Automation will be added to the process queue. The current Automation will continue without waiting for the new message to be processed.
Note: Called Automations can also Call other Automations. An Automation cannot call itself. You should ensure that called Automations do not in turn Call the parent - as this would result in a loop.
Return
Ends execution of the Automation and returns a value. If this is the parent Automation for the incoming message then the returned value will be saved in the Message Store - otherwise the value will be passed back to the calling Automation.
Automations do not have to return a value. If all actions complete for an Automation then it will return automatically with a blank return value.
The return value can be fixed text or %field% replacements or a combination. For example, the return value can be set to: 'New Order: %OrderNumber% For Customer %CustomerName%'.
Returned values are stored against the processed message in the ThinkAutomation Message Store. You can view the Message Store to see returned values for each message. The Return value will also be displayed if you use the Send Message option in the Studio to manually send a message to an Automation.
Showing Return Values On Web Form Message Sources
If you use the Web Form message source then the Return value can also be displayed to the web user after the form is submitted. Enable the Wait For & Include Automation Results In The Confirmation Message option on the Message Source Web Form properties.
If the Return value contains HTML (eg: 'Your order number is: \<strong>%OrderNumber%\</strong>') it will be formatted when shown to the user. If the Return value is Markdown then the markdown will be converted to HTML (eg: 'Your order number is: **%OrderNumber%**').
If.. Then.. Else.. End If
Conditionally executes a group of actions based on a Condition.
When you drag an If Action onto the actions list the Condition Builder will be displayed.
Here you create a Condition that will be tested. The condition must be true to start the If block otherwise processing moves to the next Else or End If statements.
In the If column you select a message property or one of your Extracted Fields or Variables.
In the Is column you select one of the following:
- Equal To
- Not Equal To
- Less Than
- Greater Than
- Less Than Or Equal To
- Greater Than Or Equal To
- Is Blank
- Is Not Blank
- Contains
- Does Not Contain
- Starts With
- Ends With
- Length Equal
- Length Less Than
- Length Greater Than
- Is A Valid Email Address
- Is Not A Valid Email Address
- Current Hour Greater Than
- Current Hour Less Than
- Current Minute Greater Than
- Current Minute Less Than
- Weekday Number Equal To
In the Value column you can type a value to compare against or select one of your variables.
Click the Add button to add another line. The new line can be assigned as an AND or OR clause.
Each If statement must have a matching End If.
If blocks can be nested inside other If Blocks.
You can also assign a Condition to individual actions using the Condition tab of the Action properties page.
Select Case.. Case.. End Select
Creates a Select Case block to conditionally execute a group of actions in the matching Case block.
When you drag a Select Case action onto the Actions list you will be asked for a Value. Enter a value or a %field% replacement.
A Select Case block will then be created.
Click a Case action to define the condition for each Case statement.
The Is can be:
- Equal To
- Not Equal To
- Less Than
- Greater Than
- Less Then Or Equal To
- Greater Than Or Equal To
- Contains
- Does Not Contain
- Else
Enter a Value or %field% replacement to compare against the Select Case Value
If the Select Case Value matches the Value of the Case statement then the Actions in the Case block will be executed. Drag any number of actions inside the Case block to execute. Execution will then move to the End Select action.
You can drag additional Case actions to the Select Case block.
The Case Else block will be executed if no matched Case actions are found.
Each Select Case block must have at least 1 Case action and end with an End Select.
Select Case blocks can be nested - so the Case actions can include further Select Case blocks.
For Each Loop.. Next Loop
Allows you to create a loop based on the following:
- Message Recipients
- Message Attachments
- Message Keywords
- Message Headers
- Extracted Fields
- Lines contained in any variable.
- Comma Separated Values contained in any variable.
- Email addresses, URL's and Tokens contained in any variable.
- Data Reader Rows (See: Open Database Reader)
- Variable Value
Inside the loop you can assign the values of the current loop item and current iteration count to variables. You can then use these values in actions within the loop.
For example, when looping on Recipients you can assign the Email Address & Name of the current recipient in the loop to variables by selecting from the Assign To drop downs.
When looping on Lines the Lines In value will be split into lines (based on carriage returns and/or line feeds). Each non-blank line will then assigned to the loop value.
When looping on Tokens the Tokens In value will be split into words and tokens.
When looping on Keywords the incoming message body will be split into unique words (excluding common words).
When looping on a Variable Value - this assumes the variable is numeric. The loop executes n times - where n is the variable value.
You then place actions to execute inside the For Each - Next Loop block.
You can exit a loop using the Exit Loop action. This can be placed in an If block if you need to exit a loop based on a condition.
Label.. Go To Label
You can create multiple Label actions within an Automation. Each Label is given a name. You can use the Go To Label action to move processing to the label specified.
Comment
Automations can contain any number of Comment actions. By default comments do nothing. You can space out Actions in your Actions list by adding blank comments.
If the Show In Log option is enabled then the comment value will be added to the Automation Log. The Comment text can contain %Field% replacements.
If the Show Notification Popup In ThinkAutomation Studio option is enabled then the comment will appear in the ThinkAutomation Studio for any active Studio users as a popup notification when the Automation executes.
On Error
The On Error action enables you to control what should happen if an error occurs on any action following the On Error action. You can add any number of On Error actions to an Automation.
Each On Error action can be set to:
- Resume Next - just report the error in the log and continue.
- Retry - retry the errored action. You specify the Retry Count and Pause interval. If the action still fails after the retries you have the option of sending an error report email and pausing the Message Source.
- Go To Label - move execution to the specified label and optionally send an error report email.
- Execute Automation - transfer execution to another Automation.
If no On Error action is used on an Automation then by default ThinkAutomation will stop execution when an error occurs and pause the Message Source. This enables you to investigate the error before more messages are processed. You must then re-enable the Message Source to continue processing.
Viewing The Message Store
You can use the ThinkAutomation Studio to view the Message Store. Messages are added to the Message Store as they are received by the Message Sources. Click the Message Store tab on the ThinkAutomation Studio ribbon.
Messages are viewed by Solution - to change the currently selected Solution - click the Solution drop down menu on the Ribbon.
All Automations within the Solution will be shown. Select an Automation to view processed messages.
Messages are shown in pages of 1000 messages per page. Use the Page <
and >
selectors to move pages or press PgUp/PgDn buttons.
You can search for text using the search bar. Messages will be searched by Subject, From/To address and Automation Return value. You can also filter messages by clicking the filter icon in the message column headers.
Double click a message to expand the details. Click the Open button to view the full message body, attachments, headers and the Automation Log for the message.
Reprocessing Messages
Individual messages can be reprocessed. Select a message (or range of messages) and click the Reprocess button. The selected messages will be added back to the process queue and processed again by the Automation.
Deleting Messages
You can remove individual messages from the Message Store or you can remove all messages for the selected Automation.
Viewing Outgoing Messages
If you use the Send Email action to send scheduled emails on future dates then these scheduled messages are held in the Outbox until they are sent. The Outbox can be viewed by clicking the Outbox button on the Message Store view. You can remove items from the Outbox to prevent them from being sent.
Viewing Sent Items
Any outgoing emails sent using the Send Email action will be shown in the Sent Items view. You can disable outgoing emails being stored using the Automation - Properties - Save Outgoing Emails To Sent Items option.
Viewing The Logs
ThinkAutomation maintains logs for Message Source readers & Automation executions. Click the Logs tab on the ThinkAutomation Studio ribbon.
Log entries will be added in real time. You can filter log lines by clicking the Filter icon in the column headers. For Automation Log lines - double clicking a log line will open the Automation actions list with the relevant Action selected.
Automation Logs for individual messages can be viewed by viewing the Message Store and opening a message detail.
Action Types
Common
Extract Field
Find and extract data from the incoming message body or a variable and assign the extracted data to a field name.
When creating your first Extract Field action it is a good idea to paste a copy of the message body you are extracting data from into the Helper Message box. ThinkAutomation will then highlight the data it will extract for each field as you specify the extraction properties. The Helper text will be saved with the Automation - so you only need to paste it once. For Database message source types the Helper Message text will be auto populated when you use the Test query option.
Enter a Name for the field.
Extract Field From
Select the Field or Variable that you want to extract data from. This defaults to %Msg_Body% - which means extract data from the body of the incoming message.
Finding Data
Find & Extract
In the Find & Extract section you specify how ThinkAutomation will find the data from the Extract From value.
Start From Last Extract Point
Normally ThinkAutomation moves the 'extraction point' as it moves through the Extract From value extracting data for each Extract Field action. Disable this option if you want ThinkAutomation to start from the beginning of the data when it looks for this field. Once a field is extracted the extraction point will be set to the end of the extracted data for the next Extract Field action. The next field extraction starts from this point unless you disable this option.
Case Sensitive
By default ThinkAutomation ignores case when it looks for fields. So 'order number' and 'Order Number' with both match when searching for 'Order number'. Enable this option if you want to perform a case sensitive search.
Is Repeating Block
This option sets the field as a repeating block. If set ThinkAutomation will enter a loop and repeat the extraction of this field until it finds the next field to extract (or the end of the message). You can Call another Automation with the results of each block loop to perform further actions/extraction.
Look For
Enter the text that ThinkAutomation should look for when searching the data for this field. This should be the text that is the same for each message and uniquely identifies the field.
Then Look For
Enter an additional text string that ThinkAutomation looks for AFTER it has found the above text. This is optional, but is useful when data is formatted in the message using an unknown number of tabs or spaces. Consider the following line:
Customer code : ABC
We would search for 'Customer code' and then ':' because we don't know how many spaces are between 'Customer code' and ':'. The field extraction would then start after the ':'.
In both the Look For and Then Look For entries you can make use of Regular Expressions to assist with searching.
Find Next None-Whitespace
You can set the Look For or Then Look For to a single dot '.' - a single dot means find the next none-whitespace character.
This can be useful when searching for data. For example, suppose the text contains:
Your serial number is: 1234-5678
If we wanted to extract the Serial Number we would be to look for 'Your serial number is:' and then look for '.' - which would effectively look for any none whitespace after 'Your serial number is:'.
Find Blank Line
You can set the Look For or Then Look For to '\<BlankLine>' or you can include it, eg: 'Customer: \<BlankLine>'. The \<BlankLine> marker searches for a single blank line. A 'blank line' is LF + LF or CRLF + CRLF. To find multiple blank lines use '\<BlankLine>\<BlankLine>'
Extract From Json
If the Extract From contains Json data then you can easily find and extract a specific Json path. Enter or select the Path. If Json sample data has been pasted into the Helper Message then the paths list will be populated automatically.
If the selected Path is an array then you can extract a single array value or all values. Enable the Extract All Array Values To CSV to extract all array values to a CSV string. For example, consider the following Json:
{ "cars":[ "Ford", "BMW", "Fiat" ] }
Setting the path to cars[0] would extract "Ford". If the Extract All Array Values To CSV is enabled then the extracted value would be "Ford,BMW,Fiat".
Extracting Data
Click the Extract Data tab to define how ThinkAutomation will extract data for this field once it has found it.
There are a number of options you can use to extract data (all options start the extraction after the Look For, and optionally Then Look For text):
Until End Of Line
Extract all data up to the end of the line (or the end of the data if there are no more lines).
Until End Of Message
Extract all data up to the end of the data.
Until Any Of These Characters
Extract data until any of the following characters are found. You can then specify a list of characters to search for. If any one of the characters are found then extracting will stop.
Until These Characters
Extract data until specific words or characters are found. You can then specify characters, words or phases to search for. Extraction will stop when the words are found. Regular expressions permitted. You can use the \<BlankLine> marker to search up to the next blank line.
Until These Many Characters
You can manually specify a number of characters to extract.
Until End Tag
Select this option if you are extracting HTML or XML tags. If the Look For value is a tag, for example: \<mytag> then ThinkAutomation will extract up to the end tag \</mytag>. This option will be automatically selected on new fields if you enter a tag in the Look For entry.
Use The Look For Expression
Select this option to extract the field INCLUDING the Look For expression. This is useful when you want to find AND extract using a regular expression. The data would be extracted starting from the Look For value. For example, if the 'Look For is set to the regular expression: [a-zA-Z0-9._-]+@[a-zA-Z0-9_-]+\.[a-zA-Z.]+
(which is the regular expression for an email address) and the Use The Look For Expression option is enabled.. then the first Email address will be found AND extracted. If the Use The Look For Expression is not enabled then the first email address will be found and extraction will start AFTER the end of the email address.
Note: The Extract 'Until' options do not apply if you are using the Extract From Json option.
Clean And Trim Blanks
Enable this option if you want the extracted data to be cleaned and trimmed. This will remove any leading or trailing spaces, tabs or carriage return/line feed/control characters from the field data.
Remove First/Last
You can also select to remove a number of characters from the beginning and end of the extracted data.
Additional Attributes
Select the Attributes tab to define optional additional attributes for the field.
Default Value
Enter a value that will be assigned to the field if no data is found or the extracted value is blank.
Case
This option allows you to change the case of extracted value or to apply Word Capitalization.
Validate
In this section you can define validation rules for the extracted field and you can define what action ThinkAutomation should take if the extracted data is invalid.
Select the Validate option to enable validation for this field. Select Cannot Be Blank Or Zero option if the field must be a value (or be non-zero in the case of numeric fields). For numeric fields you can also select a valid Numeric Range. The Must Be In List option allows you to define a list of valid values. In the Choices entry specify the list of valid values for the field. Separate each value with a | (pipe) character. For example, if the field must be Y or N - specify 'Y|N'
If Data Is Invalid
Here you specify what ThinkAutomation should do if the extracted field data is invalid. There are two options:
-
Set Field To Default Value - select this option if you want ThinkAutomation to replace the extracted data with the field's default value (or blank if no default it specified).
-
Throw Error - select this option if you want ThinkAutomation to cancel execution of the Automation for the current message.
Mapping To Database Columns
If you are going to use the Update A Database action in your Automation, then you can map extracted fields to tables & columns in the database you want to update. ThinkAutomation then builds the database update commands automatically.
Note: You can also use the Update A Database Using Custom SQL action type which allows finer control over database updates.
Select the Database Update tab to map the extracted field to a table & column in your database that you want ThinkAutomation to update.
Enter the Update Table Name that the field will be updated on. This table must already exist in your database. Multiple fields can use different table names if required - but the tables must be part of the same database.
Enter the Update Column Name in the table that the ThinkAutomation field will be mapped to.
Field Type
Select the Column data type in your database for the selected Column Name.
Max Field Length
You can optionally specify the maximum allowed field length for the database field. ThinkAutomation will truncate the field before updating the database if the extracted data is greater than the maximum length. Use this option to avoid database errors that will be raised when field data is inserted into your database that is greater than the defined length. This option applies to Text field types only. Set to zero if you do not want ThinkAutomation to truncate the field.
Key Field
Enable this option if this field is a Key Field. Key fields allow you to control how your database is updated. If you create one or more key fields, ThinkAutomation will first check if a record exists in your database using the key field values. If a record already exists then the existing record will be UPDATED otherwise a new record will be INSERTED.
Repeating Blocks
Often messages contain repeating sections. Most of the time you need to run a process or update a database for each individual block of the repeating section. ThinkAutomation allows you to do this by defining a field as a Repeating Block. When a field is defined as a repeating block, ThinkAutomation will enter a loop and extract each block of the repeating section in turn. Another Automation can then be called with the value of each block.
For example:
Suppose you receive the following message:
Name : Howard Williams Company : PSL Order Ref: 1234 Product : WHO1 Qty : 1 Product : WHO2 Qty : 2
The Product and Qty fields can repeat any number of times depending on what the customer has ordered.
We can define the Product & Qty fields as a single field and set them as a repeating block. The repeating block can then be passed to another Automation for processing on it's own.
We would define the extraction of the above fields as follows:
- Name = Extract Field From %Msg_Body% Look For "Name" Then ":"
- Company = Extract Field From %Msg_Body% Look For "Company" Then ":"
- Order = Extract Field From %Msg_Body% Look For "Order Ref" Then ":"
- Block = Extract Field Repeating Block From %MsgBody% Look For "*" Call Process Order Lines
The Name, Company and Order fields we extract by looking for the Name:, Company: and Order Ref: field headers and extract until the end of the line.
For the Block field we set the Look For to '*' - which means start from the next character after the last extract point:
We set the Extract Data option to Until These Characters - and set this to '\<BlankLine>' which means 'the next blank line'.
You then enable the Is Repeating Block option on this field. ThinkAutomation will then repeat the field extraction until it either finds the next field in the extracted fields list or the end of the message.
We then create another Automation. In this case - called 'Process Order Lines'. This Automation will receive each block of the repeating section as a new message. The 'Process Order Lines' Automation can then extract the Product and Qty fields and perform further processing.
When you enable the Is Repeating Block option the Call tab becomes visible on the Extract Field properties.
On the Call tab of the repeating block field we select the Automation to call. The Body Text should be set to the value that you want this Automation to receive for each block. The Body Text should contain the %ExtractedValue% replacement field - this will be replaced with the current block text on each call. You can add additional field replacements if you also want to pass previously extracted fields. For example:
Name : %Name% Company : %Company% Order Ref: %Order% %ExtractedValue%
For each block the 'Process Order Lines' Automation would be called with messages set to:
Name : Howard Williams Company : PSL Order Ref: 1234 Product : WHO1 Qty : 1
and then..
Name : Howard Williams Company : PSL Order Ref: 1234 Product : WHO2 Qty : 2
Set Variable
Creates or sets a variable.
In addition to Extracted Fields you can also make use of Variables in your ThinkAutomation Actions.
A Variable is simply a place holder for a specific value.
Many other Actions can return values which can be assigned to Variables. In these cases you should create the Variable first by simply dragging into the Actions list and giving it a name before using it other Actions.
Each Variable must be given a Variable Name.
You can optionally assign it a Value. The Value can be a fixed value or the value of another variable, extracted field or combination (using %field% replacements).
Operations
The Operation option allows you to perform an optional additional operation on the Value before it's assigned to the Variable. The following operations are available:
Category | Details |
---|---|
No Operation | Just Assign |
Convert | HTML To Plain Text |
Convert | HTML To XML |
Convert | HTML CSS To Inline Style Attributes |
Convert | Markdown To HTML (see: Markdown Notes) |
Convert | Plain Text To HTML |
Convert | To Lower Case |
Convert | To Upper Case |
Convert | To Word Capitalized |
Date | Add Days To |
Date | Subtract Days From |
Extract | Alias From Email Address (eg: 'test' from 'test@mydomain.com') |
Extract | All Email Addresses |
Extract | All URLs |
Extract | Concepts |
Extract | Directory Name Only From Path & Filename (eg: 'C:\Documents\' from 'C:\Documents\mydocument.pdf') |
Extract | Domain From Email Address (eg: 'mydomain' from 'test@mydomain.com') |
Extract | Filename Only From Path & Filename (eg: 'mydocument.pdf' from 'C:\Documents\mydocument.pdf') |
Extract | File Extension From Filename (eg 'pdf' from 'mydocument.pdf') |
Extract | Filename Without Extension (eg 'mydocument' from 'mydocument.pdf') |
Extract | First Email Address Only |
Extract | First Line |
Extract | First Sentence |
Extract | First URL |
Extract | First Word |
Extract | Keywords |
Extract | Normalize Words |
Extract | Summarize |
Mask | Mask Credit Card Numbers (replaces any credit card numbers with ***) |
Mask | Mask Profanities (replaces any profanity words with ***) |
Numeric | Add To |
Numeric | Decrement |
Numeric | Get Length |
Numeric | Get Word Count |
Numeric | Increment |
Numeric | Subtract From |
String | Add Space Character To End |
Create | Global Unique Identifier (Guid - In hex or decimal format) |
Create | ObjectId (MongoDB style unique string) |
String | Normalize Line Endings (Cr+Lf) |
String | Normalize Line Endings (LF Only) |
String | Prepend |
String | Remove Invalid Filename Characters |
String | Sort Lines Ascending |
String | Sort Lines Descending |
Transform | Base 64 Decode |
Transform | Base 64 Encode |
Transform | Compress |
Transform | Create MD5 Hash (Hex Encoded) |
Transform | Create MD5 Hash (URL Encoded) |
Transform | Decompress |
Transform | Decrypt |
Transform | Encrypt |
Transform | Quoted Printable Decode |
Transform | Quoted Printable Encode |
Transform | SHA256 Hash (Base64 Encoded) |
Transform | SHA256 Hash (Url Encoded) |
Transform | SHA512 Hash (Base64 Encoded) |
Transform | SHA512 Hash (Url Encoded) |
Transform | URL Decode |
Transform | URL Encode |
Trim | All Whitespace |
Trim | Blanks |
Trim | First And Last Characters |
If the Append To Existing Value option is enabled then the Value will be appended to the existing value for the Variable. Care should be taken using this if the Persist Value option is enabled and the variable value is not cleared at some point - within the Automation, to avoid ending up with very large strings.
Persisted Variables
If the Persist Value option is enabled then the Variable value will be saved by the ThinkAutomation Server between messages processed. For example: If an Automation sets a persisted variable called 'var1' to 'abc' on message 1, when the Automation next executes for message 2 then variable 'var1' will be automatically set to 'abc' before the Automation starts processing. Persisted variables are stored in the Message Store database - so will be persisted even when the ThinkAutomation Server is restarted.
Persisted Variables are shared within the Solution. This means that if you have persisted variable 'var1', then any Automations that use this variable name will receive the same persisted value if the Persist Value option is enabled for each instance.
Execute Script
Executes custom C# or Visual Basic .NET code.
You can create a custom script to execute custom logic. Scripts can be written in C# or Visual Basic .NET. Select the Language to use before you edit your script code. Each Script Action must be given a Script Name.
When ThinkAutomation executes a Script action it calls the execute method. This is the entry point. Inside your script you can add any number of additional methods. The returned value from the execute method will be assigned to the Assign Return Value To variable.
Scripts are compiled by ThinkAutomation when they are executed for the first time. Once compiled, scripts will execute as fast as built-in actions. Scripts will be recompiled if they are changed.
Accessing Automation Variables
Scripts can access and update existing Extracted Fields or Variables. To access a value use:
message.GetValue("name");
Where 'name' is an existing Variable or Extracted field name.
You can drag and drop a variable onto the script editor - it will be converted to the above code.
You can also access any of the built-in fields, solution constants & system constants:
message.GetValue("%Msg_ToWithNames%"); // the enclosing % signs are optional.
To set an existing Variable or Extracted Field use:
message.SetValue("name","value");
Where 'name' is an existing Variable or Extracted Field name. The 'value' can be any string value.
Accessing Message Properties
The message
object contains read-only properties for the currently executing message. For example: message.Subject
can be used to access the Subject directly. Main properties:
Property Name | Details |
---|---|
MessageId | The id of the incoming message. |
MimeText | The full mime text of the incoming message. |
Subject | The message subject. |
BodyPlainText | The plain text body. If the incoming message is html without a plain text body then this property will return the plain text version of the html (with all tags removed). |
BodyHTML | The html body. |
Dated | The message date. |
From | The from address. |
ReplyTo | The reply-to address. |
ToAddress | The to address. |
CC, BCC | The cc / bcc address. |
Size | The message size. |
AutomationName | The name of the Automation currently executing. |
SolutionName | The name of the Solution containing the Automation. |
SolutionEmail | The email address assigned to the Solution. |
TempPath | The path to the temporary files folder for the Solution. |
Accessing Attachments
The message.Attachments
property contains a list of currentMessageAttachment
objects for the current message.
currentMessageAttachment Attachment; foreach (var Attachment in message.Attachments) { string name = Attachment.Name; int size = Attachment.Size; string path = Attachment.Location; }
The Location property of the Attachment object contains the path to the temporary location of the attachment file during Automation execution.
You can also access related items (embedded attachments in email messages) using message.RelatedItems
.
Accessing Headers
The message.MessageHeaders
property contains a list of currentMessageHeader
objects for the current message.
currentMessageHeader Header; foreach (var Header in message.MessageHeaders) { string hname = Header.Name; string hvalue = Header.Value; }
Adding To The Automation Log
You can add an entry to the Automation Log using:
message.AddToLog("script message");
Handling Exceptions
To add an error to the Automation Log use:
message.AddErrorToLog("A script error occurred");
Inside any methods you create in your script you should always use Try .. Catch blocks to catch any Exceptions and then use the message.AddErrorToLog method to pass details of the error back to the Automation. This will then show any script errors in your Automation log. For example:
static int ordervalue(currentMessage message) { try { int qty = Convert.ToInt32(message.GetValue("qty")); decimal price = Convert.ToDecimal(message.GetValue("price")); return qty * price; } catch (Exception e) { // Pass the error back to the automation log message.AddErrorToLog("Script Error:" & e.Message); return 0; } }
.NET References
Scripts can reference other .NET assembles. Use the References tab to add additional references. Any .NET referenced assembly must be located in the ThinkAutomation program files folder or be in the global .NET path.
Http Helper Class
If you need to make http requests inside your execution code, you can optionally use the helpersHttp class which simplifies the process. See: Using The Http Helper Class for more information.
Validating A Script
Click the Check button to validate that the script compiles successfully.
Note: If you want to re-use a script on multiple Automations, you can create a Custom Action.
Update A Database
Updates a database with fields extracted from the incoming message.
The tables and column names used in the SQL commands are specified on the Database Update tab on each individual Extract Field Action. ThinkAutomation will then create the necessary SQL commands automatically.
Select a Database Type to connect to from the list. You must specify a Connection String that ThinkAutomation will use to open the database. Click the ...
button to build the connection string. Click the Test button to verify that ThinkAutomation can connect to the database.
The UPDATE and SELECT commands will only be created if you have defined one or more of your Extracted Fields as Key Fields. ThinkAutomation will then first check if a record exists with the key field values by issuing a SELECT * FROM ... command. It will then execute the UPDATE command if a record is found or the INSERT command otherwise.
You can have only have one Update A Database Action in your Actions List. If you want to update multiple tables within the same database you can specify the different table names against each Extracted Field in the Update Table Name entry - ThinkAutomation will then create separate SQL commands for each separate table being updated.
If you need to update multiple separate databases within the same Automation then you can use the Update A Database Using Custom SQL Action. You can have any number of Update A Database Using Custom SQL Actions within your Automation.
Process Attachments
Saves attachments to specific folders on your file system.
Specify the File Mask for the extensions you want to save. For example: *.pdf to save all files with the extension .pdf. Use *.* to save all attachments. You can create multiple Save Attachment Actions in the same Automation if you need to process different file types differently.
In the Save To Folder select the folder on your file system to save the attachments to. This can contain %field% replacements.
For example: To save all attachments to sub folders based on the senders email address use 'C:\Attachments\%Msg_From%\'.
The directory will be created if it does not exist.
Renaming Attachments
In the Rename Saved Files To entry you can optionally specify a new name for the file. You can use %fieldname% replacements in the Rename to - for example: order%OrderNumber%.csv would rename the attachment order1234.csv if the %OrderNumber% field contained '1234'.
You can use the special field replacement %filename% to use the original file name as part of the renamed file. For example, suppose the incoming attachment was called "orderdata.csv" and the %OrderNumber% field was set to '1234' - renaming to: %filename%No%OrderNumber%.csv would rename the file 'orderdata_No_1234.csv'.
If your rename string doesn't contain a file extension then the original extension will be used. For example: If the attachment is called 'attachment.csv' and you rename it to %OrderNumber% - then the attachment will be renamed '1234.csv' (assuming the %OrderNumber% field has a value of '1234').
You can assign the saved path and file name to a ThinkAutomation variable. Select the variable to assign using the Assign Saved Path To list. Multiple saved attachments will be separated by commas.
Overwrite Existing Files
Check this box if ThinkAutomation should overwrite existing files.
Append Key To Filename To Make Files Unique
If this option is selected then ThinkAutomation will append a date and time stamp to the file name (including renamed files) to ensure that the file name is unique. The time stamp is in the format yyyymmddhhmmss_x
For example: order123420120307122033_1.csv
Would be save for file order1234.csv on 7th March 2012 and 12:20:33. The _1 indicates that this is the first attempt at saving using this file name. If a file already existed with the same time stamp (for example, if ThinkAutomation was processing multiple emails very quickly) the counter would be increased until a unique file was found.
Include Inline Attachments
For HTML emails you can also save inline attachments - these would usually be images embedded in the HTML that don't appear as regular attachments.
Further Attachment Processing
Other actions (such as Convert Document, Convert PDF Document, FTP Upload, Azure Blob etc.) allow specific processing of Attachments.
Data
Lookup From A Database
Reads records from an external database and assigns column results to multiple ThinkAutomation variables.
Select a Database Type to connect to from the list. You must specify a Connection String that ThinkAutomation will use to open the database. Click the ...
button to build the connection string. Click the Test button to verify that ThinkAutomation can connect to the database.
Enter the SQL Statement to use to query records from the database. The SQL Statement can contain Parameters. Eg:
SELECT * FROM Person WHERE Id = @Id
For any Parameters you must complete the Parameters list. Specify the Name, Type & Value for each parameter used. Parameter values can be set to %field% replacements. Click the Test button to verify the query.
Assign Individual Columns To ThinkAutomation Variables
In the Column Assignments grid you can map database columns returned from the query to ThinkAutomation variables.
In the SQL Field Name/Number column specify a database field name or position number from the SELECT statement.
In the Assign Result To column select a ThinkAutomation Variable that you want the database field value assigned to.
Assign All Columns To A Single Variable In JSON Format
You can also assign all columns returned by the query as JSON text to a single ThinkAutomation variable. Select a variable from the Assign Row Json To list (optional).
Each column returned by the query will be a JSON value. For example:
{ "PersonId": 1, "PersonType": "EM", "NameStyle": false, "Title": "", "FirstName": "Ken", "MiddleName": "J", "LastName": "Sánchez", "Suffix": "", "EmailPromotion": 0, "AdditionalContactInfo": "", "ModifiedDate": "2009-01-07" }
You can then perform other actions on this value - or pass it to another Automation using the Call Automation action.
If the database query returns multiple rows, then the first row returned will be used. If no rows are returned then assign-to variables will not be assigned.
Open Database Reader
Opens a connection to a database for use with For.. Each Actions
The Open Database Reader Action opens a connection to a database using a SQL query. The connection remains open during Automation execution. You can then create a For..Each loop to read each record returned by the query.
Enter the Reader Name. This is a unique name for the data reader. A single Automation can open multiple data readers - each having a unique name.
Select a Database Type to connect to from the list. You must specify a Connection String that ThinkAutomation will use to open the database. Click the ...
button to build the connection string. Click the Test button to verify that ThinkAutomation can connect to the database.
Enter the SQL Statement to use to query records from the database. The SQL Statement can contain Parameters. Eg:
SELECT * FROM Person WHERE PersonType = @Type
For any Parameters you must complete the Parameters list. Specify the Name, Type & Value for each parameter used. Parameter values can be set to %field% replacements. Click the Test button to verify the query.
Now create a For..Each Action. Specify the For Each option as Data Reader Row In and select the Reader Name.
You can then select a variable from the Assign Data Row Json To selector to be assigned the current row Json. The current row Json will be set for each record returned from the query. For example:
{ "PersonId": 1, "PersonType": "EM", "NameStyle": false, "Title": "", "FirstName": "Ken", "MiddleName": "J", "LastName": "Sánchez", "Suffix": "", "EmailPromotion": 0, "AdditionalContactInfo": "", "ModifiedDate": "2009-01-07" }
You can then perform other actions on this value - or pass it to another Automation using the Call Automation action.
The For..Each loop will continue until all records from the query have been read.
Execute A Database Command
Executes a SQL Command or Stored Procedure with optional parameters and returns multiple return values.
This Action allows you to execute a SQL Statement or Stored Procedure. You can pass any number of parameters and assign output parameters to variables.
Select a Database Type to connect to from the list. You must specify a Connection String that ThinkAutomation will use to open the database. Click the ...
button to build the connection string. Click the Test button to verify that ThinkAutomation can connect to the database.
Select the Command Type. This will be a SQL Statement or Stored Procedure.
Specify the Command SQL statement or Stored Procedure Name depending on the command type. You can substitute parameters using @parametername in the SQL Command statement.
You can pass multiple parameters to your command.
For each parameter in the SQL Statement you must specify the Name, Type, Direction & Size. These must match your stored procedure parameters.
For Output Parameters you can specify the variable to Assign Result To.
For Input Parameters you set the Value - this can be fixed or a %field% replacement.
Update A Database Using Custom SQL
Insert or Update a row in a database using custom SQL.
This Action allows you to insert or update a row in a database based on the results of a select statement.
Select a Database Type to connect to from the list. You must specify a Connection String that ThinkAutomation will use to open the database. Click the ...
button to build the connection string. Click the Test button to verify that ThinkAutomation can connect to the database.
The Insert tab is used to enter any valid SQL statement. You can also optionally enter statements in the Update and Select tabs.
If a select statement is entered in the Select tab, then the SQL entered in the Update tab is executed if the select returns one or more rows. If no rows are returned then the SQL entered in the Insert tab is executed.
The select, insert & update statements can contain parameters (using @parametername).
You must specify the Name, Type & Value of each parameter used. Parameter values can be assigned to %field% replacements.
For the Insert & Update statements you can assign the rows affected to a variable.
Update MongoDB
Insert or Update documents in a MongoDB collection.
Specify the MongoDB Connection String, Database Name & Collection Name.
Enable the Upsert option if you want an existing document returned from the Query to be updated. If no document is returned from the Query then a new document will be inserted. If Upsert is enabled you must specify the Query Json.
Specify the Document Json.
If you want to store a full copy of the incoming message you can use the built-in field %Msg_Json%. If the incoming message body is already Json (for example, if using the Database message source) then you can set the Document Json to %Msg_Body%.
You can use the Create Json action to create a Json document to insert/update.
Lookup From A Mongo Database
Read a document from a MongoDB Collection and assign the Json to a variable.
Enter the MongoDB Connection String, Database Name and Collection Name. Enter the Query json and optionally the Projection and Sort json. Click the Test button to test the connection and query.
You can use %field% replacements in the query. For example:
{ "_id": { "$eq": "%OrderNumber%" } }
Select the variable to assign the returned document(s) to from the Assign To list.
You can then use Extract Field Actions (with the extract Json path option) to extract individual fields from the document.
Update Excel File
Updates a Microsoft Excel Spreadsheet file with fields extracted from the incoming message.
Enter or select the Excel File Name to update.
ThinkAutomation will create the file if it does not already exist. Field names will be written to the first line of the file. Excel does not need to be installed on the ThinkAutomation computer for this Action to work.
The spreadsheet will be in the following format:
ExtractedField1 | ExtractedField2 | ExtractedField3 |
---|---|---|
Value | Value | Value |
If the spreadsheet is blank the header line will be created with each extracted field name.
The data line will be added to the existing data lines with each extracted field.
Update Specific Cells
By default ThinkAutomation adds a row to the Excel Spreadsheet, with a column for each extracted field. You can change this and update specific cells. Enable the Update Specific Cells option. You can then specify specific cell ids (eg: A1, B4, E23 etc) and the value to assign each one.
Note: If the file is located on a network drive the ThinkAutomation Service may not have permission to write to it. You must run the service under a different user.
Note: Do not save the file to your desktop. The ThinkAutomation Services runs under the SYSTEM account, which may not have access to your desktop. Instead, save the file to a regular folder on your C:\ drive or use the %Root% built-in field.
Update CSV File
Create or update a CSV file with fields extracted from the incoming message.
Enter or select the CSV File Name to update. This is optional. If no file name is specified then the created CSV data will be assigned to the variable selected from the Assign To list.
ThinkAutomation will create the file if it does not already exist. Field names will be written to the first line of the file.
Select the file Format of the CSV file. This can be ASCII, Unicode or UTF-8 (default).
Select the Field Delimiter. This is normally a comma, but can be any character. You can select select a | (pipe) character or TAB from the drop down.
Select the Line Terminator. This can be CRLF (Carriage Return/Line Feed), LF (Line Feed Only). CRLF is the default.
Select Don't Add Field Header Line When Creating if you want the CSV file to contain data lines only. By default, when the CSV file is first created the first line will contain the field headers.
Select Use Custom Field List if you want to define your own fields/variables to include in the CSV file. If not selected then just the extracted fields will be used. If you choose to use a custom field list then you can then select the field name/variable or constant to include in each column. You can also specify the field header names.
Optionally select a variable from the Assign CSV Data To list to receive the CSV data.
Note: If the CSV file is located on a network drive the ThinkAutomation Service may not have permission to write to it. You must run the service under a different user.
Note: Do not save the CSV file to your desktop. The ThinkAutomation Services runs under the SYSTEM account, which may not have access to your desktop. Instead, save the CSV file to a regular folder on your C:\ drive or use the %Root% built-in field.
Counter
Updates a counter value for any name/value pair.
This action can be used to update a counter value that is stored by the ThinkAutomation Server. After updating the counter the new counter value can be returned to a variable.
Enter the Counter Name & Value. The Value can contain %field% replacements.
Note: Counters are shared within a Solution. So if a counter on two Automations within the same solution update the same name/value pair then the same counter will be used.
Period
Counters can be maintained per Day, Day Of Week, Month, Year or Static. If a period is selected then a new counter is created for each period. A Static counter has no period.
Operation
You can Increment, Decrement, Get or Set a counter. If Set is selected then you can specify a value.
When a message is processed, ThinkAutomation will lookup the unique name/value pair. A new counter will be created if the name/value pair does not exist.
Any arbitrary data can be counted. For example:
- Messages by day of week (leave Value blank and set the Period to day of week).
- Messages by email address per month (set the Value to %Msg_From% and the Period to month).
- Messages by any Extracted Field or Variable values (payment types, currencies etc) by day, week day, month, year or total.
- Orders by Company Name per year (set the Value to a field/variable holding a company name and the Period to year).
- Emails sent by email address per month (set the Value to the variable containing the receiver address and the Period to month).
The counted Value has a maximum size of 250 characters. Values larger than this will be truncated before being counted.
Select a variable to receive the updated counter value from the Assign Counter Value To list.
Viewing Counters
Counters can be viewed using the ThinkAutomation Studio. Open the Solution properties page and click the View Counters button. You can clear a counter using the Clear button.
Outgoing
Send Email
Sends new outgoing email messages.
You can send multiple outgoing emails to different recipients. Emails can be sent immediately or you can Schedule Send on future dates. Email messages can be sent in text and/or HTML format. You can add attachments to outgoing emails and you have the option of including the incoming attachments with outgoing emails.
Enter the From & To addresses and Subject. The Reply To, CC & BCC are optional.
If you want to send the email to the sender of the incoming message set the To address to the %Msg_From% built-in field.
TIP: The To address should contain the recipient name and email address where possible. This will reduce the likelihood of the recipient mail server marking the email as spam. The format is: name \<email>. For example: Howard Williams \<howard.williams@somecompany.com>. You can use %field% replacements for both parts.
TIP: Adding an Unsubscribe link to your emails will also reduce likelihood of the email being marked as spam. You can create a Web Form message source with an unsubscribe form to process unsubscribes and then include the Web Form URL as a link in outgoing emails.
Attachments
You can attach files to outgoing messages. You can also include all the attachments from the incoming message.
You can add attachments - click the ...
button on the Attach box to add local files. You can also use %field% replacements in the Attach box to include files created by other actions.
Enable the Include Incoming Attachments option to automatically add any incoming attachments with the outgoing email. This will be in addition to any other attachments you add.
Enable the Include Incoming Inline Attachments option to attach incoming inline attachments. Inline attachments are images and other types of file that are included in the body of the incoming email. If this option is enabled then ThinkAutomation will add the inline attachments as regular attachments to the outgoing message.
Message
For the body of the email click the Message tab to enter the message text. Click the HTML tab to compose the HTML portion (you can use either or both). When the email is sent it will include both plaintext and HTML. If HTML is specified, but no plaintext, then ThinkAutomation will automatically create the plaintext portion of the email from the HTML. Both the Message and HTML can contain %field% replacements.
External Content For HTML
For HTML you also have the option of using an External File or URL For HTML. If an external file or URL is specified then this will be read and used for the HTML content. When using an External File or URL then you also have the option to Embed Images. If Embed Images is enabled then any external images used in the HTML will be downloaded and embedded. Not all email clients will display embedded images - so you should test this option before using. If the Convert CSS To Inline Styles option is enabled then any stylesheets in the HTML will be converted to inline style attributes. This provides better email client compatibility.
Markdown
You can use Markdown on the plaintext message. The Markdown will be converted to HTML when the email is sent. To use Markdown to HTML conversion - ensure that the HTML text is blank or left as the default. See: Markdown Notes
Scheduling Messages
Email messages can be sent on future dates using Scheduled Send option.
For example, suppose you have an Automation that responds to a sales order email. The Automation sends the customer a 'thank you' email when the order is received. You could then use the Scheduled Email option to send a follow up email in 30 days time to see how the customer is getting on with their new product.
Any number of scheduled email responses can be setup. ThinkAutomation records the email in the Message Store database along with the scheduled date and time that the message should be delivered.
Enable the Scheduled Send option and specify either Send After n Days or Minutes, or Send On A Specified Date/Time and enter the date/time to send the email.
Assign Mime Text To
You can also optionally assign the MIME text (EML) created for the outgoing email to a variable. This is useful if you want to store the EML or use a custom action or script to actually send the message. If the Dont Send option is enabled, then ThinkAutomation will not send the email - it will just assign the resulting mime text to the specified variable (the Dont Send option cannot be used for Scheduled Messages).
Remove Scheduled Outgoing Message
Removes any pending scheduled emails for a given recipient.
This action can be used to cancel the sending of any scheduled emails. This could be used for example on an 'Unsubscribe' Automation.
Specify the recipient email address in the Remove Scheduled Message To entry.
The From can be blank - or if completed, only messages from the given address will be deleted.
You can remove only messages matching a Subject - or leave blank for all.
The number of scheduled messages removed can be assigned to a variable. Select the variable from the Assign Number Remove To list.
Forward Original Message
Forwards the incoming message to new recipients.
Specify the From and To addresses. The Subject can be changed - if you wish to use the incoming subject set it to %Msg_Subject% (or 'FW: %Msg_Subject%').
You can add additional attachments and Drop Incoming Attachments.
Wait For User Response
Waits for a user response before proceeding with the remaining actions for the Automation.
This action can be used to provide a human validation response in the form of a unique public URL that must be accessed. ThinkAutomation will pause execution of the Actions for the current message until a user accesses the URL. It will move on to process the next message whilst waiting for the validation of a previous one. A single Automation can contain multiple Wait For User Response actions. This action can optionally show a web form containing any number of input fields. If any fields are specified then the user must complete the form before validating the message. The results of the form are passed back to the Automation and can be used in subsequent actions
For each Wait For User Response request ThinkAutomation creates a unique Validation URL. You must send an email or SMS containing the %Msg_ValidationUrl% field replacement to someone. When the recipient receives this email they click the URL to validate the message. Once validated the remaining actions setup on the Automation are then executed for that specific message. Validation URLs are secured using a one-way hash, so a user could not validate the wrong message by manually changing the URL.
You can either use separate Send Email Action to send you own message containing the %Msg_ValidationUrl% field (send before the Wait For User Response action itself) or enable the Send Request Via Email option to include the email sending within the Wait For User Response action itself. You customize the email. The Body text must contain %Msg_ValidationUrl% somewhere.
The Send Request Via Studio Users option will send the validation request to any users running the ThinkAutomation Studio. Studio users can complete the validation request from there. You can specify specific Usernames or leave this blank to send to any ThinkAutomation Studio users (connected to your ThinkAutomation Server instance).
Show Accept Buttons
If this option is enabled then the Validation page will show Accept & Not Accept buttons below the Validation Page Message. The user must click the Accept button to validate the message. If the Do Not Accept button is clicked then the message is rejected and the Timeout/Not Accepted Action performed. If this option is not enabled then the user only needs to click the Validation URL to validate the message (unless input fields are used - see below). You should adjust the Validation Page Message accordingly.
Continue On Timeout
If this option is enabled then the Automation will continue if the validate request has not been completed before time timeout.
Max Wait Time (Mins)
This is the maximum number of minutes that ThinkAutomation should wait for the validation. It defaults to 2880 (48 hours).
Assign Result To
Select the variable to receive the Validation result. This will be 'true' or 'false'.
Survey Fields
In addition to displaying a message, ThinkAutomation can optionally show a form containing any number of input fields. If any fields are specified then the user must complete the form before validating the message. The results of the form are passed back to the Automation and can be used in subsequent actions. Click Add Field to add a new input field.
Enter a Name and Label Text. The Field Type can be Text, Number, Date, Time or Boolean. For text field types you can specify the Max Length. The Multi-Line option allows you to define the maximum lines. The Password Entry option allows you to mask the input.
The Input Mask can be used to supply a regular expression to use as an input mask to format and limit what can be entered.
Assigning A Survey Field Value To A ThinkAutomation Variable
You must then select a ThinkAutomation variable to assign the entered value to. Select the variable from the Assign Value To list. Once a message is validated and the Automation continues execution, you will be able to make use of input values in subsequent actions.
A simple example would be a single field that asks 'Do you want to delete this customer?' - with a Y/N choice. The value can be assigned to a Variable called 'Delete'. After the Wait For User Response Action you can add a conditional Action: 'If %Delete% Is Equal To Y Then ....'
Note: The Validation web page uses the ThinkAutomation Web API hosted in Azure, so it will work without requiring any local setup.
Send Appointment
Creates an appointment in any iCalendar compatible Calendar Server or sends an iCalendar compatible appointment request as an email attachment.
iCalendar is used and supported by a large number of products, including Google Calendar, Apple iCal, Lotus Notes, Yahoo Calendar, Microsoft Outlook and others.
The Send As drop down has three options:
- Send Directly To An iCalendar Server: This option allows you to post directly to an iCalendar Server using the CalDav protocol. You need to specify the URL of the server to post to. This URL will depend on the Calendar Server you are using.
For Google Calendars use: https://www.google.com/calendar/dav/{googlemailaddress}/events/ - and use your Google user name/password.
You may need to specify a User Name and Password and Authentication mode if the iCalendar Server requires a login first. Login to your iCalendar Server to obtain the iCal address.
-
Send To An Email Recipient: With this option you specify an email address. The appointment will be sent as an attachment with the .ics extension. Most Calendar applications will import this directly when the recipient opens the attachment.
-
Save To File: Saves the Appointment to a local file with an .ics extension. You can then use this as an attachment on other Send Email actions.
All remaining text fields can use %field% replacements.
You must specify the Attendees as email addresses. Multiple addresses can be separated by commas.
The Categories, Location, Subject & Description fields are optional.
The Organizer must be specified as an email address.
The Start Date/Time and End Date/Time can use %field% replacements if required. If a Start/End Date is given as a %field% replacement then the field contents must be able to be interpreted as a date.
Send Slack Message
Send a message and/or files to a Slack channel. Slack is a messaging and collaboration platform. See: https://slack.com for more information.
Before you can use this action you must first authorize ThinkAutomation to connect to Slack. Click the Connect button and enter your Slack username/password. You will then be asked if you want to allow ThinkAutomation to be able to post messages to Slack.
Once connected your team name & domain will be shown
You can post messages and/or upload files to any of your team channels that the authorized user has access to.
Posting A Message
Enter the Send Message text you want to post. Leave this blank if you only want to upload files.
Uploading Files
Expand the Select Files box and enter or select the file you want to upload. This can be a single file or a comma separated list. %field% replacements can also be used if you want to upload files created from previous actions. You can also optionally Include Incoming Attachments. Enter the Mask for the attachment types to upload (eg: *.pdf).
If the Post The Message From The Authenticated User option is enabled then the post will be from the Slack user you connected with, otherwise the post will show as from a bot called ThinkAutomation.
Select the channel you want to post the message/files to from the Post To Channel drop down - this will list all the channels available to your team.
You can assign the result of the post to a variable. Select from the Assign Response To dropdown. If the post was successful the response will be 'Ok'. Otherwise it will contain an error message.
Documents
Create Document
Create a document using the built-in Word Processor and save the document in various formats.
Enter the Document Name and click the Edit Document button to start the Word Processor.
You can now edit the document. The document can be formatted, contain tables, images, headers/footers etc.
Inserting Variables
On the document editor ribbon - click the Insert button to add any of your Extracted Fields or Variables (or type %variable% directly in the document). These will be replaced when the Automation executes.
Click Save in the document editor to save the document template with your Action.
Save As
From the Save As Format list select the type of file to save when the Automation Executes. The document can be saved as:
- DOCX (Microsoft Word)
- TXT (Text File)
- RTF (Rich Text File)
- HTML
- MHT
- EPub
When the Automation executes the document template will be used to create a file in the above format. All %fields% in the document will be replaced.
If PDF format is selected then you can specify a Password. The recipient of the PDF file will need the password to open it.
If HTML format is selected then the following options are available:
- Use Inline Styles - select this option to use Inline CSS instead of a style section. This option should be used if you will use the HTML on outgoing emails.
- Embed Images - select this option to specify whether images should be embedded into the HTML or stored externally. Embedded images in the HTML document are stored in base64 encoding. This option should be used if you will use the HTML on outgoing emails.
Specify the Save To folder - click the ...
button to select a local file or use %Root% to save it in the default ThinkAutomation location.
Enter a File Name to save the document as (the extension will be added automatically based on the Save As Format if it is not specified).
If Ensure Unique File Name is enabled then ThinkAutomation will add a timestamp to the filename to ensure it is unique.
If Delete File After Message Is Processed is enabled then ThinkAutomation will remove the file when the Automation completes for the current message. This is useful if you wish to use the document in the Automation (for example, to send the document as an attachment with the Send Email action, or to use the html file as the body of an outgoing email), but do not need to keep a local copy afterwards.
You can assign the saved path & filename to a variable by selecting the variable from the Assign Saved File Path To list. You can then use this variable in the Attachments entry on Send Email actions or in any other way.
Default Document Template
When creating a new document, ThinkAutomation will look for the Microsoft Word document DefaultDocument.docx in the ThinkAutomation program files folder. If this file exists it will be loaded and all the styles available in the document can then be used in the new document.
Convert Document
Converts a Microsoft Word, Excel, PDF, Richtext, Text, Markdown Text, CSV or HTML, file to various formats.
The document to convert can be a local file (or a file saved from a previous action) or incoming Attachments.
Select a Document To Convert - this can be any local file or a %field% replacement. You can specify multiple documents if required, separated by commas.
Enable the Include Incoming Attachments option to convert attached documents matching the Matching Mask. Enter *.* to convert all supported attachments.
Select the Convert To type. You can convert to the following formats:
- DOCX (Microsoft Word)
- XPS
- HTML
- TXT
- CSV
- Images (PNG, GIF, BMP, JPEG, TIFF)
When converting PDF to image files, each page in the PDF document will be converted to a separate image file. The page number will be added to the filename, eg: document_1.tiff, document_2.tiff.
In the Rename Converted Files To entry you can optionally specify a new name for the converted file. You can use %fieldname% replacements - for example: order%OrderNumber%.pdf would rename the attachment order1234.pdf if the %OrderNumber% field contained '1234'.
You can use the special field replacement %filename% to use the original file name as part of the renamed file. For example, suppose the document to convert was called "orderdata.docx" and the %OrderNumber% field was set to '1234' - renaming to: %filename%No%OrderNumber%.pdf would rename the file 'orderdata_No_1234.pdf'.
If your rename string doesn't contain a file extension then the Convert To type extension will be used.
In the Save To Path entry, enter or select the local folder to save the converted document to.
You can assign the saved path & filename to a variable by selecting the variable from the Assign Filename(s) To list. You can then use this variable in the Attachments entry on Send Email actions or in any other way.
If Delete File After Message Is Processed is enabled then ThinkAutomation will remove the file when the Automation completes for the current message. This is useful if you wish to use the document in the Automation (for example, to send the document as an attachment with the Send Email action), but do not need to keep a local copy afterwards.
Note: Markdown text files ('.md') will be converted to HTML first before being converted to the Convert To file type.
Convert Document To Text
Converts Microsoft Word, PDF, RichText and HTML documents to plain text and assigns the text to a variable.
Select a Document To Convert - this can be any local file or a %field% replacement. You can specify multiple documents if required, separated by commas.
Enable the Include Incoming Attachments option to convert attached documents matching the Matching Mask. Enter *.* to convert all supported attachments.
Select the variable to receive the plain text from the Assign Converted Text To list.
The document(s) will be converted to plain text - some positioning will be retained (such as blank lines and indentation) however the plain text will contain no formatting, only raw text. If multiple files are converted within the same action then the extracted text from each file will be appended to the returned text.
PDF Form Data
Enable the PDF Return Form Data option to return only form data from PDF files. If enabled then form data only will be extracted in the following format:
{form field Name}: {value} {form field name}: {value} ...
You can then use the text in other actions - or use Extract Field actions to extract data from the text.
Convert PDF Document
Converts PDF files or attachments to various image formats or text.
Select a Document To Convert - this can be any local PDF file or a %field% replacement. You can specify multiple documents if required, separated by commas.
Enable the Include Incoming Attachments option to convert attached documents matching the Matching Mask. Enter *.* to convert all PDF attachments.
From the Convert To list, select the type of file to convert the PDF document(s) to.
You can specify a Page Range to convert. Leave this entry blank to convert all pages in the document. Or specify a single page, a range (eg: 1-10) or a comma separated list of pages (eg: 1,3,5).
For Image conversion you can specify the Resolution. Larger resolutions will result in bigger converted files and increase conversion time.
For Image conversion enable the Color option if you want full color images created. Otherwise the images will be Grey-scale.
Converted files will have the same name as the original but with the new file extension. For image files, each page in the PDF document will be converted to a separate image file. The page number will be added to the filename, eg: document_1.tiff, document_2.tiff. You can rename the converted file by entering the new filename in the Rename Converted Files To entry. Use the field replacement %filename% to include the original file.
Specify the folder to save the converted files to in the Save To Path entry.
You can assign the full path & file name to a ThinkAutomation variable to use on subsequent actions (for example, if you wanted to attach the file to an outgoing message). Select from the Assign Filename(s) To list. Multiple files will be separated by commas. You can use this variable on the attachments entry of outgoing emails if you wanted to send the converted files via email.
If Delete File After Message Is Processed is enabled then ThinkAutomation will remove the file when the Automation completes for the current message. This is useful if you wish to use the document in the Automation (for example, to send the document as an attachment with the Send Email action), but do not need to keep a local copy afterwards.
Sign PDF Document
Adds a digital signature to a PDF document.
Select a Sign PDF Document - this can be any local PDF file or a %field% replacement. You can specify multiple documents if required, separated by commas.
Enable the Include Incoming Attachments option to sign attached documents matching the Matching Mask. Enter *.* to sign all PDF attachments.
You must then select a Certificate. This can be either an existing certificate stored in the Windows Certificate Store (specify the Common Name - ThinkAutomation will search for a certificate matching the Common name.) or a PFX file (you must also specify the PFX Password).
Optionally specify a Timestamp URL (eg: http://timestamp.digicert.com) if you want the signature to include a timestamp.
Signature Box
The signature can be added to the first or last page. Select from the Add To Page list. It will be positioned on the page using the Placement (eg: top/left, or bottom/middle).
You can optionally add an Image (for example, a green tick mark) and set the Image Placement & Image Opacity.
You can specify up to 3 lines of text to add to the signature block. The text can contain %field% replacements.
Saving Signed Documents
Signed PDF documents by default will have the same name as the original. You can rename the signed PDF document by entering the new filename in the Rename Signed Files To entry. Use the field replacement %filename% to include the original file.
Specify the folder to save the signed documents to in the Save To Path entry.
You can assign the full path & file name to a ThinkAutomation variable to use on subsequent actions (for example, if you wanted to attach the document to an outgoing message). Select from the Assign Filename(s) To list. Multiple documents will be separated by commas. You can use this variable on the attachments entry of outgoing emails if you wanted to send the signed documents via email.
If Delete File After Message Is Processed is enabled then ThinkAutomation will remove the file when the Automation completes for the current message. This is useful if you wish to use the document in the Automation (for example, to send the document as an attachment with the Send Email action), but do not need to keep a local copy afterwards.
Save As PDF
Renders the incoming message or html file/URL as a PDF document.
From the Render list, select Render Message to render in the incoming message. This will render the incoming message as it would appear in a web browser - including all images.
Select Render File Or Url to render any html file or web page. Enter the file path or full URL to the web page you want to save as a PDF.
Select the Page Size, Orientation & Margin.
You can also enter an open Password. Users opening the PDF must enter this password before they can view the content.
Enter the File Name and select the Save To folder. You can use %field% replacements in the file name. A '.pdf' extension will be added if required.
If Ensure Unique File Name is enabled then ThinkAutomation will add a timestamp to the file name to ensure it is unique within the Save To folder.
If Delete File After Message Is Processed is enabled then ThinkAutomation will remove the file when the Automation completes for the current message. This is useful if you wish to use the document in the Automation (for example, to send the document as an attachment with the Send Email action, or to use the html file as the body of an outgoing email), but do not need to keep a local copy afterwards.
If Generate Table Of Contents Using H1-H6 Tags option is enabled then a table of contents will be generated using HTML heading tags (H1-H6) and inserted into the start of the document.
Enable the Print Created Document option if you want ThinkAutomation to print the PDF file after it is created. You can select the Printer to use.
You can assign the full save path & file name to a ThinkAutomation variable to use on subsequent actions (for example, if you wanted to attach the file to an outgoing message). Select from the Assign To list.
Header/Footer
You can also add Header & Footer HTML. This will be rendered at the top & bottom of the page. Any HTML can be used in addition to %field% replacements. You can also enter the Header/Footer Height in pixels.
Page Breaks
The page breaks in the generated PDF document can be controlled using the following CSS properties:
- page-break-before: always style forces a page break in the PDF before the element.
- page-break-after: always style forces a page break after the element.
- page-break-inside: avoid style will ensure a page break does not occur inside the element if possible.
Word Merge
Performs a mail merge on a Microsoft Word document or Word Attachments and saves the merged document as a new file.
This action takes a Word Document and replaces all the mail-merge fields in the document with ThinkAutomation variable values. The resulting merged document is then saved.
Specify the Word File or select Merge Word Attachments and enter a File Mask to use any Word Documents attached to the message.
In the Save Merged Document To enter the new name for the merged document. You can use the special %filename% replacement to use the original file name in part of the new filename. If no name is specified then the original document will be saved.
In the Save To Path specify the folder to save the new document in.
The merged document path & filename can be assigned to a ThinkAutomation variable. Select the variable to use from the Assign Filename(s) To list.
Select Delete After Message Is Processed if you want ThinkAutomation to delete the file after it has finished executing all actions for the current message.
You must then map the Word Document Merge Fields to ThinkAutomation fields/variables. Click the Get Fields From Word Doc to extract mail merge fields from any Word Document. You can also just type them in the list.
Specify each mail Merge Field and the Value to assign the field to. This can be a fixed value or any ThinkAutomation Field, Variable or Built-in Field.
Prints the incoming message, a report of extracted fields or document attachments.
Enable the Print Message option to print the incoming message.
Enable the Print Extracted Fields option to print a table showing extracted field names and values.
Enable the Print PDF Attachments option if you want ThinkAutomation to print PDF file attachments.
Enable the Print Document Attachments option if you want ThinkAutomation to print any Word, Excel, HTML or Text documents.
You can pre-select the printer to use from the Printer list.
Note: If you select a network printer the ThinkAutomation service may not have permission to print to it. This is because the ThinkAutomation service runs under the SYSTEM account by default and the SYSTEM account cannot access any network resources. Configure the ThinkAutomation Message Processor service to run under a different user.
Run A Report
Creates a report using a pre-defined report template. Reports can be printed, and/or exported to various formats, including PDF, HTML, Rich text and Excel. Exported reports can be attached to outgoing emails.
Enter a Report Name.
Click the Edit Report to start the Report Designer
Using The Report Designer
ThinkAutomation includes a report designer that allows you to create custom report templates. Reports can use ThinkAutomation variable data and link to external data sources.
The Extracted Fields/Variables and built-in fields will be listed in the report designer Explorer pane - Fields List. You can drag any of these onto the report designer surface.
After you have dragged a field to the designer, click it to edit its properties in the Properties Toolbox. You can change colors, alignment, borders, fonts etc. You should also re-size the field so that it will fit the data contents. (Note: If the 'Can Grow' property is set to True then the field height will grow automatically based on the field content).
You can also drag other objects onto the report (Labels, Images, Text Boxes, Charts etc). External data sources can be added using the Add Data Source button.
Click Save in the report designer to save the template.
Enable the Export Report option to export the report at run time. Select the file format from the Export Format list. Available types are:
- DOCX (Microsoft Word)
- XLSX (Microsoft Excel)
- PNG, JPEG
- TXT, RTF
- HTML
- MHT
Use the Assign Export Filename To list to select a ThinkAutomation Variable to assign the exported file name to. You can then use this %fieldname% on other Actions - such as the Send Email action to add the exported report as an attachment.
Enable the Print option to also print the report.
Office 365
Get/Update Contact
Get or add/update a Contact record for an Office 365 Account.
Click the Sign In button to sign-in to Office 365.
Enter the Email Address for the Contact record. Select the Update option if you want to add/update a contact record, otherwise the contact will be retrieved using the email address specified.
In the Map To Extracted Fields grid map your ThinkAutomation variables to the Exchange Contact fields. Against each Exchange contact field select the relevant ThinkAutomation Variable.
If updating then ThinkAutomation will first lookup an existing contact using the Email Address. If an existing contact is found then the contact is updated, otherwise a new contact record is created. If not updating then ThinkAutomation will lookup the contact using the email address and then if found, assign the contact fields to the mapped ThinkAutomation variables.
Create Appointment
Creates an appointment for an Office 365 Account.
Click the Sign In button to sign-in to Office 365.
You must then specify the Appointment Settings.
The Attendees field must use email addresses.
If %field% replacements are used for the Start Date/Time or End Date/Time then you need to ensure that the fields contain valid dates or times.
Send Teams Message
Sends a message to a Microsoft Teams channel on behalf of an Office 365 user.
Click the Sign In button to sign-in to Office 365. This is the user that the message will be sent from.
The Teams and Channels for the user will then be listed. Select the Team and then the Channel within the team to send a message to.
Enter the Message text.
The message text can contain Markdown. If Markdown is used it will be converted to HTML before being sent.
General
String Operation
Perform various operations on strings.
Select the String Operation Type:
- Right: Get the first Length characters from any text or variable.
- Left: Get the last Length characters from any text or variable.
- Sub String: Get Length characters starting at Start Position. If Start Position is not a number then the value of Start Position will be searched in the From value - and the search position will be used (if found).
- To Upper Case: Returns the From value as Upper Case.
- To Lower Case: Returns the From value as lower case.
- Get Length: Returns the character length of the From value.
- Get Index Of: Returns the start position of Look For value in the From value.
- Format: Returns a formatted value of the From value. The Format can be any .NET format. For example: 'The delivery date is {0:d}' would return 'The delivery date is 1/1/2021' if From contained a date value.
Note: The 'Sub String' and 'Get Index Of' use 1 based index positions. 'Get Index Of' will return 0 if the Look For value is not found.
Date Operation
Perform various operations on dates.
Select the Date Operation Type:
Operation Type | Details |
---|---|
Get Date | Extract the date from any text or variable and return it to another variable in a predefined format. Enable the Convert To UTC option to convert the date to UTC. |
Get Time | Extract just the time from any text or variable and return it to another variable in a predefined format. |
Get Date and Time | Extract the date and time from any text or variable and return it to another variable in a predefined format. |
Get Interval | Calculates an Interval between a From and To date and returns the value to a variable. The Interval can be Seconds, Minutes, Hours, Days, Weeks, Months or Years. The interval can be returned as a number or a duration. Select from the Interval Format option. If Short Duration is selected then for interval will be returned as hh:mm:ss format. Long Duration will return as x Hours, x Minutes, x Seconds (depending on the Interval type). |
Add To | Adds an interval Value to an existing date/time extracted from any text or variable and returns the new date time to a variable in a predefined format. |
Subtract From | Subtracts an interval Value to an existing date/time extracted from any text or variable and returns the new date time to a variable in a predefined format. |
Select the variable to receive the result from the Assign To Variable list.
When extracting and formatting dates you can select the Locale. This will default to the system locale.
You can use this action to change the format of an existing date %field% or %variable%. Use the Get Date and Time operation. Set the From to the variable containing the date. Select the required Format. Then select the same variable from the Assign To Variable list.
File Operation
Create new folders, copy, move, rename, check exists, delete files, get file information.
Use this Action to create new folders or to copy, move, check if files exists, rename & delete files and get file information. You can also use this action to generate an SHA256 hash (checksum) for any file.
Select the Operation Type:
- Create Folder
- Copy File
- Move File
- Delete File
- Rename File
- Check If File Exists
- Get SHA256 Hash For File
- Get File Size
- Get File Date
- Get File Version
- Read File To Base64 String
- Append To Filename
- Prepend Filename
Depending on the Operation Type enter the Folder, File Name, To Folder & To File Name.
You can assign the result to a variable. Select from the Assign To Variable list. The variable will be set to the new folder and file name depending on the Operation Type. For example, for the Create Folder operation the variable will be assigned to the new folder name. For the Copy operation the variable will be assigned the full path & file name of the new file. If the operation fails the variable will be assigned a blank string and the error will be shown in the log. The Check If File Exists operation will return the file path is the file exists, otherwise blank.
The Get File Version operation returns file information in the following format:
File: D:\ThinkAutomation\Setup Files\ThinkAutomation.exe InternalName: ThinkAutomation OriginalFilename: ThinkAutomation.exe FileVersion: 5.0.240.2 FileDescription: ThinkAutomation Installer Product: ThinkAutomation ProductVersion: 5.0.240.2 Debug: True Patched: False PreRelease: False PrivateBuild: False SpecialBuild: False Language: English (United Kingdom)
For the Create Folder operation the complete folder structure will be created if any levels do not exist. If the full folder already exists the Assign to variable will be assigned the existing folder name and no error will be reported. An error will only be reported for the Create Folder operation if the creation of a new folder fails.
Note: If you are access folder/files on your network you will need to change the user name that the ThinkAutomation Service runs under.
Math
Executes mathematical formulas and returns the result to a variable.
Enter the Formula text. The formula can contain %field% replacements.
Select the variable to receive the result from the Assign To list.
Formulas can be as simple as %Price% * %Amount%
which would return the value held in %Price% multiplied by the value held in %Amount%.
Click the Validate button to check the formula.
The following mathematical operations are supported:
- Addition: +
- Subtraction: -
- Multiplication: *
- Division: /
- Modulo: %
- Exponentiation: ^
- Negation: !
Standard Functions:
Function | Arguments | Description |
---|---|---|
sum | sum(A1, ..., An) | Total |
sin | sin(A1) | Sine |
cos | cos(A1) | Cosine |
asin | asin(A1) | Arcsine |
acos | acos(A1) | Arccosine |
tan | tan(A1) | Tangent |
cot | cot(A1) | Cotangent |
atan | atan(A1) | Arctangent |
acot | acot(A1) | Arccotangent |
loge | loge(A1) | Natural Logarithm |
log10 | log10(A1) | Common Logarithm |
logn | logn(A1, A2) | Logarithm |
sqrt | sqrt(A1) | Square Root |
if | if(A1, A2, A3) | If Function |
max | max(A1, ..., An) | Maximum |
min | min(A1, ..., An) | Minimum |
avg | avg(A1, ..., An) | Average |
median | median(A1, ..., An) | Median |
round | round(A1) | Round |
random | random() | Random |
Parse CSV Line
Extract values from comma separated text.
Select the CSV value to parse from the Parse CSV Line In list.
In the Column Assignments grid, for each column you want to extract enter the Column Number and select the Assign Value To variable to receive the column value.
Column numbers are 1 based.
This action will correctly handle quoted values.
This action is useful when used with the For..Each loop, looping on Line. This enables you to read a CSV file (or Attachment) and loop on each line. Inside the loop use this action to parse each CSV line.
Encryption
Encrypts or Decrypts text or files using AES encryption and returns the encrypted/decrypted text/filename to a variable.
This action is used both to encrypt and decrypt text or files. Select the Encrypt or Decrypt options.
Encrypting
To encrypt text select the Encrypt option and enter the text or file to encrypt.
When encrypting text you must specify the Encoding method to use. This can be hex, base64 or url. The default is base64.
To encrypt a file select the Encrypt File tab and select the File Path & File Name. Select the Save To Path to save the encrypted file to. Optionally enter a Save To Filename. If no filename is specified then the original file name will be used but with an '.aes' extension. You can use field replacements for the file path & names - this enables you to use it with the For..Each action if you wanted to encrypt attachments.
You must specify a Key Length and Secret Key. The key length can be 256, 192 or 128. These are bit sizes. The secret key length must be 32 characters for 256 bit keys, 24 characters for 192 bit keys or 16 characters for 128 bit keys. You can use %field% replacements for the secret key - however this must convert to the correct key length when the message is processed.
The encrypted text/file path can be returned to a variable. Select from the Assign Encrypted File To list.
Decrypting
To decrypt text select the Decrypt option and enter the text or file to decrypt. The text must be encoded using the same encoding method used to encrypt (base64, hex or url). You must also specify the Encoding method.
To decrypt a file select the Decrypt File tab and select the File Path & File Name. Select the Save To Folder to save the decrypted file to and enter the Save To File Name.
You must specify a Key Length and Secret Key. The key length can be 256, 192 or 128. These are bit sizes. The secret key length must be 32 characters for 256 bit keys, 24 characters for 192 bit keys or 16 characters for 128 bit keys. You can use %field% replacements for the secret key - however this must convert to the correct key length when the message is processed.
The decrypted text/file path can be returned to a variable. Select from the Assign Decrypted File To list.
Compression
Creates Zip compatible compressed archive files for attachments or files/folders. Can also be used to unzip files.
This action is used both to zip and unzip files.
Compressing Files/Attachments
To create a Zip file select Compress.
Select the Zip File Path to save the Zip file to and enter the Zip File Name. You can use %field% replacements here. If a %field% replacement is used for the Zip File Name (for example %msg_subject%) it will first be converted into a valid file name. If no extension exists then .zip will be used.
Enable Create New if you want a new zip file creating. If this option is not selected and an existing Zip file already exists then the new files will be added to it.
Optionally specify a Password if you want to password protect the Zip file.
Enable the Zip Attachments option if you want to compress files attached to the incoming message. You can specify a File Mask if you want to only compress files of a certain type (eg: *.pdf).
Select the local Folder and File Mask for other files you want to add to the Zip file.
The File Mask entry can contain multiple masks, separated by commas (eg: *.pdf, ThisDoc.docx, *.xlsx).
The Exclusions entry can contain filenames and masks that you want to exclude from the zip file. Separate multiple with commas.
Enable the Delete Zip After Message Is Processed option if you want ThinkAutomation to delete the Zip file after the Automation has finished executing actions for the current message. This is useful if you are creating a Zip file to send with an outgoing message and the Zip file is not needed to be kept afterward's.
Select the variable that you want the Zip file path to be assigned to from the Assign To list. You can then use this on further actions - for example on the Attach entry of outgoing messages.
Decompressing
To unzip and existing Zip file select Decompress.
Select the Zip File Path and Zip File Name.
Specify a Password if the Zip file is password protected.
Enter a File Mask for the files you want unzipped - or specify *.* for all files.
The Exclusions entry can contain filenames and masks that you want to exclude from being unzipped. Separate multiple with commas.
Select the Unzip To Folder for the folder where you want the unzipped files placed.
Enable the Delete Unzipped Files After Message Is Processed option if you want ThinkAutomation to delete the unzipped files after the Automation has finished processing actions for the current message.
The unzipped files list can be returned to a variable. Select the variable from the Assign Unzipped Files To list. This will be a comma separated list of files with their full path.
Create Hash
Generate a hash for any text/variable.
Enter the Text To Hash and specify the Hash Algorithm.
The resulting hash can be encoded in various formats (the default is Base64).
Select the variable to assign the hash to from the Assign Hash To list.
Set Logging Level
Set the logging detail level for the current message.
This action can be used to change the level of logging for the currently executing message. This is useful if you have many actions, or actions that loop and you want to reduce the number of log entries. Or if you want to increase the logging level whilst debugging a specific Automation.
The logging level will revert back to the default once the Automation has completed executing actions for the current message.
Create Passcode
Creates a random Passcode and assigns the value to a variable.
This action can be used to generate a random passcode. The passcode can then be sent by email (via the Wait For User Response or Send Email actions) or by SMS (via the Twilio Send SMS Message and Twilio Wait For SMS Reply actions) in order to implement two-factor authentication or to check that a given email address or mobile phone number is valid.
Select the Passcode Type. This can be:
- Letters (a-z)
- Letters & Numbers (a-z,0-9)
- Letters, Numbers & Special Characters (a-z,0-9, ~!@#$%^&*_-+=|(){}[]:;<>?/)
- Numbers Only (0-9)
Enable Include Upper Case to also include (A-Z) characters if Numbers only is not used.
Enter the Number Of Characters. This can be between 3 & 99.
Select the variable to assign the passcode to from the Assign To list.
The Passcode generated will be random containing no repeating characters. The Passcode is not guaranteed to be universally unique.
Find and Replace
Finds and replaces text in any ThinkAutomation variable and returns the result to the same or different variable.
Enter the text to find in the Replace entry. You can make use of %field% replacements.
Enter the text to replace with in the With entry. Again you can use %field% replacements.
In the In list - select the field to use for the replacement. This can be any of your extracted fields/variables.
By default the text search will start at the beginning of the text. Enter a Start At Character value if you want to start the search from a specific character position.
Enable Replace All Occurrences if you want all occurrences of the Replace text to be replaced.
Enable Case Sensitive Search if the find should be case sensitive.
You must then select variable to assign the replaced text to from the Assign Result To list. By default the same variable that you select in the In selection will be used.
Create JSON
Creates Json Text and allows you to assign variables to each Json element. The resulting Json Text can be assigned to a variable for use on subsequent actions.
You first need to enter or paste valid Json text in the Enter Or Paste Json Here To Parse entry. You need to obtain the Json schema that you want to update and copy/paste into this entry. Then click the Parse > button.
The Json will be parsed and all elements will be listed in a tree structure.
Select each line in the tree in turn. The Selected Path, Element and Type will be shown as you select each entry.
In the Set To Value entry enter or specify the data that you want to be assigned to the selected entry. Fields/Variables can be specified here. Then click the Update button. The updated Json will be shown in the Preview Result view. Repeat for each element that you want to update.
In the Assign Json To list select the variable you want to resulting Json assigned to.
When the message is processed each element in the Json will be assigned the value you specify and the resulting Json assigned to the specified variable.
This Json can then be used on other actions by referencing this variable.
Read/Write Text File
Writes data to any text file and optionally reads the contents of the file into a variable.
The File Path must contain a path & filename of the text file to write to/read from.
On the Write To File tab you can define the text that you want to write to the file. The file will be created if it does not already exist.
Select the file Format. This can be ASCII, Unicode or UTF-8 (default)/
Select the Line Terminator that will be appended to the text written to the file.
Enter the Content that you want to write to the file.
If the Append To File option is enabled then the new text will be added to the end of the existing text file.
If the Make Backup option is enabled the existing file will be copied to the same file name with a .BAK file first.
On the Read From File tab you can select a ThinkAutomation variable that you want to assign the text file contents to. The file will be read again after any text is written to it.
Tokenize
Gets a list of comma separated tokens (words) for any text.
Enter the Text/HTML to tokenize. If the text is HTML then the HTML will be converted to plain text first.
Options:
- Remove Common Words : Remove all common words (and, the, a etc.) from the tokens list.
- Remove Email Addresses & Urls: Removes any email addresses and URLs from the tokens list.
- Normalize: Normalizes common contractions (eg: 'what's' to 'what is') and common abbreviations (eg: hi to hello, nov to november, ur to your, bday to birthday, 2day to today, plz to please, thx to thanks etc.)
- Unique: Duplicates are removed from the tokens list.
- Include Count: The frequency is appended to each token.
- Sort By: None, frequency, word.
- Top: Return the top x words if sorted.
The tokens can be assigned to a variable. Tokens are returned as a comma separated string.
Text To Speech
Uses the Windows speech synthesizer to convert text to a WAV file containing a spoken version of the text.
Enter the Text To Speak. This can contain %field% replacements.
Select the Voice. This list will be populated by Speech language packs installed on your system. You can install more language packs in your Windows settings. After selecting a Voice, click the Test button to hear how the text will sound.
Select or enter the Save To path where the created wav file should be saved.
Enter the WAV File Name. This can contain %field% replacements. The .wav extension will be added if necessary.
If the Ensure Unique File Name option is selected then ThinkAutomation will append a unique timestamp to the filename to ensure it is unique within the Save To path.
If Delete File After Message Is Processed is enabled then ThinkAutomation will remove the file when the Automation completes for the current message. This is useful if you wish to use the wav file in the Automation (for example, to send the file as an attachment with the Send Email action), but do not need to keep a local copy afterwards.
You can assign the saved path & filename to a variable by selecting the variable from the Assign Saved File Path To list. You can then use this variable in the Attachments entry on Send Email actions or in any other way.
Network
DNS Lookup
Performs a DNS Lookup and assigns the returned data to a variable.
In the Lookup entry enter an IP Address or Hostname. If an email address is used ThinkAutomation will automatically use the domain part (the section after the @ sign).
Select the DNS Record Type to lookup. Here you can select any valid DNS type.
The DNS Server entry allows you to specify a specific DNS server IP address to use for the lookup. Leave blank to use the system default.
You must then select the variable to assign the result to by selecting from the Assign Result To list. If the lookup fails - the variable will be set to Error: {description}.
Results will be returned as FieldName: Value format. The fields returned depend on the DNS Record Type.
For example, an MX lookup of test@google.com would return:
PREFERENCE: 50 EXCHANGE: alt4.aspmx.l.google.com
If the lookup fails an error is returned:
Error: 3 Name error
This Action is useful for validating email addresses. If an error is not returned then the email address has a valid MX record.
Ping
Pings any network/internet host and assigns the response time to a variable.
Enter the Ping host. This can be an IP address, Host Name, Domain name, URL or Email Address. The host name will first be resolved to its IP address before the Ping starts.
Select the variable that the Response Time will be assigned to. You can also assign the Response Host (IP Address).
If the Ping fails or a timeout occurs the Response Time will be blank and an error will show in the log.
Execute Secure Shell Command
Executes a command on a remote SSH Server. Most UNIX/Linux/Mac machines include an SSH Server. The output of the command can be returned to a variable.
Enter the Host Name IP Address or host name of the server you want to execute the command on.
Enter the Port. This defaults to 22. If no port is specified then the default will be used.
Enter the remote User Name & Password. This user must be allowed to execute remote commands on the host system.
Enter the Command Text to execute.
All entries can use %field% replacements.
The result of the command can be returned to a variable. Specify the variable from the Assign Response To list.
Any errors generated by the command can also be returned to a variable. Select from the Assign Errors To list.
Showing A Notification On A Mac
The following command will display a notification on a Mac computer:
osascript -e 'display notification "Processed Message %msg_subject%" with title "ThinkAutomation" subtitle "%AccountName%" sound name "Default" '
Speaking Text On A Mac
The following command will speak the given text on a Mac computer:
say "you have received a new message from Think Automation!"
Note: To enable the Remote SSH server on a Mac, use System Preferences - Sharing. Enable the 'Remote Login' option.
CRM
Get CRM Entity
Performs a query against a CRM system and returns values to variables.
Click Connect to connect to a CRM system. Currently ThinkAutomation can connect to
- Salesforce
- Microsoft Dynamics
- Sugar CRM
- Zoho CRM
Once connected select the Entity Type to query.
You then create Query Conditions to lookup an entity of the Entity Type specified. The query can contain use %field% replacements.
In the Assign CRM Values To Variables list, select each CRM value that you want to assign to a ThinkAutomation Variable.
Update/Create CRM Entity
Creates or updates entities in a CRM system,
Click Connect to connect to a CRM system. Currently ThinkAutomation can connect to
- Salesforce
- Microsoft Dynamics
- Sugar CRM
- Zoho CRM
Once connected select the Entity Type to update.
Select Create New Entity or Update Existing Entity from the Action To Take selector.
When updating existing entities, you must specify the Entity ID To Update - this can be a ThinkAutomation variable that has received an Id from a previous Get CRM Entity action.
In the Update Entity Fields grid you map Entity items to ThinkAutomation variables.
You can assign the new or updated Entity ID to a variable.
Web
HTTP Get
Reads any http resource using HTTP GET or a local file path and assigns the returned HTML or response text to a variable.
Use this Action to read any http resource (web page) or a local html file. Specify the URL Or File Path To Get (including any query string).
If the web resource requires authentication then specify the Authentication method and optionally a User Name/Password or an OAuth Auth Token retrieved from a previous OAuth SignIn action. Does not apply if reading from a local file path.
Optionally specify any Custom Headers to add to the request.
The Convert Returned Content To option enables you to convert the http response content. Options are:
- Nothing - leave the returned content as is.
- Convert HTML To Plain Text - removes all HTML tags.
- Convert HTML To Well Formed XML - converts the HTML to well-formed XML allowing easier parsing.
- Convert CSS To InLine Styles - moves all CSS styles sheets to inline style attributes. This enables the HTML to be sent via email as most email clients only support inline styles.
The returned content must then be assigned to a variable. Select from the Assign Content To list.
The HTTP response status code & response headers can also optionally be assigned to variables.
You can then make use of the HTML (or converted Plain Text or XML) in subsequent Actions.
HTTP Post
Post data to any web resource using HTTP POST.
Specify the Post To URL of the http resource to post to.
If the web resource requires authentication then specify the Authentication method and optionally a User Name/Password or an OAuth Auth Token retrieved from a previous OAuth SignIn action.
Select the Post Type you wish to perform. This can be:
- Regular Post - for posting form field values.
- Json Post - for posting Json data.
- Json Put - for posting Json data using a HTTP Put instead of Post.
- Custom - for performing custom HTTP Posts using data you specify
For regular Posts you can specify any number of Names and Values. The Values can be fixed or %fieldname% replacements or combinations of both.
The format of the body for this action is application/x-www-form-urlencoded. The action resembles the traditional post action from an HTML