Facebook Marketing API中的参数Facebook视频广告素材无效

时间:2017-11-02 03:57:58

标签: php laravel-5.3 facebook-marketing-api

通过Facebook Marketing API创建广告素材时出现同样的错误。我跟着他们的向导但是没有用。 Facebook video ad creative reference

    $config = Config::get('facebook');
    $data['account_id'] = 'act_'.$config['ad_account_id'];
    $data['page_id'] = $config['page_id'];

    // Init facebook
    $api = Api::init($config['app_id'], $config['app_secret'], $config['access_token']);

    // Create product catalog
    $product_catalog = new ProductCatalog(null,  $config['business_id']);
    $product_catalog->setData(array(
        ProductCatalogFields::NAME => "Catalog",
    ));
    $product_catalog->create();

    $product_catalog_id = $product_catalog->id;

    // Setup Feed
    $product_feed = new ProductFeed(null, $product_catalog_id);
    $product_feed->setData(array(
        ProductFeedFields::NAME => 'Campaign Feed',
        ProductFeedFields::SCHEDULE => array(
            ProductFeedScheduleFields::INTERVAL => 'DAILY',
            ProductFeedScheduleFields::URL => 'http://example.com/facebook/dpa_product_catalog_sample_feed.csv',
            ProductFeedScheduleFields::HOUR => 22,
        ),
    ));
    $product_feed = $product_feed->create();

    // Create  Product Set
    $product_set = new ProductSet(null,  $product_catalog_id);
    $product_set->setData(array(
        ProductFeedFields::NAME => 'All Product',
    ));
    $product_set->create();

    $data['product_set_id'] = $product_set->id;

    $video = new Advideo(null, $data['account_id']);
    $video->{AdVideoFields::SOURCE} = public_path().'/facebook/video-demo.mp4';
    $video->create();

    $video_data = new AdCreativeVideoData();
    $video_data->setData(array(
      AdCreativeVideoDataFields::IMAGE_URL => 'http://example.com/facebook/resize-image.jpg',
      AdCreativeVideoDataFields::VIDEO_ID => $video->id,
      AdCreativeVideoDataFields::CALL_TO_ACTION => array(
        'type' => AdCreativeCallToActionTypeValues::LIKE_PAGE,
        'value' => array(
          'page' => $data['page_id'],
        ),
      ),
    ));

    $object_story_spec = new AdCreativeObjectStorySpec();
    $object_story_spec->setData(array(
      AdCreativeObjectStorySpecFields::PAGE_ID => $data['page_id'],
      AdCreativeObjectStorySpecFields::VIDEO_DATA => $video_data,
    ));

在这些代码工作和返回响应之上,但当我调用广告素材时,API会返回“无效参数”

    $creative = new AdCreative(null, $data['account_id']);
    $creative->setData(array(
      AdCreativeFields::NAME => 'Video Ad Template Creative Sample',
      AdCreativeFields::OBJECT_STORY_SPEC => $object_story_spec,
      AdCreativeFields::PRODUCT_SET_ID => $data['product_set_id'],
    ));

    $creative->create();

1 个答案:

答案 0 :(得分:0)

您的问题可能在于创建AdCreativeVideoData

搜索行

AdCreativeVideoDataFields::IMAGE_URL => public_path().'/facebook/resize-image.jpg',

此处IMAGE_URL需要类似http://example.com/myimage.jpg的网址路径。您正在提供可能导致问题的目录路径。

如果无法从网址直接访问您的图片,则应创建IMAGE_HASH。为此,见下文。

try {
        $image = new AdImage(null, $data['account_id']);
        $image->{AdImageFields::FILENAME} = public_path().'/facebook/resize-image.jpg';

        $image->create();
        // Image_hash = $image->hash
    } catch (Exception $e) {
        echo 'Error message: ' . $e->getMessage() . "\n" . "<br/>";
        echo 'Error Code: ' . $e->getCode() . "<br/>";
    }

并将AdCreativeVideoData中的IMAGE_URL替换为IMAGE_HASH

$video_data = new AdCreativeVideoData();
    $video_data->setData(array(
      AdCreativeVideoDataFields::IMAGE_HASH => $image->hash,
      AdCreativeVideoDataFields::VIDEO_ID => $video->id,
      AdCreativeVideoDataFields::CALL_TO_ACTION => array(
        'type' => AdCreativeCallToActionTypeValues::LIKE_PAGE,
        'value' => array(
          'page' => $data['page_id'],
        ),
      ),
    ));