BaseAutomationService
The BaseAutomationService class is the foundation for all Automation Scripts. It provides a standardized interface, common functionality, and essential utilities that all automation workflows can leverage.
Class Structure
Every Automation Script inherits from BaseAutomationService and must implement the execute method:
class MyAutomationScript < BaseAutomationService
def execute
# Your automation logic here
end
end
Core Components
Required Methods
execute
The main entry point for your automation script. This method contains the primary workflow logic.
def execute
Rails.logger.info("Starting automation process")
# Initialize any required clients or services
initialize_clients
# Your automation logic
process_data
# Handle completion
send_results
rescue StandardError => e
Rails.logger.error("Automation error: #{e.message}")
raise e
end
Available Instance Variables
When your script executes, several instance variables are automatically available:
@automation_workflow_execution: The current execution context@variables: Configuration variables and parameters@credentials: Authentication credentials for external services@errors: ActiveModel::Errors object for error tracking
Common Patterns
Client Initialization
private
def initialize_clients
@gmail_client = CommerceAutomationNodes::GmailNode.new(credentials: @credentials)
@openai_client = CommerceAutomationNodes::OpenaiNode.new(credentials: @credentials)
@slack_client = CommerceAutomationNodes::SlackNode.new(credentials: @credentials)
Rails.logger.info("Clients initialized successfully")
end
Time Range Setup
def setup_time_range
time_zone = @variables.dig("time_zone") || "America/New_York"
@start_time = if @variables.dig("start_time")
Time.parse(@variables.dig("start_time")).in_time_zone(time_zone)&.to_i
elsif @automation_workflow_execution.automation_workflow.last_successful_execution_at
@automation_workflow_execution.automation_workflow.last_successful_execution_at.in_time_zone(time_zone)&.to_i
else
30.minutes.ago.in_time_zone(time_zone)&.to_i
end
@end_time = if @variables.dig("end_time")
Time.parse(@variables.dig("end_time")).in_time_zone(time_zone)&.to_i
else
Time.now.in_time_zone(time_zone)&.to_i
end
Rails.logger.info("Time range: #{@start_time} to #{@end_time}")
end
Error Handling
def execute
Rails.logger.info("Starting automation process")
@errors = ActiveModel::Errors.new(self)
# Your automation logic here
rescue StandardError => e
Rails.logger.error("Automation error: #{e.message} [Account: #{@automation_workflow_execution.account.name}]")
raise e
end
Response Handling
def send_response(response_data)
send_response(
response_json: {
status: "success",
processed_items: response_data.length,
data: response_data
}
)
end
Best Practices
Logging
Always include comprehensive logging throughout your script:
Rails.logger.info("Starting process with #{items.length} items")
Rails.logger.debug("Processing item: #{item.inspect}")
Rails.logger.error("Failed to process item #{item.id}: #{e.message}")
Error Recovery
Implement proper error handling that allows partial success:
items.each do |item|
begin
process_item(item)
rescue => e
Rails.logger.error("Error processing item #{item.id}: #{e.message}")
next # Continue with other items
end
end
Configuration Access
Use safe navigation when accessing configuration variables:
model = @variables.dig("openai_model") || "gpt-4"
channel = @variables.dig("slack_channel")
user_id = @variables.dig("gmail_user_id")
Service Integration
Initialize and use service clients consistently:
def initialize_clients
@gmail_client = CommerceAutomationNodes::GmailNode.new(credentials: @credentials)
@openai_client = CommerceAutomationNodes::OpenaiNode.new(credentials: @credentials)
end
def send_message(content)
response = @openai_client.send_message(
message: content,
model: @variables.dig("openai_model") || "gpt-4"
)
response
end
Available Service Nodes
Common service nodes you can use in your automation scripts:
CommerceAutomationNodes::GmailNode- Gmail API integrationCommerceAutomationNodes::SlackNode- Slack messagingCommerceAutomationNodes::OpenaiNode- OpenAI API integrationCommerceAutomationNodes::ShopifyNode- Shopify API integrationCommerceAutomationNodes::WebhookNode- Webhook handling
Next Steps
- Explore Automation Script Examples to see complete implementations
- Learn about specific service integrations
- Understand workflow orchestration patterns