ব্যবহারযোগ্য ডিজিটাল লেনদেন তৈরি করুন (ডায়ালগফ্লো)

এই নির্দেশিকাটি ব্যাখ্যা করে যে কীভাবে আপনার কথোপকথনমূলক অ্যাকশনে ডিজিটাল লেনদেন যোগ করতে হয়, যাতে ব্যবহারকারীরা আপনার ব্যবহারযোগ্য ডিজিটাল পণ্য কিনতে পারে।

মূল শর্তাবলী: একটি ভোগ্য ডিজিটাল পণ্য হল একটি স্টক-কিপিং ইউনিট (SKU) যা একজন ব্যবহারকারী একাধিকবার ব্যবহার এবং ক্রয় করতে পারে, যেমন একটি Android গেমের জন্য একটি পরিমাণ ইন-গেম মুদ্রা। এই ডিজিটাল পণ্যটি একটি অ-ব্যবহারযোগ্য ডিজিটাল পণ্য থেকে আলাদা যা একজন ব্যবহারকারী শুধুমাত্র একবার ক্রয় করতে পারেন।

একবার ব্যবহারযোগ্য পণ্য সম্পর্কে আরও তথ্যের জন্য, এক-কালীন পণ্য-নির্দিষ্ট বৈশিষ্ট্যগুলিতে Android ডকুমেন্টেশন পড়ুন।

সীমাবদ্ধতা এবং পর্যালোচনা নির্দেশিকা

অতিরিক্ত নীতিগুলি লেনদেনের সাথে অ্যাকশনগুলিতে প্রযোজ্য৷ লেনদেন অন্তর্ভুক্ত অ্যাকশনগুলি পর্যালোচনা করতে আমাদের কয়েক সপ্তাহ সময় লাগতে পারে, তাই আপনার প্রকাশের সময়সূচী পরিকল্পনা করার সময় সেই সময়টিকে বিবেচনা করুন। পর্যালোচনা প্রক্রিয়া সহজ করতে, পর্যালোচনার জন্য আপনার অ্যাকশন জমা দেওয়ার আগে আপনি লেনদেনের জন্য নীতি এবং নির্দেশিকা মেনে চলছেন তা নিশ্চিত করুন।

ডিজিটাল পণ্য বিক্রি করে এমন ক্রিয়াগুলি শুধুমাত্র নিম্নলিখিত দেশে স্থাপন করা যেতে পারে:

  • অস্ট্রেলিয়া
  • ব্রাজিল
  • কানাডা
  • ইন্দোনেশিয়া
  • জাপান
  • মেক্সিকো
  • রাশিয়া
  • সিঙ্গাপুর
  • থাইল্যান্ড
  • তুরস্ক
  • যুক্তরাজ্য
  • মার্কিন যুক্তরাষ্ট্র

লেনদেন প্রবাহ

ডিজিটাল পণ্য লেনদেনের প্রবাহে এই নির্দেশিকা প্রতিটি উন্নয়ন পদক্ষেপের রূপরেখা দেয়। যখন আপনার Action ডিজিটাল পণ্যের লেনদেন পরিচালনা করে, তখন এটি নিম্নলিখিত প্রবাহ ব্যবহার করে:

  1. একটি ডিজিটাল কেনাকাটা API ক্লায়েন্ট সেট আপ করুন : আপনার অ্যাকশন আপনার Google Play ইনভেন্টরির সাথে যোগাযোগ করতে এবং লেনদেনের জন্য ডিজিটাল কেনাকাটা API ব্যবহার করে। আপনার অ্যাকশন অন্য কিছু করার আগে, এটি ডিজিটাল ক্রয় API এর সাথে যোগাযোগ করার জন্য একটি পরিষেবা কী সহ একটি JWT ক্লায়েন্ট তৈরি করে।
  2. তথ্য সংগ্রহ করুন : আপনার অ্যাকশন ব্যবহারকারী এবং আপনার Google Play ইনভেন্টরি সম্পর্কে প্রাথমিক তথ্য সংগ্রহ করে একটি লেনদেনের জন্য প্রস্তুত।
    1. লেনদেনের প্রয়োজনীয়তা যাচাই করুন : ব্যবহারকারী লেনদেন করতে পারে তা নিশ্চিত করতে ক্রয় প্রবাহের শুরুতে আপনার অ্যাকশন ডিজিটাল লেনদেনের প্রয়োজনীয়তা সহায়ক ব্যবহার করে।
    2. উপলব্ধ ইনভেন্টরি সংগ্রহ করুন : আপনার অ্যাকশন আপনার Google Play ইনভেন্টরি পরীক্ষা করে এবং বর্তমানে কেনার জন্য উপলব্ধ আইটেমগুলি সনাক্ত করে৷
  3. অর্ডার তৈরি করুন : আপনার অ্যাকশন ব্যবহারকারীর কাছে উপলব্ধ ডিজিটাল পণ্য উপস্থাপন করে যাতে তারা কেনার জন্য একটি নির্বাচন করতে পারে।
  4. কেনাকাটা সম্পূর্ণ করুন : আপনার অ্যাকশন Google Play স্টোর থেকে ব্যবহারকারীর নির্বাচনের মাধ্যমে কেনাকাটা শুরু করতে ডিজিটাল ক্রয় API ব্যবহার করে।
  5. ফলাফলটি পরিচালনা করুন : আপনার অ্যাকশন লেনদেনের জন্য একটি স্ট্যাটাস কোড পায় এবং ব্যবহারকারীকে জানায় যে ক্রয় সফল হয়েছে (বা অতিরিক্ত পদক্ষেপ নেয়)।
  6. ক্রয়কে পুনরাবৃত্তিযোগ্য করুন : আপনার অ্যাকশন ক্রয়কৃত আইটেমটিকে "গ্রাহ্য" করতে ডিজিটাল ক্রয় API ব্যবহার করে, সেই আইটেমটিকে সেই ব্যবহারকারীর দ্বারা আবার কেনার জন্য উপলব্ধ করে।

পূর্বশর্ত

আপনি আপনার অ্যাকশনে ডিজিটাল লেনদেনগুলিকে অন্তর্ভুক্ত করার আগে, আপনার নিম্নলিখিত পূর্বশর্তগুলির প্রয়োজন:

একটি Android অ্যাপ সংযুক্ত করুন

আপনার যদি বর্তমানে Google Play কনসোলে বিলিং অনুমতি সহ একটি Android অ্যাপ না থাকে, তাহলে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. অ্যান্ড্রয়েড স্টুডিওতে বা আপনার পছন্দের অ্যান্ড্রয়েড আইডিইতে, একটি নতুন প্রকল্প তৈরি করুন। একটি খুব মৌলিক অ্যাপ তৈরি করতে প্রজেক্ট সেটআপ প্রম্পটে বিকল্পগুলি বেছে নিন।
  2. প্রকল্পটির একটি প্যাকেজ নাম দিন, যেমন com.mycompany.myapp । এই নামটিকে ডিফল্ট হিসাবে ছেড়ে দেবেন না, যেহেতু আপনি প্লে কনসোলে com.example অন্তর্ভুক্ত প্যাকেজগুলি আপলোড করতে পারবেন না৷
  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 হিসাবে আপনার অ্যাপ্লিকেশন তৈরি করুন. অ্যান্ড্রয়েড স্টুডিওতে, এই পদক্ষেপগুলি অনুসরণ করুন:

    1. বিল্ড এ যান, সাইনড বান্ডেল/এপিকে জেনারেট করুন
    2. পরবর্তী ক্লিক করুন.
    3. কী স্টোর পাথের অধীনে, নতুন তৈরি করুন ক্লিক করুন।
    4. প্রতিটি ক্ষেত্র পূরণ করুন তারপর ওকে ক্লিক করুন। আপনার কী স্টোরের পাসওয়ার্ড এবং কী পাসওয়ার্ডটি নোট করুন এবং এগুলিকে একটি নিরাপদ জায়গায় সংরক্ষণ করুন, যেহেতু আপনি এইগুলি পরে ব্যবহার করবেন৷
    5. পরবর্তী ক্লিক করুন.
    6. রিলিজ নির্বাচন করুন।
    7. V1 (JAR স্বাক্ষর) নির্বাচন করুন।
    8. শেষ ক্লিক করুন.
    9. কয়েক সেকেন্ড পরে, Android Studio একটি app-release.apk ফাইল তৈরি করে। পরে ব্যবহারের জন্য এই ফাইলটি সনাক্ত করুন.
  6. Google Play কনসোলে , একটি নতুন অ্যাপ্লিকেশন তৈরি করুন৷

  7. অ্যাপ রিলিজে যান।

  8. ক্লোজড ট্র্যাকের অধীনে, ম্যানেজ করুন তারপর আলফা- এ যান।

  9. রিলিজ তৈরি করুন বোতামে ক্লিক করুন।

  10. Google কে আপনার সাইনিং কী পরিচালনা এবং সুরক্ষিত করতে দিন এর অধীনে, আপনার সাইনিং কী তথ্য লিখুন।

  11. আপনার APK ফাইল আপলোড করুন।

  12. Save এ ক্লিক করুন।

আপনার ডিজিটাল পণ্য তৈরি করুন

প্লে কনসোলে আপনার কাছে বর্তমানে কোনো ডিজিটাল পণ্য না থাকলে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. Google Play কনসোলে , অ্যাপ-মধ্যস্থ পণ্যে যান তারপর পরিচালিত পণ্যগুলিতে যান। যদি আপনি একটি সতর্কতা দেখতে পান, তাহলে একটি Android অ্যাপ তৈরি করতে পূর্ববর্তী নির্দেশাবলী অনুসরণ করুন বা একটি মার্চেন্ট প্রোফাইল তৈরি করতে লিঙ্কটিতে ক্লিক করুন।
  2. ম্যানেজড পণ্য তৈরি করুন ক্লিক করুন।
  3. আপনার ডিজিটাল পণ্যের জন্য ক্ষেত্রগুলি পূরণ করুন। পণ্য আইডি নোট করুন, যেভাবে আপনি আপনার অ্যাকশন থেকে এই পণ্যটিকে উল্লেখ করবেন।
  4. Save এ ক্লিক করুন।
  5. আপনি বিক্রি করতে চান প্রতিটি পণ্যের জন্য ধাপ 2-4 পুনরাবৃত্তি করুন।

Google Play কনসোলে ব্যবহারযোগ্য পণ্যের উদাহরণ।

আপনার অ্যাকশন প্রকল্প প্রস্তুত করুন

Google Play কনসোলে সেট আপ করা আপনার ডিজিটাল পণ্যগুলির সাথে, আপনাকে অবশ্যই ডিজিটাল লেনদেন সক্ষম করতে হবে এবং আপনার অ্যাকশন প্রকল্পটিকে আপনার Play অ্যাপের সাথে সংযুক্ত করতে হবে৷

আপনার অ্যাকশন প্রকল্পে ডিজিটাল পণ্য লেনদেন চালু করতে, এই ধাপগুলি অনুসরণ করুন:

  1. অ্যাকশন কনসোলে , আপনার প্রকল্প খুলুন বা একটি নতুন তৈরি করুন।
  2. Deploy- এ যান তারপর ডিরেক্টরির তথ্য
  3. অতিরিক্ত তথ্য এবং লেনদেনের অধীনে, ডিজিটাল পণ্যের লেনদেন করতে আপনার ক্রিয়াকলাপগুলি ডিজিটাল ক্রয় API ব্যবহার করুন এর অধীনে হ্যাঁ বাক্সে টিক দিন।
  4. Save এ ক্লিক করুন।

একটি ডিজিটাল পণ্য API কী তৈরি করুন

ডিজিটাল পণ্য API-এ অনুরোধ পাঠাতে, আপনাকে আপনার অ্যাকশন কনসোল প্রকল্পের সাথে যুক্ত একটি JSON পরিষেবা অ্যাকাউন্ট কী ডাউনলোড করতে হবে।

আপনার পরিষেবা অ্যাকাউন্ট কী পুনরুদ্ধার করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. অ্যাকশন কনসোলে , উপরের-ডান কোণায় তিনটি বিন্দু আইকনে ক্লিক করুন, তারপরে প্রকল্প সেটিংসে ক্লিক করুন।
  2. আপনার অ্যাকশনের প্রকল্প আইডি খুঁজুন।
  3. এই লিঙ্কটি অনুসরণ করুন, আপনার প্রকল্পের আইডি দিয়ে " <project_id> " প্রতিস্থাপন করুন: https://console.developers.google.com/apis/credentials?project=project_id
  4. প্রধান নেভিগেশনে, শংসাপত্রে যান।
  5. প্রদর্শিত পৃষ্ঠায়, ক্রেডেনশিয়াল তৈরি করুন , তারপর পরিষেবা অ্যাকাউন্ট কী ক্লিক করুন।
  6. সার্ভিস অ্যাকাউন্টে যান এবং নতুন সার্ভিস অ্যাকাউন্টে ক্লিক করুন।
  7. পরিষেবা অ্যাকাউন্টটিকে ডিজিটাল লেনদেনের মতো একটি নাম দিন।
  8. তৈরি করুন ক্লিক করুন।
  9. প্রকল্প > মালিকের ভূমিকা সেট করুন।
  10. অবিরত ক্লিক করুন.
  11. কী তৈরি করুন ক্লিক করুন।
  12. JSON কী প্রকার নির্বাচন করুন।
  13. কী তৈরি করুন ক্লিক করুন এবং JSON পরিষেবা অ্যাকাউন্ট কী ডাউনলোড করুন।

এই পরিষেবা অ্যাকাউন্ট কী একটি নিরাপদ জায়গায় সংরক্ষণ করুন। ডিজিটাল কেনাকাটা API-এর জন্য একটি ক্লায়েন্ট তৈরি করতে আপনি এই কীটি আপনার পূরণে ব্যবহার করবেন।

আপনার প্লে ইনভেন্টরিতে সংযোগ করুন

একটি অ্যাকশন প্রকল্প থেকে আপনার ডিজিটাল পণ্য অ্যাক্সেস করার জন্য, সংযুক্ত বৈশিষ্ট্য হিসাবে আপনার প্রকল্পের সাথে আপনার ওয়েব ডোমেন এবং অ্যাপ যুক্ত করুন৷

দ্রষ্টব্য: আমরা আপনার সম্পত্তি যাচাই করার সময় সংযোগের পদক্ষেপগুলি সম্পূর্ণ হতে এক সপ্তাহ পর্যন্ত সময় লাগতে পারে। যদি সেই সময়ের পরে আপনার ওয়েবসাইট বা অ্যাপ লিঙ্ক করা না থাকে, তাহলে সহায়তার সাথে যোগাযোগ করুন

আপনার প্লে কনসোল ওয়েব ডোমেন এবং অ্যাপকে আপনার অ্যাকশন প্রকল্পের সাথে সংযুক্ত করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. অ্যাকশন কনসোলে , ডিপ্লোয় তারপর ব্র্যান্ড যাচাইকরণে যান।
  2. আপনি যদি কোনো বৈশিষ্ট্য সংযুক্ত না করে থাকেন, তাহলে প্রথমে একটি ওয়েবসাইট সংযুক্ত করুন:

    1. ওয়েব সম্পত্তি ( </> ) বোতামে ক্লিক করুন।
    2. আপনার ওয়েব ডোমেনের URL লিখুন এবং সংযোগ ক্লিক করুন।

    Google অনুসন্ধান কনসোলে সেই ওয়েব ডোমেনের জন্য যাচাই করা ব্যক্তিকে আরও নির্দেশাবলী সহ একটি ইমেল পাঠায়। একবার এই ইমেলের প্রাপক এই পদক্ষেপগুলি অনুসরণ করলে, ওয়েবসাইটটি ব্র্যান্ড যাচাইকরণের অধীনে উপস্থিত হওয়া উচিত।

  3. একবার আপনার অন্তত একটি সংযুক্ত ওয়েবসাইট হয়ে গেলে, আপনার অ্যান্ড্রয়েড অ্যাপ সংযোগ করতে নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

    1. অ্যাকশন কনসোলে , ডিপ্লোয় তারপর ব্র্যান্ড যাচাইকরণে যান।
    2. Connect App এ ক্লিক করুন।
    3. প্রদর্শিত পৃষ্ঠায়, প্লে কনসোলে আপনার ওয়েব ডোমেন যাচাই করতে নির্দেশাবলী অনুসরণ করুন। আপনার ডিজিটাল পণ্য রয়েছে এমন প্লে অ্যাপটি নির্বাচন করুন, এবং ব্র্যান্ড যাচাইকরণ পৃষ্ঠায় দেখানো ওয়েব ডোমেন URLটি ঠিক ঠিকভাবে লিখুন৷

      আবার, Google ডোমেনের যাচাইকৃত মালিককে একটি যাচাইকরণ ইমেল পাঠায়। একবার তারা যাচাইকরণ অনুমোদন করলে, আপনার প্লে অ্যাপটি ব্র্যান্ড যাচাইকরণের অধীনে উপস্থিত হওয়া উচিত।

    4. অ্যাক্সেস প্লে কেনাকাটা সক্ষম করুন৷

অ্যাকশন প্রজেক্টের সাথে সংযুক্ত ওয়েবসাইট এবং অ্যাপ দেখানো ছবি।

আপনার ক্রয় প্রবাহ তৈরি করুন

আপনার অ্যাকশন প্রজেক্ট এবং ডিজিটাল পণ্যের তালিকা প্রস্তুত করে, আপনার কথোপকথন পূরণ ওয়েবহুকে একটি ডিজিটাল পণ্য ক্রয়ের প্রবাহ তৈরি করুন।

1. একটি ডিজিটাল ক্রয় API ক্লায়েন্ট সেট আপ করুন৷

আপনার কথোপকথন পূরণের ওয়েবহুকে, আপনার পরিষেবা অ্যাকাউন্ট JSON কী এবং https://www.googleapis.com/auth/actions.purchases.digital স্কোপ দিয়ে একটি JWT ক্লায়েন্ট তৈরি করুন।

নিম্নলিখিত Node.js কোড ডিজিটাল ক্রয় API এর জন্য একটি 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. ক. লেনদেনের প্রয়োজনীয়তা যাচাই করুন

ব্যবহারকারীকে কেনাকাটা করার বিকল্প দেওয়ার আগে ব্যবহারকারীর অ্যাকাউন্ট লেনদেন সম্পাদনের জন্য সেট আপ করা হয়েছে তা নিশ্চিত করা একটি ভাল অভ্যাস। এই ধাপে ব্যবহারকারীর একটি অর্থপ্রদানের পদ্ধতি কনফিগার করা আছে কিনা এবং তারা এমন একটি লোকেলে আছে যেখানে ডিজিটাল লেনদেন সমর্থিত তা পরীক্ষা করা অন্তর্ভুক্ত। লেনদেন প্রবাহের শুরুতে, সহায়কের সাথে ব্যবহারকারীর লেনদেন কনফিগারেশন যাচাই করতে DIGITAL_PURCHASE_CHECK সাহায্যকারী ব্যবহার করুন।

নিম্নলিখিত Node.js কোডটি কথোপকথনের শুরুতে DIGITAL_PURCHASE_CHECK ব্যবহার করে:

app.intent('Default Welcome Intent', async (conv, { SKU }) => {
  // Immediately invoke digital purchase check intent to confirm
  // purchase eligibility.
  conv.ask(new DigitalPurchaseCheck());
});

DIGITAL_PURCHASE_CHECK_RESULT হিসাবে কথোপকথন আর্গুমেন্টে এই চেকের ফলাফল খুঁজুন। এই ফলাফলের উপর ভিত্তি করে, হয় লেনদেন প্রবাহ চালিয়ে যান বা পিভট দূরে রাখুন এবং তাদের Google Pay কনফিগারেশন চেক করতে বলুন।

নিম্নলিখিত Node.js কোড প্রয়োজনীয়তা পরীক্ষা ফলাফল পরিচালনা করে:

app.intent('Digital Purchase Check', async (conv) => {
  const arg = conv.arguments.get('DIGITAL_PURCHASE_CHECK_RESULT');
  if (!arg || !arg.resultType) {
    conv.close('Digital Purchase check failed. Please check logs.');
    return;
  }
  // User does not meet necessary conditions for completing a digital purchase
  if (arg.resultType === 'CANNOT_PURCHASE' || arg.resultType === 'RESULT_TYPE_UNSPECIFIED') {
    conv.close(`It looks like you aren't able to make digital purchases. Please check your Google Pay configuration and try again.`);
    return;
  }
  conv.ask('Welcome to the Digital Goods Sample. Would you like to see what I have for sale?');
});

2. খ. উপলব্ধ জায় সংগ্রহ করুন

আপনার বর্তমানে উপলব্ধ প্লে স্টোর ইনভেন্টরির অনুরোধ করতে ডিজিটাল ক্রয় API ব্যবহার করুন, তারপর প্রতিটি পণ্যের জন্য JSON অবজেক্টের অ্যারেতে এটি তৈরি করুন। ক্রয়ের জন্য কোন বিকল্পগুলি উপলব্ধ তা ব্যবহারকারীকে দেখানোর জন্য আপনি পরে এই অ্যারেটি উল্লেখ করুন৷

আপনার প্রতিটি ডিজিটাল পণ্য একটি JSON ফর্ম্যাটে SKU হিসাবে উপস্থাপন করা হয়। নিম্নলিখিত Node.js কোড প্রতিটি SKU এর প্রত্যাশিত বিন্যাসের রূপরেখা দেয়:

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

https://actions.googleapis.com/v3/packages/{packageName}/skus:batchGet endpoint-এ একটি POST অনুরোধ পাঠান, যেখানে Google Play Console-এ {packageName} হল আপনার অ্যাপের প্যাকেজের নাম (উদাহরণস্বরূপ, com.myapp.digitalgoods ), এবং ফলাফলটিকে SKU অবজেক্টের অ্যারেতে ফর্ম্যাট করুন।

ফলাফলের অ্যারেতে শুধুমাত্র নির্দিষ্ট ডিজিটাল পণ্যগুলি পুনরুদ্ধার করতে, আপনি body.ids এ কেনার জন্য উপলব্ধ করতে চান এমন ডিজিটাল পণ্যগুলির জন্য পণ্য আইডি তালিকাভুক্ত করুন (Google Play কনসোলে প্রতিটি অ্যাপ-মধ্যস্থ পণ্যের অধীনে দেখানো হয়েছে)।

নিম্নলিখিত 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': conversationId,
        'skuType': '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 অবজেক্টের একটি ইনভেন্টরি অ্যারে পড়ে এবং প্রতিটির জন্য একটি তালিকা আইটেম সহ একটি তালিকা প্রতিক্রিয়া তৈরি করে:

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

4. ক্রয় সম্পূর্ণ করুন

ক্রয়টি সম্পূর্ণ করতে, ব্যবহারকারীর নির্বাচিত আইটেমটির সাথে COMPLETE_PURCHASE সহায়ক অভিপ্রায় ব্যবহার করুন৷

নিম্নলিখিত Node.js কোড একটি তালিকা প্রতিক্রিয়া থেকে ব্যবহারকারীর SKU নির্বাচন পরিচালনা করে এবং সেই তথ্যের সাথে COMPLETE_PURCHASE অভিপ্রায়ের অনুরোধ করে:

app.intent('Send Purchase', (conv, params, option) => {
  let [skuType, id] = option.split(',');

  conv.ask(new CompletePurchase({
    skuId: {
      skuType: skuType,
      id: id,
      packageName: <PACKAGE_NAME>,
    },
  }));
});

5. ফলাফল হ্যান্ডেল

কেনাকাটা সম্পূর্ণ হলে, এটি ফলাফল বর্ণনা করে একটি COMPLETE_PURCHASE_VALUE আর্গুমেন্ট সহ actions_intent_COMPLETE_PURCHASE ডায়ালগফ্লো ইভেন্ট (বা actions.intent.COMPLETE_PURCHASE অ্যাকশন SDK উদ্দেশ্য) ট্রিগার করে। একটি অভিপ্রায় তৈরি করুন, এই ইভেন্টের দ্বারা ট্রিগার করা হয়, যা ব্যবহারকারীকে ফলাফলের সাথে যোগাযোগ করে।

নিম্নলিখিত সম্ভাব্য ক্রয়ের ফলাফলগুলি পরিচালনা করুন:

  • 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 : একটি অজানা কারণে লেনদেন ব্যর্থ হয়েছে, যার ফলে একটি অজানা স্থিতি। ব্যবহারকারীকে লেনদেন ব্যর্থ হয়েছে তা জানিয়ে এই ত্রুটির স্থিতিটি পরিচালনা করুন এবং তারা আবার চেষ্টা করতে চান কিনা তা জিজ্ঞাসা করুন৷

নিম্নলিখিত Node.js কোডটি COMPLETE_PURCHASE_VALUE আর্গুমেন্ট পড়ে এবং প্রতিটি ফলাফল পরিচালনা করে:

app.intent('Purchase Result', (conv) => {
  const arg = conv.arguments.get('COMPLETE_PURCHASE_VALUE');
  console.log('User Decision: ' + JSON.stringify(arg));
  if (!arg || !arg.purchaseStatus) {
    conv.close('Purchase failed. Please check logs.');
    return;
  }
  if (arg.purchaseStatus === 'PURCHASE_STATUS_OK') {
    conv.close(`Purchase completed! You're all set!`);
  } else if (arg.purchaseStatus === 'PURCHASE_STATUS_ALREADY_OWNED') {
    conv.close('Purchase failed. You already own this item.');
  } else if (arg.purchaseStatus === 'PURCHASE_STATUS_ITEM_UNAVAILABLE') {
    conv.close('Purchase failed. Item is not available.');
  } else if (arg.purchaseStatus === 'PURCHASE_STATUS_ITEM_CHANGE_REQUESTED') {
    // Reprompt with your item selection dialog
  }  else {
    conv.close('Purchase Failed:' + arg.purchaseStatus);
  }
});

6. ক্রয় পুনরাবৃত্তিযোগ্য করুন

আপনার বর্তমানে উপলব্ধ প্লে স্টোর ইনভেন্টরির অনুরোধ করতে ডিজিটাল ক্রয় API ব্যবহার করুন, তারপর প্রতিটি পণ্যের জন্য JSON অবজেক্টের অ্যারেতে এটি তৈরি করুন। ক্রয়ের জন্য কোন বিকল্পগুলি উপলব্ধ তা ব্যবহারকারীকে দেখানোর জন্য আপনি পরে এই অ্যারেটি উল্লেখ করুন৷

আপনার প্রতিটি ডিজিটাল পণ্য একটি JSON ফর্ম্যাটে SKU হিসাবে উপস্থাপন করা হয়। নিম্নলিখিত Node.js কোড প্রতিটি SKU এর প্রত্যাশিত বিন্যাসের রূপরেখা দেয়:

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

https://actions.googleapis.com/v3/packages/{packageName}/skus:batchGet endpoint-এ একটি POST অনুরোধ পাঠান, যেখানে Google Play Console-এ {packageName} হল আপনার অ্যাপের প্যাকেজের নাম (উদাহরণস্বরূপ, com.myapp.digitalgoods ), এবং ফলাফলটিকে SKU অবজেক্টের অ্যারেতে ফর্ম্যাট করুন।

ফলাফলের অ্যারেতে শুধুমাত্র নির্দিষ্ট ডিজিটাল পণ্যগুলি পুনরুদ্ধার করতে, আপনি body.ids এ কেনার জন্য উপলব্ধ করতে চান এমন ডিজিটাল পণ্যগুলির জন্য পণ্য আইডি তালিকাভুক্ত করুন (Google Play কনসোলে প্রতিটি অ্যাপ-মধ্যস্থ পণ্যের অধীনে দেখানো হয়েছে)।

নিম্নলিখিত 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': conversationId,
        'skuType': '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));
    });
  });
});

ব্যবহারকারীর ক্রয় প্রতিফলিত করুন

যখন একজন ব্যবহারকারী আপনার অ্যাকশন সম্পর্কে প্রশ্ন করে, তখন JSON-এর user বস্তুর অনুরোধে তাদের কেনাকাটার একটি তালিকা অন্তর্ভুক্ত থাকে। এই তথ্যটি পরীক্ষা করুন এবং ব্যবহারকারী কোন সামগ্রীর জন্য অর্থ প্রদান করেছেন তার উপর ভিত্তি করে আপনার অ্যাকশনের প্রতিক্রিয়া পরিবর্তন করুন৷

নিম্নলিখিত নমুনা কোডটি একটি অনুরোধের user অবজেক্ট দেখায় যা com.digitalgoods.application প্যাকেজের জন্য পূর্ববর্তী অ্যাপ-মধ্যস্থ কেনাকাটার packageEntitlements অন্তর্ভুক্ত করে:

  "user": {
    "userId": "xxxx",
    "locale": "en-US",
    "lastSeen": "2018-02-09T01:49:23Z",
    "packageEntitlements": [
      {
        "packageName": "com.digitalgoods.application",
        "entitlements": [
          {
            "sku": "non-consumable.1",
            "skuType": "APP"
          }
          {
            "sku": "consumable.2",
            "skuType": "APP"
          }
        ]
      },
      {
        "packageName": "com.digitalgoods.application",
        "entitlements": [
          {
            "sku": "annual.subscription",
            "skuType": "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=="
            }
          }
        ]
      }
    ]
  },
  "conversation": {
    "conversationId": "1518141160297",
    "type": "NEW"
  },
  "inputs": [
    {
      "intent": "actions.intent.MAIN",
      "rawInputs": [
        {
          "inputType": "VOICE",
          "query": "Talk to My Test App"
        }
      ]
    }
  ],
  ...
}