Panduan ini menjelaskan cara Google Ads API menangani dan mengomunikasikan error. Memahami struktur dan arti error API sangat penting untuk membangun aplikasi yang tangguh dan dapat menangani masalah dengan baik, mulai dari input yang tidak valid hingga ketidaktersediaan layanan sementara.
Google Ads API mengikuti model error Google API standar, yang didasarkan
pada kode Status gRPC. Setiap respons API yang menghasilkan error menyertakan objek Status yang berisi:
- Kode error numerik.
- Pesan error.
- Opsional, detail error tambahan.
Kode error kanonis
Google Ads API menggunakan serangkaian kode error kanonis yang ditentukan oleh gRPC dan HTTP. Kode ini memberikan indikasi tingkat tinggi dari jenis error. Anda harus selalu memeriksa kode numerik ini terlebih dahulu untuk memahami sifat mendasar dari masalah tersebut.
Tabel berikut merangkum kode paling umum yang mungkin Anda temui saat menggunakan Google Ads API:
| Kode gRPC | Kode HTTP | Nama enum | Deskripsi | Panduan |
|---|---|---|---|---|
| 0 | 200 | OK |
Tidak ada error; menunjukkan keberhasilan. | T/A |
| 1 | 499 | CANCELLED |
Operasi dibatalkan, biasanya oleh klien. | Biasanya berarti klien berhenti menunggu. Periksa waktu tunggu sisi klien. |
| 2 | 500 | UNKNOWN |
Terjadi error tak dikenal. Detail selengkapnya mungkin ada di pesan atau detail error. | Perlakukan sebagai error server. Sering kali dapat dicoba lagi dengan backoff. |
| 3 | 400 | INVALID_ARGUMENT |
Klien menetapkan argumen yang tidak valid. Hal ini menunjukkan masalah yang mencegah API memproses permintaan, seperti nama resource yang salah format atau nilai yang tidak valid. | Error klien: Tinjau parameter permintaan Anda dan pastikan parameter tersebut memenuhi persyaratan API. Detail error biasanya memberikan informasi tentang argumen mana yang tidak valid dan bagaimana—gunakan detail ini untuk memperbaiki permintaan. Jangan coba lagi tanpa memperbaiki permintaan. |
| 4 | 504 | DEADLINE_EXCEEDED |
Batas waktu berakhir sebelum operasi selesai. | Error server: Sering kali bersifat sementara. Pertimbangkan untuk mencoba lagi dengan backoff eksponensial. |
| 5 | 404 | NOT_FOUND |
Beberapa entity yang diminta, seperti kampanye atau grup iklan, tidak ditemukan. | Error klien: Verifikasi keberadaan dan ID resource yang ingin Anda akses. Jangan coba lagi tanpa koreksi. |
| 6 | 409 | ALREADY_EXISTS |
Entity yang coba dibuat oleh klien sudah ada. | Error klien: Hindari pembuatan resource duplikat. Periksa apakah resource ada sebelum mencoba membuatnya. |
| 7 | 403 | PERMISSION_DENIED |
Pemanggil tidak memiliki izin untuk menjalankan operasi yang ditentukan. | Error klien: Periksa autentikasi, otorisasi, dan peran pengguna untuk akun Google Ads. Jangan coba lagi tanpa menyelesaikan izin. |
| 8 | 429 | RESOURCE_EXHAUSTED |
Resource telah habis (misalnya, Anda telah melampaui kuota), atau sistem kelebihan beban. | Error Klien/Server: Biasanya memerlukan waktu tunggu. Terapkan backoff eksponensial dan berpotensi mengurangi rasio permintaan. Lihat batas dan kuota API. |
| 9 | 400 | FAILED_PRECONDITION |
Operasi tersebut ditolak karena sistem tidak dalam keadaan dibutuhkan untuk menjalankan operasi. Misalnya, kolom wajib diisi tidak ada. | Error klien: Permintaan valid, tetapi status salah. Tinjau detail error untuk memahami kegagalan prasyarat. Jangan coba lagi tanpa koreksi status. |
| 10 | 409 | ABORTED |
Operasi dibatalkan, umumnya karena masalah konkurensi seperti konflik transaksi. | Error server: Sering kali aman untuk dicoba lagi dengan backoff singkat. |
| 11 | 400 | OUT_OF_RANGE |
Upaya operasi dilakukan melampaui rentang yang valid. | Error klien: Perbaiki rentang atau indeks. |
| 12 | 501 | UNIMPLEMENTED |
Operasi tidak diterapkan atau tidak didukung oleh API. | Error klien: Periksa versi API dan fitur yang tersedia. Jangan coba lagi. |
| 13 | 500 | INTERNAL |
Terjadi error internal. Ini adalah penangkap umum untuk masalah sisi server. | Error server: Umumnya dapat dicoba lagi dengan backoff eksponensial. Jika persisten, laporkan masalah tersebut. |
| 14 | 503 | UNAVAILABLE |
Saat ini layanan tidak tersedia. Kemungkinan besar ini hanya kondisi sementara. | Error server: Sangat direkomendasikan untuk mencoba lagi dengan backoff eksponensial. |
| 15 | 500 | DATA_LOSS |
Data hilang atau rusak yang tidak dapat dipulihkan. | Error server: Jarang terjadi. Menunjukkan masalah serius. Jangan coba lagi. Jika persisten, laporkan masalah tersebut. |
| 16 | 401 | UNAUTHENTICATED |
Permintaan tidak memiliki kredensial autentikasi yang valid. | Error klien: Verifikasi token autentikasi dan kredensial Anda. Jangan coba lagi tanpa memperbaiki autentikasi. |
Untuk mengetahui detail selengkapnya tentang kode ini, lihat Panduan Desain API - Kode error.
Memahami detail error
Selain kode tingkat atas, Google Ads API memberikan informasi error yang lebih spesifik dalam kolom details objek Status. Kolom ini sering kali
berisi proto GoogleAdsFailure, yang mencakup daftar objek individual
GoogleAdsError.
Setiap GoogleAdsFailure objek berisi:
errors: Daftar objekGoogleAdsError, yang masing-masing menjelaskan error spesifik yang terjadi.request_id: ID unik untuk permintaan, berguna untuk tujuan dukungan dan proses debug.
Setiap GoogleAdsError objek memberikan:
errorCode: Kode error yang lebih mendetail, khusus untuk Google Ads API, sepertiAuthenticationError.NOT_ADS_USER.message: Deskripsi error spesifik yang dapat dibaca manusia.trigger: Nilai yang menyebabkan error, jika berlaku.location: Menjelaskan lokasi terjadinya error dalam permintaan, termasuk jalur kolom.details: Detail error tambahan, seperti alasan error yang tidak dipublikasikan.
Contoh detail error
Saat Anda menerima error, library klien akan
memungkinkan Anda mengakses detail ini. Misalnya, INVALID_ARGUMENT (Kode 3) mungkin memiliki detail GoogleAdsFailure seperti ini:
{
"code": 3,
"message": "The request was invalid.",
"details": [
{
"@type": "type.googleapis.com/google.ads.googleads.v24.errors.GoogleAdsFailure",
"errors": [
{
"errorCode": {
"fieldError": "REQUIRED"
},
"message": "The required field was not present.",
"location": {
"fieldPathElements": [
{ "fieldName": "operations" },
{ "fieldName": "create" },
{ "fieldName": "name" }
]
}
},
{
"errorCode": {
"stringLengthError": "TOO_SHORT"
},
"message": "The provided string is too short.",
"trigger": {
"stringValue": ""
},
"location": {
"fieldPathElements": [
{ "fieldName": "operations" },
{ "fieldName": "create" },
{ "fieldName": "description" }
]
}
}
]
}
]
}
Dalam contoh ini, meskipun INVALID_ARGUMENT tingkat atas, detail
GoogleAdsFailure memberi tahu Anda bahwa kolom
name dan description menyebabkan masalah dan alasannya
(REQUIRED dan
TOO_SHORT,
masing-masing).
Menemukan detail error
Cara Anda mengakses detail error bergantung pada apakah Anda menggunakan panggilan API standar, kegagalan parsial, atau streaming.
Panggilan API standar dan streaming
Jika panggilan API gagal tanpa menggunakan kegagalan parsial, termasuk streaming
panggilan, objek
GoogleAdsFailure akan ditampilkan sebagai
bagian dari metadata akhir di header respons gRPC. Jika Anda menggunakan
REST untuk panggilan standar, GoogleAdsFailure akan
ditampilkan dalam respons HTTP. Library klien biasanya
menampilkan hal ini sebagai pengecualian dengan atribut
GoogleAdsFailure.
Kegagalan parsial
Jika Anda menggunakan kegagalan
parsial, error untuk operasi yang gagal
akan ditampilkan di kolom partial_failure_error respons,
bukan di header respons. Dalam hal ini, the
GoogleAdsFailure disematkan dalam a
google.rpc.Status objek dalam respons.
Tugas batch
Untuk pemrosesan batch, error untuk
operasi individual dapat ditemukan dengan mengambil hasil tugas batch setelah
tugas selesai. Setiap hasil operasi akan menyertakan kolom status yang berisi detail error jika operasi gagal.
ID Permintaan
request-id adalah string unik yang mengidentifikasi permintaan API Anda dan penting untuk pemecahan masalah.
Anda dapat menemukan request-id di beberapa tempat:
GoogleAdsFailure: Jika panggilan API gagal danGoogleAdsFailureditampilkan, panggilan tersebut akan berisirequest_id.- Metadata akhir: Untuk permintaan yang berhasil dan gagal,
request-idtersedia dalam metadata akhir respons gRPC. - Header respons: Untuk permintaan yang berhasil dan gagal,
request-idjuga tersedia di header respons gRPC dan respons HTTP, kecuali untuk permintaan streaming yang berhasil. SearchGoogleAdsStreamResponse: Untuk permintaan streaming, setiapSearchGoogleAdsStreamResponsepesan berisi kolomrequest_id.
Saat mencatat error atau menghubungi dukungan, pastikan untuk menyertakan request-id guna membantu mendiagnosis masalah.
Praktik terbaik untuk penanganan error
Untuk membangun aplikasi yang tangguh, terapkan praktik terbaik berikut:
Periksa detail error: Selalu analisis kolom
detailsobjekStatus, khususnya cariGoogleAdsFailure. `errorCode`, `message`, dan `location` mendetail dalam `GoogleAdsError` memberikan informasi yang paling dapat ditindaklanjuti untuk proses debug dan masukan pengguna.errorCodemessagelocationGoogleAdsErrorBedakan error klien dari error server:
- Error klien: Kode seperti
INVALID_ARGUMENT,NOT_FOUND,PERMISSION_DENIED,FAILED_PRECONDITION,UNAUTHENTICATED. Kode ini memerlukan perubahan pada permintaan atau status/kredensial aplikasi Anda. Jangan coba lagi permintaan tanpa mengatasi masalah. - Error server: Kode seperti
UNAVAILABLE,INTERNAL,DEADLINE_EXCEEDED,UNKNOWN. Kode ini menunjukkan masalah sementara dengan layanan API.
- Error klien: Kode seperti
Terapkan strategi percobaan ulang:
- Kapan harus mencoba lagi: Coba lagi hanya untuk error server sementara seperti
UNAVAILABLE,DEADLINE_EXCEEDED,INTERNAL,UNKNOWN, danABORTED. - Backoff eksponensial: Gunakan algoritma backoff eksponensial untuk menunggu periode yang meningkat di antara percobaan ulang. Hal ini membantu menghindari kelebihan beban pada layanan yang sudah tertekan. Misalnya, tunggu 1 detik, lalu 2 detik, lalu 4 detik, dan teruskan hingga jumlah maksimum percobaan ulang atau total waktu tunggu.
- Jitter: Tambahkan sedikit "jitter" acak ke penundaan backoff untuk mencegah masalah "kawanan guntur" saat banyak klien mencoba lagi secara bersamaan.
- Kapan harus mencoba lagi: Coba lagi hanya untuk error server sementara seperti
Buat log secara menyeluruh: Catat respons error lengkap, termasuk semua detail, terutama ID permintaan. Informasi ini penting untuk proses debug dan untuk melaporkan masalah ke dukungan Google jika diperlukan.
Berikan masukan pengguna: Berdasarkan kode dan pesan
GoogleAdsErrortertentu, berikan masukan yang jelas dan bermanfaat kepada pengguna aplikasi Anda. Misalnya, bukan hanya "Terjadi error", Anda dapat mengatakan "Nama kampanye wajib diisi" atau "ID grup iklan yang diberikan tidak ditemukan".
Dengan mengikuti panduan ini, Anda dapat mendiagnosis dan menangani error yang ditampilkan oleh Google Ads API secara efektif, sehingga menghasilkan aplikasi yang lebih stabil dan mudah digunakan.