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

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

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

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

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