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

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

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

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

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