পরিবর্তন করা

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});