إنشاء الحجوزات

يرشدك هذا الدليل خلال عملية تطوير مشروع المهام يستخدم Orders API لإجراء الحجوزات.

تدفق المعاملة

عندما يتعامل مشروع الإجراءات مع الحجوزات، التدفق التالي:

  1. التحقّق من صحة متطلبات المعاملات (اختياري) - استخدام المعاملات متطلبات المشروع في بداية المحادثة للتأكد من قدرة المستخدم على إجراء معاملة.
  2. إنشاء الطلب - وجِّه المستخدم نحو "تجميع عربة التسوق" حيث يقوم بإنشاء تفاصيل حجزه.
  3. اقتراح الطلب: بعد اختيار "سلّة التسوّق" اكتمل، اقترح "الطلب" إلى المستخدم، حتى يتمكن من تأكيد صحته. إذا تم تأكيد الحجز، فإنك تلقي رد مع تفاصيل الحجز.
  4. إنهاء الطلب وإرسال إيصال: بعد تأكيد الطلب، يمكنك تعديل نظام الحجز الخاص بك وإرسال إيصال إلى المستخدم.
  5. إرسال تحديثات الطلب - على مدار فترة الحجز، تعديل حالة حجز المستخدم من خلال إرسال طلبات التصحيح إلى واجهة برمجة التطبيقات Orders API.

إرشادات المراجعة والقيود

تجدر الإشارة إلى أنّ سياسات إضافية تنطبق على الإجراءات التي تستخدم المعاملات وOrders API. قد تستغرق مراجعة الإجراءات ما يصل إلى ستة أسابيع بالمعاملات، لذا ضع هذا الوقت في الاعتبار عند التخطيط لجدول الإصدار. لتسهيل عملية المراجعة، احرص على الالتزام بما ورد في السياسات والإرشادات المتعلقة بالمعاملات قبل إرسال الإجراء للمراجعة.

لا يمكنك نشر الإجراءات التي تستخدم Orders API إلا في البلدان التالية:

أستراليا
البرازيل
كندا
إندونيسيا
اليابان
المكسيك
قطر
روسيا
سنغافورة
سويسرا
تايلاند
تركيا
المملكة المتحدة
الولايات المتحدة

إنشاء مشروعك

للاطّلاع على مثال شامل على المحادثات المتعلقة بالمعاملات، يُرجى الاطّلاع على قسم المعاملات. في Node.js.

ضبط إعدادات الجهاز

عند إنشاء الإجراء الخاص بك، يجب تحديد أنّك تريد إجراء المعاملات. في وحدة تحكّم الإجراءات.

لإعداد مشروعك وتنفيذك، قم بما يلي:

  1. أنشِئ مشروعًا جديدًا أو استورِد مشروعًا حاليًا.
  2. انتقل إلى نشر > معلومات الدليل:
  3. ضمن معلومات إضافية > المعاملات > حدد المربع الذي يقول "تنفيذ إجراءاتك استخدام واجهة برمجة التطبيقات للمعاملات لإجراء معاملات السلع المادية؟"

التحقّق من صحة متطلبات المعاملة (اختياري)

بمجرد أن يشير المستخدم إلى أنه يريد إجراء حجز، عليك التحقق من حتى يتمكنوا من طلب الحجز. على سبيل المثال، عند استدعاء الإجراء، قد اطرح السؤال "هل تريد حجز مقعد؟" إذا قال المستخدم "نعم"، فينبغي عليك التأكّد من أنّه بإمكانهم المتابعة ومنحهم فرصة تصحيح أي إعدادات تمنعه من مواصلة المعاملة. للقيام بذلك، يجب عليك الانتقال إلى مشهد يتم فيه فحص متطلبات المعاملة.

إنشاء مشهد التحقُّق من متطلبات المعاملات

  1. من علامة التبويب المَشاهد، أضِف مشهدًا جديدًا بالاسم. TransactionRequirementsCheck
  2. ضمن ملء الشرائح، انقر على + لإضافة خانة جديدة.
  3. ضمن اختيار النوع، اختر actions.type.TransactionRequirementsCheckResult. كنوع الخانة
  4. في حقل اسم الخانة، أدخِل الاسم TransactionRequirementsCheck.
  5. فعِّل مربّع الاختيار تخصيص كتابة قيمة الخانة (مفعَّل تلقائيًا).
  6. انقر على حفظ.

ينتج عن فحص متطلبات المعاملة إحدى النتائج التالية:

  • في حال استيفاء المتطلبات، يتم ضبط مَعلمة الجلسة بنجاح. الشرط ويمكنك متابعة إنشاء طلب المستخدم.
  • إذا تعذّر استيفاء واحد أو أكثر من المتطلبات، تكون معلمة الجلسة مع تحديد شرط الفشل. في هذه الحالة، يجب عليك محور المحادثة بعيدًا عن تجربة المعاملات أو إنهاء المحادثة.
    • إذا كان بإمكان المستخدم إصلاح أي أخطاء تنتج عن حالة الفشل، سيُطلب منهم حلّ هذه المشاكل على أجهزتهم. إذا كانت المحادثة على سطح من خلال الصوت فقط، فإن التسليم إلى هاتف المستخدم.

نتيجة التحقّق من متطلبات التعامل مع المعاملات

  1. من علامة تبويب المَشاهد، اختَر المحتوى الذي أنشأته مؤخرًا مشهد واحد (TransactionRequirementsCheck)
  2. ضمن الشرط، انقر على + لإضافة شرط جديد.
  3. في الحقل النصي، أدخل بنية الشرط التالية للتحقق من شرط النجاح:

    scene.slots.status == "FINAL" && session.params.TransactionRequirementsCheck.resultType == "CAN_TRANSACT"
    
  4. مرِّر مؤشر الماوس فوق الشرط الذي أضفته للتو وانقر على السهم لأعلى. لوضعه قبل if scene.slots.status == "FINAL".

  5. تفعيل إرسال الطلبات وتقديم طلب بسيط لإعلام المستخدم أنه على استعداد لإجراء معاملة:

    candidates:
      - first_simple:
          variants:
            - speech: >-
                Looks like you're good to go!.
    
  6. ضمن الانتقال، اختَر مشهدًا آخر للسماح للمستخدم بالمتابعة. المحادثة والمضي قدمًا في إجراء المعاملة.

  7. اختَر الشرط else if scene.slots.status == "FINAL".

  8. تفعيل إرسال الطلبات وتقديم طلب بسيط لإعلام المستخدم إذا لم يتمكن من إجراء معاملة:

    candidates:
      - first_simple:
          variants:
            - speech: Transaction requirements check failed.
    
  9. ضمن النقل، اختَر إنهاء المحادثة لإنهاء المحادثة. إذا لم يتمكن المستخدم من إجراء المعاملات.

إنشاء الطلب

بمجرد حصولك على معلومات المستخدم التي تحتاجها، أنشئ "عربة التسوق" لتجميع" تجربة توجه المستخدم لبناء حجوزاته. كلّ سيكون للإجراء أن يكون تدفق تجميع سلة التسوق مختلفًا قليلاً حسبما يتناسب خدمة ما.

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

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

إنشاء طلب

خلال محادثتك، اجمع تفاصيل حجز المستخدم ثم إنشاء عنصر Order

على الأقل، يجب أن يحتوي Order على ما يلي:

  • buyerInfo: معلومات حول المستخدم الذي يُجري عملية الشراء
  • transactionMerchant - معلومات حول التاجر الذي سهّل الطلب
  • contents: المحتوى الفعلي للطلب المدرَج على أنّه lineItems

يُرجى الرجوع إلى Order. مستندات الرد لإنشاء سلة التسوق الخاصة بك. لاحظ أنك قد تحتاج إلى تضمين حقول مختلفة بناءً على الحجز.

يوضح الرمز النموذجي أدناه طلب حجز كامل، بما في ذلك الحقول الاختيارية:

const order = {
   createTime: '2019-09-24T18:00:00.877Z',
   lastUpdateTime: '2019-09-24T18:00:00.877Z',
   merchantOrderId: orderId, // A unique ID String for the order
   userVisibleOrderId: orderId,
   transactionMerchant: {
     id: 'http://www.example.com',
     name: 'Example Merchant',
   },
   contents: {
     lineItems: [
       {
         id: 'LINE_ITEM_ID',
         name: 'Dinner reservation',
         description: 'A world of flavors all in one destination.',
         reservation: {
           status: 'PENDING',
           userVisibleStatusLabel: 'Reservation is pending.',
           type: 'RESTAURANT',
           reservationTime: {
             timeIso8601: '2020-01-16T01:30:15.01Z',
           },
           userAcceptableTimeRange: {
             timeIso8601: '2020-01-15/2020-01-17',
           },
           partySize: 6,
           staffFacilitators: [
             {
               name: 'John Smith',
             },
           ],
           location: {
             zipCode: '94086',
             city: 'Sunnyvale',
             postalAddress: {
               regionCode: 'US',
               postalCode: '94086',
               administrativeArea: 'CA',
               locality: 'Sunnyvale',
               addressLines: [
                 '222, Some other Street',
               ],
             },
           },
         },
       },
     ],
   },
   buyerInfo: {
     email: 'janedoe@gmail.com',
     firstName: 'Jane',
     lastName: 'Doe',
     displayName: 'Jane Doe',
   },
   followUpActions: [
     {
       type: 'VIEW_DETAILS',
       title: 'View details',
       openUrlAction: {
         url: 'http://example.com',
       },
     },
     {
       type: 'CALL',
       title: 'Call us',
       openUrlAction: {
         url: 'tel:+16501112222',
       },
     },
     {
       type: 'EMAIL',
       title: 'Email us',
       openUrlAction: {
         url: 'mailto:person@example.com',
       },
     },
   ],
   termsOfServiceUrl: 'http://www.example.com'
 };

إنشاء خيارات الطلب والعرض التقديمي

const orderOptions = {
      'requestDeliveryAddress': false,
    };

const presentationOptions = {
      'actionDisplayName': 'RESERVE'
    };

حفظ بيانات الطلب في مَعلمة الجلسة

من طريقة التنفيذ، احفظ بيانات الطلب في مَعلمة جلسة. الترتيب سيتم استخدامه عبر المشاهد لنفس الجلسة.

conv.session.params.order = {
    '@type': 'type.googleapis.com/google.actions.transactions.v3.TransactionDecisionValueSpec',
    order: order,
    orderOptions: orderOptions,
    presentationOptions: presentationOptions
};

اقتراح الطلب

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

إنشاء مشهد اتخاذ قرار المعاملة

  1. من علامة التبويب المَشاهد، أضِف مشهدًا جديدًا باسم TransactionDecision.
  2. ضمن ملء الشرائح، انقر على + لإضافة خانة جديدة.
  3. ضمن اختيار النوع، اختَر actions.type.TransactionDecisionValue باعتباره ونوع الخانة.
  4. في حقل اسم الخانة، أدخِل الاسم TransactionDecision.
  5. فعِّل مربّع الاختيار تخصيص كتابة قيمة الخانة (مفعَّل تلقائيًا).
  6. ضمن ضبط الخانة، اختَر استخدام مَعلمة الجلسة من القائمة المنسدلة.
  7. ضمن ضبط الخانة، أدخِل اسم مَعلمة الجلسة المستخدَمة خزّن الطلب في حقل النص (أي $session.params.order).
  8. انقر على حفظ.

يحاول "مساعد Google" ملء خانة TransactionDecisionValue. تجربة مدمجة يتم فيها عرض Order التي مررت فيها مباشرةً على "بطاقة معاينة سلة التسوق". يمكن للمستخدم قول "تحديد موعد الحجز" أو رفض المعاملة أو أو طلب تغيير تفاصيل الحجز.

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

طريقة اتخاذ قرار المعاملة

عند ملء خانة TransactionDecisionValue، يكون إجابة المستخدم على سيتمّ تخزين قرار المعاملة في مَعلمة جلسة. تحتوي هذه القيمة على ما يلي:

  • ORDER_ACCEPTED،
  • ORDER_REJECTED،
  • CART_CHANGE_REQUESTED
  • USER_CANNOT_TRANSACT.

لمعالجة نتيجة قرار المعاملة:

  1. من علامة التبويب المَشاهد، اختَر المشهد TransactionDecision الذي تم إنشاؤه حديثًا.
  2. ضمن الشرط، انقر على + لإضافة شرط جديد.
  3. في الحقل النصي، أدخل بنية الشرط التالية للتحقق من شرط النجاح:

    scene.slots.status == "FINAL" && session.params.TransactionDecision.transactionDecision == "ORDER_ACCEPTED"
    
  4. مرِّر مؤشر الماوس فوق الشرط الذي أضفته للتو وانقر على السهم لأعلى. لوضعه قبل if scene.slots.status == "FINAL".

  5. تفعيل إرسال الطلبات وتقديم طلب بسيط لإعلام المستخدم اكتمال حجزه:

    candidates:
      - first_simple:
          variants:
            - speech: >-
                Transaction completed! Your reservation
                $session.params.TransactionDecision.order.merchantOrderId is all
                set!
    
  6. ضمن النقل، اختَر إنهاء المحادثة لإنهاء المحادثة.

  7. ضمن الشرط، انقر على + لإضافة شرط جديد.

  8. في الحقل النصي، أدخل بنية الشرط التالية للتحقق من حالات الفشل:

      scene.slots.status == "FINAL" && session.params.TransactionDecision.transactionDecision == "ORDER_REJECTED"
    
  9. مرِّر مؤشر الماوس فوق الشرط الذي أضفته للتو وانقر على السهم لأعلى. لوضعه قبل if scene.slots.status == "FINAL".

  10. فعِّل إرسال الطلبات وقدِّم طلبًا بسيطًا لإعلام المستخدم تم رفض الطلب:

    candidates:
      - first_simple:
          variants:
            - speech: Looks like you don't want to set up a reservation. Goodbye.
    
  11. ضمن النقل، اختَر إنهاء المحادثة لإنهاء المحادثة.

  12. اختَر الشرط else if scene.slots.status == "FINAL".

  13. تفعيل إرسال الطلبات وتقديم طلب بسيط لإعلام المستخدم إذا لم يتمكن من إجراء معاملة:

    candidates:
      - first_simple:
          variants:
            - speech: >-
                Transaction failed with status
                $session.params.TransactionDecision.transactionDecision
    
  14. ضمن النقل، اختَر إنهاء المحادثة لإنهاء المحادثة. إذا لم يتمكن المستخدم من إجراء المعاملات.

إتمام الحجز وإرسال إيصال

عندما تعرض الخانة TransactionDecisionValue نتيجة ORDER_ACCEPTED، يجب أن تجري على الفور أي معالجة مطلوبة لجدولة حجز (مثل الاحتفاظ به في قاعدة البيانات الخاصة بك).

أرسل ردًا بسيطًا لاستمرار المحادثة. يتلقى المستخدم "بطاقة الإيصال مصغَّرة" إلى جانب ردك.

لإرسال تعديل أولي للطلب:

  1. من علامة التبويب المَشاهد، اختَر المشهد في TransactionDecision.
  2. ضِمن الشرط، اختَر الشرط الذي يتحقّق من نتيجة النجاح، ORDER_ACCEPTED:

    scene.slots.status == "FINAL" && session.params.TransactionDecision.transactionDecision == "ORDER_ACCEPTED"
    
  3. بالنسبة إلى هذا الشرط، فعِّل طلب الردّ التلقائي على الويب، وأدخِل هدفًا. اسم المعالج، مثل update_order.

  4. في رمز الردّ التلقائي على الويب، أضِف معالج intent لإرسال تعديل أولي للطلب:

    app.handle('update_order', conv => {
      const currentTime = new Date().toISOString();
      let order = conv.session.params.TransactionDecision.order;
      conv.add(new OrderUpdate({
        'updateMask': {
          'paths': [
            'reservation.status',
            'reservation.user_visible_status_label',
            'reservation.confirmation_code'
          ]
        },
        'order': {
          'merchantOrderId': order.merchantOrderId,
          'lastUpdateTime': currentTime,
          'reservation': {
            'status': 'CONFIRMED',
            'userVisibleStatusLabel': 'Reservation confirmed',
            'confirmationCode': '123ABCDEFGXYZ',
          },
        },
        'reason': 'Reason string'
      }));
    });
    

إرسال آخر أخبار الطلبات

وتتغيّر حالة الحجز على مدار فترة الحجز. إرسال المستخدم تحديثات طلبات الحجز باستخدام طلبات HTTP PATCH إلى Orders API، وتحتوي على حالة الطلب وتفاصيله.

إعداد الطلبات غير المتزامنة في Orders API

يتم السماح بطلبات تعديل الطلبات المرسَلة إلى Orders API من خلال إذن وصول الرمز المميز. لتصحيح تعديل الطلب في واجهة برمجة التطبيقات Orders API، يجب تنزيل ملف JSON. مفتاح حساب الخدمة المرتبط بمشروع "وحدة تحكّم المهام"، ثم استبدال مفتاح حساب الخدمة لرمز الحامل المميز الذي يمكن تمريره إلى عنوان Authorization لطلب HTTP.

لاسترداد مفتاح حساب الخدمة، عليك اتّباع الخطوات التالية:

  1. في وحدة تحكُّم Google Cloud، الانتقال إلى رمز القائمة ⋮ > واجهات برمجة التطبيقات الخدمات > بيانات الاعتماد > إنشاء بيانات الاعتماد > مفتاح حساب الخدمة.
  2. ضمن حساب الخدمة، اختَر حساب خدمة جديد.
  3. اضبط حساب الخدمة على service-account.
  4. ضبط الدور على مشروع > المالك:
  5. اضبط نوع المفتاح على JSON.
  6. اختَر إنشاء.
  7. سيتم تنزيل مفتاح حساب خدمة JSON خاص إلى جهازك المحلي.

في رمز تعديلات الطلب، يمكنك استبدال مفتاح الخدمة برمز الحامل المميّز. باستخدام مكتبة برامج Google APIs نطاق "https://www.googleapis.com/auth/actions.order.developer". يمكنك الاطّلاع على أمثلة وخطوات التثبيت في مكتبة برامج واجهة برمجة التطبيقات صفحة GitHub.

مرجع order-update.js في نموذج Node.js للحصول على مثال لتبادل المفاتيح.

إرسال آخر أخبار الطلبات

بعد استبدال مفتاح حساب الخدمة برمز حامل بروتوكول OAuth، أرسِل الطلبات باعتبارها طلبات تصحيح معتمدة إلى Orders API.

عنوان URL لواجهة برمجة التطبيقات Orders API: PATCH https://actions.googleapis.com/v3/orders/${orderId}

قدِّم العناوين التالية في طلبك:

  • "Authorization: Bearer token" يتضمن الرمز المميز لحامل OAuth الذي استبدلت مفتاح حساب الخدمة من أجله.
  • "Content-Type: application/json".

يجب أن يأخذ طلب التصحيح نص JSON بالتنسيق التالي:

{ "orderUpdate": OrderUpdate }

OrderUpdate من الحقول ذات المستوى الأعلى التالية:

  • updateMask: حقول الطلب الذي تُعدِّله لتحديث وحالة الحجز اضبط القيمة على reservation.status, reservation.userVisibleStatusLabel.
  • order: محتوى التعديل إذا كنت تقوم بتحديث الحجز، اضبط القيمة على عنصر Order المعدّل. إذا كنت تعدّل حالة الحجز فقط (على سبيل المثال، من من "PENDING" إلى "FULFILLED")، يحتوي الكائن على الحقول التالية:

    • merchantOrderId: رقم التعريف نفسه الذي ضبطته في عنصر Order
    • lastUpdateTime - الطابع الزمني لهذا التعديل
    • purchase - كائن يحتوي على ما يلي:
      • status - حالة الطلب باعتباره ReservationStatus على سبيل المثال "CONFIRMED" أو "CANCELLED".
      • userVisibleStatusLabel - تصنيف موجه للمستخدمين يوفر تفاصيل عن حالة الطلب، مثل "تم تأكيد الحجز".
  • userNotification (اختياري) - أ userNotification يمكن عرضه على جهاز المستخدم عند إرسال هذا التحديث. ملاحظة أن تضمين هذا الكائن لا يضمن ظهور الإشعار على جهاز المستخدم.

يعرض الرمز النموذجي التالي مثالاً على OrderUpdate يعدِّل حالة طلب الحجز إلى FULFILLED:

// Import the 'googleapis' module for authorizing the request.
const {google} = require('googleapis');
// Import the 'request-promise' module for sending an HTTP POST request.
const request = require('request-promise');
// Import the OrderUpdate class from the client library.
const {OrderUpdate} = require('@assistant/conversation');

// Import the service account key used to authorize the request.
// Replacing the string path with a path to your service account key.
// i.e. const serviceAccountKey = require('./service-account.json')

// Create a new JWT client for the Actions API using credentials
// from the service account key.
let jwtClient = new google.auth.JWT(
   serviceAccountKey.client_email,
   null,
   serviceAccountKey.private_key,
   ['https://www.googleapis.com/auth/actions.order.developer'],
   null,
);

// Authorize the client
let tokens = await jwtClient.authorize();

// Declare the ID of the order to update.
const orderId = '<UNIQUE_MERCHANT_ORDER_ID>';

// Declare order update
const orderUpdate = new OrderUpdate({
   updateMask: {
     paths: [
       'contents.lineItems.reservation.status',
       'contents.lineItems.reservation.userVisibleStatusLabel'
     ]
   },
   order: {
     merchantOrderId: orderId, // Specify the ID of the order to update
     lastUpdateTime: new Date().toISOString(),
     contents: {
       lineItems: [
         {
           reservation: {
             status: 'FULFILLED',
             userVisibleStatusLabel: 'Reservation fulfilled',
           },
         }
       ]
     },
   },
   reason: 'Reservation status was updated to fulfilled.',
});

// Set up the PATCH request header and body,
// including the authorized token and order update.
let options = {
 method: 'PATCH',
 uri: `https://actions.googleapis.com/v3/orders/${orderId}`,
 auth: {
   bearer: tokens.access_token,
 },
 body: {
   header: {
     isInSandbox: true,
   },
   orderUpdate,
 },
 json: true,
};

// Send the PATCH request to the Orders API.
try {
 await request(options);
} catch (e) {
 console.log(`Error: ${e}`);
}

ضبط حالة الحجز

ReservationStatus لتعديل الطلب يجب أن يقدّم وصفًا عن الحالة الحالية للطلب. في تحديثك order.ReservationStatus استخدم إحدى القيم التالية:

  • PENDING - تم "إنشاء" الحجز بواسطة الإجراء الخاص بك ولكنه يتطلب معالجة إضافية في الواجهة الخلفية
  • CONFIRMED - تم تأكيد الحجز في الخلفية للجدولة.
  • CANCELLED - ألغى المستخدم حجزه.
  • FULFILLED - يتم إتمام حجز المستخدم من خلال الخدمة.
  • CHANGE_REQUESTED - طلب المستخدم إجراء تغيير على الحجز، وتم تطبيق التغيير قيد المعالجة.
  • REJECTED - إذا لم تتمكّن من معالجة طلبك أو غير ذلك تأكيد الحجز.

إرسال تحديثات الطلب لكل حالة ذات صلة الحجز. على سبيل المثال، إذا كان الحجز يتطلب معالجة يدوية تأكيد الحجز بعد طلبه، وإرسال تحديث لطلب PENDING حتى إتمام المعالجة الإضافية. لا تتطلّب كل عملية حجز كلّ قيمة حالة.

اختبار مشروعك

عند اختبار مشروعك، يمكنك تفعيل وضع الحماية في وحدة تحكّم المهام لاختبار الإجراء بدون تحصيل رسوم من طريقة دفع لتمكين وضع الحماية، اتبع الخطوات التالية:

  1. في وحدة تحكّم الإجراءات، انقر على اختبار في شريط التنقّل.
  2. انقر على الإعدادات.
  3. فعِّل خيار وضع حماية التطوير.

بالنسبة إلى المعاملات الفعلية، يمكنك أيضًا ضبط الحقل isInSandbox على true في عينتك. يعادل هذا الإجراء تفعيل إعداد وضع الحماية في وحدة تحكم الإجراءات. للاطّلاع على مقتطف رمز يستخدم isInSandbox، يُرجى مراجعة قسم إرسال آخر أخبار الطلب.

تحديد المشاكل وحلّها

في حال مواجهة أي مشاكل أثناء الاختبار، يُرجى الاطّلاع على خطوات تحديد المشاكل وحلّها. للمعاملات