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

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

سيحدث خطأ في وضع المعاينة لأنّه لا يمكن الوصول إلى مسودة الحملة على الفور.

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

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