2017-12-13 25 views
1

広告クリエイティブURLタグの更新中に問題が発生しました。Facebook PHP SDKを使用して広告クリエイティブURLタグを変更できません

私は既存の広告クリエイティブのURLタグを更新できないことを知りました。

URLタグを変更して既存のものを複製しようとしましたが、古いものを削除しようとしましたが、作成の問題を削除しましたが、今はこのエラーが発生しています。それは「削除」するために、広告のステータスを変更しようとしました 既存の広告グループ

のために現在使用中であるが、それはまた、作品おりませんので

このクリエイティブを削除することはできません。また、広告ステータスを「PAUSED」に変更しようとしましたが、運がまったくありませんでした。 APIでも広告ステータスは更新されません。

誰でもこの問題を解決するにはどうすればよいですか。広告クリエイティブURLタグを更新する方法

私はPHP SDKを使用しており、これに続いてFB documentationです。 私は自分のアプリケーションに必要なすべての権限を持っていますが、FBによって承認されています。

答えて

0

Iこれらの手順

  1. が必要な値
  2. で新しい広告クリエイティブを作成し、以下のことで、これを首尾よくしました210
  3. この新しい広告クリエイティブを、古い広告クリエイティブが関連付けられた「広告」に割り当てます。

この問題を解決するために使用したPHPコードは次のとおりです。

$newObj = new AdCreative(null, 'act_account_id'); 
    $newData = []; 
    $fields = [ 
     AdCreativeFields::NAME, 
     AdCreativeFields::TITLE, 
     AdCreativeFields::BODY, 
     AdCreativeFields::OBJECT_URL, 
     AdCreativeFields::LINK_URL, 
     AdCreativeFields::IMAGE_HASH, 
     AdCreativeFields::OBJECT_STORY_ID, 
     AdCreativeFields::OBJECT_STORY_SPEC, 
     AdCreativeFields::URL_TAGS, 
    ]; 
    foreach ($fields as $field) { 
     $value = $oldAdCreative->{$field}; 
     if(isset($newValues[$field])){ 
      $value = $newValues[$field]; 
     } 
     $newData[$field] = $value; 
    } 
    $newObj->setData($newData); 
    $newObj->create(); 

    // Assigning New Creative ID to Ad 
    $ad = new Ad($adId); 
    $ad->update(array(
     'creative' => ['creative_id' => $newObj->{AdCreativeFields::ID}], 
     'redownload' => true, 
    )); 

完了。

0

これは、私はそれが動作を取得するためにやっているものです、まだ問題のカップルが、広告のこの作品で最も種類があります。

public function appendAdSetIdsToCreatives($fbAccountId, $adsetIds, $creativeIds, $fullSync = false, $dryRun = false) 
{ 
    $urlTagArray = []; 
    $attempts = 0; 
    Cursor::setDefaultUseImplicitFetch(true); 
    $account = new AdAccount('act_' . $fbAccountId); 
    $params['limit'] = 1000; 
    $params[AdFields::EFFECTIVE_STATUS] = array(AdEffectiveStatusValues::ACTIVE, AdEffectiveStatusValues::PENDING_BILLING_INFO, AdEffectiveStatusValues::PENDING_REVIEW, AdEffectiveStatusValues::PREAPPROVED); 

    if (!$fullSync) { 
     $params['updated_since'] = Carbon::now()->subDay()->timestamp; 
    } 
    if (!empty($adsetIds)) { 
     $params[AdFields::ADSET_ID] = $adsetIds; 
    } 
    $updateCount = 0; 
    $skipCount = 0; 
    $exception = null; 
    do { 
     try { 
      $cursor = $account->getAds(array(AdFields::ID, AdFields::NAME, AdFields::ADSET_ID, AdFields::CREATIVE, AdFields::STATUS, AdFields::EFFECTIVE_STATUS), $params); 
      foreach ($cursor as $ad) { 
       //If adset specified in command, ignore if ad not belongs to specified adset 
       if (!empty($adsetIds) && !in_array($ad->adset_id, $adsetIds)) { 
        continue; 
       } 
       foreach ($ad->creative as $creativeId) { 
        if(!empty($creativeIds) && !in_array($creativeId, $creativeIds)) { 
         continue; 
        } 
        $creativeParams = ['id' => $creativeId]; 
        $creativeCursor = $ad->getAdCreatives(array(
         AdCreativeFields::ACCOUNT_ID, 
         AdCreativeFields::ACTOR_ID, 
         AdCreativeFields::ADLABELS, 
         AdCreativeFields::APPLINK_TREATMENT, 
         AdCreativeFields::BODY, 
         AdCreativeFields::CALL_TO_ACTION_TYPE, 
         AdCreativeFields::EFFECTIVE_INSTAGRAM_STORY_ID, 
         AdCreativeFields::EFFECTIVE_OBJECT_STORY_ID, 
         AdCreativeFields::ID, 
         AdCreativeFields::IMAGE_CROPS, 
         AdCreativeFields::IMAGE_HASH, 
         AdCreativeFields::IMAGE_URL, 
         AdCreativeFields::INSTAGRAM_ACTOR_ID, 
         AdCreativeFields::INSTAGRAM_PERMALINK_URL, 
         AdCreativeFields::INSTAGRAM_STORY_ID, 
         AdCreativeFields::LINK_OG_ID, 
         AdCreativeFields::LINK_URL, 
         AdCreativeFields::NAME, 
         AdCreativeFields::OBJECT_ID, 
         AdCreativeFields::OBJECT_STORY_ID, 
         AdCreativeFields::OBJECT_STORY_SPEC, 
         AdCreativeFields::OBJECT_TYPE, 
         AdCreativeFields::OBJECT_URL, 
         AdCreativeFields::PLATFORM_CUSTOMIZATIONS, 
         AdCreativeFields::PRODUCT_SET_ID, 
         AdCreativeFields::STATUS, 
         AdCreativeFields::TEMPLATE_URL, 
         AdCreativeFields::TEMPLATE_URL_SPEC, 
         AdCreativeFields::THUMBNAIL_URL, 
         AdCreativeFields::TITLE, 
         AdCreativeFields::URL_TAGS, 
         AdCreativeFields::USE_PAGE_ACTOR_OVERRIDE, 
         AdCreativeFields::VIDEO_ID, 
         AdCreativeFields::CALL_TO_ACTION, 
         AdCreativeFields::DYNAMIC_AD_VOICE, 
         AdCreativeFields::IMAGE_FILE 
        ), array($creativeParams)); 
        foreach ($creativeCursor as $adCreative) { 
         Log::info("Ad Account Id: " . $fbAccountId . " AdSet Id: " . $ad->adset_id . " STATUS: " . $ad->status . " E STATUS: " . $ad->effective_status . " Ad Id: " . $ad->id . " Ad Name: " . $ad->name . " Ad Creative Id: " . $adCreative->id . " Url Tags: " . $adCreative->url_tags); 
         if ($this->isValidCampaignObject($ad->adset_id)){ 
          if (isset($adCreative->{ AdCreativeFields::URL_TAGS })) { 
           if ($adCreative->{AdCreativeFields::OBJECT_STORY_SPEC} == null){ 
            parse_str($adCreative->url_tags, $urlTagArray); 
            if (!array_key_exists('asid', $urlTagArray)) { 
             $updateCount++; 
             $urlTagArray['asid'] = $ad->adset_id; 
             ksort($urlTagArray); 
             $adCreative->{ AdCreativeFields::URL_TAGS } = http_build_query($urlTagArray); 
             ksort($urlTagArray); 

             parse_str($adCreative->url_tags, $urlTagArray); 
             if (!$dryRun) { 

              $this->replaceAdCreative($ad, $adCreative); 
             } 

            } else { 
             $skipCount++; 
             Log::info("Skipping [Key Exists] " . " Ad Account Id: " . $fbAccountId . " AdSet Id: " . $ad->adset_id . " STATUS: " . $ad->status . " E STATUS: " . $ad->effective_status . " Ad Id: " . $ad->id . " Ad Name: " . $ad->name . " Ad Creative Id: " . $adCreative->id . " Url Tags: " . $adCreative->url_tags); 
            } 

           } 
           else { 
            $skipCount++; 
            Log::info("Skipping [ObjectStorySpec] " . " Ad Account Id: " . $fbAccountId . " AdSet Id: " . $ad->adset_id . " STATUS: " . $ad->status . " E STATUS: " . $ad->effective_status . " Ad Id: " . $ad->id . " Ad Name: " . $ad->name . " Ad Creative Id: " . $adCreative->id . " Url Tags: " . $adCreative->url_tags); 
           } 
          } 
          else { 
           $skipCount++; 
           Log::info("Skipping [Missing URL Tag] " . " Ad Account Id: " . $fbAccountId . " AdSet Id: " . $ad->adset_id . " STATUS: " . $ad->status . " E STATUS: " . $ad->effective_status . " Ad Id: " . $ad->id . " Ad Name: " . $ad->name . " Ad Creative Id: " . $adCreative->id . " Url Tags: " . $adCreative->url_tags); 
          } 
         } 
         else{ 
          $skipCount++; 
          Log::info("Skipping [Invalid Campaign Objective] " . " Ad Account Id: " . $fbAccountId . " AdSet Id: " . $ad->adset_id . " STATUS: " . $ad->status . " E STATUS: " . $ad->effective_status . " Ad Id: " . $ad->id . " Ad Name: " . $ad->name . " Ad Creative Id: " . $adCreative->id . " Url Tags: " . $adCreative->url_tags); 
         } 


        } 
       } 
      } 
      break; 
     } catch (\Exception $e) { 
      $exception = $e; 
      $updateCount = 0; 
      $skipCount = 0; 
      $attempts++; 
      Log::error("Sync Ad Url Tag Error for Account[" . $fbAccountId . "] Code:" . $e->getCode() . " Message:" . $e->getMessage() . PHP_EOL . $e->getTraceAsString()); 
      Log::warning("Sleeping for " . ($attempts * 30) . " seconds..."); 
      sleep($attempts * 30); 
      continue; 
     } 
    } while ($attempts < env('COMMAND_RETRY_LIMIT', 3)); 


    if ($attempts >= env('COMMAND_RETRY_LIMIT', 3)) { 
     throw $exception; 
    } 

    Log::info("Ad Account Id: " . $fbAccountId . " Updated AdSets: " . $updateCount . " Skipped AdSets: " . $skipCount); 
    return (object)['updateCount' => $updateCount, 'skipCount' => $skipCount]; 
} 

は 'replaceAdCreative' メソッド:

private function replaceAdCreative($ad, $adCreative) 
{ 

    $newAdCreative = new AdCreative(null); 

    if ($adCreative->{AdCreativeFields::OBJECT_STORY_SPEC} != null){ 

     $adCreativeObjectStorySpecField = null; 
     if (ISSET($adCreative->{AdCreativeFields::OBJECT_STORY_SPEC}[AdCreativeObjectStorySpecFields::VIDEO_DATA])) 
     { 
      $adCreativeObjectStorySpecField = adCreativeObjectStorySpecFields::VIDEO_DATA; 
     } 
     else if (ISSET($adCreative->{AdCreativeFields::OBJECT_STORY_SPEC}[adCreativeObjectStorySpecFields::LINK_DATA])) 
     { 
      $adCreativeObjectStorySpecField = adCreativeObjectStorySpecFields::LINK_DATA; 
     } 
     else if (ISSET($adCreative->{AdCreativeFields::OBJECT_STORY_SPEC}[adCreativeObjectStorySpecFields::PHOTO_DATA])) 
     { 
      $adCreativeObjectStorySpecField = adCreativeObjectStorySpecFields::PHOTO_DATA; 
     } 
     else if (ISSET($adCreative->{AdCreativeFields::OBJECT_STORY_SPEC}[adCreativeObjectStorySpecFields::TEMPLATE_DATA])) 
     { 
      $adCreativeObjectStorySpecField = adCreativeObjectStorySpecFields::TEMPLATE_DATA; 
     } 

     if ($adCreativeObjectStorySpecField != null){ 
      if (ISSET($adCreative->{AdCreativeFields::OBJECT_STORY_SPEC}[$adCreativeObjectStorySpecField]->{AdCreativeFields::IMAGE_URL}) && 
       ISSET($adCreative->{AdCreativeFields::OBJECT_STORY_SPEC}[$adCreativeObjectStorySpecField]->{AdCreativeFields::IMAGE_HASH})) 
       $adCreative->{AdCreativeFields::OBJECT_STORY_SPEC}[$adCreativeObjectStorySpecField][AdCreativeFields::IMAGE_URL] = NULL; 
       //@TODO this is not working!!!^^^^ 
     } 
    } 

    $newAdCreative->setData(array(
     AdCreativeFields::ACCOUNT_ID => $ad->account_id, 
     AdCreativeFields::ACTOR_ID => $adCreative->actor_id, 
     AdCreativeFields::ADLABELS => $adCreative->adlabels, 
     AdCreativeFields::APPLINK_TREATMENT => $adCreative->applink_treatment, 
     AdCreativeFields::BODY => $adCreative->body, 
     AdCreativeFields::CALL_TO_ACTION_TYPE => $adCreative->call_to_action_type, 
     AdCreativeFields::EFFECTIVE_INSTAGRAM_STORY_ID => $adCreative->effective_instagram_story_id, 
     AdCreativeFields::EFFECTIVE_OBJECT_STORY_ID => $adCreative->effective_object_story_id, 
     AdCreativeFields::ID => $adCreative->id, 
     AdCreativeFields::IMAGE_CROPS => $adCreative->image_crops, 
     AdCreativeFields::IMAGE_HASH => $adCreative->image_hash, 
     AdCreativeFields::IMAGE_URL => $adCreative->image_url, 
     AdCreativeFields::INSTAGRAM_ACTOR_ID => $adCreative->instagram_actor_id, 
     AdCreativeFields::INSTAGRAM_PERMALINK_URL => $adCreative->instagram_permalink_url, 
     AdCreativeFields::INSTAGRAM_STORY_ID => $adCreative->instagram_story_id, 
     AdCreativeFields::LINK_OG_ID => $adCreative->link_og_id, 
     AdCreativeFields::LINK_URL => $adCreative->link_url, 
     AdCreativeFields::NAME => $adCreative->name, 
     AdCreativeFields::OBJECT_ID => $adCreative->object_id, 
     AdCreativeFields::OBJECT_STORY_ID => $adCreative->object_story_id, 
     AdCreativeFields::OBJECT_STORY_SPEC => $adCreative->object_story_spec, 
     AdCreativeFields::OBJECT_TYPE => $adCreative->object_type, 
     AdCreativeFields::OBJECT_URL => $adCreative->object_url, 
     AdCreativeFields::PLATFORM_CUSTOMIZATIONS => $adCreative->platform_customizations, 
     AdCreativeFields::PRODUCT_SET_ID => $adCreative->product_set_id, 
     AdCreativeFields::STATUS => $adCreative->status, 
     AdCreativeFields::TEMPLATE_URL => $adCreative->template_url, 
     AdCreativeFields::TEMPLATE_URL_SPEC => $adCreative->template_url_spec, 
     AdCreativeFields::THUMBNAIL_URL => $adCreative->thumbnail_url, 
     AdCreativeFields::TITLE => $adCreative->title, 
     AdCreativeFields::URL_TAGS => $adCreative->url_tags, 
     AdCreativeFields::USE_PAGE_ACTOR_OVERRIDE => $adCreative->use_page_actor_override, 
     AdCreativeFields::VIDEO_ID => $adCreative->video_id, 
     AdCreativeFields::CALL_TO_ACTION => $adCreative->call_to_action, 
     AdCreativeFields::DYNAMIC_AD_VOICE => $adCreative->dynamic_ad_voice, 
     AdCreativeFields::IMAGE_FILE => $adCreative->image_file, 
    )); 
    Log::info("Old Creative Id: " . $adCreative->id . " Old Creative Creative Id: " . $adCreative->creative_id); 
    $ad->creative = $newAdCreative; 
    try{ 
     $adCreativeResponse = $ad->update(); 
    } 
    catch (RequestException $e){ 
     $errorMsg = $this->requestExceptionToString($e); 
     Log::error($errorMsg); 
     throw new \Exception($errorMsg); 
    } 

    Log::info("New Creative Id: " . $adCreativeResponse->creative->id . " New Creative Creative Id: " . $adCreativeResponse->creative->creative_id); 
    Log::info("Updated: " . " Ad Account Id: " . $ad->account_id . " AdSet Id: " . $ad->adset_id . " Ad Id: " . $ad->id . " Ad Name: " . $ad->name . " Ad Creative Id: " . $adCreativeResponse->creative->id . " Url Tags: " . $adCreativeResponse->creative->url_tags); 


} 
関連する問題