مسودات الحملات والتجارب

تتوافق النصوص البرمجية في "إعلانات Google" مع مسودات الحملات وتجاربها، والتي تُستخدَم لـ إعداد التغييرات واختبارها على "الحملات على شبكة البحث" و"الحملات على الشبكة الإعلانية".

يوضّح هذا الدليل سير العمل الأساسي لاستخدام المسودات والتجارب في نص برمجي.

المسودات

المسودة هي نسخة طبق الأصل من حملة حالية لن تعرض إعلاناتها الخاصة، ولكن يمكن استخدامها لعرض التغييرات بدون تعديل الحملة الأصلية. يمكن بعد ذلك تطبيق التغييرات المعروضة على الحملة الأساسية.

إنشاء مسودة

يتم إنشاء مسودة من حملة أساسية حالية باستخدام DraftBuilder وتوفير اسم فريد. يجب أن تكون الحملة الأساسية حملة على شبكة البحث أو "حملة على شبكة البحث مع التوسّع في الشبكة الإعلانية" أو "حملة على الشبكة الإعلانية" (باستثناء "حملة التطبيق على الأجهزة الجوّالة" على "الشبكة الإعلانية")، ويجب ألا تكون لها ميزانية مشترَكة.

const campaign = AdsApp.campaigns()
    .withCondition(`campaign.name = "${campaignName}"`)
    .get()
    .next();

const draftBuilder = campaign.newDraftBuilder()
    .withName("INSERT_DRAFT_NAME_HERE")
    .build();

const draft = draftBuilder.getResult();

DraftBuilder.build() تعرض الدالة DraftOperation، وهو عملية نموذجية في النصوص البرمجية. يمكنك الاطّلاع على دليل أدوات الإنشاء لمزيد من التفاصيل.

يتم تحديد draft بشكلٍ فريد من خلال الجمع بين رقم تعريف الحملة الأساسية و رقم تعريف المسودة. يمكنك الاطّلاع على DraftSelector.withIds() لمزيد من المعلومات.

توفير الحملة الاختبارية

يربط عنصر draft بين حملة أساسية وحملة اختبارية. لعرض التعديلات على الحملة الأساسية، يمكنك نشر التغييرات من خلال حملة اختبارية.

تتضمّن حملة اختبارية، مثل أيّ حملة أخرى، طرقًا للحصول على سماتها المختلفة وضبطها، مثل المعايير والمجموعات الإعلانية وعروض الأسعار والإعلانات.

const draftCampaign = draft.getDraftCampaign();

draftCampaign.setAdRotationType("CONVERSION_OPTIMIZE");
draftCampaign.createNegativeKeyword("shoes");

يتم إجراء عمليات التحقّق من سياسة الإعلانات لحملة اختبارية تمامًا كما يتم إجراؤها للحملة الأساسية. لن تتمكّن من تنفيذ تجربة من حملة اختبارية تتضمّن إعلانات تنتهك السياسات.

تنفيذ المسودة

بعد توفير حملة اختبارية، يمكنك اتّخاذ أحد الإجراءَين التاليَين:

  1. إذا كنت لا تريد استخدام التغييرات، يمكنك ببساطة إزالة المسودة. لا يمكن التراجع عن إزالة المسودة، ولكن سيظلّ بإمكانك الاطّلاع عليها ضمن جميع المسودات في علامة التبويب "المسودات" في واجهة مستخدم "إعلانات Google".

        draft.remove();
    
  2. إذا قرّرت الاحتفاظ بالتغييرات التي أجريتها في المسودة، يمكنك المتابعة وتطبيقها:

        draft.startApplying();
    

    تبدأ هذه الطريقة عملية تطبيق التعديلات على الحملة الأساسية، لذا ستظهر المسودة بالحالة جارٍ التطبيق... في واجهة مستخدم "إعلانات Google". ومع ذلك، لن تُعلمك الطريقة عند اكتمال العملية.

  3. إذا أردت اختبار تغييراتك أولاً، يمكنك استخدام المسودة لإنشاء تجربة.

التجارب

تُطلق التجربة حملة قابلة للتخصيص بالتوازي مع الحملة الأصلية، وتعرض الإعلانات لنسبة مئوية محدّدة من عدد الزيارات. استنادًا إلى نتائج التجربة، يمكنك تطبيق التغييرات على الحملة الأصلية أو فصل التجربة إلى حملة مستقلة أو التخلي عن الحملة التجريبية.

إنشاء تجربة

تشبه experiment المسودة، ويتم إنشاؤها أيضًا من حملة أساسية. يمكنك إنشاء experiment باستخدام ExperimentBuilder. سيؤدي ذلك تلقائيًا إلى إنشاء تجربة تتضمّن "مجموعتَين" تمثّلان الأجزاء المختلفة من التجربة. ستحتوي إحدى المجموعتَين (تُسمّى المجموعة الضابطة) على الحملة الأساسية، بينما ستحتوي الأخرى (تُسمّى مجموعة التجربة) على حملة مسودة جديدة ستخصّصها (وفقًا لخطوات المسودة الموضّحة سابقًا) قبل جدولة التجربة.

عند إنشاء تجربة، احرص على ضبط كلّ ما يلي في أداة الإنشاء:

withCampaign
الحملة التي تريد أن تستند إليها التجربة
withTrafficSplitPercent
مقدار عدد الزيارات الذي سيتم توجيهه إلى مجموعة التجربة للحصول على 50%، حدِّد 50.
withStartDate وwithEndDate
تحدِّد تاريخَي البدء والانتهاء للحملة. حدِّد التاريخ بتنسيق YYYYMMdd.
withType
إما SEARCH_CUSTOM أو DISPLAY_CUSTOM، استنادًا إلى الشبكة التي تستخدمها
withSuffix
تحدِّد لاحقة ستتم إضافتها إلى اسم الحملة التجريبية عند إنشائها.
withGoals
تحدِّد الأهداف لهذه التجربة. هذا مجرّد تذكير لك بالأهداف التي وضعتها عند إنشائها. القيمة التلقائية الجيدة هي [{metric: 'CLICKS', direction: 'INCREASE'}].

تحدِّد النسبة المئوية لتقسيم عدد الزيارات جزء عدد الزيارات الذي سيتم عرض الإعلانات له من الحملة التجريبية بدلاً من الحملة الأساسية. لهذا السبب، يمكن أن تتضمّن كلّ حملة أساسية تجربة واحدة قيد التشغيل فقط في وقت واحد.

const experiment = AdsApp.newExperimentBuilder()
  .withCampaign(campaign)
  .withTrafficSplitPercent(50)
  .withStartDate("20230501")
  .withEndDate("20230601")
  .withType("SEARCH_CUSTOM")
  .withSuffix("experiment")
  .withGoals([{metric: 'CLICKS', direction: 'INCREASE'}])
  .build();

// The experimentCampaign represents the customizeable draft.
const experimentCampaign = experiment.getExperimentCampaign();

على عكس المسودات، يتم تحديد التجارب بشكلٍ فريد من خلال رقم تعريف واحد. يمكنك الاطّلاع على ExperimentSelector.withIds() لمزيد من المعلومات.

توفير الحملة التجريبية

على غرار draft، لا تمثّل experiment نفسها حملة. بل إنّها تربط بين الحملة الأساسية والمسودة والحملة التجريبية. يمكن تعديل حقول الحملة التجريبية، باستثناء ما يلي:

  • الاسم
  • status
  • تاريخ البدء
  • تاريخ الانتهاء
  • الميزانية
const experimentCampaign = experiment.getExperimentCampaign();

// Will succeed.
experimentCampaign.setAdRotationType("ROTATE_FOREVER");
experimentCampaign.createNegativeKeyword("sneakers");

// Will fail.
experimentCampaign.setName("INSERT_EXPERIMENT_NAME_HERE");

يمكن إجراء تغييرات على الاسم وتاريخ البدء وتاريخ الانتهاء للتجربة، وبعد ذلك سيتم نشرها إلى الحملة التجريبية.

// Will succeed.
experiment.setName("INSERT_EXPERIMENT_NAME_HERE");

// Will succeed if date is acceptable.
const date = "20220601";
experiment.setStartDate(date);

لبدء التجربة، عليك استدعاء experiment.startScheduling(). هذه عملية غير متزامنة، لأنّها يجب أن تنسخ جميع الإعدادات من الحملة الأساسية.

بعد انتهاء التجربة

عند اكتمال تجربتك، تتوفّر لك بعض الخيارات. ننصحك بالسماح للتجربة بالانتهاء تمامًا حتى تتوقف عن عرض الإعلانات ولكن سيظلّ بإمكانك التفاعل معها. سيظلّ بإمكانك إزالة تجربة منتهية أو تطبيقها أو إكمالها، وسيظلّ بإمكانك الوصول إلى إحصاءات أداء حملتها.

experiment.finish();
const stats = experimentCampaign.getStatsFor("INSERT_TIME_PERIOD_HERE");
  • إذا لم تكن راضيًا عن التجربة استنادًا إلى الإحصاءات، يمكنك إزالة التجربة، ما يؤدي أيضًا إلى إزالة الحملة التجريبية. لا يمكن التراجع عن إزالة التجربة، ولكن سيظلّ بإمكانك الاطّلاع عليها ضمن جميع التجارب في علامة التبويب "التجارب" في واجهة مستخدم "إعلانات Google".

        experiment.remove();
    
  • إذا كنت راضيًا عن نتائج التجربة، يتوفّر لك خياران:

    1. يمكنك البدء في تطبيق التغييرات، وكما هو الحال مع المسودات، لن يتم إعلامك عند اكتمال العملية.

          experiment.startApplying();
      
    2. يمكنك إنشاء الحملة التجريبية كحملة مستقلة تعمل بشكلٍ كامل، بدون التأثير في الحملة الأساسية. تكتمل هذه العملية، المعروفة باسم الإكمال، على الفور وتتطلّب ضبط ميزانية جديدة.

          const budget = AdsApp.budgets()
              .withCondition(`campaign_budget.id = ${budgetId}`)
              .get()
              .next();
      
          experiment.graduate(budget);
      

      لم يعُد بإمكان الحملة الجديدة مشاركة ميزانية مع الحملة الأساسية، ما يستدعي وضع ميزانية جديدة. تشبه الحملات التي تم إكمالها الحملات العادية من حيث إمكانية تعديل جميع حقولها وإمكانية استخدامها كحملة أساسية لمزيد من المسودات والتجارب.

اعتبارات أخرى

الكيانات الأساسية

يؤدي تقديم المسودات والتجارب إلى النصوص البرمجية في "إعلانات Google" أيضًا إلى تقديم مفهوم الكيانات الأساسية. تختلف حملات المسودات والتجارب والمجموعات الإعلانية في ها عن حملاتها الأساسية الأصلية، ولهذا السبب تتضمّن الآن Campaign وAdGroup طرقًا للوصول إلى حملتها الأساسية ومجموعتها الإعلانية الأساسية: getBaseCampaign() وgetBaseAdGroup().

تعرض هذه الطرق الكيان الذي تم استدعاؤه إذا تم استدعاؤها من خلال حملة أساسية أو مجموعة إعلانية أساسية. تم أيضًا منح الكيانات داخل الحملات والمجموعات الإعلانية، مثل الكلمات الرئيسية والإعلانات، طرقًا مماثلة.

للمساعدة في تتبُّع الكيانات الأساسية، تم منح الحملات الطرق isBaseCampaign() وisDraftCampaign() و isExperimentCampaign().

تتيح لك الطريقتان الجديدتان Campaign.draftCampaigns() و Campaign.experimentCampaigns() الوصول إلى جميع حملات المسودات و التجارب التي تستخدم الحملة التي تم استدعاؤها كحملة أساسية. ومع ذلك، لا يمكنك اختيار حملات المسودات باستخدام CampaignSelector.withCondition()؛ استخدِم AdsApp.drafts() بدلاً من ذلك.

معالجة الأخطاء

تستمرّ الطرق التالية التي تتضمّن المسودات والتجارب عند تنفيذ النص البرمجي، ولكن قد تفشل بشكلٍ غير متزامن:

  • Draft.startApplying()
  • Experiment.startApplying()
  • Experiment.startScheduling()

عليك الانتظار للتحقّق مما إذا كانت هذه العمليات ناجحة. تعرض واجهة مستخدم "إعلانات Google" الحالتَين تم التطبيق أو نشطة بعد اكتمال startApplying() وstartScheduling() بنجاح، على التوالي. وتشير إلى يتعذّر التطبيق أو يتعذّر الإنشاء عند حدوث خطأ، ما يتيح لك النقر للاطّلاع على الأخطاء.

من المحتمل أيضًا أن تفشل بعض الطرق في مرحلة المعاينة، ولكن تنجح بعد تنفيذها، على سبيل المثال، بعد إنشاء مسودة:

const draftCampaign = draft.getDraftCampaign();
draftCampaign.createNegativeKeyword("shoes"); // Will fail in preview.

سيفشل هذا الإجراء في وضع المعاينة لأنّه لا يمكنه الوصول إلى حملة اختبارية على الفور.

وبالمثل، سيؤدي إنشاء تجربة ومحاولة جلب حملة المسودة على الفور إلى الفشل في وضع المعاينة، لأنّه لم يتم إنشاء المسودة فعليًا.

لهذا السبب، تحقَّق من السجلّات أسفل قائمة النصوص البرمجية بعد تنفيذها، ولا تتابع استخدام نص برمجي فشل في وضع المعاينة إلا إذا كنت تعتقد أنّ السبب يرجع إلى قيود في وضع المعاينة.