Hi Josh,

I noticed in your code that you are setting the adAsImage 
> <https://developers.google.com/adwords/api/docs/reference/v201506/AdGroupAdService.TemplateAd#adAsImage>
>  field, 
> and that's the only place where you use an *Image* object. However, I'm 
> pretty sure that the *adAsImage* field is being ignored since that field 
> is meant to provide you a preview of the ad in image form, and that preview 
> for template ID 455 is simply based on the other fields in the ad that 
> identify your app.
> Does the image you provided actually appear on the ad in the AdWords user 
> interface?
>
 
No it doesn't, but the UI doesn't show the image when I create one manually 
either. If I download the report for two "Image app engagement ad's", one 
created manually via the AdWords UI and one created automatically with the 
program I sent you the structure is the same. These arguments seem to 
favor, in my view, that the adAsIamge is not being ignored.

In general, if you are creating a large # of similar ads (e.g., all for the 
> same app), you can use the originAdId 
> <https://developers.google.com/adwords/api/docs/reference/v201506/AdGroupAdService.TemplateAd#originAdId>
>  to 
> specify an existing ad to copy from.
>
 
Right. But I had the Error I posted two posts ago.

You can upload images (but not audio or video) using MediaService.upload 
> <https://developers.google.com/adwords/api/docs/reference/v201506/MediaService#upload>,
>  
> then you should be able to use the resulting Media.mediaId 
> <https://developers.google.com/adwords/api/docs/reference/v201506/MediaService.Image#mediaId>
>  value 
> when creating other TemplateAds. Note that this *will not work* for 
> creating ImageAd 
> <https://developers.google.com/adwords/api/docs/reference/v201506/AdGroupAdService.ImageAd>
> s.
>

Good. This is also what the API reference says. I tried it and it doesn't 
work though.

I must have not explained my problem very clearly so I would like to go 
straight down to the point with the next question.
Can you give me a proper example on how to create an "Image app engagement 
ad" for an AdGroup within a "Display Network only - Mobile app 
engagement"-Campaign? As you said, the program I sent you does not reflect 
the proper usage of the API for this goal.

El miércoles, 19 de agosto de 2015, 14:43:33 (UTC-3), Josh Radcliff 
(AdWords API Team) escribió:
>
> Hi seb,
>
>
>
> Now to the other questions you sent over:
>
>    - What would happen if I use this method to create 500 ads when they 
>    all use the same image?
>    - Per the above, I don't think you actually need to specify the image 
>       for this template, but please let me know if you see otherwise.
>       - In general, if you are creating a large # of similar ads (e.g., 
>       all for the same app), you can use the originAdId 
>       
> <https://developers.google.com/adwords/api/docs/reference/v201506/AdGroupAdService.TemplateAd#originAdId>
>  to 
>       specify an existing ad to copy from. You'll still have to supply some 
>       required fields in the new *TemplateAd*. Based on experimentation, 
>       it looks like the minimal set of fields is: *name, displayUrl, 
>       finalUrls*
>    - Is there a way to upload the image only once via any other method 
>    (such as with the MediaServiceInterface) and reuse it?
>    - You can upload images (but not audio or video) using 
>       MediaService.upload 
>       
> <https://developers.google.com/adwords/api/docs/reference/v201506/MediaService#upload>,
>  
>       then you should be able to use the resulting Media.mediaId 
>       
> <https://developers.google.com/adwords/api/docs/reference/v201506/MediaService.Image#mediaId>
>  value 
>       when creating other TemplateAds. Note that this *will not work* for 
>       creating ImageAd 
>       
> <https://developers.google.com/adwords/api/docs/reference/v201506/AdGroupAdService.ImageAd>
>       s.
>    - Is it possible to upload ads in a bulk via AdWords Editor?
>    - Unfortunately, I'm not an AdWords Editor expert. You may want to 
>       post this question to the AdWords Community 
>       <https://www.en.adwords-community.com/#> to see if the (non-API) 
>       product experts there have any suggestions.
>    
>
> Thanks,
> Josh, AdWords API Team
>
> On Tuesday, August 18, 2015 at 4:51:08 PM UTC-4, Josh Radcliff (AdWords 
> API Team) wrote:
>>
>> Hi seb,
>>
>> Based on the logs I found, it looks like you are trying to create a 
>> *TemplateAd* with template ID 455. If so, could you elaborate on why an 
>> image is relevant here? The template fields for 455 
>> <https://developers.google.com/adwords/api/docs/appendix/templateads#image_cto_ad>
>>  
>> do not include any *IMAGE* elements.
>>
>> If I'm mistaken about which type of ad you're creating, could you send 
>> over your SOAP request? You can send it *only to me* clicking *Reply 
>> privately to author* on this post.
>>
>> Thanks,
>> Josh, AdWords API Team
>>
>> On Tuesday, August 18, 2015 at 9:11:02 AM UTC-4, seb wrote:
>>>
>>> Hi Josh,
>>> My program fails right after calling 
>>> AdGroupAdServiceInterface#mutate(AdGroupAdOperation[]) and I don't get a 
>>> response.
>>> I can send you the serialized Exception if you want (I could not attach 
>>> it to this post).
>>>
>>> El martes, 18 de agosto de 2015, 9:56:53 (UTC-3), Josh Radcliff (AdWords 
>>> API Team) escribió:
>>>>
>>>> Hi seb,
>>>>
>>>> Could you send over the *requestId* from the response in that failed 
>>>> request? That will help me track down the root cause of the exception.
>>>>
>>>> Thanks,
>>>> Josh, AdWords API Team
>>>>
>>>> On Tuesday, August 18, 2015 at 8:52:41 AM UTC-4, seb wrote:
>>>>>
>>>>> Hi Josh,
>>>>> I am trying to do what you said but I get the following error:
>>>>>
>>>>> Exception in thread "main" AxisFault
>>>>>  faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server
>>>>>  faultSubcode: 
>>>>>  faultString: [InternalApiError.UNEXPECTED_INTERNAL_API_ERROR @ 
>>>>> com.google.ads.api.services.common.error.InternalApiError.&lt;init&gt;(InternalApiErro]
>>>>>  faultActor: 
>>>>>  faultNode: 
>>>>>  faultDetail: 
>>>>>     {
>>>>> https://adwords.google.com/api/adwords/cm/v201502}ApiExceptionFault:<message>[InternalApiError.UNEXPECTED_INTERNAL_API_ERROR
>>>>>  
>>>>> @ 
>>>>> com.google.ads.api.services.common.error.InternalApiError.&lt;init&gt;(InternalApiErro]</message><ApplicationException.Type>ApiException</ApplicationException.Type><errors
>>>>>  
>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
>>>>> xsi:type="InternalApiError"><fieldPath/><trigger/><errorString>InternalApiError.UNEXPECTED_INTERNAL_API_ERROR</errorString><ApiError.Type>InternalApiError</ApiError.Type><reason>UNEXPECTED_INTERNAL_API_ERROR</reason></errors>
>>>>>
>>>>> [InternalApiError.UNEXPECTED_INTERNAL_API_ERROR @ 
>>>>> com.google.ads.api.services.common.error.InternalApiError.<init>(InternalApiErro]
>>>>>     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native 
>>>>> Method)
>>>>>     at 
>>>>> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
>>>>>     at 
>>>>> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>>>>>     at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
>>>>>     at java.lang.Class.newInstance(Class.java:442)
>>>>>     at 
>>>>> org.apache.axis.encoding.ser.BeanDeserializer.<init>(BeanDeserializer.java:104)
>>>>>     at 
>>>>> org.apache.axis.encoding.ser.BeanDeserializer.<init>(BeanDeserializer.java:90)
>>>>>     at 
>>>>> com.google.api.ads.adwords.axis.v201502.cm.ApiException.getDeserializer(ApiException.java:143)
>>>>>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>>     at 
>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>>>>>     at 
>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>>>     at java.lang.reflect.Method.invoke(Method.java:497)
>>>>>     at 
>>>>> org.apache.axis.encoding.ser.BaseDeserializerFactory.getSpecialized(BaseDeserializerFactory.java:154)
>>>>>     at 
>>>>> org.apache.axis.encoding.ser.BaseDeserializerFactory.getDeserializerAs(BaseDeserializerFactory.java:84)
>>>>>     at 
>>>>> org.apache.axis.encoding.DeserializationContext.getDeserializer(DeserializationContext.java:464)
>>>>>     at 
>>>>> org.apache.axis.encoding.DeserializationContext.getDeserializerForType(DeserializationContext.java:547)
>>>>>     at 
>>>>> org.apache.axis.message.SOAPFaultDetailsBuilder.onStartChild(SOAPFaultDetailsBuilder.java:157)
>>>>>     at 
>>>>> org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
>>>>>     at 
>>>>> org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
>>>>>     at 
>>>>> org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown 
>>>>> Source)
>>>>>     at 
>>>>> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown
>>>>>  
>>>>> Source)
>>>>>     at 
>>>>> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown
>>>>>  
>>>>> Source)
>>>>>     at org.apache.xerces.parsers.XML11Configuration.parse(Unknown 
>>>>> Source)
>>>>>     at org.apache.xerces.parsers.XML11Configuration.parse(Unknown 
>>>>> Source)
>>>>>     at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
>>>>>     at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown 
>>>>> Source)
>>>>>     at 
>>>>> org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
>>>>>     at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)
>>>>>     at 
>>>>> org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
>>>>>     at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
>>>>>     at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
>>>>>     at 
>>>>> org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
>>>>>     at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
>>>>>     at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
>>>>>     at org.apache.axis.client.Call.invoke(Call.java:2767)
>>>>>     at org.apache.axis.client.Call.invoke(Call.java:2443)
>>>>>     at org.apache.axis.client.Call.invoke(Call.java:2366)
>>>>>     at org.apache.axis.client.Call.invoke(Call.java:1812)
>>>>>     at 
>>>>> com.google.api.ads.adwords.axis.v201502.cm.AdGroupAdServiceSoapBindingStub.mutate(AdGroupAdServiceSoapBindingStub.java:1389)
>>>>>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>>     at 
>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>>>>>     at 
>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>>>     at java.lang.reflect.Method.invoke(Method.java:497)
>>>>>     at 
>>>>> com.google.api.ads.common.lib.soap.SoapClientHandler.invoke(SoapClientHandler.java:110)
>>>>>     at 
>>>>> com.google.api.ads.common.lib.soap.axis.AxisHandler.invokeSoapCall(AxisHandler.java:221)
>>>>>     at 
>>>>> com.google.api.ads.common.lib.soap.SoapServiceClient.callSoapClient(SoapServiceClient.java:64)
>>>>>     at 
>>>>> com.google.api.ads.common.lib.soap.SoapServiceClient.invoke(SoapServiceClient.java:94)
>>>>>     at com.sun.proxy.$Proxy14.mutate(Unknown Source)
>>>>>     at 
>>>>> com.despegar.sem.adwords.ads.mobile.TemplateAdUploader.main(TemplateAdUploader.java:60)
>>>>>
>>>>>
>>>>>
>>>>> El jueves, 13 de agosto de 2015, 16:02:51 (UTC-3), Josh Radcliff 
>>>>> (AdWords API Team) escribió:
>>>>>>
>>>>>> Hi seb,
>>>>>>
>>>>>> Have you tried using the TemplateAd.originAdId 
>>>>>> <https://developers.google.com/adwords/api/docs/reference/v201506/AdGroupAdService.TemplateAd#originAdId>
>>>>>>  field 
>>>>>> to copy the image from the first *TemplateAd*? Using that approach, 
>>>>>> you could supply the *Image.data* directly on the first ad, then 
>>>>>> copy it over to all of the subsequent ads.
>>>>>>
>>>>>> Thanks,
>>>>>> Josh, AdWords API Team
>>>>>>
>>>>>

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and Google+:
https://googleadsdeveloper.blogspot.com/
https://plus.google.com/+GoogleAdsDevelopers/posts
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
Visit this group at http://groups.google.com/group/adwords-api.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/27a80a71-6dde-4493-b3e7-8db1b2a8bf6a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to