当尝试使用api 3.1在Facebook上创建广告时,出现此错误:
[2018-09-10 10:45:47] local.INFO: array (
'message' => 'Invalid parameter',
'type' => 'OAuthException',
'code' => 100,
'error_subcode' => 1885833,
'is_transient' => false,
'error_user_title' => 'Ad Must Be Associated With a Facebook Page',
'error_user_msg' => 'Ads and ad creatives must be associated with a Facebook Page. Try connecting your ad or ad creative to a Page and resubmit your ad.',
'fbtrace_id' => 'FUMJg2Q2z1e',
)
答案 0 :(得分:5)
在Facebook页面帖子上找到了该解决方案
=重大变化:事件广告,链接广告未与有效页面相关联
我们最近宣布了一项举措,以制作Facebook广告 平台对Facebook用户更加透明。进一步了解此内容
为支持该计划,我们不建议使用事件广告和链接广告 没有从Marketing API连接到有效页面的页面。
此重大更改会影响所有受支持的API版本,包括 即将推出的Marketing API版本v2.11,v2.10和v2.9 可用,但将不推荐使用。这一重大变化将需要 从2017年11月6日起生效。
此重大更改的结果是,您将不再能够 创建或编辑未连接到广告的事件广告和链接广告 有效页面。这样做的请求将返回错误: 'ErrorCode :: ADPRO2__AD_MUST_HAVE_PAGE(1885833)'。
失败选项
以下广告选项一起使用将失败: ===活动广告=== -目标:“ EVENT_RESPONSES” -广告素材字段:“ body,object_id” ===链接广告=== -目标:“ LINK_CLICKS” -广告素材字段:“标题”,“正文”,包含“ image_file”或“ image_hash”的“ object_url”
如果您提供有效的信息,您仍然可以创建事件广告和链接广告 广告素材的“ object_story_id”中的“ actor_id”或 “ object_story_spec”字段。
有效选项
这些选项一起使用是有效的: ===活动广告=== -目标:“ EVENT_RESPONSES” -广告素材字段:“ object_story_id”或“ object_story_spec” ===链接广告=== -目标:“ LINK_CLICKS” -广告素材字段:“ object_story_id”或“ object_story_spec”
编辑----
最终我使它工作了,这是各种问题的结合。主要的问题是,广告素材的设置方式不允许,facebook文档与您允许的操作不匹配。所以这是我在php中工作的乐趣
$data = file_get_contents($imageUrl);
$data = [
'bytes' => base64_encode($data),
'access_token' => $this->accessToken,
];
$response = $this->client->request('POST',
"act_{$accountId}/adimages", [
'form_params' => $data,
]);
$response = $this->readStream($response)->images->bytes;
$link = (object)[
'link' => $linkUrl,
];
$signUp = (object)[
'type' => "SIGN_UP",
'value' => $link,
];
$linkData = (object)[
'call_to_action' => $signUp,
'link' => $objectUrl,
'image_hash' => $response->hash,
'message' => $body,
];
$objectStory = (object)[
'link_data' => $linkData,
'page_id' => $pageId,
];
$data = (object)[
'name' => 'system-generated-' . $accountId,
'title' => $title,
'object_story_spec' => $objectStory,
'access_token' => $this->accessToken,
];
$response = $this->client->request('POST',
"act_{$accountId}/adcreatives", [
'form_params' => $data,
]);
这就是我制作实际广告的方式
$creative = (object)[
'creative_id' => $creativeId,
];
$data = (object)[
'name' => $name,
'creative' => $creative,
'adset_id' => $adSetId,
'status' => "PAUSED",
'access_token' => $this->accessToken,
];
$response = $this->client->request('POST',
"act_{$accountId}/ads", [
'form_params' => $data,
]);