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

تتوافق النصوص البرمجية في "إعلانات 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.

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

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

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