تراکنش های دیجیتال مصرفی بسازید

این راهنما نحوه افزودن تراکنش های دیجیتالی را به کنش مکالمه خود توضیح می دهد تا کاربران بتوانند کالاهای دیجیتال مصرفی شما را خریداری کنند.

اصطلاحات کلیدی: کالای دیجیتال مصرفی یک واحد انبارداری (SKU) است که کاربر می تواند بیش از یک بار از آن استفاده و خریداری کند، مانند مقداری ارز درون بازی برای یک بازی اندروید. این کالای دیجیتال با کالای دیجیتال غیر مصرفی متفاوت است که کاربر فقط یک بار می تواند آن را خریداری کند.

برای اطلاعات بیشتر در مورد محصولات یکبار مصرف، به مستندات Android در مورد ویژگی‌های خاص محصول یک بار مصرف مراجعه کنید.

جریان تراکنش

این راهنما هر مرحله توسعه را که در جریان تراکنش کالاهای دیجیتال رخ می دهد، تشریح می کند. وقتی Action شما تراکنش‌های کالاهای دیجیتال را انجام می‌دهد، از جریان زیر استفاده می‌کند:

  1. یک کلاینت API خریدهای دیجیتال راه اندازی کنید : Action شما از API خریدهای دیجیتال برای برقراری ارتباط با موجودی Google Play شما و انجام تراکنش استفاده می کند. قبل از اینکه Action شما هر کار دیگری انجام دهد، یک سرویس گیرنده JWT با یک کلید سرویس برای ارتباط با API خریدهای دیجیتال ایجاد می کند.
  2. جمع‌آوری اطلاعات : Your Action اطلاعات اولیه کاربر و موجودی Google Play شما را جمع‌آوری می‌کند تا برای تراکنش آماده شود.
    1. اعتبارسنجی الزامات تراکنش : اقدام شما از کمک کننده الزامات تراکنش های دیجیتال در شروع جریان خرید استفاده می کند تا مطمئن شود کاربر می تواند تراکنش انجام دهد.
    2. موجودی موجود را جمع آوری کنید : اقدام شما موجودی Google Play شما را بررسی می کند و مشخص می کند چه مواردی در حال حاضر برای خرید در دسترس هستند.
  3. سفارش را بسازید : اکشن شما کالاهای دیجیتالی موجود را به کاربر ارائه می دهد تا بتواند یکی را برای خرید انتخاب کند.
  4. تکمیل خرید : Your Action از API خریدهای دیجیتال برای شروع خرید با انتخاب کاربر از فروشگاه Google Play استفاده می کند.
  5. کنترل نتیجه : Action شما یک کد وضعیت برای تراکنش دریافت می کند و به کاربر اطلاع می دهد که خرید با موفقیت انجام شده است (یا مراحل دیگری را انجام می دهد).
  6. خرید را تکرارپذیر کنید : «اکشن شما» از API خریدهای دیجیتال برای «مصرف» مورد خریداری شده استفاده می‌کند و آن کالا را برای خرید دوباره توسط آن کاربر در دسترس قرار می‌دهد.

محدودیت ها و دستورالعمل های بازبینی

خط‌مشی‌های اضافی برای اقدامات با تراکنش‌ها اعمال می‌شود. بررسی اقداماتی که شامل تراکنش‌ها می‌شود ممکن است چند هفته طول بکشد، بنابراین هنگام برنامه‌ریزی زمان‌بندی انتشار خود، آن زمان را در نظر بگیرید. برای تسهیل روند بازبینی، قبل از ارسال Action برای بررسی، مطمئن شوید که از خط‌مشی‌ها و دستورالعمل‌های تراکنش‌ها پیروی می‌کنید.

اقداماتی که کالاهای دیجیتال می فروشند فقط در کشورهای زیر قابل اجرا هستند:

  • استرالیا
  • برزیل
  • کانادا
  • اندونزی
  • ژاپن
  • مکزیک
  • روسیه
  • سنگاپور
  • تایلند
  • بوقلمون
  • انگلستان
  • ایالات متحده

پیش نیازها

قبل از اینکه تراکنش های دیجیتال را در Action خود بگنجانید، به پیش نیازهای زیر نیاز دارید:

  • یک حساب توسعه دهنده و یک حساب تجاری در Google Play، برای مدیریت کالاهای دیجیتالی خود در کنسول Google Play .

  • یک دامنه وب که در کنسول جستجوی Google تأیید شده است. این دامنه نیازی به مرتبط شدن با یک وب سایت عمومی راه اندازی شده ندارد، ما فقط باید دامنه وب شما را ارجاع دهیم.

  • یک برنامه Android با مجوز com.android.vending.BILLING در کنسول Google Play. کالاهای دیجیتال شما «خریدهای درون برنامه‌ای» مرتبط با این برنامه در کنسول Google Play خواهند بود.

    همچنین باید با این برنامه یک نسخه در کنسول Play ایجاد کنید، اما اگر نمی‌خواهید نسخه عمومی باشد، می‌توانید یک نسخه آلفای بسته ایجاد کنید.

    اگر قبلاً برنامه Android ندارید، دستورالعمل‌های Associate an Android App را دنبال کنید.

  • یک یا چند محصول مدیریت شده در کنسول Google Play ، که کالاهای دیجیتالی هستند که با Action خود می فروشید. توجه داشته باشید که تا زمانی که پیش نیاز برنامه Android را تنظیم نکنید، نمی‌توانید محصولات مدیریت شده را در کنسول Play ایجاد کنید.

    اگر قبلاً محصولات مدیریت شده ندارید، دستورالعمل‌های ایجاد کالاهای دیجیتال خود را دنبال کنید.

یک برنامه اندروید را مرتبط کنید

اگر در حال حاضر برنامه Android با مجوز صورت‌حساب در کنسول Google Play ندارید، این مراحل را دنبال کنید:

  1. در Android Studio یا Android IDE مورد نظر خود، یک پروژه جدید ایجاد کنید. برای ایجاد یک برنامه بسیار ابتدایی، گزینه‌هایی را در دستورات راه‌اندازی پروژه انتخاب کنید.
  2. به پروژه یک نام بسته بدهید، مانند com.mycompany.myapp . این نام را به‌عنوان پیش‌فرض نگذارید، زیرا نمی‌توانید بسته‌هایی را که شامل com.example هستند در کنسول Play آپلود کنید.
  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 Studio مراحل زیر را دنبال کنید:

    1. به Build بروید، دسته امضا شده / APK را ایجاد کنید .
    2. روی Next کلیک کنید.
    3. در زیر مسیر فروشگاه کلید ، روی ایجاد جدید کلیک کنید.
    4. هر فیلد را پر کنید سپس روی OK کلیک کنید. گذرواژه و رمز عبور Key Store Store خود را یادداشت کنید و آنها را در مکانی امن ذخیره کنید، زیرا بعداً از آنها استفاده خواهید کرد.
    5. روی Next کلیک کنید.
    6. انتشار را انتخاب کنید.
    7. V1 (JAR Signature) را انتخاب کنید.
    8. روی Finish کلیک کنید.
    9. پس از چند ثانیه، Android Studio یک فایل app-release.apk تولید می کند. این فایل را برای استفاده بعدی پیدا کنید.
  6. در کنسول Google Play ، یک برنامه جدید ایجاد کنید.

  7. به انتشارات برنامه بروید.

  8. در قسمت Closed Tracks ، به Manage سپس Alpha بروید.

  9. روی دکمه Create Release کلیک کنید.

  10. در زیر اجازه دهید Google کلید امضای شما را مدیریت و محافظت کند ، اطلاعات کلید امضای خود را وارد کنید.

  11. فایل APK خود را آپلود کنید.

  12. روی ذخیره کلیک کنید.

کالاهای دیجیتال خود را ایجاد کنید

اگر در حال حاضر هیچ کالای دیجیتالی در کنسول Play ندارید، این مراحل را دنبال کنید:

  1. در کنسول Google Play ، به محصولات درون برنامه و سپس محصولات مدیریت شده بروید. در صورت مشاهده اخطار، دستورالعمل‌های قبلی را برای ایجاد یک برنامه Android دنبال کنید یا برای ایجاد نمایه تاجر روی پیوند کلیک کنید.
  2. روی ایجاد محصول مدیریت شده کلیک کنید.
  3. فیلدهای محصول دیجیتال خود را پر کنید. به شناسه محصول توجه داشته باشید، که به این صورت است که این محصول را از Action خود ارجاع می دهید.
  4. روی ذخیره کلیک کنید.
  5. مراحل 2-4 را برای هر محصولی که می خواهید بفروشید تکرار کنید.

نمونه کالاهای مصرفی در کنسول Google Play.

پروژه Actions خود را آماده کنید

با راه‌اندازی کالاهای دیجیتال شما در کنسول Google Play، باید تراکنش‌های دیجیتال را فعال کنید و پروژه Actions خود را با برنامه Play خود مرتبط کنید.

برپایی

برای روشن کردن تراکنش‌های کالاهای دیجیتال در پروژه Actions، این مراحل را دنبال کنید:

  1. در کنسول Actions ، پروژه خود را باز کنید یا یک پروژه جدید ایجاد کنید.
  2. به Deploy سپس اطلاعات Directory بروید.
  3. در بخش اطلاعات اضافی و تراکنش‌ها ، کادر بله را در زیر آیا اقدامات شما از API خرید دیجیتال برای انجام تراکنش‌های کالاهای دیجیتال استفاده می‌کند، علامت بزنید.
  4. روی ذخیره کلیک کنید.

یک کلید API کالاهای دیجیتال ایجاد کنید

برای ارسال درخواست‌ها به API کالاهای دیجیتال، باید یک کلید حساب سرویس JSON مرتبط با پروژه کنسول Actions خود را دانلود کنید.

برای بازیابی کلید حساب سرویس خود، این مراحل را دنبال کنید:

  1. در کنسول Actions ، روی نماد سه نقطه در گوشه سمت راست بالا و سپس تنظیمات پروژه کلیک کنید.
  2. شناسه پروژه Action خود را پیدا کنید.
  3. این پیوند را دنبال کنید و شناسه پروژه خود را جایگزین « <project_id> » کنید: https://console.developers.google.com/apis/credentials?project=project_id
  4. در پیمایش اصلی، به اعتبارنامه بروید.
  5. در صفحه ای که ظاهر می شود، روی Create credentials و سپس Service key account کلیک کنید.
  6. به حساب سرویس بروید و حساب کاربری جدید را کلیک کنید.
  7. به حساب سرویس نامی مانند معاملات دیجیتال بدهید.
  8. روی ایجاد کلیک کنید.
  9. Role را روی Project > Owner قرار دهید.
  10. روی Continue کلیک کنید.
  11. روی ایجاد کلید کلیک کنید.
  12. نوع کلید JSON را انتخاب کنید.
  13. روی ایجاد کلید کلیک کنید و کلید حساب سرویس JSON را دانلود کنید.

این کلید حساب سرویس را در مکانی امن ذخیره کنید. از این کلید برای ایجاد مشتری برای API خریدهای دیجیتال استفاده خواهید کرد.

به موجودی Play خود متصل شوید

برای دسترسی به کالاهای دیجیتالی خود از پروژه Actions، دامنه وب و برنامه خود را به عنوان ویژگی های متصل به پروژه خود مرتبط کنید.

برای اتصال دامنه وب کنسول Play و برنامه خود به پروژه Actions، این مراحل را دنبال کنید:

  1. در کنسول Actions ، به Deploy و سپس تأیید برند بروید.
  2. اگر هیچ خاصیتی را متصل نکرده اید، ابتدا یک وب سایت را متصل کنید:

    1. روی دکمه ویژگی وب ( </> ) کلیک کنید.
    2. URL دامنه وب خود را وارد کنید و روی اتصال کلیک کنید.

    Google ایمیلی حاوی دستورالعمل‌های بیشتر برای فردی که برای آن دامنه وب در کنسول جستجوی Google تأیید شده است ارسال می‌کند. هنگامی که گیرنده این ایمیل این مراحل را دنبال کرد، وب‌سایت باید در قسمت تأیید نام تجاری ظاهر شود.

  3. هنگامی که حداقل یک وب سایت متصل دارید، مراحل زیر را برای اتصال برنامه Android خود انجام دهید:

    1. در کنسول Actions ، به Deploy و سپس تأیید برند بروید.
    2. روی اتصال برنامه کلیک کنید.
    3. در صفحه ای که ظاهر می شود، دستورالعمل ها را دنبال کنید تا دامنه وب خود را در کنسول Play تأیید کنید. برنامه Play را که حاوی کالاهای دیجیتال شما است انتخاب کنید و URL دامنه وب را دقیقاً همانطور که در صفحه تأیید نام تجاری نشان داده شده است وارد کنید.

      یک بار دیگر، گوگل یک ایمیل تأیید برای مالک تأیید شده دامنه ارسال می کند. پس از تأیید تأیید، برنامه Play شما باید در قسمت تأیید نام تجاری ظاهر شود.

    4. خریدهای Access Play را فعال کنید.

تصویری که وب سایت و برنامه های متصل به پروژه Actions را نشان می دهد.

جریان خرید خود را ایجاد کنید

با پروژه Actions و موجودی کالاهای دیجیتالی آماده شده، یک جریان خرید کالاهای دیجیتال را در وب هوک انجام مکالمه خود ایجاد کنید.

1. یک کلاینت API خرید دیجیتال راه اندازی کنید

در وب هوک تکمیل مکالمه خود، با کلید JSON حساب سرویس خود و https://www.googleapis.com/auth/actions.purchases.digital دیجیتال یک کلاینت JWT ایجاد کنید.

کد Node.js زیر یک کلاینت JWT برای API خریدهای دیجیتال ایجاد می کند:

  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. اطلاعات جمع آوری کنید

قبل از اینکه کاربر بتواند خریدی انجام دهد، Action شما اطلاعاتی در مورد توانایی کاربر برای خرید و کالاهای موجود از موجودی شما جمع آوری می کند.

2. الف. الزامات خرید دیجیتال را تأیید کنید

این یک تمرین خوب است که مطمئن شوید حساب کاربر برای انجام تراکنش‌ها تنظیم شده است، قبل از اینکه به او گزینه خرید بدهید. شما باید به صحنه DigitalPurchaseCheck بروید، که بررسی می کند کاربر تأیید شده است، آیا تراکنش را روی یک سطح مجاز (نمایشگر هوشمند، بلندگوی هوشمند یا اندروید) انجام می دهد، و اینکه آنها در محلی هستند که تراکنش های دیجیتال در آن انجام می شود. پشتیبانی.

برای ایجاد یک صحنه بررسی خرید دیجیتال، مراحل زیر را دنبال کنید:

  1. از برگه Scenes ، یک صحنه جدید با نام DigitalPurchaseCheck اضافه کنید.
  2. در قسمت Slot filling ، روی + کلیک کنید تا یک اسلات جدید اضافه کنید.
  3. در قسمت Select type ، actions.type.DigitalPurchaseCheckResult به عنوان نوع اسلات انتخاب کنید.
  4. در قسمت نام شکاف، نام DigitalPurchaseCheck را به اسلات بدهید.
  5. کادر بررسی بازنویسی مقدار اسلات سفارشی را فعال کنید (به طور پیش فرض فعال است).
  6. روی ذخیره کلیک کنید.

بررسی خرید دیجیتال منجر به یکی از نتایج زیر می شود:

  • در صورت برآورده شدن شرایط، پارامتر جلسه با شرط موفقیت تنظیم می‌شود و می‌توانید به کاربر اجازه خرید کالای دیجیتال را بدهید.
  • اگر یک یا چند مورد از الزامات برآورده نشود، پارامتر جلسه با یک شرط شکست تنظیم می شود. در این مورد، باید مکالمه را از تجربه تراکنش دور کنید یا مکالمه را پایان دهید.

برای رسیدگی به نتیجه بررسی خرید دیجیتال، این مراحل را دنبال کنید:

  1. از تب Scenes ، صحنه DigitalPurchaseCheck تازه ایجاد شده خود را انتخاب کنید.
  2. در قسمت Condition ، روی + کلیک کنید تا یک شرط جدید اضافه کنید.
  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. در بخش Transition صحنه دیگری را انتخاب کنید، که به کاربر اجازه می دهد مکالمه را ادامه دهد و تراکنش را انجام دهد.

  7. شرط else if scene.slots.status == "FINAL" .

  8. دستورهای ارسال را فعال کنید و یک اعلان ساده ارائه دهید تا کاربر بداند قادر به انجام تراکنش نیست:

    candidates:
      - first_simple:
          variants:
            - speech: Sorry you cannot perform a digital purchase.
    
  9. در بخش انتقال ، پایان مکالمه را برای پایان دادن به مکالمه انتخاب کنید.

2. ب. موجودی موجود را جمع آوری کنید

از API خریدهای دیجیتال برای درخواست موجودی فروشگاه Play خود استفاده کنید، سپس آن را در آرایه ای از اشیاء JSON برای هر محصول بسازید. بعداً به این آرایه ارجاع می دهید تا به کاربر نشان دهید چه گزینه هایی برای خرید در دسترس است.

هر یک از کالاهای دیجیتال شما به عنوان SKU در قالب JSON نشان داده می شود. کد Node.js زیر قالب بندی مورد انتظار هر SKU را مشخص می کند:

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 )، و نتیجه را به آرایه ای از اشیاء SKU قالب بندی کنید.

برای اینکه فقط کالاهای دیجیتالی خاصی را در آرایه به دست آمده بازیابی کنید، شناسه های محصول را برای کالاهای دیجیتال (همانطور که در زیر هر محصول درون برنامه ای در کنسول Google Play نشان داده شده است) که می خواهید برای خرید در body.ids در دسترس قرار دهید، فهرست کنید.

کد Node.js زیر لیستی از کالاهای موجود را از API خریدهای دیجیتال درخواست می کند و نتیجه را به صورت آرایه ای از SKU ها قالب بندی می کند:

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': ['consumable.1']
      },
    }, (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 زیر یک آرایه موجودی از اشیاء SKU را می خواند و یک پاسخ لیست با یک آیتم لیست برای هر کدام ایجاد می کند:

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": ""
};

در Actions Builder، در عوض می‌توانید از ویرایشگر JSON برای پیکربندی شکاف با شیء سفارش بالا استفاده کنید. هر دو پیاده‌سازی از فرمت یکسانی برای CompletePurchaseValueSpec استفاده می‌کنند که می‌توانید آن را در مرجع payload webhook JSON بیابید.

4. خرید را کامل کنید

هنگامی که کاربر یک مورد را انتخاب کرد، می توانید خرید را تکمیل کنید. هنگامی که شکاف مربوط به مورد انتخاب شده را پر کردید، باید به صحنه ای بروید که خرید کامل را انجام می دهد.

صحنه خرید کامل را ایجاد کنید

  1. از تب Scenes ، یک صحنه جدید با نام CompletePurchase اضافه کنید.
  2. در قسمت Slot filling ، روی + کلیک کنید تا یک اسلات جدید اضافه کنید.
  3. در قسمت Select type ، 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 : تراکنش انجام نشد زیرا مورد درخواستی در دسترس نیست. با بررسی SKUهای موجود نزدیک به زمان خرید از این خطا جلوگیری کنید.
  • PURCHASE_STATUS_ITEM_CHANGE_REQUESTED : تراکنش ناموفق بود زیرا کاربر تصمیم گرفت چیز دیگری بخرد. دوباره با ساختن سفارش خود تماس بگیرید تا کاربر بتواند بلافاصله تصمیم دیگری بگیرد.
  • PURCHASE_STATUS_USER_CANCELLED : تراکنش ناموفق بود زیرا کاربر جریان خرید را لغو کرد. از آنجایی که کاربر پیش از موعد از جریان خارج شده است، از کاربر بپرسید که آیا می‌خواهد تراکنش را دوباره امتحان کند یا کلاً از تراکنش خارج شود.
  • PURCHASE_STATUS_ERROR : تراکنش به دلیل نامعلومی شکست خورد. به کاربر اطلاع دهید که تراکنش شکست خورده است و از او بپرسید که آیا می‌خواهد دوباره امتحان کند.
  • PURCHASE_STATUS_UNSPECIFIED : تراکنش به دلیل نامعلومی با شکست مواجه شد و در نتیجه وضعیت نامشخصی ایجاد شد. با این وضعیت خطا به کاربر اطلاع دهید که تراکنش شکست خورده است، و بپرسید که آیا می‌خواهد دوباره امتحان کند.

شما باید هر یک از این نتایج را از صحنه CompletePurchase خود مدیریت کنید.

  1. از تب Scenes ، صحنه CompletePurchase تازه ایجاد شده خود را انتخاب کنید.
  2. در قسمت Condition ، روی + کلیک کنید تا یک شرط جدید اضافه کنید.
  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. در بخش انتقال، پایان مکالمه را انتخاب کنید تا مکالمه پایان یابد.

مراحل بالا را برای هر نوع نتیجه خریدی که می خواهید پشتیبانی کنید، تکرار کنید.

6. خرید را قابل تکرار کنید

پس از یک تراکنش موفق، یک درخواست POST به API خریدهای دیجیتال ارسال کنید تا مورد مصرف شود و به کاربر امکان می‌دهد دوباره آن را خریداری کند. درخواست خود را با شناسه جلسه موجود در session.id به https://actions.googleapis.com/v3/conversations/{sessionId}/entitlement:consume endpoint ارسال کنید.

درخواست POST شما باید شامل شی نشانه خرید مرتبط با خرید کاربر باشد که در JSON درخواست کاربر در زیر packageEntitlements.entitlements.inAppDetails.inAppPurchaseData.purchaseToken یافت می شود.

کد زیر یک درخواست consume را به API خریدهای دیجیتال ارسال می کند و گزارش می دهد که آیا آن درخواست موفقیت آمیز بوده است یا خیر:

request.post(`https://actions.googleapis.com/v3/conversations/${conv.session.id}/entitlement:consume`, {
  'auth': {
    'bearer': tokens.access_token,
  },
  'json': true,
  'body': {
  // This purchase token is in both the purchase event and the user's entitlements
  // in their request JSON
    "purchaseToken": entitlement.purchaseToken
  },
  }, (err, httpResponse, body) => {
    if (err) {
     throw new Error(`API request error: ${err}`);
    }
  console.log(`${httpResponse.statusCode}: ${httpResponse.statusMessage}`);
  console.log(JSON.stringify(httpResponse));
  console.log(JSON.stringify(body));
  resolve(body);
});

// Make sure the consume request was successful. In production, don't notify the user; handle failures on the back end
return consumePromise.then(body => {
  const consumed = Object.keys(body).length === 0;
  if (consumed) {
    conv.add(`You successfully consumed ${id}`);
  } else {
    conv.add(`Failed to consume: ${id}`);
  }
});

خریدهای کاربر را منعکس کنید

هنگامی که یک کاربر Action شما را پرس و جو می کند، شی user JSON درخواست شامل لیستی از خریدهای او می شود. این اطلاعات را بررسی کنید و پاسخ Action خود را بر اساس محتوایی که کاربر برای آن هزینه کرده است تغییر دهید.

کد نمونه زیر شی 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"
    ]
  }
}

پروژه خود را تست کنید

هنگام آزمایش پروژه خود، می‌توانید حالت sandbox را در کنسول Actions فعال کنید تا Action خود را بدون پرداخت هزینه از روش پرداخت آزمایش کنید. برای فعال کردن حالت جعبه ایمنی، مراحل زیر را دنبال کنید:

  1. در کنسول Actions، روی Test در ناوبری کلیک کنید.
  2. روی تنظیمات کلیک کنید.
  3. گزینه Development Sandbox را فعال کنید.