চেকআউট সেট আপ করুন৷

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

আপনার ওয়েব পরিষেবার জন্য চেকআউট হ্যান্ডলারকে অবশ্যই POST অনুরোধে সাড়া দিতে হবে। যখন একজন গ্রাহক চেক আউট করতে পছন্দ করেন, তখন Google অর্ডারিং এন্ড-টু-এন্ড ওয়েব পরিষেবাটিকে একটি JSON অনুরোধের বডি একটি CheckoutRequestMessage আকারে পাঠায়, যাতে গ্রাহকের Cart বিবরণ থাকে। আপনার ওয়েব পরিষেবা তারপর একটি CheckoutResponseMessage দিয়ে প্রতিক্রিয়া জানায়। নিম্নলিখিত চিত্রটি প্রক্রিয়াটি চিত্রিত করে।

CheckoutResponseMessage গ্রাহকের অপরিবর্তিত কার্ট বা একটি ত্রুটি ফেরত দেয়।

একটি চেকআউট অনুরোধ পাওয়ার পরে, আপনার অর্ডারিং এন্ড-টু-এন্ড ওয়েব পরিষেবাকে নিম্নলিখিতগুলি করতে হবে:

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

আপনি চেকআউট বাস্তবায়ন শুরু করার আগে, আমরা পূর্ণতা ওভারভিউ ডকুমেন্টেশন পর্যালোচনা করার পরামর্শ দিই।

চেকআউট অনুরোধ বার্তা

গ্রাহকের কার্ট যাচাই করার জন্য, যখন একজন গ্রাহক চেক আউট করতে চান, তখন Google আপনার ওয়েব পরিষেবাতে একটি JSON বডি সহ একটি CheckoutRequestMessage আকারে একটি অনুরোধ পাঠায়। অর্ডারিং এন্ড-টু-এন্ড ফ্লোতে গ্রাহকের অর্ডারটি পরে জমা দেওয়া হয় না।

একটি CheckoutRequestMessage এ থাকা ডেটাতে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:

  • উদ্দেশ্য: প্রতিটি চেকআউট অনুরোধের বডির inputs[0].intent ফিল্ডে actions.foodordering.intent.CHECKOUT স্ট্রিং মান থাকে।
  • কার্ট: একটি চেকআউট অনুরোধের inputs[0].arguments[0].extension ফিল্ডে একটি Cart অবজেক্ট থাকে যা গ্রাহকের কার্টকে প্রতিনিধিত্ব করে।
  • ডেলিভারি বা টেকআউট: Cart অবজেক্টের এক্সটেনশন ফিল্ডে একটি FoodCartExtension অবজেক্ট থাকে যা ডেলিভারি বা টেকআউটের জন্য বৈশিষ্ট্য নির্দিষ্ট করে:
    • ডেলিভারি অর্ডারের জন্য, FoodCartExtension অবজেক্টে ডেলিভারির ঠিকানা থাকে।
    • পিকআপ বা টেকআউট অর্ডারের জন্য, FoodCartExtension অবজেক্টে কোনো অবস্থানের তথ্য থাকে না।
  • স্যান্ডবক্স: একটি চেকআউট অনুরোধের isInSandbox ক্ষেত্রে একটি বুলিয়ান মান রয়েছে যা নির্দেশ করে যে লেনদেনটি স্যান্ডবক্স অর্থপ্রদান ব্যবহার করে কিনা।

চেকআউট অনুরোধের উদাহরণ

নীচে একটি CheckoutRequestMessage এর একটি উদাহরণ রয়েছে:

{
    "user": {},
    "conversation": {
        "conversationId": "CTZbZfUlHCybEdcz_5PB3Ttf"
    },
    "inputs": [
        {
            "intent": "actions.foodordering.intent.CHECKOUT",
            "arguments": [
                {
                    "extension": {
                        "@type": "type.googleapis.com/google.actions.v2.orders.Cart",
                        "merchant": {
                            "id": "restaurant/Restaurant/QWERTY",
                            "name": "Tep Tep Chicken Club"
                        },
                        "lineItems": [
                            {
                                "name": "Spicy Fried Chicken",
                                "type": "REGULAR",
                                "id": "299977679",
                                "quantity": 2,
                                "price": {
                                    "type": "ESTIMATE",
                                    "amount": {
                                        "currencyCode": "AUD",
                                        "units": "39",
                                        "nanos": 600000000
                                    }
                                },
                                "offerId": "MenuItemOffer/QWERTY/scheduleId/496/itemId/143",
                                "extension": {
                                    "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"
                                }
                            }
                        ],
                        "extension": {
                            "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
                            "fulfillmentPreference": {
                                "fulfillmentInfo": {
                                    "delivery": {
                                        "deliveryTimeIso8601": "P0M"
                                    }
                                }
                            },
                            "location": {
                                "coordinates": {
                                    "latitude": -33.8376441,
                                    "longitude": 151.0868736
                                },
                                "formattedAddress": "Killoola St, 1, Concord West NSW 2138",
                                "zipCode": "2138",
                                "city": "Concord West",
                                "postalAddress": {
                                    "regionCode": "AU",
                                    "postalCode": "2138",
                                    "administrativeArea": "NSW",
                                    "locality": "Concord West",
                                    "addressLines": [
                                        "Killoola St",
                                        "1"
                                    ]
                                }
                            }
                        }
                    }
                }
            ]
        }
    ],
    "directActionOnly": true,
    "isInSandbox": true
}

চেকআউট প্রতিক্রিয়া বার্তা

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

সফল অনুরোধ

একটি চেক আউট অনুরোধ সফল হলে, CheckoutResponseMessage ProposedOrder এবং PaymentOptions অন্তর্ভুক্ত করতে হবে:

  • ProposedOrder

    • cart : CheckoutRequestMessage এ দেওয়া কার্টের অনুরূপ একটি cart বস্তু। কার্টের যেকোন বিষয়বস্তু পরিবর্তন করার প্রয়োজন হলে, CheckoutResponseMessage পরিবর্তে একটি সংশোধিত ProposedOrder সহ একটি FoodErrorExtension অন্তর্ভুক্ত করা উচিত।
    • otherItems : প্রদানকারীর দ্বারা যোগ করা আইটেম, যেমন ডেলিভারি চার্জ, ট্যাক্স এবং অন্যান্য ফি। ব্যবহারকারীর দ্বারা যোগ করা গ্র্যাচুইটিও থাকতে পারে।
    • totalPrice : অর্ডারের মোট মূল্য।
    • extension : একটি FoodOrderExtension যা অর্ডারের জন্য পূর্ণতা সংক্রান্ত তথ্য নির্ধারণ করে, যেমন ডেলিভারির সময়।
  • PaymentOptions

    • পেমেন্ট প্রসেসিং সেট-আপ করা পরে Google Pay সেট-আপে কভার করা হয়। আপনি আপনার CheckoutResponseMessage এ প্লেসহোল্ডার JSON ব্যবহার করতে পারেন যতক্ষণ না আপনি পেমেন্ট প্রক্রিয়াকরণ বাস্তবায়নের জন্য প্রস্তুত হন।
    • আপনার CheckoutResponseMessage এ স্থানধারক অর্থপ্রদানের বিকল্পগুলি যোগ করতে, নীচের উদাহরণটি পড়ুন, যা PaymentOptions এর জন্য একটি উদাহরণ পেমেন্ট গেটওয়ে ব্যবহার করে৷

সফল প্রতিক্রিয়া উদাহরণ

{
    "finalResponse": {
        "richResponse": {
            "items": [
                {
                    "structuredResponse": {
                        "checkoutResponse": {
                            "proposedOrder": {
                                "cart": {
                                    "merchant": {
                                        "id": "restaurant/Restaurant/QWERTY",
                                        "name": "Tep Tep Chicken Club"
                                    },
                                    "lineItems": [
                                        {
                                            "name": "Spicy Fried Chicken",
                                            "type": "REGULAR",
                                            "id": "299977679",
                                            "quantity": 2,
                                            "price": {
                                                "type": "ESTIMATE",
                                                "amount": {
                                                    "currencyCode": "AUD",
                                                    "units": "39",
                                                    "nanos": 600000000
                                                }
                                            },
                                            "offerId": "MenuItemOffer/QWERTY/scheduleId/496/itemId/143",
                                            "extension": {
                                                "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"
                                            }
                                        }
                                    ],
                                    "extension": {
                                        "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
                                        "fulfillmentPreference": {
                                            "fulfillmentInfo": {
                                                "delivery": {
                                                    "deliveryTimeIso8601": "P0M"
                                                }
                                            }
                                        },
                                        "location": {
                                            "coordinates": {
                                                "latitude": -33.8376441,
                                                "longitude": 151.0868736
                                            },
                                            "formattedAddress": "Killoola St, 1, Concord West NSW 2138",
                                            "zipCode": "2138",
                                            "city": "Concord West",
                                            "postalAddress": {
                                                "regionCode": "AU",
                                                "postalCode": "2138",
                                                "administrativeArea": "NSW",
                                                "locality": "Concord West",
                                                "addressLines": [
                                                    "Killoola St",
                                                    "1"
                                                ]
                                            }
                                        }
                                    }
                                },
                                "totalPrice": {
                                    "type": "ESTIMATE",
                                    "amount": {
                                        "currencyCode": "AUD",
                                        "units": "43",
                                        "nanos": 100000000
                                    }
                                },
                                "extension": {
                                    "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
                                    "availableFulfillmentOptions": [
                                        {
                                            "fulfillmentInfo": {
                                                "delivery": {
                                                    "deliveryTimeIso8601": "P0M"
                                                }
                                            }
                                        }
                                    ]
                                },
                                "otherItems": [
                                    {
                                        "name": "Delivery fee",
                                        "price": {
                                            "type": "ESTIMATE",
                                            "amount": {
                                                "currencyCode": "AUD",
                                                "units": "3",
                                                "nanos": 500000000
                                            }
                                        },
                                        "type": "DELIVERY"
                                    }
                                ]
                            },
                            "paymentOptions": {
                                "googleProvidedOptions": {
                                    "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gatewayMerchantId\":\"YOUR_MERCHANT_ID\",\"gateway\":\"cybersource\"}}}],\"transactionInfo\":{\"currencyCode\":\"AUD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"43.1\"}} "
                                }
                            },
                            "additionalPaymentOptions": [
                                {
                                    "actionProvidedOptions": {
                                        "paymentType": "ON_FULFILLMENT",
                                        "displayName": "Pay when you get your food.",
                                        "onFulfillmentPaymentData": {
                                            "supportedPaymentOptions": []
                                        }
                                    }
                                }
                            ]
                        }
                    }
                }
            ]
        }
    }
}

অসফল অনুরোধ

যদি একটি চেকআউট অনুরোধ অসফল হয়, CheckoutResponseMessage FoodErrorExtension অন্তর্ভুক্ত করতে হবে, যেটিতে FoodOrderError আইটেমগুলির একটি তালিকা রয়েছে যা ঘটে যাওয়া কোনও ত্রুটি বর্ণনা করে৷ যদি অর্ডারে কোনো পুনরুদ্ধারযোগ্য ত্রুটি থাকে, যেমন কার্টে কোনো আইটেমের মূল্য পরিবর্তন, FoodErrorExtension অবশ্যই correctedProposedOrder অন্তর্ভুক্ত করতে হবে।

অসফল প্রতিক্রিয়া উদাহরণ

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "structuredResponse": {
            "error": {
              "@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension",
              "foodOrderErrors": [
                {
                  "error": "CLOSED",
                  "description": "The restaurant is closed."
                }
              ]
            }
          }
        }
      ]
    }
  }
}

চেকআউট বাস্তবায়ন

চেকআউট বাস্তবায়ন করার সময় নিম্নলিখিত পদক্ষেপগুলি গ্রহণ করা উচিত।

পরিষেবাটি যাচাই করুন

পাওয়া প্রথম পরিষেবা ত্রুটি অবস্থার জন্য একটি FoodOrderError ফেরত দিন। এই ত্রুটিগুলি পুনরুদ্ধারযোগ্য নয় তাই প্রথম ত্রুটিটি ফেরত দেওয়া উচিত৷ পুনরুদ্ধারযোগ্য ত্রুটিগুলির বর্ণনার জন্য ত্রুটিগুলি পরিচালনা করুন দেখুন৷

  1. পূরণের ধরনটি delivery বা pickup জন্য কিনা তা নির্ধারণ করতে অনুরোধে FulfillmentOptionInfo বৈশিষ্ট্যটি পড়ুন।
  2. প্রয়োজনে নিম্নলিখিত ত্রুটির ধরনগুলি ফেরত দিন:

    ত্রুটির ধরন ব্যবহারের ক্ষেত্রে
    অবৈধ৷ পূরণের ধরনটি অবৈধ৷
    NOT_FOUND পূর্ণতা প্রকার খুঁজে পাওয়া যায় নি.
    বন্ধ
    • অর্ডারের জন্য কোন অপারেশন ঘন্টা উইন্ডো নেই।
    • অর্ডারটি একটি শীঘ্রই দ্রুত অর্ডার এবং বর্তমান সময়ের জন্য কোন ASAP পরিষেবাঘর উপলব্ধ নেই৷
    • একটি জরুরী বন্ধ আছে বা পরিষেবাটি isDisabled সত্য৷
    মনে রাখবেন যে বিশেষ উইন্ডোগুলি নিয়মিত উইন্ডোগুলির চেয়ে অগ্রাধিকার নেয়৷ উইন্ডো যাচাইকরণের জন্য উদাহরণগুলি দেখুন এবং অস্থায়ীভাবে পরিষেবা সংস্থাগুলি সরান
    UNAVAILABLE_SLOT সময়ের আগে অর্ডার পূরণ করা যাবে না.
    NO_CAPACITY রেস্টুরেন্টটি ব্যস্ত এবং এই মুহূর্তে অর্ডার নিচ্ছে না।
    OUT_OF_SERVICE_AREA অর্ডার ব্যবহারকারীর ঠিকানায় বিতরণ করা যাবে না. একটি উদাহরণের জন্য ডেলিভারি ঠিকানা যাচাইকরণ দেখুন।
    NO_COURIER_AVAILABLE সীমিত ডেলিভারি কর্মীদের কারণে অর্ডার বিতরণ করা যাবে না।

যাচাই এবং কার্ট মূল্য

  1. প্রতিটি কার্ট দেখুন। lineItems এবং আপনার সিস্টেমে বা বণিকের সিস্টেমে বর্তমান ডেটার সাথে যাচাই করুন। মেনু আইটেম অফার । ফিড সত্তা থেকে sku মান লাইনআইটেম হিসাবে অন্তর্ভুক্ত করা হয়েছে। offerId প্রয়োজনে প্রতিটি লাইন আইটেমের জন্য একটি FoodOrderError তৈরি করুন। প্রতিটি আইটেমের জন্য সর্বাধিক একটি ত্রুটি তৈরি করুন। প্রয়োজনে নিম্নলিখিত ত্রুটির ধরনগুলি ফেরত দিন:

    ত্রুটির ধরন ব্যবহারের ক্ষেত্রে পুনরুদ্ধারযোগ্য
    অবৈধ৷ আইটেম ডেটা বা বিকল্প ডেটার যেকোনোটি অবৈধ। না
    NOT_FOUND আইটেম বা বিকল্প কোন খুঁজে পাওয়া যায় না. না
    PRICE_CHANGED একটি আইটেম বা অ্যাড-অন সংমিশ্রণের দাম পরিবর্তিত হয়েছে৷ এই ত্রুটি পুনরুদ্ধারযোগ্য হিসাবে বিবেচনা করা যেতে পারে. হ্যাঁ
    AVAILABILITY_CHANGED লাইন আইটেম বা বিকল্পগুলির জন্য অনুরোধ করা পরিমাণ উপলব্ধ নেই। হ্যাঁ
    REQUIREMENTS_NOT_MET অর্ডার সর্বনিম্ন বা সর্বোচ্চ অর্ডার পূরণ করা হয় না. কার্টের মূল্য ফি- এর নিচে আছে কিনা তা যাচাই করে এটি নির্ধারণ করা যেতে পারে। eligibleTransactionVolumeMin বা ফি এর উপরে। eligibleTransactionVolumeMaxন্যূনতম অর্ডার মান যাচাইকরণে উদাহরণটি দেখুন। না
  2. LineItemType REGULAR এর সাথে লাইন আইটেমগুলির বৈধ তালিকাটি ফেরত দিন। সমস্ত কার্ট লাইন আইটেমের দামের যোগফল হল কার্ট মূল্য বা SUBTOTAL

কার্ট আইটেম যাচাইকরণের উদাহরণগুলি দেখুন।

পরিষেবা ফি গণনা

  1. eligibleRegion , validFrom , validThrough এবং priority উপর ভিত্তি করে পরিষেবার জন্য সঠিক ফি সত্তা খুঁজুন।
  2. সত্তাটিকে একটি price , percentageOfCart বা pricePerMeter সম্পত্তি দিয়ে সংজ্ঞায়িত করা হয়েছে কিনা তার উপর ভিত্তি করে ফি পরিমাণ গণনা করুন।
  3. যথাক্রমে LineItemType DELIVERY বা FEE সহ একটি LineItem হিসাবে ডেলিভারি বা টেকআউট পরিষেবা ফি ফেরত দিন। কার্টে ফি যোগ করুন। otherItems তালিকা।

প্রচার প্রয়োগ করুন

  1. প্রচারের সাথে মিলের উপর ভিত্তি করে ডিল সত্তা খুঁজুন। চুক্তির সাথে coupon মান। dealCode
  2. চুক্তিটি যাচাই করুন এবং প্রয়োজনে একটি FoodOrderError ফেরত দিন। এই ত্রুটিগুলি পুনরুদ্ধারযোগ্য হিসাবে বিবেচনা করা যেতে পারে। প্রয়োজনে নিম্নলিখিত ত্রুটির ধরনগুলি ফেরত দিন:

    ত্রুটির ধরন ব্যবহারের ক্ষেত্রে
    PROMO_NOT_RECOGNIZED কুপন কোড স্বীকৃত ছিল না.
    PROMO_EXPIRED চুক্তির মেয়াদ শেষ হয়ে গেছে।
    PROMO_ORDER_INELIGIBLE অর্ডারটি কুপনের জন্য যোগ্য নয়।
    PROMO_NOT_APPLICABLE অন্য কোনো কারণ।
  3. ডিলের উপর ভিত্তি করে ডিলের দামের পরিমাণ গণনা করুন। discount বা ডিলdiscountPercentage

  4. ডিলের উপর নির্ভর করে কার্টের মোট বা ফি মোট ব্যবহার করে ডিলের মূল্যের পরিমাণ প্রয়োগ করুন। dealType

  5. কার্ট ফেরত দিন। ফলিত প্রচারের সাথে promotions

  6. LineItemType DISCOUNT সহ একটি লাইনআইটেম হিসাবে প্রচারটি ফেরত দিন। কার্টে ছাড় যোগ করুন। একটি নেতিবাচক মূল্য সহ otherItems তালিকা.

প্রতিক্রিয়া ফেরত দিন

  1. প্রস্তাবিত অর্ডার তৈরি করুন। cart , রেসপন্স কার্ট রিকোয়েস্ট কার্টের মতই হয় যদি বৈধকরণের সময় কোন ত্রুটি না হয়।
  2. প্রস্তাবিত অর্ডারটি ফেরত দিন। ট্যাক্স, ফি, ​​গ্র্যাচুইটি এবং প্রয়োগ করা হলে ডিসকাউন্ট সহ otherItems তালিকা। গ্র্যাচুইটি আইটেমটি কীভাবে কনফিগার করতে হয় সে সম্পর্কে আরও বিশদ বিবরণের জন্য গ্র্যাচুইটি দেখুন।
  3. প্রস্তাবিত আদেশ অন্তর্ভুক্ত করুন। কার্টের মূল্য, ফি, ​​ডিসকাউন্ট, ট্যাক্স এবং গ্র্যাচুইটি যোগ করে totalPrice
  4. FoodOrderExtension ফেরত দিন। সংশ্লিষ্ট পূর্ণতা বিকল্পের সাথে availableFulfillmentOptions । প্রত্যাশিত সময়ে আনুমানিক পিকআপ বা ডেলিভারি সময় আপডেট করুন।
  5. যদি পূর্ববর্তী যাচাইকরণ পরীক্ষা থেকে ফুডঅর্ডার ত্রুটি তৈরি হয়:
    • স্ট্রাকচার্ড রেসপন্স অন্তর্ভুক্ত করুন। error এবং FoodErrorExtension- এ ত্রুটির তালিকা। foodOrderErrors
    • সমস্ত ত্রুটি পুনরুদ্ধারযোগ্য হলে correctedProposedOrder প্রস্তাবিতঅর্ডার ক্ষেত্রে প্রস্তাবিত অর্ডারটি ফেরত দিন।
    • সমস্ত ত্রুটি পুনরুদ্ধারযোগ্য হলে paymentOptions ক্ষেত্রে PaymentOptions ফেরত দিন।
    • ঐচ্ছিকভাবে, additionalPaymentOptions অন্তর্ভুক্ত করুন যদি অন্যান্য অর্থপ্রদানের বিকল্পগুলি উপলব্ধ থাকে এবং সমস্ত ত্রুটি পুনরুদ্ধারযোগ্য হয়৷
  6. যদি কোন বৈধতা ত্রুটি না থাকে, চেকআউট রেসপন্স অবজেক্টে proposedOrder , paymentOptions ফেরত দিন। ঐচ্ছিকভাবে, additionalPaymentOptions অন্তর্ভুক্ত করুন যদি অন্য অর্থপ্রদানের বিকল্পগুলি উপলব্ধ থাকে।