class AutomationRules::ActionService < ActionService def initialize(rule, account, conversation) super(conversation) @rule = rule @account = account Current.executed_by = rule end def perform @rule.actions.each do |action| action = action.with_indifferent_access begin send(action[:action_name], action[:action_params]) rescue StandardError => e ChatwootExceptionTracker.new(e, account: @account).capture_exception end end ensure Current.reset end private def send_attachment(blob_ids) return if conversation_a_tweet? return unless @rule.files.attached? blob = ActiveStorage::Blob.find(blob_ids) return if blob.blank? params = { content: nil, private: false, attachments: blob } mb = Messages::MessageBuilder.new(nil, @conversation, params) mb.perform end def send_email_transcript(emails) emails.each do |email| ConversationReplyMailer.with(account: @conversation.account).conversation_transcript(@conversation, email)&.deliver_later end end def send_webhook_event(webhook_url) payload = @conversation.webhook_data.merge(event: "automation_event.#{@rule.event_name}") WebhookJob.perform_later(webhook_url[0], payload) end def send_message(message) return if conversation_a_tweet? params = { content: message[0], private: false, content_attributes: { automation_rule_id: @rule.id } } mb = Messages::MessageBuilder.new(nil, @conversation, params) mb.perform end def send_email_to_team(params) teams = Team.where(id: params[0][:team_ids]) teams.each do |team| TeamNotifications::AutomationNotificationMailer.conversation_creation(@conversation, team, params[0][:message])&.deliver_now end end end