2017-04-06 63 views
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)); 
     } 
+1

该页面上的所有cURL示例都使用语法'-F'cover_photo = @ image1.jpg'' - 这意味着它是一个实际的文件上传。除非在任何可以传递图像URL的地方明确记录,否则可以认为这不适用于此端点。 – CBroe

+0

没有得到它“它是一个实际的文件上传”意味着它唯一可能通过focebook提供的UI和它不可能通过apis。我试图通过上传图像到页面,然后传递图像ID在那里,这也是行不通的。 – Raghu

+0

不,这意味着你必须通过API执行文件上传,而不是传递URL。这意味着,您必须以基本相同的方式发送数据,就像输入类型为file的HTML表单一样。 – CBroe

回答

2

根据我在https://business.facebook.com的UI中的观察。它的第一张上传图片和传递ID在cover_photo_id

上传未发布的照片​​到page/photos,并通过生成的ID在context_cardcover_photo_id。和它的工作。