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

تدعم نصوص "إعلانات 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.

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

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

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