class FacebookAds::AdCampaign

developers.facebook.com/docs/marketing-api/reference/ad-campaign-group

Constants

FIELDS
OBJECTIVES
STATUSES

Public Instance Methods

ad_account() click to toggle source

AdAccount

# File lib/facebook_ads/ad_campaign.rb, line 52
def ad_account
  @ad_account ||= AdAccount.find("act_#{account_id}")
end
ad_insights(range: Date.today..Date.today, level: 'ad', time_increment: 1) click to toggle source

AdInsight

# File lib/facebook_ads/ad_campaign.rb, line 101
def ad_insights(range: Date.today..Date.today, level: 'ad', time_increment: 1)
  query = {
    level: level,
    time_increment: time_increment,
    time_range: { since: range.first.to_s, until: range.last.to_s }
  }

  AdInsight.paginate("/#{id}/insights", query: query)
end
ad_sets(effective_status: ['ACTIVE'], limit: 100) click to toggle source

AdSet

# File lib/facebook_ads/ad_campaign.rb, line 58
def ad_sets(effective_status: ['ACTIVE'], limit: 100)
  AdSet.paginate("/#{id}/adsets", query: { effective_status: effective_status, limit: limit })
end
create_ad_set(name:, targeting:, optimization_goal:, promoted_object: {}, daily_budget: nil, lifetime_budget: nil, end_time: nil, billing_event: 'IMPRESSIONS', status: 'ACTIVE', bid_strategy: nil, bid_amount: nil) click to toggle source
# File lib/facebook_ads/ad_campaign.rb, line 62
def create_ad_set(name:, targeting:, optimization_goal:, promoted_object: {}, daily_budget: nil, lifetime_budget: nil, end_time: nil, billing_event: 'IMPRESSIONS', status: 'ACTIVE', bid_strategy: nil, bid_amount: nil)
  raise ArgumentError, "Optimization goal must be one of: #{AdSet::OPTIMIZATION_GOALS.join(', ')}" unless AdSet::OPTIMIZATION_GOALS.include?(optimization_goal)
  raise ArgumentError, "Billing event must be one of: #{AdSet::BILLING_EVENTS.join(', ')}" unless AdSet::BILLING_EVENTS.include?(billing_event)
  raise ArgumentError, "Bid strategy must be one of: #{AdSet::BID_STRATEGIES.join(', ')}" unless AdSet::BID_STRATEGIES.include?(bid_strategy)

  if targeting.is_a?(Hash)
    # NOP
  else
    targeting.validate! # Will raise if invalid.
    targeting = targeting.to_hash
  end

  query = {
    campaign_id: id,
    name: name,
    targeting: targeting.to_json,
    promoted_object: promoted_object.to_json,
    optimization_goal: optimization_goal,
    billing_event: billing_event,
    status: status,
    bid_strategy: bid_strategy,
    bid_amount: bid_amount
  }

  raise ArgumentError 'Only one budget may be set between daily_budget and life_budget' if daily_budget && lifetime_budget

  if daily_budget
    query[:daily_budget] = daily_budget
  elsif lifetime_budget
    query[:lifetime_budget] = lifetime_budget
    query[:end_time] = end_time
  end

  result = AdSet.post("/act_#{account_id}/adsets", query: query)
  AdSet.find(result['id'])
end