8

Tôi đã đọc rất nhiều về quảng cáo và nội dung trên facebook, sử dụng GUI cho phép thực hiện những gì tôi đang làm và vì một số lý do trên sdk nó không.Quảng cáo trên Facebook Sdk không cho phép đăng quảng cáo qua API. Mã số: 1487930

Tôi nhận mã phụ này trên quảng cáo Facebook sdk subcode .

Thông điệp nói:

Bạn phải chọn một đối tượng để thúc đẩy, thông điệp người dùng cho biết: Chiến dịch của bạn phải> bao gồm một quảng cáo thiết lập với một đối tượng được chọn để quảng bá liên quan đến mục tiêu của bạn>> (ví dụ: Trang, URL, sự kiện). Vui lòng cập nhật bộ quảng cáo của bạn để tiếp tục.

đáp ứng trả về không có trường để đổ lỗi và lỗi xảy ra khi sáng tạo được tạo ra: $creative->create();

tôi thiết lập adset của tôi như thế này:

use Facebook; 
    use FacebookAds\Api; 
    use FacebookAds\Object; 
    use Facebook\Exceptions; 

     $inventory = new Models\AdvertisingInventory(); 
     $item = $inventory->getListing($id)->getAttributes(); 
     $item['properties'] = json_decode($item['properties'], true); 

     /** 
     * Step 1 Instantiate an API 
     * 
     * @link https://developers.facebook.com/docs/marketing-api/sdks#init-sdk 
     */ 

     try { 
      Api::init($this->app_id, $this->app_secret, $this->access_token); 
     } catch (\Exception $e) { 
      return $this->AdvertisingRenderErrorMessage($e); 
     } 

     /** 
     * Step 2 Query to create campaign 
     * @var $campaign 
     * @link https://developers.facebook.com/docs/marketing-api/reference/ad-campaign-group 
     * 
     * TODO: Implement ad image widget sizing: https://www.facebook.com/business/help/103816146375741 
     */ 
     try { 

      $account = new Object\AdAccount($this->current_facebook_ads_account); 

      $campaign = new Object\Campaign(null, $this->current_facebook_ads_account); // Getting AdAccount instance 

      $ad_campaigns = $account->getCampaigns($campaign::getFields())->getArrayCopy(); // Checks of there are any campaigns already created 

      $current_campaign = null; 

      if (!empty($ad_campaigns)) { 
       foreach ($ad_campaigns as $ad_campaign) { // loops through campaigns 
        $campaign_data = $ad_campaign->exportAllData(); 
        if ($campaign_data['name'] == 'Sell old inventory') { // If campaign name matches the name given to new campaign, created campaign is then used 
         $current_campaign = $ad_campaign; 
        } 
       } 
      } 

      if (!is_null($current_campaign)) { // Checks if campaign is already assigned if yes, then its used. 
       $campaign = $current_campaign; 
      } else { // else new one is created 
       $campaign->setData(array(
        Object\Fields\CampaignFields::NAME => 'Sell old inventory', 
        Object\Fields\CampaignFields::OBJECTIVE => Object\Values\CampaignObjectiveValues::LINK_CLICKS, 
       )); 

       $campaign->validate()->create(array(
        Object\Campaign::STATUS_PARAM_NAME => Object\Campaign::STATUS_PAUSED 
       )); 
      } 

      //$campaignData = $campaign->getData(); 

      echo 'Campaign ID: ' . $campaign->id . " <br>\n"; 

     } catch (\Exception $e) { 
      return $this->AdvertisingRenderErrorMessage($e); 
     } 

     /** 
     * Step 3 Search for targeting topic 
     * @var $targeting 
     * @link https://developers.facebook.com/docs/marketing-api/targeting-specs/v2.7 
     */ 
     try { 
      $results = Object\TargetingSearch::search(
       Object\Search\TargetingSearchTypes::INTEREST, 
       null, 
       'Automobiles'); 

      $target = (count($results)) ? $results->current() : null; 

      //if (!is_null($target)) { 

      echo "Using target: " . $target->name . "<br/>"; 

      $targeting = new Object\Targeting(); 
      $targeting->{Object\Fields\TargetingFields::GEO_LOCATIONS} = array(
       'countries' => array('NZ') 
      ); 
      $targeting->{Object\Fields\TargetingFields::INTERESTS} = array(
       array(
        'id' => $target->id, 
        'name' => $target->name, 
       ), 
      ); 
      //} 
     } catch (\Exception $e) { 
      return $this->AdvertisingRenderErrorMessage($e); 
     } 

     /** 
     * Step 4 Create an AdSet 
     * @var $adset 
     * @link https://developers.facebook.com/docs/marketing-api/reference/ad-campaign 
     */ 
     try { 

      $adset = new Object\AdSet(null, $this->current_facebook_ads_account); 
      //$fields = $adset::getFields(); 

      $available_adsets = $campaign->getAdSets(array(Object\Fields\AdSetFields::NAME,Object\Fields\AdSetFields::ID)); 

      $current_adset = null; 

      if (!empty($available_adsets)) { 
       foreach ($available_adsets as $ad_set) { // loops through adsets 
        if ($adset->name == $item['title']) { // If adset name matches the name given to new campaign, created campaign is then used 
         $current_adset = $ad_set; 
        } 
       } 
      } 

      if (!is_null($current_adset)) { 
       $adset = $current_adset; 
       /*$adset->read(array(
        Object\Fields\AdSetFields::PROMOTED_OBJECT, 
        Object\Fields\AdSetFields::NAME 
       )); 
       echo $adset->name."<br>"; 
       echo $adset->promoted_object."<br>";*/ 
      } else { 

       $start_time = (new \DateTime("+1 week"))->format(\DateTime::ISO8601); 
       $end_time = (new \DateTime("+2 week"))->format(\DateTime::ISO8601); 


       $adset->setData(array(
        Object\Fields\AdSetFields::NAME => $item['title'], 
        Object\Fields\AdSetFields::OPTIMIZATION_GOAL => Object\Values\AdSetOptimizationGoalValues::LINK_CLICKS, 
        Object\Fields\AdSetFields::BILLING_EVENT => Object\Values\AdSetBillingEventValues::LINK_CLICKS, 
        Object\Fields\AdSetFields::BID_AMOUNT => 100, 
        Object\Fields\AdSetFields::DAILY_BUDGET => 500, 
        Object\Fields\AdSetFields::CAMPAIGN_ID => $campaign->id, 
        Object\Fields\AdSetFields::TARGETING => $targeting, 
        Object\Fields\AdSetFields::START_TIME => $start_time, 
        Object\Fields\AdSetFields::END_TIME => $end_time, 
        Object\Fields\AdSetFields::PROMOTED_OBJECT => (object) array(
         Object\Fields\AdPromotedObjectFields::PAGE_ID => '178698438995498', 
        ) 
       )); 
       $adset->create(array(
        Object\AdSet::STATUS_PARAM_NAME => Object\AdSet::STATUS_PAUSED, 
       )); 
      } 
      echo 'Adset ID: ' . $adset->id . " <br>\n"; 
     } catch (\Exception $e) { 
      return $this->AdvertisingRenderErrorMessage($e); 
     } 


     //New method 
     /** 
     * Step 5 Create an AdImage 
     * @var $image 
     * @link https://developers.facebook.com/docs/marketing-api/reference/ad-image 
     */ 
     try { 
      $image = new Object\AdImage(null, $this->current_facebook_ads_account); // Invokes images preparation for Facebook ad instance 
      $target_path = __DIR__ . '/assets/temp/'; // path where images will be streamed to 

      if (!file_exists($target_path)) { 
       mkdir($target_path, 0755); // creating path if one doesn't exist 
      } 

      $files_in_dir = array_diff(scandir($target_path), array('..', '.')); // checking for existing files in target directory 
      $size = getimagesize($item['properties']['images_large'][0]); // getting image details 
      $extension = image_type_to_extension($size[2]); // getting image extension from type 
      $target_file_name = preg_replace(['/\./', '/\\s/', '/\\t/'], "_", strtolower($item['title'])) . $extension; // creating proper file name 
      $target_file = $target_path . $target_file_name; // setting full target directory 

      if (array_search($target_file_name, $files_in_dir) === false) { // checking if target file already exists 

       $image_file = file_get_contents($item['properties']['images_large'][0]); 

       file_put_contents($target_file, $image_file); 
      } 

      $image->{Object\Fields\AdImageFields::FILENAME} = $target_file; // Using target file as ad image 

      $image->create(); 

      echo 'Image Hash: ' . $image->hash . " <br>\n"; 
     } catch (\Exception $e) { 
      return $this->AdvertisingRenderErrorMessage($e); 
     } 

     /** 
     * Step 6 Create an AdCreative 
     */ 
     try { 

      $creative = new Object\AdCreative(null, $this->current_facebook_ads_account); 

      $available_creatives = $adset->getAdCreatives($creative::getFields()); 

      $current_creative = null; 

      if (!empty($available_creatives)) { 
       foreach ($available_creatives as $creative) { // loops through adsets 
        if ($creative->name == 'Creative of '.$item['title']) { // If adset name matches the name given to new campaign, created campaign is then used 
         $current_creative = $creative; 
        } 
       } 
      } 

      if (!is_null($current_creative)) { 
       $creative = $current_creative; 
      } else { 

       $creative = new Object\AdCreative(null, $this->current_facebook_ads_account); 
       $creative->setData(array(
        Object\Fields\AdCreativeFields::NAME => 'Creative of '.$item['title'], 
        Object\Fields\AdCreativeFields::TITLE => $item['title'], 
        Object\Fields\AdCreativeFields::BODY => $item['properties']['description'], 
        Object\Fields\AdCreativeFields::IMAGE_HASH => $image->hash, 
        Object\Fields\AdCreativeFields::LINK_URL => ipConfig()->get('globalPortalUrl'), 
        Object\Fields\AdCreativeFields::OBJECT_URL => ipConfig()->get('globalPortalUrl'), 
       )); 
       **$creative->create();** 
      } 
      echo 'Creative ID: ' . $creative->id . " <br>\n"; 
     } catch (\Exception $e) { 
      return $this->AdvertisingRenderErrorMessage($e); 
     } 


     /** 
     * Step 7 Create an Ad 
     * 
     * Then, use the image hash returned from above. Finally, create your ad along with ad creative. 
     * Please note that the ad creative is not created independently, rather its data structure 
     * is appended to the ad group 
     * 
     * @link https://developers.facebook.com/docs/marketing-api/reference/adgroup 
     */ 
     try { 

      $ad = new Object\Ad(null, $this->current_facebook_ads_account); 

      $last_ad = $adset->getAds($ad::getFields())->end()->exportData(); 

      //var_dump($last_ad); exit(); 

      $ad->setData(array(
       Object\Fields\AdFields::NAME => $item['title'].' #1', 
       Object\Fields\AdFields::ADSET_ID => $adset->id, 
       Object\Fields\AdFields::CREATIVE => array('creative_id' => $creative->id), 
      )); 
      $ad->create(array(
       Object\Ad::STATUS_PARAM_NAME => Object\Ad::STATUS_PAUSED, 
      )); 
      echo 'Ad ID:' . $ad->id . " <br>\n"; 

     } catch (\Exception $e) { 
      return $this->AdvertisingRenderErrorMessage($e); 

     } 

tôi giao trang đó vào tài khoản của doanh nghiệp của tôi và rằng ứng dụng truy vấn đi qua cũng như người dùng là chủ sở hữu của tài khoản doanh nghiệp, ứng dụng và trang.

Điều gì khác cần nếu ID trang được cung cấp? Mục tiêu chiến dịch là:

Object\Fields\CampaignFields::OBJECTIVE => Object\Values\CampaignObjectiveValues::LINK_CLICKS 

tôi sử dụng hợp lệ page_id. Tôi đang thiếu một số dữ liệu bổ sung cho (FYI đã thử loại này mà không có (đối tượng) loại):

Object\Fields\AdSetFields::PROMOTED_OBJECT => (object) array(
    Object\Fields\AdPromotedObjectFields::PAGE_ID => '178698438995498', 
) 

Hoặc có vấn đề với cài đặt ứng dụng, trang và tài khoản doanh nghiệp?

Vui lòng ai đó trả lời cuộc gọi của tôi. Cố gắng hầu như tất cả mọi thứ không thể vượt qua điểm này. Bất kỳ đối tượng được quảng cáo nào khác không hoạt động với mục tiêu chiến dịch.

P.S. Ai đó với danh tiếng hơn 1500 hãy tạo ne facebook-php-ads-sdk tag.

+1

bạn có tìm thấy giải pháp cho điều này không? – aks

+0

Vâng, nhưng tôi không nhớ nó, tôi nghĩ rằng đó là do không hợp lệ liên tục thiết lập như param trên hình ảnh, tôi có một mã số làm việc. Nếu bạn cần tôi. :-) P.S. Nếu bạn đang lập kế hoạch để làm quảng cáo tự động liên tục sau đó nói chuyện với google cho tài khoản kinh doanh hoặc một cái gì đó, họ sẽ tăng giới hạn cho tài khoản. Nhưng tôi sẽ cố gắng để xem những gì khác nhau bây giờ sau đó nó đã được trước khi ngày mai, bởi vì tôi thực sự bận rộn bây giờ. – juslintek

Trả lời

1

Tôi không nghĩ rằng đối tượng được quảng bá là bắt buộc cho mục tiêu LINK_CLICKS. Bạn đã thử không đặt nó ở tất cả?

Facebook docs cho bộ quảng cáo, phần Tạo, lĩnh vực promoted_object nói

bắt buộc với các mục tiêu chiến dịch nhất định

và mục tiêu LINK_CLICKS không được liệt kê ở đó.


Hoặc bạn có thể tạo ra một quảng cáo với các thông số mong muốn thông qua giao diện FB (quảng cáo quản lý hoặc quyền biên tập) và sau đó đọc lại giá trị của nó thông qua API để xem những gì các lĩnh vực được làm đầy và những gì giá trị được sử dụng.

+0

Tôi đang sử dụng mục tiêu LINK_CLICKS và tôi thấy giống nhau "Chiến dịch của bạn phải bao gồm một bộ quảng cáo có đối tượng được chọn để quảng cáo có liên quan đến mục tiêu của bạn (ví dụ: Trang, URL, sự kiện). Vui lòng cập nhật bộ quảng cáo của bạn để tiếp tục. . "khi BẬT quảng cáo mới của tôi đến /quảng cáo. – Kirby

1

Tôi gặp lỗi này vì tôi đã sử dụng tên thông số sai khi tạo Adcreative.Tôi đã sử dụng page_id thay vì object_id.

Hy vọng nó có thể giúp ai đó.

Các vấn đề liên quan