আপনি যখন গুগল অ্যাডস এপিআই-তে কোনো অনুরোধ পাঠান, তখন তা বিভিন্ন কারণে ব্যর্থ হতে পারে। উদাহরণস্বরূপ, আপনি হয়তো একটি অবৈধ আর্গুমেন্ট দিয়েছেন, অথবা আপনার অ্যাকাউন্টে নতুন ক্যাম্পেইন তৈরির সীমা শেষ হয়ে গেছে। এই ধরনের ক্ষেত্রে, কী ভুল হয়েছে তা আপনাকে জানানোর জন্য এপিআই একটি এরর রিটার্ন করে।
এই নির্দেশিকাটি এপিআই (API) ত্রুটিগুলি কীভাবে পড়তে ও সমাধান করতে হয় তা ব্যাখ্যা করে, যাতে আপনি আরও শক্তিশালী অ্যাপ্লিকেশন তৈরি করতে পারেন।
ত্রুটির কাঠামো
আপনি যদি আমাদের কোনো ক্লায়েন্ট লাইব্রেরি ব্যবহার করেন, তাহলে API ত্রুটিগুলো এক্সেপশন হিসেবে প্রদর্শিত হয়। এই এক্সেপশনগুলোতে এমন বিবরণ থাকে যা আপনাকে ত্রুটিটি কেন ঘটেছে তা বুঝতে সাহায্য করে।
গুগল অ্যাডস এপিআই একটি নির্দিষ্ট ফরম্যাটে ত্রুটির তথ্য ফেরত দেয়। কোনো ত্রুটি ঘটলে, রেসপন্সে একটি GoogleAdsFailure অবজেক্ট থাকবে। এই অবজেক্টটির মধ্যে একাধিক GoogleAdsError অবজেক্টের একটি তালিকা থাকে, যার প্রতিটি একটি নির্দিষ্ট ত্রুটির বিবরণ দেয়।
প্রতিটি GoogleAdsError অবজেক্ট নিম্নলিখিত বিষয়গুলো প্রদান করে:
-
error_code: একটি নির্দিষ্ট এরর কোড যা আপনাকে এররের ধরন সম্পর্কে জানায়, যেমনAuthenticationError.NOT_ADS_USER। -
message: ত্রুটিটি কেন ঘটেছে তার একটি সহজবোধ্য বিবরণ। -
trigger: যে মানটির কারণে ত্রুটিটি ঘটেছে, যেমন "1234"। -
location: অনুরোধের কোন অংশে ত্রুটি ঘটেছে তার বিশদ বিবরণ, যেমন একটি নির্দিষ্ট ফিল্ডের নাম।
ত্রুটির তালিকার পাশাপাশি, GoogleAdsFailure একটি requestId থাকে, যা ত্রুটি ঘটা এপিআই অনুরোধটির একটি অনন্য শনাক্তকারী।
উদাহরণ ত্রুটি
JSON ফরম্যাটে একটি ত্রুটি দেখতে কেমন হয় তার একটি উদাহরণ এখানে দেওয়া হলো। এই ত্রুটিটি নির্দেশ করে যে, অনুরোধটিতে 0 ইন্ডেক্সে থাকা ad_group এর name ফিল্ডটি অনুপস্থিত।
{
"code": 3,
"message": "Request contains an invalid argument.",
"details": [
{
"@type": "type.googleapis.com/google.ads.googleads.v24.errors.GoogleAdsFailure",
"errors": [
{
"errorCode": {
"requestError": "REQUIRED_FIELD_MISSING"
},
"message": "Required field is missing",
"location": {
"fieldPathElements": [
{
"fieldName": "ad_group",
"index": 0
},
{
"fieldName": "name"
}
]
}
}
],
"requestId": "unique_request_id_12345"
}
]
}
এপিআই ত্রুটি সম্পর্কে আরও জানতে আমাদের নির্দেশিকাটি দেখুন।
ক্লায়েন্ট লাইব্রেরির উদাহরণ
নিম্নলিখিত বিভাগে বিভিন্ন ক্লায়েন্ট লাইব্রেরিতে ত্রুটিগুলি কীভাবে পরিচালনা করতে হয় তা দেখানো হয়েছে।
জাভা
try {
// Make an API call.
...
} catch (GoogleAdsException gae) {
// GoogleAdsException is the base class for most exceptions thrown by an API request.
// Instances of this exception have a message and a GoogleAdsFailure that contains a
// collection of GoogleAdsErrors that indicate the underlying causes of the
// GoogleAdsException.
System.err.printf(
"Request ID %s failed due to GoogleAdsException. Underlying errors:%n",
gae.getRequestId());
int i = 0;
for (GoogleAdsError googleAdsError : gae.getGoogleAdsFailure().getErrorsList()) {
System.err.printf(" Error %d: %s%n", i++, googleAdsError);
}
}
সি#
try
{
// Make an API call.
...
}
catch (GoogleAdsException e)
{
Console.WriteLine($"Request with ID '{e.RequestId}' has failed.");
Console.WriteLine("Google Ads failure details:");
foreach (GoogleAdsError error in e.Failure.Errors)
{
Console.WriteLine($"{error.ErrorCode}: {error.Message}");
}
}
পিএইচপি
try {
// Make an API call.
...
} catch (GoogleAdsException $googleAdsException) {
printf(
"Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
$googleAdsException->getRequestId(),
PHP_EOL,
PHP_EOL
);
foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
/** @var GoogleAdsError $error */
printf(
"\t%s: %s%s",
$error->getErrorCode()->getErrorCode(),
$error->getMessage(),
PHP_EOL
);
}
}
পাইথন
try:
# Make an API call.
...
except GoogleAdsException as ex:
print(
f"Request with ID '{ex.request_id}' failed with status "
f"'{ex.error.code().name}' and includes the following errors:"
)
for error in ex.failure.errors:
print(f"\tError with message '{error.message}' and code '{error.error_code}'.")
রুবি
begin
# Make an API call.
...
rescue Google::Ads::GoogleAds::Errors::GoogleAdsError => e
puts "API call failed with request ID: #{e.request_id}"
e.failure.errors.each do |error|
puts "\t#{error.error_code}: #{error.message}"
end
end
পার্ল
# Try sending a mutate request to add the ad group ad.
...
if ($response->isa("Google::Ads::GoogleAds::GoogleAdsException")) {
printf "Google Ads failure details:\n";
foreach my $error (@{$response->get_google_ads_failure()->{errors}}) {
printf "\t%s: %s\n", [keys %{$error->{errorCode}}]->[0], $error->{message};
}
}
কীভাবে লগ ক্যাপচার করবেন
ত্রুটি সমাধান করতে, গুগল অ্যাডস এপিআই সার্ভার থেকে প্রাপ্ত এরর লগগুলো সংগ্রহ করুন এবং সেগুলোর বিষয়বস্তু পরীক্ষা করুন। লগিং চালু করতে এবং এপিআই লগ সংগ্রহ করতে নিম্নলিখিত নির্দেশাবলী ব্যবহার করুন।
জাভা
নির্দেশাবলীর জন্য জাভা ক্লায়েন্ট লাইব্রেরি লগিং গাইড দেখুন।
সি#
যেকোনো এপিআই কল করার আগে আপনার Main মেথডে নিম্নলিখিত লাইনটি যোগ করে লগিং চালু করতে পারেন। এটি নিশ্চিত করে যে আপনার অ্যাপ্লিকেশন দ্বারা করা সমস্ত এপিআই কলের জন্য লাইব্রেরিটি লগ তৈরি করবে।
using Google.Ads.GoogleAds.Util;
...
// Detailed logs.
TraceUtilities.Configure(TraceUtilities.DETAILED_REQUEST_LOGS_SOURCE,
"/path/to/your/logs/details.log", System.Diagnostics.SourceLevels.All);
// Summary logs.
TraceUtilities.Configure(TraceUtilities.SUMMARY_REQUEST_LOGS_SOURCE,
"/path/to/your/logs/summary.log", System.Diagnostics.SourceLevels.All);
অতিরিক্ত বিকল্পগুলির জন্য .NET লাইব্রেরি লগিং নির্দেশিকা দেখুন।
পিএইচপি
আপনি আপনার ক্লায়েন্ট লাইব্রেরির google_ads_php.ini ফাইলে লগিং কনফিগারেশন সেট করতে পারেন। বিস্তারিত এরর লগ ক্যাপচার করা শুরু করতে logLevel-কে NOTICE এ সেট করুন।
[LOGGING]
; Optional logging settings.
logFilePath = "path/to/your/file.log"
logLevel = "NOTICE"
নির্দেশাবলীর জন্য পিএইচপি ক্লায়েন্ট লাইব্রেরির লগিং গাইড দেখুন।
পাইথন
আপনি আপনার ক্লায়েন্ট লাইব্রেরির google-ads.yaml ফাইলে লগিং কনফিগারেশন সেট করতে পারেন। বিস্তারিত এরর লগ ক্যাপচার করা শুরু করতে লগিং লেভেল DEBUG এ সেট করুন।
অতিরিক্ত বিকল্পগুলির জন্য পাইথন লাইব্রেরি লগিং নির্দেশিকা দেখুন।
রুবি
আপনি আপনার ক্লায়েন্ট লাইব্রেরির google_ads_config.rb ফাইলে লগিং কনফিগারেশন সেট করতে পারেন। বিস্তারিত এরর লগ ক্যাপচার করা শুরু করতে লগিং লেভেল INFO তে সেট করুন।
অতিরিক্ত বিকল্পগুলির জন্য রুবি লাইব্রেরি লগিং নির্দেশিকা দেখুন।
পার্ল
লগিং চালু করতে, যেকোনো এপিআই কল করার আগে আপনার পার্ল স্ক্রিপ্টে নিম্নলিখিত লাইনটি যোগ করুন।
Google::Ads::GoogleAds::Logging::GoogleAdsLogger::enable_all_logging();
অতিরিক্ত বিকল্পগুলির জন্য পার্ল লাইব্রেরি লগিং নির্দেশিকা দেখুন।
কার্ল
curl ডিফল্টরূপে ব্যর্থ প্রতিক্রিয়াগুলো stderr এ প্রিন্ট করে।
ত্রুটিগুলি কীভাবে পরিচালনা করবেন
যদি কোনো ত্রুটি দেখা দেয়, তাহলে এই পদক্ষেপগুলো অনুসরণ করুন:
- এক্সেপশন ধরুন এবং লগ ক্যাপচার করুন : প্রথমে এক্সেপশনগুলো ধরুন এবং ঐচ্ছিকভাবে এপিআই লগ ক্যাপচার করুন।
-
errorsতালিকাটি পরীক্ষা করুন :GoogleAdsFailureঅবজেক্টের প্রতিটিGoogleAdsErrorদেখুন।error_codeএবংmessageআপনাকে বলে দেবে কী ভুল হয়েছে। -
locationমানটি যাচাই করুন :locationক্ষেত্রটি আপনাকে আপনার অনুরোধের ঠিক কোন অংশে সমস্যাটি ঘটেছে তা সুনির্দিষ্টভাবে চিহ্নিত করতে সাহায্য করতে পারে। - Consult documentation : For specific error codes, check the common errors page or the full error code reference for more details on the error and how to fix it.
- আপনার অনুরোধ সংশোধন করুন : ত্রুটির বার্তার উপর ভিত্তি করে আপনার API অনুরোধটি সংশোধন করুন। উদাহরণস্বরূপ, যদি আপনি
REQUIRED_FIELD_MISSINGদেখতে পান, তাহলে নিশ্চিত করুন যে আপনি আপনার অনুরোধে সেই ফিল্ডটি প্রদান করেছেন। -
request_idলগ করুন : যদি আপনি কোনো ত্রুটি সমাধান করতে না পারেন এবং সাপোর্টের সাথে যোগাযোগ করার প্রয়োজন হয়, তাহলে ব্যর্থ হওয়া অনুরোধটির সম্পূর্ণ রিকোয়েস্ট এবং রেসপন্স লগ অন্তর্ভুক্ত করুন।request_idঅবশ্যই অন্তর্ভুক্ত করবেন। এই আইডিটি গুগল ইঞ্জিনিয়ারদের গুগল অ্যাডস এপিআই সার্ভার লগ থেকে ব্যর্থ হওয়া অনুরোধের বিবরণ খুঁজে বের করতে এবং আপনার সমস্যাটি তদন্ত করতে সাহায্য করে।
পরবর্তী পদক্ষেপ
- ঘন ঘন ঘটে এমন সমস্যা এবং সেগুলোর সমাধানের তালিকার জন্য সাধারণ ত্রুটিসমূহ পর্যালোচনা করুন।
- রিট্রাই লজিক এবং পার্শিয়াল ফেইলিউর সহ আরও উন্নত এরর হ্যান্ডলিং টেকনিকের জন্য, আন্ডারস্ট্যান্ড এপিআই এররস (Understand API Errors) দেখুন।