রিজার্ভেশন তৈরি করুন

এই নির্দেশিকাটি আপনাকে একটি অ্যাকশন প্রজেক্ট তৈরি করার প্রক্রিয়ার মধ্য দিয়ে নিয়ে যায় যা রিজার্ভেশন রাখার জন্য অর্ডার API ব্যবহার করে।

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

যখন আপনার অ্যাকশন প্রজেক্ট রিজার্ভেশন পরিচালনা করে, তখন এটি নিম্নলিখিত প্রবাহ ব্যবহার করে:

  1. লেনদেনের প্রয়োজনীয়তা যাচাই করুন (ঐচ্ছিক) - ব্যবহারকারী একটি লেনদেন সম্পাদন করতে সক্ষম কিনা তা নিশ্চিত করতে কথোপকথনের শুরুতে লেনদেনের প্রয়োজনীয়তা সহায়ক ব্যবহার করুন।
  2. অর্ডার তৈরি করুন - ব্যবহারকারীকে একটি "কার্ট সমাবেশ" এর মাধ্যমে নিয়ে যান যেখানে তারা তাদের সংরক্ষণের বিবরণ তৈরি করে।
  3. অর্ডার প্রস্তাব করুন - একবার "কার্ট" সম্পূর্ণ হলে, ব্যবহারকারীর কাছে সংরক্ষণ "অর্ডার" প্রস্তাব করুন, যাতে তারা নিশ্চিত করতে পারে যে এটি সঠিক। রিজার্ভেশন নিশ্চিত হলে, আপনি রিজার্ভেশন বিবরণ সহ একটি প্রতিক্রিয়া পাবেন।
  4. অর্ডারটি চূড়ান্ত করুন এবং একটি রসিদ পাঠান - অর্ডার নিশ্চিত হওয়ার সাথে সাথে আপনার রিজার্ভেশন সিস্টেম আপডেট করুন এবং ব্যবহারকারীকে একটি রসিদ পাঠান।
  5. অর্ডার আপডেট পাঠান - রিজার্ভেশনের জীবনকাল ধরে, অর্ডার এপিআই-এ প্যাচ রিকোয়েস্ট পাঠিয়ে ব্যবহারকারীকে রিজার্ভেশন স্ট্যাটাস আপডেট দিন।

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

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

আপনি শুধুমাত্র নিম্নলিখিত দেশে অর্ডার API ব্যবহার করে এমন অ্যাকশন স্থাপন করতে পারেন:

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

আপনার প্রকল্প তৈরি করুন

লেনদেন সংক্রান্ত কথোপকথনের একটি বিস্তৃত উদাহরণের জন্য, Node.js-এ আমাদের লেনদেনের নমুনা দেখুন।

সেটআপ

আপনার অ্যাকশন তৈরি করার সময়, আপনাকে অবশ্যই নির্দিষ্ট করতে হবে যে আপনি অ্যাকশন কনসোলে লেনদেন করতে চান।

আপনার প্রকল্প এবং পরিপূর্ণতা সেট আপ করতে, নিম্নলিখিতগুলি করুন:

  1. একটি নতুন প্রকল্প তৈরি করুন বা একটি বিদ্যমান প্রকল্প আমদানি করুন।
  2. Deploy > ডিরেক্টরির তথ্যে নেভিগেট করুন।
  3. অতিরিক্ত তথ্যের অধীনে > লেনদেন > বাক্সটি চেক করুন যা বলে যে "আপনার অ্যাকশনগুলি কি ভৌত ​​পণ্যের লেনদেন করতে লেনদেন API ব্যবহার করে?"।

লেনদেনের প্রয়োজনীয়তা যাচাই করুন (ঐচ্ছিক)

যত তাড়াতাড়ি ব্যবহারকারী ইঙ্গিত করেছেন যে তারা একটি রিজার্ভেশন সেট আপ করতে চান, আপনার চেক করা উচিত যে তারা একটি রিজার্ভেশনের অনুরোধ করতে সক্ষম। উদাহরণস্বরূপ, যখন আহ্বান করা হয়, তখন আপনার অ্যাকশন জিজ্ঞাসা করতে পারে, "আপনি কি একটি আসন সংরক্ষণ করতে চান?" ব্যবহারকারী যদি "হ্যাঁ" বলেন, তাহলে আপনাকে নিশ্চিত করতে হবে যে তারা এগিয়ে যেতে পারে এবং তাদের লেনদেন চালিয়ে যাওয়া থেকে বাধা দেয় এমন কোনো সেটিংস ঠিক করার সুযোগ দিতে হবে। এটি করার জন্য, আপনার এমন একটি দৃশ্যে স্থানান্তর করা উচিত যা একটি লেনদেনের প্রয়োজনীয়তা পরীক্ষা করে।

লেনদেনের প্রয়োজনীয়তা চেক দৃশ্য তৈরি করুন

  1. দৃশ্য ট্যাব থেকে, TransactionRequirementsCheck নামের একটি নতুন দৃশ্য যুক্ত করুন।
  2. স্লট ফিলিং এর অধীনে, একটি নতুন স্লট যোগ করতে + এ ক্লিক করুন।
  3. সিলেক্ট টাইপ এর অধীনে, স্লট টাইপ হিসাবে actions.type.TransactionRequirementsCheckResult নির্বাচন করুন।
  4. স্লট নামের ক্ষেত্রে, স্লটটিকে নাম দিন TransactionRequirementsCheck
  5. কাস্টমাইজ স্লট মান রাইটব্যাক চেকবক্স সক্ষম করুন (ডিফল্টরূপে সক্ষম)।
  6. Save এ ক্লিক করুন।

একটি লেনদেনের প্রয়োজনীয়তাগুলি নিম্নলিখিত ফলাফলগুলির মধ্যে একটিতে পরীক্ষা করে:

  • প্রয়োজনীয়তা পূরণ করা হলে, সেশন প্যারামিটার একটি সফল শর্তের সাথে সেট করা হয় এবং আপনি ব্যবহারকারীর অর্ডার তৈরি করে এগিয়ে যেতে পারেন।
  • যদি এক বা একাধিক প্রয়োজনীয়তা পূরণ করা না যায়, সেশন প্যারামিটার একটি ব্যর্থতার শর্ত সহ সেট করা হয়। এই ক্ষেত্রে, আপনার উচিত লেনদেনের অভিজ্ঞতা থেকে কথোপকথনটিকে দূরে সরিয়ে দেওয়া বা কথোপকথনটি শেষ করা।
    • যদি ব্যর্থতার অবস্থার ফলে কোনো ত্রুটি ব্যবহারকারী দ্বারা সংশোধন করা যায়, তাহলে তাদের ডিভাইসে সেই সমস্যাগুলি সমাধান করার জন্য অনুরোধ করা হবে। যদি কথোপকথনটি শুধুমাত্র ভয়েসের পৃষ্ঠে সংঘটিত হয় তবে ব্যবহারকারীর ফোনে একটি হ্যান্ডঅফ শুরু করা হবে।

হ্যান্ডেল লেনদেনের প্রয়োজনীয়তা পরীক্ষা ফলাফল

  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. Save এ ক্লিক করুন।

একটি 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. আপনার ওয়েবহুক কোডে, একটি প্রাথমিক অর্ডার আপডেট পাঠানোর জন্য একটি অভিপ্রায় হ্যান্ডলার যোগ করুন:

    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 প্যাচ অনুরোধের সাথে ব্যবহারকারী সংরক্ষণ অর্ডার আপডেটগুলি অর্ডার API এ পাঠান৷

অর্ডার API এ অ্যাসিঙ্ক্রোনাস অনুরোধ সেট আপ করুন

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

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

  1. Google ক্লাউড কনসোলে , মেনুতে যান ☰ > APIs এবং পরিষেবাগুলি > শংসাপত্র > শংসাপত্র তৈরি করুন > পরিষেবা অ্যাকাউন্ট কী
  2. পরিষেবা অ্যাকাউন্টের অধীনে, নতুন পরিষেবা অ্যাকাউন্ট নির্বাচন করুন।
  3. পরিষেবা অ্যাকাউন্ট service-account সেট করুন।
  4. প্রকল্প > মালিকের ভূমিকা সেট করুন।
  5. JSON- এ কী টাইপ সেট করুন।
  6. তৈরি করুন নির্বাচন করুন।
  7. একটি ব্যক্তিগত JSON পরিষেবা অ্যাকাউন্ট কী আপনার স্থানীয় মেশিনে ডাউনলোড করা হবে।

আপনার অর্ডার আপডেট কোডে, Google APIs ক্লায়েন্ট লাইব্রেরি এবং "https://www.googleapis.com/auth/actions.order.developer" স্কোপ ব্যবহার করে একটি বাহক টোকেনের জন্য আপনার পরিষেবা কী বিনিময় করুন। আপনি API ক্লায়েন্ট লাইব্রেরি GitHub পৃষ্ঠায় ইনস্টলেশন পদক্ষেপ এবং উদাহরণ খুঁজে পেতে পারেন।

একটি উদাহরণ কী বিনিময়ের জন্য আমাদের Node.js নমুনায় order-update.js রেফারেন্স করুন।

অর্ডার আপডেট পাঠান

একবার আপনি একটি OAuth বাহক টোকেনের জন্য আপনার পরিষেবা অ্যাকাউন্ট কী বিনিময় করে নিলে, অর্ডার API-এ অনুমোদিত প্যাচ অনুরোধ হিসাবে অর্ডার আপডেটগুলি পাঠান৷

অর্ডার API URL: 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 ব্যবহার করে এমন একটি কোড স্নিপেট দেখতে, অর্ডার আপডেট পাঠান বিভাগটি দেখুন।

সমস্যা সমাধান

পরীক্ষার সময় আপনি যদি কোনো সমস্যায় পড়েন, লেনদেনের জন্য আমাদের সমস্যা সমাধানের পদক্ষেপগুলি পড়ুন।