Bu kılavuzda, Google Ads API'nin hataları nasıl işlediği ve hatalarla ilgili nasıl iletişim kurduğu açıklanmaktadır. API hatalarının yapısını ve anlamını anlamak, geçersiz girişten geçici hizmet kullanılamamasına kadar sorunları düzgün bir şekilde ele alabilen sağlam uygulamalar oluşturmak için çok önemlidir.
Google Ads API, gRPC durum kodlarına dayalı olan standart Google API hata modelini kullanır. Hatayla sonuçlanan her API yanıtında aşağıdakileri içeren bir Status nesnesi bulunur:
- Sayısal bir hata kodu.
- Hata mesajı
- İsteğe bağlı, ek hata ayrıntıları.
Standart hata kodları
Google Ads API, gRPC ve HTTP tarafından tanımlanan bir dizi standart hata kodu kullanır. Bu kodlar, hata türüyle ilgili üst düzey bir gösterge sağlar. Sorunun temel doğasını anlamak için her zaman önce bu sayısal kodu kontrol etmelisiniz.
Aşağıdaki tabloda, Google Ads API'yi kullanırken karşılaşabileceğiniz en yaygın kodlar özetlenmiştir:
| gRPC kodu | HTTP kodu | Numaralandırılmış değer adı | Açıklama | Rehberlik |
|---|---|---|---|---|
| 0 | 200 | OK |
Hata yok; başarıyı gösterir. | Yok |
| 1 | 499 | CANCELLED |
İşlem genellikle istemci tarafından iptal edildi. | Genellikle istemcinin beklemeyi bıraktığı anlamına gelir. İstemci tarafı zaman aşımlarını kontrol edin. |
| 2 | 500 | UNKNOWN |
Bilinmeyen bir hata oluştu. Daha fazla ayrıntı için hata mesajına veya ayrıntılarına bakabilirsiniz. | Sunucu hatası olarak değerlendirin. Genellikle geri yükleme aralığı ile yeniden denenebilir. |
| 3 | 400 | INVALID_ARGUMENT |
İstemci geçersiz bir bağımsız değişken belirtti. Bu, API'nin isteği işlemesini engelleyen bir sorunu (ör. hatalı biçimlendirilmiş kaynak adı veya geçersiz değer) gösterir. | İstemci hatası: İstek parametrelerinizi inceleyin ve API koşullarını karşıladığından emin olun. Hata ayrıntıları genellikle hangi bağımsız değişkenin geçersiz olduğu ve neden geçersiz olduğu hakkında bilgi verir. İsteği düzeltmek için bu ayrıntıları kullanın. İsteği düzeltmeden yeniden denemeyin. |
| 4 | 504 | DEADLINE_EXCEEDED |
İşlem tamamlanmadan son tarih geçti. | Sunucu hatası: Genellikle geçicidir. Eksponansiyel geri yükleme ile yeniden denemeyi düşünebilirsiniz. |
| 5 | 404 | NOT_FOUND |
Kampanya veya reklam grubu gibi istenen bazı varlıklar bulunamadı. | İstemci hatası: Erişmeye çalıştığınız kaynakların varlığını ve kimliğini doğrulayın. Düzeltme yapmadan tekrar denemeyin. |
| 6 | 409 | ALREADY_EXISTS |
İstemcinin oluşturmaya çalıştığı öğe zaten mevcut. | İstemci hatası: Yinelenen kaynak oluşturmaktan kaçının. Kaynağı oluşturmaya çalışmadan önce kaynağın mevcut olup olmadığını kontrol edin. |
| 7 | 403 | PERMISSION_DENIED |
Arayanın, belirtilen işlemi yürütme izni yok. | İstemci hatası: Google Ads hesabının kimlik doğrulama, yetkilendirme ve kullanıcı rollerini kontrol edin. İzinleri çözmeden yeniden denemeyin. |
| 8 | 429 | RESOURCE_EXHAUSTED |
Bir kaynak tükenmiş (ör. kotanızı aşmışsınız) veya sistem aşırı yüklenmiştir. | İstemci/sunucu hatası: Genellikle beklemeniz gerekir. Eksponansiyel geri yüklemeyi uygulayın ve istek sıklığını azaltın. API sınırları ve kotaları başlıklı makaleye göz atın. |
| 9 | 400 | FAILED_PRECONDITION |
Sistem, işlemin yürütülmesi için gerekli durumda olmadığından işlem reddedildi. Örneğin, zorunlu bir alan eksik. | İstemci hatası: İstek geçerli ancak durum yanlış. Ön koşul hatasını anlamak için hata ayrıntılarını inceleyin. Durum düzeltilmeden tekrar denemeyin. |
| 10 | 409 | ABORTED |
İşlem, genellikle işlem çakışması gibi eşzamanlılık sorunu nedeniyle iptal edildi. | Sunucu hatası: Genellikle kısa bir süre bekleyip yeniden denemek güvenlidir. |
| 11 | 400 | OUT_OF_RANGE |
İşlem, geçerli aralığın dışında denenmiş. | İstemci hatası: Aralığı veya dizini düzeltin. |
| 12 | 501 | UNIMPLEMENTED |
İşlem uygulanmamış veya API tarafından desteklenmiyor. | İstemci hatası: API sürümünü ve kullanılabilir özellikleri kontrol edin. Tekrar denemeyin. |
| 13 | 500 | INTERNAL |
Dahili bir hata oluştu. Bu, sunucu tarafındaki sorunlar için genel bir hazır yanıttır. | Sunucu hatası: Genellikle eksponansiyel geri yüklemeyle yeniden denenebilir. Devam ederse sorunu bildirin. |
| 14 | 503 | UNAVAILABLE |
Hizmet geçici olarak kullanılamıyor. Bu durum büyük olasılıkla geçicidir. | Sunucu hatası: Eksponansiyel geri yüklemeyle yeniden denemeniz önemle tavsiye edilir. |
| 15 | 500 | DATA_LOSS |
Kurtarılamaz veri kaybı veya bozulması. | Sunucu hatası: Nadir. Ciddi bir sorun olduğunu gösterir. Tekrar denemeyin. Devam ederse sorunu bildirin. |
| 16 | 401 | UNAUTHENTICATED |
İstek geçerli kimlik doğrulama kimlik bilgilerine sahip değil. | İstemci hatası: Kimlik doğrulama jetonlarınızı ve kimlik bilgilerinizi doğrulayın. Kimlik doğrulama sorununu düzeltmeden yeniden denemeyin. |
Bu kodlarla ilgili daha fazla bilgi için API Tasarım Kılavuzu - Hata kodları başlıklı makaleyi inceleyin.
Hata ayrıntılarını anlama
Google Ads API, üst düzey kodun ötesinde, Status nesnesinin details alanında daha ayrıntılı hata bilgileri sağlar. Bu alan genellikle, ayrı GoogleAdsError nesnelerinin listesini içeren bir GoogleAdsFailure proto'su içerir.
Her GoogleAdsFailure nesnesi şunları içerir:
errors: Her biri belirli bir hatayı ayrıntılandıranGoogleAdsErrornesnelerinin listesi.request_id: İsteğin benzersiz kimliği. Hata ayıklama ve destek amaçlı olarak kullanışlıdır.
Her GoogleAdsError nesnesi şunları sağlar:
error_code: Google Ads API'ye özgüErrorCode(yaygın hatalar) gibi daha ayrıntılı bir hata mesajıAuthenticationError.NOT_ADS_USER.message: Belirli hatanın kullanıcıların okuyabileceği bir açıklaması.trigger: Varsa hataya neden olanValue.location: Alan yolları da dahil olmak üzere, hatanın istekte nerede oluştuğunu açıklayan birErrorLocation.details: Yayınlanmamış hata nedenleri gibi ekErrorDetails.
Hata ayrıntıları örneği
Hata aldığınızda istemci kitaplığınız bu ayrıntılara erişmenize olanak tanır. Örneğin, bir INVALID_ARGUMENT (Kod 3) aşağıdaki gibi ayrıntılara sahip olabilir:
GoogleAdsFailure
{
"code": 3,
"message": "The request was invalid.",
"details": [
{
"@type": "type.googleapis.com/google.ads.googleads.v25.errors.GoogleAdsFailure",
"errors": [
{
"errorCode": {
"fieldError": "REQUIRED"
},
"message": "The required field was not present.",
"location": {
"fieldPathElements": [
{ "fieldName": "operations", "index": 0 },
{ "fieldName": "create" },
{ "fieldName": "name" }
]
}
},
{
"errorCode": {
"stringLengthError": "TOO_SHORT"
},
"message": "The provided string is too short.",
"trigger": {
"stringValue": ""
},
"location": {
"fieldPathElements": [
{ "fieldName": "operations", "index": 0 },
{ "fieldName": "create" },
{ "fieldName": "description" }
]
}
}
],
"requestId": "AbCdEfGhIjKlMnOpQrStUv"
}
]
}
Bu örnekte, üst düzey INVALID_ARGUMENT öğesine rağmen GoogleAdsFailure ayrıntıları, soruna name ve description alanlarının neden olduğunu ve nedenini (sırasıyla REQUIRED ve TOO_SHORT) gösterir.
Hata ayrıntılarını bulma
Hata ayrıntılarına erişme şekliniz, standart API çağrıları, kısmi hata veya akış kullanıp kullanmadığınıza bağlıdır.
Standart ve akış API çağrıları
Kısmi hata kullanılmadan bir API çağrısı başarısız olduğunda (akış çağrıları dahil), GoogleAdsFailure nesnesi gRPC yanıt başlıklarındaki sondaki meta verilerin bir parçası olarak döndürülür. Standart aramalar için REST kullanıyorsanız HTTP yanıtında GoogleAdsFailure döndürülür. İstemci kitaplıkları genellikle bunu GoogleAdsFailure özelliğiyle bir istisna olarak gösterir.
Kısmi hata
Kısmi hata kullanıyorsanız başarısız olan işlemlerle ilgili hatalar, yanıt başlıklarında değil, yanıtın partial_failure_error alanında döndürülür. Bu durumda, GoogleAdsFailure, yanıttaki google.rpc.Status nesnesine yerleştirilir.
Toplu işler
Toplu işlem için, iş tamamlandıktan sonra BatchJobService.ListBatchJobResults çağrılarak tek tek işlemlerle ilgili hatalar bulunabilir. Her işlem sonucu, işlem başarısız olursa hata ayrıntılarını içeren bir status alanı içerir.
Talep numarası
request-id, API isteğinizi tanımlayan benzersiz bir dizedir ve sorun giderme için gereklidir.
request-id simgesini birden fazla yerde bulabilirsiniz:
GoogleAdsFailure: Bir API çağrısı başarısız olursa veGoogleAdsFailuredöndürülürse bu yanıtrequest_idiçerir.- Sonraki meta veriler: Hem başarılı hem de başarısız istekler için gRPC yanıtının sonraki meta verilerinde
request-idmevcuttur. - Yanıt başlıkları: Hem başarılı hem de başarısız istekler için
request-id, başarılı akış istekleri hariç olmak üzere gRPC ve HTTP yanıt başlıklarında da kullanılabilir. SearchGoogleAdsStreamResponse: Yayın isteğinde bulunan herSearchGoogleAdsStreamResponsemesajındarequest_idalanı bulunur.
Hataları günlüğe kaydederken veya destek ekibiyle iletişime geçerken sorunların teşhis edilmesine yardımcı olması için request-id simgesini eklediğinizden emin olun.
Hata işleme ile ilgili en iyi uygulamalar
Esnek uygulamalar oluşturmak için aşağıdaki en iyi uygulamaları uygulayın:
Hata ayrıntılarını inceleyin:
Statusnesnesinindetailsalanını her zaman ayrıştırın ve özellikleGoogleAdsFailuredeğerini arayın.GoogleAdsErroriçindeki ayrıntılıerror_code,messagevelocation, hata ayıklama ve kullanıcı geri bildirimi için en uygulanabilir bilgileri sağlar.İstemci hatalarını sunucu hatalarından ayırt etme:
- İstemci hataları:
INVALID_ARGUMENT,NOT_FOUND,PERMISSION_DENIED,FAILED_PRECONDITION,UNAUTHENTICATEDgibi kodlar. Bu durumda, istekte veya uygulamanızın durumunda/kimlik bilgilerinde değişiklik yapmanız gerekir. Sorunu çözmeden isteği yeniden göndermeyin. - Sunucu hataları:
UNAVAILABLE,INTERNAL,DEADLINE_EXCEEDED,UNKNOWNgibi kodlar. Bunlar, API hizmetiyle ilgili geçici bir soruna işaret eder.
- İstemci hataları:
Yeniden deneme stratejisi uygulayın:
- Ne zaman yeniden denenmeli: Yalnızca
UNAVAILABLE,DEADLINE_EXCEEDED,INTERNAL,UNKNOWNveABORTEDgibi geçici sunucu hataları için yeniden deneyin. - Eksponansiyel geri yükleme: Yeniden denemeler arasında artan sürelerle beklemek için eksponansiyel geri yükleme algoritması kullanın. Bu, zaten stresli olan bir hizmetin aşırı yüklenmesini önlemeye yardımcı olur. Örneğin, önce 1 saniye, sonra 2 saniye, sonra 4 saniye bekleyin. Maksimum yeniden deneme sayısına veya toplam bekleme süresine ulaşana kadar bu şekilde devam edin.
- Jitter: Birçok istemcinin aynı anda yeniden denediği "gürleyen kalabalık" sorununu önlemek için geri çekilme gecikmelerine küçük bir rastgele "jitter" miktarı ekleyin.
- Ne zaman yeniden denenmeli: Yalnızca
Günlüğü ayrıntılı olarak tutun: Tüm ayrıntılar, özellikle de istek kimliği dahil olmak üzere hata yanıtının tamamını günlüğe kaydedin. Bu bilgiler, hata ayıklama ve gerektiğinde Google Destek Ekibi'ne sorun bildirme için gereklidir.
Kullanıcı geri bildirimi sağlayın: Belirli
GoogleAdsErrorkodlarına ve mesajlarına göre uygulamanızın kullanıcılarına net ve faydalı geri bildirimler verin. Örneğin, yalnızca "Bir hata oluştu" demek yerine "Kampanya adı zorunludur" veya "Sağlanan reklam grubu kimliği bulunamadı" diyebilirsiniz.
Bu yönergeleri uygulayarak Google Ads API'nin döndürdüğü hataları etkili bir şekilde teşhis edip işleyebilir, böylece daha kararlı ve kullanıcı dostu uygulamalar oluşturabilirsiniz.