เริ่มต้นใช้งาน

สร้างโฆษณาชิ้นแรกของคุณด้วย API การตลาดโดยทำตามขั้นตอนเหล่านี้

ก่อนเริ่มต้น

คุณควรทำความคุ้นเคยกับ API กราฟและโครงสร้างแคมเปญโฆษณาของ Facebook ก่อน เมื่อคุณพร้อมที่จะทำการเรียก คุณจะต้องมี:

หลังจากนั้น คุณก็จะสามารถเริ่มต้นใช้งานได้ อย่าลืมตรวจสอบหลักปฏิบัติที่ดีที่สุดโดยทั่วไปสำหรับการใช้ API การตลาดด้วย

ขั้นตอนที่ 1: สร้างแคมเปญ

เริ่มกระบวนการโดยสร้างอ็อบเจ็กต์แคมเปญใหม่จากคลาส Campaign ในขั้นตอนนี้ คุณต้องกำหนดวัตถุประสงค์สำหรับโฆษณาของคุณ ซึ่งเป็นเป้าหมายโดยรวมของแคมเปญของคุณ เราขอแนะนำให้คุณสร้างแคมเปญ PAUSED เป็นอย่างแรกเพื่อไม่ให้ระบบเรียกเก็บเงินจากคุณในขณะที่ทำการทดสอบ

curl -X POST \ -F 'name="My campaign"' \ -F 'objective="OUTCOME_TRAFFIC"' \ -F 'status="PAUSED"' \ -F 'special_ad_categories=[]' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/campaigns
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdAccount = bizSdk.AdAccount; const Campaign = bizSdk.Campaign; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_ACCOUNT_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ ]; params = { 'name' : 'My campaign', 'objective' : 'OUTCOME_TRAFFIC', 'status' : 'PAUSED', 'special_ad_categories' : [], }; const campaigns = (new AdAccount(id)).createCampaign( fields, params ); logApiCallResult('campaigns api call complete.', campaigns);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdAccount; use FacebookAds\Object\Campaign; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_ACCOUNT_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'name' => 'My campaign', 'objective' => 'OUTCOME_TRAFFIC', 'status' => 'PAUSED', 'special_ad_categories' => array(), ); echo json_encode((new AdAccount($id))->createCampaign( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.campaign import Campaign from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'name': 'My campaign', 'objective': 'OUTCOME_TRAFFIC', 'status': 'PAUSED', 'special_ad_categories': [], } print AdAccount(id).create_campaign( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<AD_ACCOUNT_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdAccount(id, context).createCampaign() .setName(\"My campaign\") .setObjective(Campaign.EnumObjective.VALUE_OUTCOME_TRAFFIC) .setStatus(Campaign.EnumStatus.VALUE_PAUSED) .setParam(\"special_ad_categories\", \"[]\") .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_account = FacebookAds::AdAccount.get(id) campaigns = ad_account.campaigns.create({ name: 'My campaign', objective: 'OUTCOME_TRAFFIC', status: 'PAUSED', special_ad_categories: [], })

เมื่อสำเร็จ เราจะส่ง ID สำหรับแคมเปญโฆษณาที่คุณเพิ่งสร้างขึ้นใหม่กลับไป โปรดอย่าลืมบันทึก ID นี้เอาไว้ นอกจากนี้ คุณยังสามารถตรวจสอบยืนยันได้ว่าแคมเปญของคุณสร้างขึ้นในตัวจัดการโฆษณาแล้ว

แหล่งข้อมูล:

ขั้นตอนที่ 2: กำหนดเป้าหมาย

ก่อนที่จะไปยังขั้นตอนการสร้างชุดโฆษณาของคุณ คุณต้องกำหนดกลุ่มเป้าหมายของคุณก่อน ในขั้นตอนถัดไป คุณจะสร้างชุดโฆษณาและระบุแอตทริบิวต์ของกลุ่มเป้าหมาย

คุณมีตัวเลือกในการกำหนดเป้าหมายหลายอย่าง ในตัวอย่างนี้ เราใช้การค้นหาการกำหนดเป้าหมายเพื่อค้นหาค่าที่ระบุไว้ล่วงหน้าซึ่งสามารถนำมาใช้เพื่อตั้งค่ากลุ่มเป้าหมายได้

ขั้นแรก ให้มองหาประเทศที่มีอยู่ซึ่งมีคำว่า "united" (สหรัฐ, สหราช) รวมอยู่ด้วย

curl -G \
  -d 'location_types=["country"]' \
  -d 'type=adgeolocation' \
  -d 'q=united' \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v<API_VERSION>/search

Open In Graph API ExplorerOpen In Postman

จากนั้น เราจะสามารถหาความสนใจที่มีคำว่า "movie" (ภาพยนตร์) รวมอยู่ด้วย

curl -G \
  -d 'type=adinterest' \
  -d 'q=movie' \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v<API_VERSION>/search

ค่าที่ส่งคืนมาจากการเรียกใช้ข้างต้นช่วยให้เราเห็นว่า เราสามารถสร้างกลุ่มเป้าหมายเป็นบุคคลที่พำนักอยู่ในสหรัฐอเมริกาและมีความสนใจเกี่ยวกับภาพยนตร์ได้ ข้อมูลจำเพาะสำหรับการกำหนดเป้าหมายจะมีลักษณะดังนี้

targeting={ 
    "geo_locations": {"countries":["US"]}, 
    "interests": [{id: 6003139266461, 'name': 'Movies'}]
}

ขั้นตอนที่ 3: สร้างชุดโฆษณาและกำหนดงบประมาณ การเรียกเก็บเงิน การปรับให้เหมาะสม และระยะเวลา

ชุดโฆษณาคือกลุ่มของโฆษณาที่ใช้งบประมาณต่อวันหรืองบประมาณตลอดอายุการใช้งาน กำหนดเวลา การเรียกเก็บเงิน การปรับให้เหมาะสม และข้อมูลการกำหนดเป้าหมายเดียวกัน ในขั้นตอนนี้ คุณจำเป็นต้องสร้างอ็อบเจ็กต์ใหม่จากคลาส AdSet และระบุข้อมูลต่อไปนี้

  • ระยะเวลา: ระยะเวลาที่จะแสดงโฆษณา ตั้งค่าโดยใช้ start_time และ end_time
  • งบประมาณ: จำนวนเงินที่คุณต้องการใช้จ่าย ใช้ daily_budget หรือ lifetime_budget
  • การปรับให้เหมาะสม: ผลลัพธ์ที่คุณต้องการดำเนินการให้สำเร็จจากโฆษณา ตั้งค่าโดยใช้ optimization_goal
  • การเรียกเก็บเงิน: วิธีที่คุณใช้ชำระเงิน ใช้ billing_event
  • ราคาประมูล: มูลค่าที่คุณตั้งไว้เมื่อเกิดเหตุการณ์การปรับให้เหมาะสมขึ้น ใช้ช่อง bid_amount
  • การกำหนดเป้าหมาย: ใช้ข้อมูลจำเพาะสำหรับการกำหนดเป้าหมายที่สร้างขึ้นในขั้นตอนที่ 2

ในการสร้างชุดโฆษณา คุณจะต้องมี ID แคมเปญโฆษณาที่คุณบันทึกไว้จากขั้นตอนที่ 1 ด้วย

curl -X POST \ -F 'name="My Reach Ad Set"' \ -F 'optimization_goal="REACH"' \ -F 'billing_event="IMPRESSIONS"' \ -F 'bid_amount=2' \ -F 'daily_budget=1000' \ -F 'campaign_id="<AD_CAMPAIGN_ID>"' \ -F 'targeting={ "geo_locations": { "countries": [ "US" ] }, "facebook_positions": [ "feed" ] }' \ -F 'status="PAUSED"' \ -F 'promoted_object={ "page_id": "<PAGE_ID>" }' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/adsets
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdAccount = bizSdk.AdAccount; const AdSet = bizSdk.AdSet; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_ACCOUNT_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ ]; params = { 'name' : 'My Reach Ad Set', 'optimization_goal' : 'REACH', 'billing_event' : 'IMPRESSIONS', 'bid_amount' : '2', 'daily_budget' : '1000', 'campaign_id' : '<adCampaignLinkClicksID>', 'targeting' : {'geo_locations':{'countries':['US']},'facebook_positions':['feed']}, 'status' : 'PAUSED', 'promoted_object' : {'page_id':'<pageID>'}, }; const adsets = (new AdAccount(id)).createAdSet( fields, params ); logApiCallResult('adsets api call complete.', adsets);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdAccount; use FacebookAds\Object\AdSet; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_ACCOUNT_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'name' => 'My Reach Ad Set', 'optimization_goal' => 'REACH', 'billing_event' => 'IMPRESSIONS', 'bid_amount' => '2', 'daily_budget' => '1000', 'campaign_id' => '<adCampaignLinkClicksID>', 'targeting' => array('geo_locations' => array('countries' => array('US')),'facebook_positions' => array('feed')), 'status' => 'PAUSED', 'promoted_object' => array('page_id' => '<pageID>'), ); echo json_encode((new AdAccount($id))->createAdSet( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.adset import AdSet from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'name': 'My Reach Ad Set', 'optimization_goal': 'REACH', 'billing_event': 'IMPRESSIONS', 'bid_amount': '2', 'daily_budget': '1000', 'campaign_id': '<adCampaignLinkClicksID>', 'targeting': {'geo_locations':{'countries':['US']},'facebook_positions':['feed']}, 'status': 'PAUSED', 'promoted_object': {'page_id':'<pageID>'}, } print AdAccount(id).create_ad_set( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<AD_ACCOUNT_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdAccount(id, context).createAdSet() .setName(\"My Reach Ad Set\") .setOptimizationGoal(AdSet.EnumOptimizationGoal.VALUE_REACH) .setBillingEvent(AdSet.EnumBillingEvent.VALUE_IMPRESSIONS) .setBidAmount(2L) .setDailyBudget(1000L) .setCampaignId(\"<adCampaignLinkClicksID>\") .setTargeting( new Targeting() .setFieldFacebookPositions(Arrays.asList(\"feed\")) .setFieldGeoLocations( new TargetingGeoLocation() .setFieldCountries(Arrays.asList(\"US\")) ) ) .setStatus(AdSet.EnumStatus.VALUE_PAUSED) .setPromotedObject(\"{\\"page_id\\":\\"<pageID>\\"}\") .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_account = FacebookAds::AdAccount.get(id) adsets = ad_account.adsets.create({ name: 'My Reach Ad Set', optimization_goal: 'REACH', billing_event: 'IMPRESSIONS', bid_amount: '2', daily_budget: '1000', campaign_id: '<adCampaignLinkClicksID>', targeting: {'geo_locations':{'countries':['US']},'facebook_positions':['feed']}, status: 'PAUSED', promoted_object: {'page_id':'<pageID>'}, })

เราขอแนะนำให้สร้างชุดโฆษณาที่มีสถานะ PAUSED เพื่อหลีกเลี่ยงการเก็บค่าบริการในระหว่างทำการทดสอบ

ขั้นตอนที่ 4: จัดเตรียมชิ้นงานโฆษณา

เอกสารอ้างอิง

ในขั้นตอนนี้ คุณจะใช้อ็อบเจ็กต์ AdCreative เพื่อระบุองค์ประกอบภาพของโฆษณา ข้อมูลที่จำเป็นต้องระบุจะขึ้นอยู่กับวัตถุประสงค์ของคุณ แต่แอตทริบิวต์ทั่วไปจะมีดังต่อไปนี้:

  • รูปภาพและวิดีโอ
  • ชื่อและคำอธิบาย
  • ลิงก์
  • ปุ่มกระตุ้นให้ดำเนินการ

คุณอาจต้องกรอกข้อมูลในช่องกรอกข้อมูลขั้นสูง ทั้งนี้ขึ้นกับวัตถุประสงค์ของคุณ เช่น โฆษณาสำหรับแอพ iOS ต้องมี URL ของ App Store

คุณสามารถกำหนดชิ้นงานโฆษณาให้เป็นส่วนหนึ่งของชุดโฆษณาหรือเป็นแบบสแตนด์อโลนก็ได้ แต่ไม่ว่าคุณจะเลือกแบบใด เราก็จะจัดเก็บชิ้นงานโฆษณาดังกล่าวไว้ในคลังชิ้นงานโฆษณาของบัญชีโฆษณาของคุณเพื่อนำมาใช้ในโฆษณา

ตัวอย่าง

ตัวอย่างนี้แสดงให้เห็นวิธีการจัดเตรียมรูปภาพและการสร้างอ็อบเจ็กต์ AdCreative

ขั้นแรก ให้สร้างอ็อบเจ็กต์ AdImage จากไฟล์รูปภาพ

curl \
  -F 'filename=@<IMAGE_PATH>' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v<API_VERSION>/act_<AD_ACCOUNT_ID>/adimages

จากนั้น ใช้แฮชของรูปภาพเพื่อสร้าง AdCreative

curl -X POST \
  -F 'name="Sample Creative"' \
  -F 'object_story_spec={
       "page_id": "<PAGE_ID>",
       "link_data": {
         "image_hash": "<IMAGE_HASH>",
         "link": "https://facebook.com/<PAGE_ID>",
         "message": "try it out"
       }
     }' \
  -F 'degrees_of_freedom_spec={
      "creative_features_spec": {
        "standard_enhancements": {
          "enroll_status": "OPT_IN"
        }
      }
    }' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v<API_VERSION>/act_<AD_ACCOUNT_ID>/adcreatives

Open In Graph API ExplorerOpen In Postman

ตรวจสอบยืนยันการอัพโหลดรูปภาพโดยไปที่คลังสื่อของคุณในตัวจัดการโฆษณา

ในจุดนี้ AdCreative ที่มีลิงก์ของคุณจะยังไม่ปรากฏในตัวจัดการโฆษณา คุณจะเห็นข้อมูลนี้เมื่อคุณจองโฆษณา คุณสามารถแก้ไขจุดบกพร่องชิ้นงานโฆษณาของคุณด้วย Graph API Explorer และระบุช่องใดก็ตามที่คุณต้องการอ่าน ดังนี้

GET /{my-creative-id} HTTP/1.1
Host: graph.facebook.com/?fields=object_story_spec

ขั้นตอนที่ 5: กำหนดเวลาแสดงโฆษณา

สุดท้าย ให้สร้างอ็อบเจ็กต์โฆษณาเพื่อเชื่อมโยง AdCreative และ AdSet เข้าด้วยกัน ตั้งค่า status ของ Ad เป็น paused เพื่อหลีกเลี่ยงการสั่งซื้อในทันที

curl -X POST \ -F 'name="My Ad"' \ -F 'adset_id="<AD_SET_ID>"' \ -F 'creative={ "creative_id": "<CREATIVE_ID>" }' \ -F 'status="PAUSED"' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/ads
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdAccount = bizSdk.AdAccount; const Ad = bizSdk.Ad; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_ACCOUNT_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ ]; params = { 'name' : 'My Ad', 'adset_id' : '<adSetID>', 'creative' : {'creative_id':'<adCreativeID>'}, 'status' : 'PAUSED', }; const ads = (new AdAccount(id)).createAd( fields, params ); logApiCallResult('ads api call complete.', ads);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdAccount; use FacebookAds\Object\Ad; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_ACCOUNT_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'name' => 'My Ad', 'adset_id' => '<adSetID>', 'creative' => array('creative_id' => '<adCreativeID>'), 'status' => 'PAUSED', ); echo json_encode((new AdAccount($id))->createAd( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.ad import Ad from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'name': 'My Ad', 'adset_id': '<adSetID>', 'creative': {'creative_id':'<adCreativeID>'}, 'status': 'PAUSED', } print AdAccount(id).create_ad( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<AD_ACCOUNT_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdAccount(id, context).createAd() .setName(\"My Ad\") .setAdsetId(<adSetID>L) .setCreative( new AdCreative() .setFieldId(\"<adCreativeID>\") ) .setStatus(Ad.EnumStatus.VALUE_PAUSED) .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_account = FacebookAds::AdAccount.get(id) ads = ad_account.ads.create({ name: 'My Ad', adset_id: '<adSetID>', creative: {'creative_id':'<adCreativeID>'}, status: 'PAUSED', })

ตรวจสอบยืนยันว่าโฆษณาของคุณปรากฏอยู่ในตัวจัดการโฆษณา คลิกที่แคมเปญที่คุณเพิ่งสร้างขึ้น จากนั้นคลิกที่ชุดโฆษณาและโฆษณา

เมื่อคุณพอใจกับการจองโฆษณาด้วย API แล้ว ให้ตั้งค่าสถานะเป็น active ขั้นแรก โฆษณาต้องผ่านขั้นตอนการตรวจสอบโฆษณาก่อนและมีสถานะเป็น PENDING_REVIEW เมื่อการตรวจสอบเสร็จเรียบร้อย โฆษณาจะกลับไปมีสถานะเป็น ACTIVE

การคัดลอกโฆษณา

อีกทางเลือกหนึ่งคือ คุณสามารถคัดลอกโฆษณา องค์ประกอบ หรือแคมเปญที่มีอยู่ได้ สิ่งนี้จะช่วยให้คุณสามารถคัดลอกแคมเปญได้อย่างรวดเร็วเพื่อเปลี่ยนแปลงการกำหนดค่าหรือสร้างกลุ่มทดสอบเพื่อกลั่นกรองข้อมูลความรู้เกี่ยวกับประสิทธิภาพการทำงานออกมา สำหรับรายละเอียดเพิ่มเติม โปรดดูที่: