পরিবর্তন করা

Google Ads স্ক্রিপ্ট, Google Ads API-তে উপলভ্য জেনেরিক মিউটেটের জন্য সহায়তা প্রদান করে। GoogleAdsService.mutate থেকে করা যায় এমন বেশিরভাগ অপারেশন Google Ads স্ক্রিপ্টেও করা যায়, এর মধ্যে ক্যাম্পেন তৈরি ও ম্যানেজ করাও পড়ে।

এই ফিচার Google Ads API-এর একটি বড় অংশ অ্যাক্সেস করার অনুমতি দেয়, তাই এই ফিচার ব্যবহার করার জন্য Google Ads API কনভেনশন সম্পর্কে প্রাথমিক ধারণা থাকা প্রয়োজন। অনেক বিষয় এড়িয়ে যাওয়া যেতে পারে, যেমন ডেভেলপার টোকেন ও অনুমোদন, কারণ সেগুলি Google Ads স্ক্রিপ্ট আপনার হয়ে ম্যানেজ করে, তবে আপনাকে একটি বৈধ মিউটেশন অনুরোধ তৈরি করতে হবে।

Google Ads API REST ইন্টারফেসের কিছু প্রাথমিক রিসোর্স এখানে দেওয়া হল, এই নির্দেশিকা অনুসরণ করার আগে আপনাকে এগুলি সম্পর্কে জানতে হবে:

প্রাথমিক উদাহরণ

ফাংশনালিটি দেখানোর জন্য, এই প্রাথমিক উদাহরণটি বিবেচনা করুন যা একটি ক্যাম্পেন বাজেট তৈরি করে:

const budgetResult = AdsApp.mutate({
    campaignBudgetOperation: {
      create: {
        amountMicros: 10000000,
        explicitlyShared: false
      }
    }
  });

AdsApp.mutate -এ কল করলে, একটি JSON অবজেক্ট নেওয়া হয় যা একটি MutateOperation-কে রিপ্রেজেন্ট করে। এই অবজেক্টের মধ্যে, আপনি কোন ধরনের অপারেশন করছেন তা উল্লেখ করেন—এই ক্ষেত্রে, একটি campaignBudgetOperation। তারপর আপনি create, remove অথবা দুটিই update এবং updateMask উল্লেখ করেন। create ও update-এর মধ্যে থাকা নির্দিষ্ট ফিল্ড আপনি যে নির্দিষ্ট ধরনের রিসোর্স নিয়ে কাজ করছেন তার উপর নির্ভর করে।

অপারেশন তৈরি করা

সঠিক অপারেশন তৈরি করার জন্য আপনি কয়েকটি কৌশল ব্যবহার করতে পারেন। ক্যাম্পেন বাজেটের উদাহরণটি নিয়েই যদি আলোচনা করা হয়, তাহলে আপনি ক্যাম্পেন বাজেটের জন্য REST রেফারেন্স ডকুমেন্টেশন দেখে এর সবকটি সঠিক ফিল্ডের তালিকা দেখতে পারেন এবং তারপরে উপযুক্ত ফিল্ডগুলি পূরণ করতে পারেন, অথবা উপযুক্ত অবজেক্ট তৈরি করতে আপনার স্ক্রিপ্টে কাস্টম JavaScript কোড লিখতে পারেন।

অথবা, আপনি ক্যাম্পেন বাজেটের জন্য"এটি ব্যবহার করে দেখুন" ফিচার ব্যবহার করে ডায়নামিক অপারেশন তৈরি করার চেষ্টা করতে পারেন। এর মাধ্যমে আপনি কোন কোন ফিল্ড যোগ করতে চান তা বেছে নিয়ে ডায়নামিক অনুরোধের বডি তৈরি করতে পারবেন। তারপরে, আপনি জেনারেট করা ফলাফল থেকে অপারেশনের কন্টেন্ট এক্সট্র্যাক্ট করতে এবং অপারেশনের ধরন নির্দিষ্ট করার পরে আপনার mutate কলে যোগ করতে পারবেন।

অপারেশনের ধরন

তৈরি করুন

আপনি যে রিসোর্স তৈরি করতে চান, তার অবজেক্টের উপস্থাপনা পাস করে আপনার অপারেশনে create নির্দিষ্ট করুন।

create অপারেশনের উদাহরণের জন্য আগে দেওয়া স্নিপেট দেখুন।

সরান

আপনার অপারেশনে remove উল্লেখ করুন, আপনি যে রিসোর্স সরাতে চান সেটির রিসোর্সের নাম পাস করুন, যেমন:

AdsApp.mutate({
    adGroupOperation: {
        remove: "customers/[CUSTOMER_ID]/adGroups/[AD_GROUP_ID]"
    }
});

আপনি কোনও এন্টিটির রিসোর্সের নাম না জানলে, Adsapp.search অনুরোধ ব্যবহার করে এটি ফেচ করতে পারবেন।

আপডেট করুন

আপনার অপারেশনে update নির্দিষ্ট করুন, যাতে রিসোর্স নামের সাথে একটি অবজেক্ট পাস করা যায়। এর ফলে, আপনি কোন অবজেক্ট আপডেট করতে চান তা সিস্টেম নির্ধারণ করতে পারবে। এছাড়াও, আপনি যেসব ফিল্ডের ভ্যালু আপডেট করতে চান সেগুলি পূরণ করুন এবং একটি updateMask উল্লেখ করুন যা এই অনুরোধে আপনি ঠিক কোন ফিল্ড পরিবর্তন করার পরিকল্পনা করছেন তা নির্দেশ করে। আপডেট মাস্কে রিসোর্সের নাম যোগ করবেন না।

update অপারেশনের উদাহরণ:

const campaignResult = AdsApp.mutate({
    campaignOperation: {
        update: {
            resourceName: "customers/[CUSTOMER_ID]/campaigns/[CAMPAIGN_ID]",
            status: "PAUSED",
            name: "[Paused] My campaign"
        },
        updateMask: "name,status"
    }
});

ফলাফল ম্যানেজ করা

অপারেশনের ধরন যাই হোক না কেন, রিটার্ন ভ্যালু হল MutateResult। মিউটেট করার পরে রিসোর্সের বর্তমান অবস্থা সম্পর্কে কোয়েরি করতে এবং অপারেশনটি সফল হয়েছে কিনা বা কোনও সমস্যা হলে কী সমস্যা হয়েছে তা চেক করতে আপনি রিটার্ন করা রিসোর্সের নাম ব্যবহার করতে পারেন।

এখানে একটি উদাহরণ দেওয়া হল যা ফলাফল চেক করা এবং লগে কিছু তথ্য প্রিন্ট করার জন্য একটি প্রাথমিক ফ্লো দেখায়:

const result = AdsApp.mutate( ... );
if (result.isSuccessful()) {
    console.log(`Resource ${result.getResourceName()} successfully mutated.`);
} else {
    console.log("Errors encountered:");
    for (const error of result.getErrorMessages()) {
        console.log(error);
    }
}

একাধিক অপারেশন

এছাড়াও, Google Ads স্ক্রিপ্ট AdsApp.mutateAll পদ্ধতির মাধ্যমে একটি অনুরোধে একাধিক অপারেশন মিউটেট করতে সাহায্য করে। আপনি এমন এন্টিটি তৈরি করতে পারেন যা একে অপরের উপর নির্ভরশীল, যেমন একটি অনুরোধে সম্পূর্ণ ক্যাম্পেন হায়ারার্কি। আপনি চাইলে, অপারেশনের সম্পূর্ণ সেটকে অ্যাটমিক করতে পারেন, যাতে কোনও একটি অপারেশন ব্যর্থ হলে, কোনওটিই পারফর্ম করা না হয়।

রিটার্ন ভ্যালু হল MutateResult অবজেক্টের একটি অ্যারে, আপনার প্রদান করা প্রতিটি অপারেশনের জন্য একটি করে এবং প্রাথমিক অপারেশনের মতো একই ক্রমে।

এই ফিচারটি Google Ads API ফিচারের মতোই কাজ করে, তাই টেম্পোরারি আইডি এবং অন্যান্য বিষয় সম্পর্কে সম্পূর্ণ ব্যাখ্যা পেতে, Google Ads API-এর সেরা পদ্ধতি গাইড দেখুন; মনে রাখবেন যে গাইডটি ফিল্ডের নাম বোঝাতে snake_case ব্যবহার করে, যেখানে Google Ads স্ক্রিপ্ট ডকুমেন্টেশনে lowerCamelCase ব্যবহার করা হয়। Google Ads স্ক্রিপ্টে এই দুটি ক্ষেত্রেই কাজ করে, তাই আপনি সেই নির্দেশিকা থেকে সরাসরি কোড কপি করতে পারবেন।

একটি অনুরোধে একাধিক অপারেশন করতে, আপনার সমস্ত অপারেশন একটি অ্যারেতে সংগ্রহ করুন এবং তারপর AdsApp.mutateAll কল করুন। mutateAll কলটি প্রথম আর্গুমেন্ট হিসেবে অপারেশনের অ্যারে এবং বিকল্প দ্বিতীয় আর্গুমেন্ট হিসেবে বিকল্প নেয়, যার মধ্যে এগুলি অন্তর্ভুক্ত:

  • apiVersion: আপনি কাস্টম API ভার্সন নির্দিষ্ট করতে পারেন, যেমন V26, যদি আপনি স্ক্রিপ্টের ডিফল্ট ভার্সন ছাড়া অন্য কোনও ভার্সন ব্যবহার করতে চান। সেই সময় উপলভ্য যেকোনও পাবলিক ভার্সন আপনি ব্যবহার করতে পারবেন।
  • partialFailure: এই ফিল্ডে ডিফল্ট হিসেবে true থাকে। true হিসেবে সেট করা থাকলে, বৈধ অপারেশন পারফর্ম করা হয় এবং ব্যর্থ অপারেশন থেকে সমস্যা সংক্রান্ত মেসেজ রিটার্ন করা হয়। এটি false হিসেবে সেট করা থাকলে, কোনও অপারেশন ব্যর্থ হলে, কোনও অপারেশনই পারফর্ম করা হয় না, এর ফলে এই অপারেশনগুলির সেট অ্যাটমিক হয়ে যায়।

এখানে একাধিক অপারেশন সহ একটি উদাহরণ দেওয়া হল যা একটি অ্যাটমিক অনুরোধে ক্যাম্পেন বাজেট, ক্যাম্পেন এবং বিজ্ঞাপন গ্রুপ তৈরি করে।

const operations = [];
const customerId = 'INSERT_CUSTOMER_ID_HERE';
const budgetId = `customers/${customerId}/campaignBudgets/-1`;
const campaignId = `customers/${customerId}/campaigns/-2`;
operations.push({
    campaignBudgetOperation: {
      create: {
        resourceName: budgetId,
        amountMicros: 10000000,
        explicitlyShared: false
      }
    }
  });
operations.push({
    campaignOperation: {
      create: {
        resourceName: campaignId,
        name: 'New Campaign ' + new Date(),
        advertisingChannelType: 'SEARCH',
        manualCpc: {},
        campaignBudget: budgetId,
        advertisingChannelType: 'DISPLAY',
        networkSettings: {
          targetContentNetwork: true
        }
      }
    }
  });
operations.push({
    adGroupOperation: {
      create: {
        campaign: campaignId,
        name: 'New AdGroup ' + new Date(),
        optimizedTargetingEnabled: true
      }
    }
  });
const results = AdsApp.mutateAll(
    operations, {partialFailure: false});