iachat/app/controllers/api/v1/tracking_controller.rb

45 lines
1.3 KiB
Ruby

class Api::V1::TrackingController < ActionController::API
def click
LeadClick.create!(click_params)
head :no_content
rescue StandardError => e
Rails.logger.error("Error processing tracking click: #{e.message}")
head :no_content
end
private
def resolved_inbox_id
host = params[:hostname].to_s.strip.sub(%r{^https?://}, '')
LandingHost.find_by(hostname: host, active: true)&.inbox_id
end
def click_params
base_params = {
inbox_id: resolved_inbox_id,
ip: params[:ip].presence || request.remote_ip,
user_agent: request.user_agent || params[:user_agent],
hostname: params[:hostname].to_s.strip,
source: params[:source],
campanha: params[:campanha],
lp: params[:lp],
click_id: params[:click_id],
status: :clicked
}
# Se 'lp' for fornecido, extraímos os UTMs se fonte ou campanha estiverem vazios
if base_params[:lp].present?
begin
uri = URI.parse(base_params[:lp])
query = Rack::Utils.parse_nested_query(uri.query)
base_params[:source] ||= query['utm_source']
base_params[:campanha] ||= query['utm_campaign']
rescue StandardError => e
Rails.logger.warn("Error parsing LP URL for UTMs: #{e.message}")
end
end
base_params
end
end