2
我正在关注https://developers.facebook.com/docs/marketing-api/guides/lead-ads/create/v2.8为主广告创建上下文卡。文件说它会接受cover_photo字段。 但是,如果我们尝试从图形API资源管理器上下文有以下PARAMS在facebook marketing api leadgen_context_cards边缘不接受cover_photo
https://developers.facebook.com/tools/explorer/xxxxxx?method=POST&path=<PAGE_ID>%2Fleadgen_context_cards&version=v2.8&title=sample-title-1&style=PARAGRAPH_STYLE&content=[%22sample%20content%201%22]&button_text=Get%20Started&cover_photo=http://xxxxx.s3.amazonaws.com/sample/sampleimage.png
其表现如下
{
"error": {
"message": "An unknown error has occurred.",
"type": "OAuthException",
"code": 1,
"fbtrace_id": "xxxxxx"
}
}
如果我们点击fgtrace_id它显示以下
{
"error": {
"message": "(#803) Some of the aliases you requested do not exist: xxxxx",
"type": "OAuthException",
"code": 803,
"fbtrace_id": "yyyyyy"
}
}
如果我们删除cover_photo
param我们可以创建上下文卡片。
感谢。
更新1
我试图上传实际的图像文件。仍然面临同样的问题。以下是代码和响应。
HttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httppost = new HttpPost(GRAPH_FACEBOOK_LEADGEN_CONTEXT_CARDS);
File file = new File(IMAGE_PATH);
ContentBody cbFile = new FileBody(file, ContentType.create(MimeTypeUtils.IMAGE_PNG_VALUE));
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addTextBody("access_token", ACCESS_TOKEN);
builder.addTextBody("title", "sample-title-1");
builder.addTextBody("style", "PARAGRAPH_STYLE");
builder.addTextBody("content", "['sample-title-1']");
builder.addTextBody("button_text", "Get Started");
// builder.addPart("cover_photo", cbFile);
// builder.addBinaryBody("cover_photo", file);
// builder.addBinaryBody("cover_photo", file, ContentType.create(MimeTypeUtils.IMAGE_PNG_VALUE),IMAGE_PATH);
// builder.addBinaryBody("cover_photo", new FileInputStream(file));
httppost.setEntity(builder.build());
System.out.println("executing request " + httppost.getRequestLine());
HttpResponse response = httpClient.execute(httppost);
HttpEntity resEntity = response.getEntity();
System.out.println(response.getStatusLine());
if (resEntity != null) {
System.out.println(EntityUtils.toString(resEntity));
}
响应:
executing request POST https://graph.facebook.com/167067040143315/leadgen_context_cards HTTP/1.1
HTTP/1.1 500 Internal Server Error
{"error":{"message":"An unknown error has occurred.","type":"OAuthException","code":1,"fbtrace_id":"CHG1SYDq9zn"}}
更新2
有了下面的代码,我能够创建上下文卡。但封面照片不见了。
URIBuilder uriBuilder = new URIBuilder(
GRAPH_FACEBOOK_LEADGEN_CONTEXT_CARDS);
uriBuilder.setParameter("access_token", ACCESS_TOKEN);
uriBuilder.setParameter("title", "sample-title-1");
uriBuilder.setParameter("style", "PARAGRAPH_STYLE");
uriBuilder.setParameter("content", "['sample-title-1']");
uriBuilder.setParameter("button_text", "Get Started");
HttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httppost = new HttpPost(uriBuilder.build());
File file = new File(IMAGE_PATH);
ContentBody cbFile = new FileBody(file,
ContentType.create(MimeTypeUtils.IMAGE_PNG_VALUE));
byte[] bytes = FileUtils.readFileToByteArray(file);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addPart("cover_photo", cbFile);
// builder.addBinaryBody("cover_photo", file);
// builder.addBinaryBody("cover_photo", file,
// ContentType.create(MimeTypeUtils.IMAGE_PNG_VALUE),IMAGE_PATH);
// builder.addBinaryBody("cover_photo", new FileInputStream(file));
// builder.addBinaryBody("cover_photo", bytes,
// ContentType.create(MimeTypeUtils.IMAGE_PNG_VALUE),IMAGE_PATH);
httppost.setEntity(builder.build());
httppost.addHeader(new BasicHeader("Content-Type",
ContentType.MULTIPART_FORM_DATA.getMimeType()));
System.out.println("executing request " + httppost.getRequestLine());
HttpResponse response = httpClient.execute(httppost);
HttpEntity resEntity = response.getEntity();
System.out.println(response.getStatusLine());
if (resEntity != null) {
System.out.println(EntityUtils.toString(resEntity));
}
该页面上的所有cURL示例都使用语法'-F'cover_photo = @ image1.jpg'' - 这意味着它是一个实际的文件上传。除非在任何可以传递图像URL的地方明确记录,否则可以认为这不适用于此端点。 – CBroe
没有得到它“它是一个实际的文件上传”意味着它唯一可能通过focebook提供的UI和它不可能通过apis。我试图通过上传图像到页面,然后传递图像ID在那里,这也是行不通的。 – Raghu
不,这意味着你必须通过API执行文件上传,而不是传递URL。这意味着,您必须以基本相同的方式发送数据,就像输入类型为file的HTML表单一样。 – CBroe