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

تتيح نصوص "إعلانات 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 المسودة، ويتم إنشاؤها أيضًا من حملة dasar . عليك إنشاء 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.

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

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

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