إنشاء معاملات للاشتراك الرقمي

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

المصطلحات الرئيسية: السلعة الرقمية للاشتراك هي وحدة لحفظ المخزون (SKU) رسومًا متكررة من المستخدم، مثل مجلة على الإنترنت هذا هو مختلفة عن السلعة الرقمية الاستهلاكية التي يجب على المستخدم إعادة الشراء أو سلعة رقمية غير استهلاكية يتم الاحتفاظ بها تلقائيًا يتم شراؤه مرة واحدة فقط.

للحصول على مزيد من المعلومات حول الاشتراكات الرقمية، يمكنك الرجوع إلى نظام Android وثائق حول الميزات الخاصة بالاشتراكات.

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

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

  1. إعداد عميل واجهة برمجة التطبيقات لعمليات الشراء الرقمية: يستخدم الإجراء الخاص بك البيانات الرقمية purchase API للتواصل مع مستودعك ومعاملاتك على Google Play. قبل أن يفعل الإجراء الخاص بك أي شيء آخر، فإنه ينشئ عميل JWT به مفتاح الخدمة للاتصال بواجهة برمجة تطبيقات عمليات الشراء الرقمية.
  2. جمع المعلومات: يجمع الإجراء الخاص بك معلومات أساسية حول المستخدم ومستودعك على Google Play للتحضير للمعاملة.
    1. التحقّق من صحة متطلبات المعاملة: يستخدم الإجراء الخاص بك البيانات الرقمية ومتطلبات المعاملات في بداية تدفق الشراء إلى للتأكد من أن المستخدم يمكنه إجراء المعاملات.
    2. جمع المستودع الإعلاني المتاح: يتحقّق الإجراء الخاص بك من حسابك على Google Play. المستودع ويحدد السلع المتوفرة حاليًا للشراء.
  3. إنشاء الترتيب: يعرض الإجراء الخاص بك السلع الرقمية المتاحة المستخدم حتى يتمكن من اختيار واحدة لشرائها.
  4. إكمال عملية الشراء: يستخدم الإجراء الخاص بك واجهة برمجة التطبيقات لعمليات الشراء الرقمية من أجل بدء عملية شراء باختيار المستخدم إلى "متجر Google Play"
  5. التعامل مع النتيجة: يتلقّى الإجراء الخاص بك رمز حالة مع إعلام المستخدم بنجاح عملية الشراء (أو الحصول خطوات إضافية).

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

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

لا يمكن نشر الإجراءات التي تبيع السلع الرقمية إلا في البلدان التالية:

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

المتطلبات الأساسية

قبل دمج المعاملات الرقمية في العمل، تحتاج إلى المتطلبات الأساسية التالية:

  • حاسمة حساب مطوِّر و حساب التاجر في Google Play، لإدارة سلعك الرقمية في Google Play Console

  • نطاق ويب على Google Search Console لا يلزم ربط هذا النطاق بموقع إلكتروني تم إطلاقه للجمهور العام. نحتاج فقط إلى الإشارة إلى نطاق الويب الخاص بك.

  • تطبيق Android يتضمّن com.android.vending.BILLING الإذن في Google Play Console. ستكون السلع الرقمية "عمليات شراء داخل التطبيق" المرتبطة بهذا التطبيق في Google Play Console.

    وعليك أيضًا إنشاء إصدار في Play Console باستخدام هذا التطبيق، ولكن إذا إذا كنت لا تريد أن يكون الإصدار علنيًا، يمكنك إنشاء إصدار أولي مغلق الإصدار.

    إذا لم يكن لديك تطبيق Android حاليًا، اتّبِع تعليمات ربط تطبيق Android

  • اشتراك واحد أو أكثر في Google Play Console، وهي السلع الرقمية التي تبيعها باستخدام Action (الإجراء). لاحظ أنه لا يمكنك إنشاء اشتراكات في Play Console إلا بعد إعداد المتطلبات الأساسية لتطبيق Android.

    إذا لم يكن لديك اشتراكات، اتّبِع إنشاء تعليمات السلع الرقمية

ربط تطبيق Android

إذا لم يكن لديك حاليًا تطبيق Android حاصل على إذن الفوترة في Google Play Console، اتّبِع الخطوات التالية:

  1. في استوديو Android أو بيئة تطوير متكاملة لنظام التشغيل Android من اختيارك، وإنشاء مشروع جديد تحديد الخيارات في مطالبات إعداد المشروع بإنشاء تطبيق أساسي للغاية.
  2. أدخِل اسم حزمة للمشروع، مثل com.mycompany.myapp. لا تترك هذا الاسم كخيار افتراضي، لأنه لا يمكنك تحميل الحزم التي تضمين com.example في Play Console.
  3. افتح ملف AndroidManifest.xml الخاص بتطبيقك.
  4. أضِف سطر الرمز التالي داخل العنصر manifest:

    <uses-permission android:name="com.android.vending.BILLING" />

    من المفترض أن يظهر ملف AndroidManifest.xml على النحو التالي:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.mycompany.myapp">
        <uses-permission android:name="com.android.vending.BILLING" />
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme" />
    </manifest>
    
  5. أنشئ تطبيقك كملف APK موقَّع. في "استوديو Android"، اتّبِع الخطوات التالية:

    1. انتقِل إلى الإصدار، Create Signed Bundle / APK.
    2. انقر على التالي.
    3. ضمن مسار تخزين المفاتيح، انقر على إنشاء مسار جديد.
    4. املأ كل حقل ثم انقر على حسنًا. تدوين ملاحظات عن ملف تخزين المفاتيح وكلمة المرور وكلمة المرور الرئيسية وتخزينها في مكان آمن، نظرًا ستستخدمها لاحقًا.
    5. انقر على التالي.
    6. اختَر إصدار.
    7. اختَر V1 (توقيع JAR).
    8. انقر على إنهاء.
    9. بعد بضع ثوانٍ، سينشئ "استوديو Android" ملف app-release.apk. تحديد موقع هذا الملف لاستخدامه لاحقًا
  6. في جلسة المعمل، Google Play Console، إنشاء تطبيق جديد.

  7. انتقِل إلى إصدارات التطبيق.

  8. ضمن مسارات الاختبار المغلق، انتقِل إلى إدارة ثم الإصدار الأولي.

  9. انقر على الزر إنشاء إصدار.

  10. ضمن السماح لشركة Google بإدارة مفتاح التوقيع وحمايته، أدخِل توقيعك. المعلومات الأساسية.

  11. حمِّل ملف APK.

  12. انقر على حفظ.

إنشاء سلعك الرقمية

إذا لم يكن لديك حاليًا أي سلع رقمية في Play Console، يُرجى اتّباع الخطوات التالية: الخطوات:

  1. في جلسة المعمل، Google Play Console، انتقِل إلى المنتجات داخل التطبيق ثم إلى الاشتراكات. إذا رأيت تحذيرًا، اتبع التعليمات السابقة لإنشاء تطبيق Android أو انقر على الرابط لإنشاء ملف شخصي للتاجر
  2. انقر على إنشاء اشتراك.
  3. املأ الحقول الخاصة بمنتجك الرقمي. قم بتدوين معرف المنتج، وهي الطريقة التي ستشير بها إلى هذا المنتج من الإجراء الخاص بك.
  4. انقر على حفظ.
  5. كرِّر الخطوات من 2 إلى 4 لكل منتج تريد بيعه.

أمثلة على الاشتراكات في Google Play Console

إعداد مشروع "المهام مع مساعد Google"

يجب تفعيل السلع الرقمية التي تم إعدادها في Google Play Console المعاملات الرقمية وربط مشروع "المهام" بتطبيقك على Play.

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

لتفعيل معاملات السلع الرقمية في مشروع "المهام مع مساعد Google"، يُرجى اتّباع الخطوات التالية: الخطوات:

  1. في وحدة تحكُّم الإجراءات، افتح مشروعك أو أنشئ مشروعًا جديدًا.
  2. انتقِل إلى نشر ثم إلى معلومات الدليل.
  3. ضمن معلومات إضافية والمعاملات، ضَع علامة في المربّع نعم. ضمن هل تستخدم "مهامك" واجهة برمجة التطبيقات لعمليات الشراء الرقمية (DMA) لإجراء المعاملات. السلع الرقمية
  4. انقر على حفظ.

إنشاء مفتاح واجهة برمجة تطبيقات للسلع الرقمية

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

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

  1. في وحدة تحكّم المهام، النقر على رمز النقاط الثلاث في أعلى يسار الصفحة ثم إعدادات المشروع
  2. ابحث عن رقم تعريف المشروع للإجراء الخاص بك.
  3. يُرجى النقر على هذا الرابط مع استبدال "<project_id>". بمعرف مشروعك: https://console.developers.google.com/apis/credentials?project=project_id
  4. في شريط التنقل الرئيسي، انتقِل إلى بيانات الاعتماد.
  5. في الصفحة التي تظهر، انقر على إنشاء بيانات اعتماد، ثم على الخدمة مفتاح الحساب.
  6. انتقِل إلى حساب الخدمة، وانقر على حساب خدمة جديد.
  7. أدخِل اسمًا لحساب الخدمة، مثل Digitaltransactions.
  8. انقر على إنشاء.
  9. اضبط الدور على مشروع >. المالك:
  10. انقر على متابعة.
  11. انقر على إنشاء مفتاح.
  12. اختَر نوع مفتاح JSON.
  13. انقر على إنشاء مفتاح ونزِّل مفتاح حساب خدمة JSON.

يجب حفظ مفتاح حساب الخدمة هذا في مكان آمن. ستستخدم هذا المفتاح في التنفيذ لإنشاء عميل لواجهة برمجة تطبيقات عمليات الشراء الرقمية.

الربط بمستودعك على Play

للوصول إلى سلعك الرقمية من مشروع ضمن المهام، اربط نطاق الويب والتطبيق مع مشروعك المواقع المرتبطة.

لربط نطاق الويب والتطبيق في Play Console بمشروع "المهام"، يُرجى اتّباع الخطوات التالية: الخطوات التالية:

  1. في وحدة تحكّم المهام، انتقِل إلى نشر، ثم إثبات ملكية العلامة التجارية.
  2. إذا لم تكن قد ربطت أيّ مواقع، عليك أولاً ربط موقع إلكتروني:

    1. انقر على زر موقع الويب (&lt;/&gt;).
    2. أدخِل عنوان URL لنطاق الويب الخاص بك وانقر على ربط.

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

  3. بعد أن يكون لديك موقع إلكتروني واحد مرتبط على الأقل، عليك اتّباع الخطوات التالية ربط تطبيق Android:

    1. في وحدة تحكّم المهام، انتقِل إلى نشر، ثم إثبات ملكية العلامة التجارية.
    2. انقر على ربط التطبيق.
    3. في الصفحة التي تظهر، اتّبِع التعليمات لإثبات ملكية موقعك الإلكتروني. النطاق على Play Console. اختَر تطبيق Play الذي يتضمّن السلع الرقمية، ثم أدخِل عنوان URL لنطاق الويب تمامًا كما يظهر على إثبات ملكية العلامة التجارية.

      مرة أخرى، ترسل Google رسالة تحقق إلى مالك العنوان المعتمَد المجال. بعد موافقته على عملية التحقّق، من المفترض أن يكون تطبيقك على Play ضمن إثبات ملكية العلامة التجارية.

    4. فعِّل الوصول إلى عمليات الشراء في Play.

صورة تعرض الموقع الإلكتروني والتطبيقات المرتبطة بمشروع &quot;المهام مع مساعد Google&quot;

بناء مسار الشراء

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

1. إعداد عميل واجهة برمجة تطبيقات عمليات الشراء الرقمية

في الردّ التلقائي على الويب لتنفيذ المحادثة، أنشِئ برنامج JWT باستخدام خدمتك. مفتاح JSON للحساب نطاق واحد (https://www.googleapis.com/auth/actions.purchases.digital).

ينشئ رمز Node.js التالي برنامج JWT لواجهة برمجة التطبيقات لعمليات الشراء الرقمية:

  const serviceAccount = {'my-file.json'};
  const request = require('request');
  const {google} = require('googleapis');

  const jwtClient = new google.auth.JWT(
    serviceAccount.client_email, null, serviceAccount.private_key,
    ['https://www.googleapis.com/auth/actions.purchases.digital'],
    null
  );

2. جمع المعلومات

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

2. أ. التحقّق من صحة متطلبات المعاملة

من الممارسات الجيدة التأكد من أن حساب المستخدم تم إعداده لأداء المعاملات قبل منحهم خيار إجراء عملية شراء. عليك الانتقال إلى مشهد DigitalPurchaseCheck الذي يتأكد من أنّه تم التحقق من المستخدم أنّه يجري المعاملة على مساحة إعلانية مسموح بها (الشاشة الذكية أو مكبّر الصوت الذكي أو Android)، وأنهم في مكان يذهبون إليه المعاملات المعتمدة.

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

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

سينتج عن فحص الشراء الرقمي إحدى النتائج التالية:

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

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

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

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

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

    candidates:
      - first_simple:
          variants:
            - speech: >-
                You are ready to purchase digital goods.
    
  6. ضمن الانتقال، اختَر مشهدًا آخر للسماح للمستخدم بالمتابعة. المحادثة والمضي قدمًا في إجراء المعاملة.

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

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

    candidates:
      - first_simple:
          variants:
            - speech: Sorry you cannot perform a digital purchase.
    
  9. ضمن النقل، اختَر إنهاء المحادثة لإنهاء المحادثة.

2. ب. جمع المستودع المتاح

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

ويتم تمثيل كل سلعة رقمية كرمز تخزين تعريفي بتنسيق JSON. تشير رسالة الأشكال البيانية يوضح رمز Node.js التالي التنسيق المتوقع لكل رمز تخزين تعريفي:

body = {
  skus: [
    skuId: {
      skuType: one of "SKU_TYPE_IN_APP" or "SKU_TYPE_SUBSCRIPTION"
      id: string,
      packageName: string
    }
    formattedPrice: string,
    title: string,
    description: string
  ]
}

إرسال طلب POST إلى https://actions.googleapis.com/v3/packages/{packageName}/skus:batchGet نقطة نهاية، حيث يشير {packageName} إلى اسم حزمة تطبيقك في Google Play وحدة تحكّم (على سبيل المثال، com.myapp.digitalgoods)، وتنسيق النتيجة في مصفوفة كائنات رمز التخزين التعريفي.

لاسترداد سلع رقمية معيّنة فقط في المصفوفة الناتجة، إدراج المنتج معرّفات السلع الرقمية (كما هو موضّح أسفل كل منتج داخل التطبيق في Google Play) Console) التي تريد إتاحتها للشراء في body.ids.

ويطلب رمز Node.js التالي قائمة بالسلع المتاحة من واجهة برمجة التطبيقات لعمليات الشراء وتنسق النتيجة في صورة مصفوفة من رموز التخزين التعريفية:

return jwtClient.authorize((err, tokens) => {
    if (err) {
      throw new Error(`Auth error: ${err}`);
    }

    const packageName = 'com.example.projectname';

    request.post(`https://actions.googleapis.com/v3/packages/${packageName}/skus:batchGet`, {
      'auth': {
        'bearer': tokens.access_token,
      },
      'json': true,
      'body': {
        'conversationId': conv.session.id,
        'skuType': 'SKU_TYPE_IN_APP',
        // This request is filtered to only retrieve SKUs for the following product IDs
        'ids': ['annual.subscription']
      },
    }, (err, httpResponse, body) => {
      if (err) {
        throw new Error(`API request error: ${err}`);
      }
      console.log(`${httpResponse.statusCode}: ${httpResponse.statusMessage}`);
      console.log(JSON.stringify(body));
    });
  });
});

3- إنشاء الطلب

لبدء عملية الشراء الرقمية للمستخدم، قدِّم قائمة بالسلع الرقمية. المتاحة للشراء. يمكنك استخدام مجموعة متنوعة من أنواع الردود المنسّقة لتمثيل المخزون ومطالبة المستخدم بالاختيار.

يقرأ رمز Node.js التالي مصفوفة مستودع من كائنات رمز التخزين التعريفي وينشئ رد القائمة مع عنصر قائمة واحد كل منها:

const items = [];
const entries = [];
skus.forEach((sku) => {
   const key = `${sku.skuId.skuType},${sku.skuId.id}`
   items.push({
       key: key
   });
   entries.push({
       name: key,
       synonyms: [],
       display: {
           title: sku.title,
           description: `${sku.description} | ${sku.formattedPrice}`,
       }
   });
});

conv.session.typeOverrides = [{
   name: 'type_name',
   mode: 'TYPE_REPLACE',
   synonym: {
       entries: entries
   }
}];

conv.add(new List({
   title: 'List title',
   subtitle: 'List subtitle',
   items: items,
}));

إنشاء عملية شراء من اختيار المستخدم

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

conv.session.params.purchase = {
  "@type": "type.googleapis.com/google.actions.transactions.v3.CompletePurchaseValueSpec",
  "skuId": {
    "skuType": "<SKU_TYPE_IN_APP>",
    "id": "<SKU_ID>",
    "packageName": "<PACKAGE_NAME>"
  },
  "developerPayload": ""
};

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

4. إكمال عملية الشراء

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

إنشاء مشهد الشراء الكامل

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

5- التعامل مع النتيجة

يمكن أن تتضمّن الخانة من النوع actions.type.CompletePurchaseValue ما يلي: النتائج:

  • PURCHASE_STATUS_OK: تمت عملية الشراء بنجاح. المعاملة الانتهاء في هذه المرحلة، لذا اخرج من تدفق المعاملات وعُد إلى لمحادثتك.
  • PURCHASE_STATUS_ALREADY_OWNED: تعذّر إجراء المعاملة لأنّ المستخدم يمتلك هذا العنصر بالفعل. يمكنك تجنُّب هذا الخطأ من خلال التحقّق من طلب المستخدم السابق. المشتريات وتفصيل السلع المعروضة حتى لا يتاح لهم خيار إعادة شراء العناصر التي يمتلكونها بالفعل.
  • PURCHASE_STATUS_ITEM_UNAVAILABLE: تعذُّر إكمال المعاملة لأنّ العنصر المطلوب غير متوفر. يمكنك تجنُّب هذا الخطأ من خلال التحقّق من الخيارات المتاحة. رموز التخزين التعريفية عند اقتراب وقت الشراء
  • PURCHASE_STATUS_ITEM_CHANGE_REQUESTED: تعذُّر إكمال المعاملة لأنّ قرر المستخدم شراء شيء آخر. الرد على طلب إنشاء الطلب حتى يتمكن المستخدم من اتخاذ قرار آخر على الفور.
  • PURCHASE_STATUS_USER_CANCELLED: تعذّر إجراء المعاملة لأنّ المستخدم قد ألغى تدفق الشراء. نظرًا لخروج المستخدم مبكرًا من التدفق، سؤال المستخدم عمّا إذا كان يريد إعادة محاولة المعاملة أو الخروج منها تمامًا.
  • PURCHASE_STATUS_ERROR: تعذّر إجراء المعاملة لسبب غير معروف. أخبِر المستخدم بتعذُّر إتمام المعاملة واسأله عمّا إذا كان يريد إعادة المحاولة.
  • PURCHASE_STATUS_UNSPECIFIED: تعذّر إجراء المعاملة لسبب غير معروف، مما يؤدي إلى حالة غير معروفة. تعامل مع حالة الخطأ هذه عن طريق السماح مستخدم يعرف بفشل المعاملة، ويسأله عما إذا كان يريد إعادة المحاولة.

يجب أن تتعامل مع كل من هذه النتائج من مشهد CompletePurchase.

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

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

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

    candidates:
      - first_simple:
          variants:
            - speech: >-
                Your purchase was successful.
    
  6. ضمن النقل، اختَر إنهاء المحادثة لإنهاء المحادثة.

كرِّر الخطوات المذكورة أعلاه لكل نوع من نتائج الشراء التي تريد توفيرها.

أن تعكس عمليات الشراء التي أجراها المستخدم

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

يعرض الرمز النموذجي التالي عنصر user للطلب الذي يتضمّن packageEntitlements من عمليات الشراء السابقة التي أجراها الطفل داخل التطبيق الحزمة com.digitalgoods.application:

{
  "handler": {
    "name": "handler_name"
  },
  "intent": {
    "name": "actions.intent.MAIN",
    "params": {},
    "query": ""
  },
  "scene": {
    "name": "SceneName",
    "slotFillingStatus": "UNSPECIFIED",
    "slots": {}
  },
  "session": {
    "id": "example_session_id",
    "params": {},
    "typeOverrides": []
  },
  "user": {
    "locale": "en-US",
    "params": {
      "verificationStatus": "VERIFIED"
      "packageEntitlements": [
        {
          "packageName": "com.digitalgoods.application",
          "entitlements": [
            {
              "sku": "non-consumable.1",
              "skuType": "SKU_TYPE_IN_APP"
            }
            {
              "sku": "consumable.2",
              "skuType": "SKU_TYPE_IN_APP"
            }
          ]
        },
        {
          "packageName": "com.digitalgoods.application",
          "entitlements": [
            {
              "sku": "annual.subscription",
              "skuType": "SKU_TYPE_SUBSCRIPTION",
              "inAppDetails": {
                "inAppPurchaseData": {
                  "autoRenewing": true,
                  "purchaseState": 0,
                  "productId": "annual.subscription",
                  "purchaseToken": "12345",
                  "developerPayload": "HSUSER_IW82",
                  "packageName": "com.digitalgoods.application",
                  "orderId": "GPA.233.2.32.3300783",
                  "purchaseTime": 1517385876421
                },
                "inAppDataSignature": "V+Q=="
              }
            }
          ]
        }
      ]
     }
   },
  "homeStructure": {
    "params": {}
  },
  "device": {
    "capabilities": [
      "SPEECH",
      "RICH_RESPONSE",
      "LONG_FORM_AUDIO"
    ]
  }
}

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

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

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