googleads / google-ads-php

Google Ads API Client Library for PHP
https://developers.google.com/google-ads/api/docs/client-libs/php
Apache License 2.0
294 stars 262 forks source link

Partial failure errors. ResourceCountLimitExceededError does not contain error details. #463

Closed Sayil8 closed 1 year ago

Sayil8 commented 3 years ago

sdk version : "googleads/google-ads-php": "v6.0.0" and "v4.0.0" php version: 7.3

Good morning,

We are investigating an error that we got back from the Google Ads API v4 and now that we updated to v6 it’s still occurring. It has been a long time that this error is occurring and we still don’t know what to do. We contacted google ads support via email and they suggested that the library might be the problem. I will explain the issue in most detail and at the end I will add the google ads support response.

During publishing bid modifiers for hotel ads we got some partial failure errors RESOURCE_LIMIT The message of these errors mentioned that there would be more details in the ErrorDetails. When we checked out these ErrorDetails however, they were empty. We reproduced this locally by performing a mutate request containing 31 length of stay bid modifiers (HotelAdvanceBookingWindow). We chose 31 here because 30 is allowed as we can see here https://support.google.com/google-ads/answer/9244121?hl=en. We get a partial failure error for each of them but none of them include ErrorDetails. Example code:

$response->getResults()[0]->getPartialFailureError()->getMessage()
>  This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.
$response->getResults()[0]->getPartialFailureError()->getDetails()  
> NULL

See attached image which shows to further understand where this happens and the response we get back.

Debug-errorDetails

We also increased the log level of the PHP Google Ads library to explicitly see what was going on but still we where not getting the ErrorDetails. See next lines.

Host: googleads.googleapis.com
Headers: {
    "x-goog-api-client": "gl-php\/7.3.21 gapic\/ gax\/1.3.0 grpc\/1.29.1",
    "x-goog-request-params": "customer_id=1529099895",
    "developer-token": "REDACTED",
    "login-customer-id": "2340460323"
}
Request: {"customerId":"1529099895","operations":[{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"1","maxDays":"2"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"3","maxDays":"4"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"5","maxDays":"6"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"7","maxDays":"8"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"8","maxDays":"9"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"10","maxDays":"11"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"12","maxDays":"13"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"14","maxDays":"15"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"16","maxDays":"17"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"18","maxDays":"19"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"20","maxDays":"21"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"22","maxDays":"23"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"24","maxDays":"25"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"26","maxDays":"27"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"28","maxDays":"29"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"30","maxDays":"31"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"32","maxDays":"33"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"34","maxDays":"35"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"36","maxDays":"37"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"38","maxDays":"39"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"40","maxDays":"41"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"42","maxDays":"43"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"44","maxDays":"45"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"46","maxDays":"47"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"48","maxDays":"49"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"50","maxDays":"51"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"52","maxDays":"53"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"54","maxDays":"55"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"56","maxDays":"57"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"58","maxDays":"59"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"60","maxDays":"61"}}}],"partialFailure":true}
Response
-------
Headers: {
    "content-disposition": "attachment",
    "request-id": "dWju9uwE1131pzAeyE7b0Q",
    "date": "Thu, 08 Oct 2020 18:25:40 GMT",
    "alt-svc": "h3-Q050=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-27=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\""
}
Response: {"partialFailureError":{"code":3,"message":"Multiple errors in ‘details’. First error: This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails., at operations[1].create.hotel_advance_booking_window","details":[{"@type":"type.googleapis.com/google.ads.googleads.v4.errors.GoogleAdsFailure","errors":[{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":"1"},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":"2"},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":"3"},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":"4"},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type ...

Google support response:

... From our end, our team was able to confirm that the details object is being included the response. Since this also involves the PHP client library on how to further extract the details via PHP, I would recommend that you also reach out to the client library owners via this Github link. ...

Could you advise where we can programmatically get the ErrorDetails mentioned in the error message? If there's anything unclear please let me know.

fiboknacky commented 3 years ago

Could you also attach the link to the page that you sought help from the Google Ads API support team?

Sayil8 commented 3 years ago

All the communication was via email, we send our issues to this address: googleadsapi-support@google.com I could provide the email conversation but basically all the information is contained in this issue. I attached the most helpful response to the issue, which suggested we should reach out to you guys.

fiboknacky commented 3 years ago

Do you happen to know the case number (usually shown in the title of the email)? I'd like to get all info that is communicated to you. Thanks.

Sayil8 commented 3 years ago

Sure, there wasn’t any reference in the subject line of the email. But at the bottom of them there was this: ref:_00D1U1174p._5004Q25Znev:ref. I don’t know if this is what you mean but this is the only reference that we have.

fiboknacky commented 3 years ago

Thanks for the info. I think I found the relevant case where you communicated with our team. Let me take a look and get back to you in 1-2 days.

fiboknacky commented 3 years ago

@Sayil8 , would it be possible for you to reproduce this again? From all the request IDs you provided to use previously and the one you provided here happened in the beginning of October. We cannot fetch full logs of those dates anymore, as they're too old. So, I cannot investigate further if it's because of the library or because of the server itself.

Sayil8 commented 3 years ago

Sure, this is an issue we have every time we run bidding.

-------
Method Name: /google.ads.googleads.v6.services.AdGroupBidModifierService/MutateAdGroupBidModifiers
Host: googleads.googleapis.com
Headers: {
    "x-goog-api-client": "gl-php\/7.3.10 gapic\/ gax\/1.6.0 grpc\/1.29.1",
    "x-goog-request-params": "customer_id=1529099895",
    "developer-token": "REDACTED",
    "login-customer-id": "2340460323"
}
Request: 
{"customerId":"1529099895","operations":[{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"1","maxDays":"2"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"3","maxDays":"4"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"5","maxDays":"6"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"7","maxDays":"8"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"8","maxDays":"9"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"10","maxDays":"11"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"12","maxDays":"13"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"14","maxDays":"15"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"16","maxDays":"17"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"18","maxDays":"19"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"20","maxDays":"21"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"22","maxDays":"23"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"24","maxDays":"25"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"26","maxDays":"27"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"28","maxDays":"29"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"30","maxDays":"31"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"32","maxDays":"33"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"34","maxDays":"35"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"36","maxDays":"37"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"38","maxDays":"39"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"40","maxDays":"41"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"42","maxDays":"43"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"44","maxDays":"45"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"46","maxDays":"47"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"48","maxDays":"49"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"50","maxDays":"51"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"52","maxDays":"53"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"54","maxDays":"55"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"56","maxDays":"57"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"58","maxDays":"59"}}},{"create":{"adGroup":"customers\/1529099895\/adGroups\/116045426808","bidModifier":2,"bidModifierSource":"AD_GROUP","hotelAdvanceBookingWindow":{"minDays":"60","maxDays":"61"}}}],"partialFailure":true}

Response
-------
Headers: {
    "content-disposition": "attachment",
    "request-id": "OJF4B8iNlcC_g53uknWloA",
    "date": "Tue, 24 Nov 2020 18:00:57 GMT",
    "alt-svc": "h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\""
}
Response: 
{"partialFailureError":{"code":3,"message":"Multiple errors in ‘details’. First error: This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails., at operations[1].create.hotel_advance_booking_window","details":[{"@type":"type.googleapis.com/google.ads.googleads.v6.errors.GoogleAdsFailure","errors":[{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":1},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":2},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":3},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":4},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":5},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":6},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":7},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":8},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":9},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":10},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":11},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":12},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":13},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":14},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":15},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":16},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":17},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":18},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":19},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":20},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":21},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":22},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":23},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":24},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":25},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":26},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":27},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":28},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":29},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}},{"errorCode":{"resourceCountLimitExceededError":"RESOURCE_LIMIT"},"message":"This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails.","location":{"fieldPathElements":[{"fieldName":"operations","index":30},{"fieldName":"create"},{"fieldName":"hotel_advance_booking_window"}]}}]}]},"results":[{"resourceName":"customers\/1529099895\/adGroupBidModifiers\/116045426808~524797065063"},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]}  

As you can see I just ran this request 5 minutes ago. Also, I used v6.0.0 of the library.

fiboknacky commented 3 years ago

Thanks for the info. Now I can confirm all information that I want.

Looking into this, I think the error message itself is confusing. When you turn on the partial failure mode, it will not throw GoogleAdsError, hence you cannot get any ErrorDetails from that object. Instead, it will just return a MutateAdGroupBidModifiersResponse, containing partial_failure_error.

Let me confirm this with our expert on this matter, and will get back to you.

Sayil8 commented 3 years ago

But as we see in the image that I posted where we see the debug window of phpstorm, we get back a GoogleAdsError which contains a message, errorCode, details and so on. The only field which is empty is details although the message is saying that there will be something there...

fiboknacky commented 3 years ago

Internally, I didn't see any errors returned for the request ID OJF4B8iNlcC_g53uknWloA. The log that you shared also doesn't contain that. If it contains that part, could you please share as well? I'd like to identify if it's an issue of the server side or the deserialization or logging features of the client library.

Sayil8 commented 3 years ago

I think you are right, the log I shared is the response I got. We get back a partialFailureError and we try to manipulate this in the code, as you see in the description of the issue, to get the errorDetails which are mentioned in the message.

$response->getResults()[0]->getPartialFailureError()->getMessage() This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails. $response->getResults()[0]->getPartialFailureError()->getDetails()
NULL

I was just pointing out what we see in the debug mode of phpstorm but I think it is better if we look directly at the logs.

fiboknacky commented 3 years ago

OK. Then, at least we see the same thing now. :-) I'm following up with this information and will get back to this issue, when I have more information.

treyvanes commented 2 years ago

Hi there

I was wondering if there was any update on this?

We are getting a similar problem where we get the error resource_count_limit_exceeded_error: This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails when we try to block IPs in the IP Exclusion List after unblocking IPs in the IP Exclusion list.

For example, there might be 500 IPs in the IP Exclusion List, so we unblock 200 and then block 200. We've tried adding a delay between the unblocking and blocking (up to 30 minutes) but it makes no difference. The only thing which works is if we run the blocking code twice (doesn't need any delay!) So we unblock, block (fails), and then block again (success).

My concern is we're receiving an incorrect error message, as we know for certain there are enough resources, so no limit is being exceeded. For example, even if we unblock 400 IPs and then try to block 100 IPs (so we are well below the 500 limit), we still get this error.

Here is a request ID if it's useful: JDsQtS4CBm77NOXNG5VRwQ

In the above request you'll see we waited 30 minutes after unblocking before we tried to block. I could see in the Google Ads UI the IPs were successfully unblocked, so I'm concerned there is an issue with the error message.

I apologise if I should have created a separate issue for this.

Thanks for your help.

treyvanes commented 2 years ago

Here's our blocking code so you can see what we're doing. We have the same issue in V8 and V9.

foreach($campaigns as $campaign){
    $CampaignCriterionOperation = [];
    foreach($ips as $ip) {
        $campaignResourceName = ResourceNames::forCampaign($customerId, $campaign['id']);
        $campaignCriterion = new CampaignCriterion([
            'ip_block' => new IpBlockInfo([
                'ip_address' => $ip['ip']
            ]),
            'negative' => true,
            'campaign' => $campaignResourceName
        ]);
        $CampaignCriterionOperation[] = new CampaignCriterionOperation(['create' => $campaignCriterion]);
    }
}

$operations = $CampaignCriterionOperation;
$campaignCriterionServiceClient = $googleAdsClient->getCampaignCriterionServiceClient();
try {
    $response = $campaignCriterionServiceClient->mutateCampaignCriteria($customerId, $operations);
    // throws an exception the first time it's run... but works fine the second time it's run
fiboknacky commented 2 years ago

Sorry that I missed the update of this thread. Is any of you still needs help on this matter? We've released many versions so far and up to v8 is already sunset, so the issue would have been already gone. Please let me know if that still happens.

If it looks like an issue on the Google Ads API servers, contacting the team on the Google Ads API forum is recommended.