চেকআউট কলের পরে, ব্যবহারকারী ট্যাক্স, ডেলিভারি ফি, ডিসকাউন্ট এবং আপনি ফেরত দেওয়া অন্যান্য চার্জ সহ আপডেট করা কার্ট পর্যালোচনা করে। ব্যবহারকারী অর্ডারটি নিশ্চিত করে এবং জমা দেয় এবং Google আপনার পূরণের শেষ পয়েন্ট একটি JSON অনুরোধ পাঠায় যাতে অর্ডারের তথ্য রয়েছে। আপনার ওয়েব পরিষেবাকে অবশ্যই এই অর্ডারটি গ্রহণ করতে হবে, এটি প্রক্রিয়া করতে হবে এবং অর্ডারের অবস্থার সাথে Google এর কাছে প্রতিক্রিয়া জানাতে হবে৷
এই বিভাগটি Google দ্বারা পাঠানো অর্ডার অনুরোধের বার্তা বিন্যাসকে বর্ণনা করে, যাকে বলা হয় SubmitOrderRequestMessage
, এবং আপনাকে যে প্রতিক্রিয়া বার্তাটি প্রদান করতে হবে, তাকে SubmitOrderResponseMessage
বলা হয়। অর্ডার পূরণের জীবনচক্র সম্পর্কে আরও তথ্যের জন্য, পূর্ণতা ওভারভিউ দেখুন।
আদেশ পূর্ণতা বাস্তবায়ন
অর্ডারিং এন্ড-টু-এন্ডের সাথে কাজ করার জন্য আপনি যে অর্ডারিং এন্ড-টু-এন্ড ওয়েব পরিষেবা তৈরি করেন তাতে অবশ্যই Google থেকে অর্ডার বার্তা পাওয়ার জন্য একটি URL এন্ডপয়েন্ট অন্তর্ভুক্ত থাকতে হবে। অর্ডার প্রক্রিয়াকরণের জন্য, আপনার ওয়েব পরিষেবা Google থেকে পোস্ট অনুরোধ হিসাবে JSON ফর্ম্যাটে একটি SubmitOrderRequestMessage
পায়। এই অনুরোধে ট্যাক্স, ফি এবং অর্থপ্রদানের তথ্য সহ একটি গ্রাহকের অর্ডার রয়েছে। সাবমিট অর্ডার রিকোয়েস্ট পাওয়ার পর, আপনার ওয়েব সার্ভিসকে অবশ্যই নিম্নলিখিতগুলি করতে হবে:
- লেনদেনের যোগ্যতা পরীক্ষা করুন, যেমন কার্ড যাচাই বা জালিয়াতি সনাক্তকরণ।
- আপনার সিস্টেমে একটি অর্ডার তৈরি করুন।
- পেমেন্ট পদ্ধতি অনুমোদন করুন এবং প্রযোজ্য হলে আপনার পেমেন্ট প্রসেসরের চার্জ API কল করুন।
- অর্ডারের উপযুক্ত অবস্থার সাথে সাড়া দিন:
CREATED
,CONFIRMED
বাREJECTED
।
অর্ডার প্রসেস করার পরে, আপনার পূর্ণতা কোডটি অবশ্যই একটি SubmitOrderResponseMessage
JSON বার্তার আকারে Google-এ একটি প্রতিক্রিয়া প্রদান করবে।
অর্ডারিং এন্ড-টু-এন্ড পরিপূর্ণতা ওয়েব পরিষেবা বাস্তবায়নের প্রয়োজনীয়তা সম্পর্কে আরও তথ্যের জন্য, পূরণ ওভারভিউ দেখুন।
অর্ডার অনুরোধ বার্তা
যখন একজন গ্রাহক অর্ডার করার এন্ড-টু-এন্ড ফ্লো চলাকালীন একটি অর্ডার দিতে বেছে নেন, তখন Google আপনার ওয়েব পরিষেবাতে একটি অনুরোধ পাঠায় JSON মেসেজ সহ SubmitOrderRequestMessage
যাতে নিম্নলিখিত ডেটা থাকে:
- অভিপ্রায়: প্রতিটি জমা অর্ডার অনুরোধের বডির
inputs[0].intent
ফিল্ডেactions.intent.TRANSACTION_DECISION
স্ট্রিং মান থাকে। - অর্ডার:
inputs[0].arguments[0].transactionDecisionValue
ফিল্ডে একটি সাবমিট অর্ডার রিকোয়েস্টের একটিOrder
অবজেক্ট থাকে যা পেমেন্টের বিশদ সহ গ্রাহকের অর্ডার দেওয়ার প্রতিনিধিত্ব করে। - স্যান্ডবক্স পতাকা: একটি জমা অর্ডার অনুরোধের
isInSandbox
ক্ষেত্র নির্দেশ করে যে লেনদেন স্যান্ডবক্স অর্থপ্রদান ব্যবহার করে কিনা।
অর্ডার অনুরোধের উদাহরণ
নিম্নলিখিত একটি উদাহরণ SubmitOrderRequestMessage
:
JSON
{ "user": {}, "conversation": { "conversationId": "CTKbKfUlHCyDEdcz_5PBJTtf" }, "inputs": [ { "intent": "actions.intent.TRANSACTION_DECISION", "arguments": [ { "transactionDecisionValue": { "order": { "finalOrder": { "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" ] } }, "contact": { "displayName": "Hab Sy", "email": "hab9878.sy@gmail.com", "phoneNumber": "+61000000000", "firstName": "Hab", "lastName": "Sy" } } }, "otherItems": [ { "name": "Delivery fee", "type": "DELIVERY", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "AUD", "units": "3", "nanos": 500000000 } } }, { "name": "Subtotal", "type": "SUBTOTAL", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "AUD", "units": "39", "nanos": 600000000 } } } ], "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "AUD", "units": "43", "nanos": 100000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension" } }, "googleOrderId": "01412971004192156198", "orderDate": "2020-10-22T09:02:06.173Z", "paymentInfo": { "displayName": "Pay when you get your food", "paymentType": "ON_FULFILLMENT" } } } } ] } ], "directActionOnly": true, "isInSandbox": true }
অর্ডার প্রতিক্রিয়া বার্তা
একটি অনুরোধ পাওয়ার পরে, আপনার অর্ডারিং এন্ড-টু-এন্ড ওয়েব পরিষেবা অনুরোধটি প্রক্রিয়া করে এবং একটি SubmitOrderResponseMessage
ফেরত পাঠায় যাতে নিম্নলিখিত ডেটা অন্তর্ভুক্ত থাকে:
-
OrderUpdate
: অর্ডারের অবস্থা সম্বলিত একটি বস্তু, এবং ব্যবহারকারীর কাছে উপলব্ধ যেকোনো পোস্ট-অর্ডার অ্যাকশন, যেমন সহায়তার সাথে যোগাযোগ করা এবং অর্ডারের বিবরণ দেখা, যা আপনিfinalResponse.richResponse.items[0].structuredResponse.orderUpdate
ফিল্ডে সংজ্ঞায়িত করেছেন প্রতিক্রিয়া
অর্ডার আপডেট ক্ষেত্র
যখন আপনার ওয়েব পরিষেবা একটি SubmitOrderResponseMessage
পাঠায়, এতে একটি OrderUpdate
ক্ষেত্র থাকে যাতে নিম্নলিখিত ক্ষেত্রগুলি অন্তর্ভুক্ত থাকে:
-
actionOrderId
: অর্ডারের অনন্য আইডি, যা আপনার সিস্টেমে অর্ডারটিকে অনন্যভাবে সনাক্ত করতে এবং পরবর্তী অর্ডার আপডেট পাঠানোর সময় এটি উল্লেখ করতে ব্যবহৃত হয়। -
orderState
: অর্ডারের অবস্থার প্রতিনিধিত্বকারী একটিOrderState
বস্তু। -
orderManagementActions
: ব্যবহারকারীর জন্য উপলব্ধ পোস্ট-অর্ডার অ্যাকশন, যেমন গ্রাহক সহায়তার সাথে যোগাযোগ করা এবং অর্ডারের বিবরণ দেখা। -
totalPrice
: অর্ডারের মোট মূল্য। এটি ঐচ্ছিক। অর্ডার জমা দেওয়ার পর অর্ডারের মোট মূল্য পরিবর্তন হলেই পাঠান।
একটি আদেশ নিম্নলিখিত রাজ্যগুলির মধ্যে একটি হতে পারে:
-
CREATED
: আপনার পূর্ণতা শেষ পয়েন্ট অর্ডারটি সফলভাবে প্রক্রিয়া করেছে, কিন্তু প্রদানকারী এখনও অর্ডারটি নিশ্চিত করেনি। -
CONFIRMED
: আপনার পূর্ণতা শেষ পয়েন্ট সফলভাবে অর্ডার প্রক্রিয়া করেছে, এবং প্রদানকারী অর্ডার নিশ্চিত করেছে. -
REJECTED
: একটি সমস্যা ছিল এবং আপনার পূর্ণতা শেষ পয়েন্ট অর্ডারটি তৈরি বা নিশ্চিত করতে পারেনি, যার মধ্যে অর্থপ্রদানের সমস্যা থাকতে পারে।
আপনি যদি একটি REJECTED
অবস্থায় একটি আদেশ সেট করেন, তাহলে OrderUpdate
এর rejectionInfo
ক্ষেত্রে কারণটি উল্লেখ করুন। FoodOrderUpdateExtension.FoodOrderErrors
মানগুলি UNKNOWN
প্রকারের rejectionInfo
সাথে ব্যবহার করুন এবং একটি বিবরণ প্রদান করুন।
আদেশ প্রতিক্রিয়া উদাহরণ
নিম্নলিখিত একটি উদাহরণ SubmitOrderResponseMessage
:
JSON
{ "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "orderUpdate": { "actionOrderId": "1603357328160", "orderState": { "state": "CONFIRMED", "label": "Pending" }, "updateTime": "2020-10-22T02:02:08-07:00", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Call customer service", "openUrlAction": { "url": "tel:+61234561000" } } }, { "type": "VIEW_DETAILS", "button": { "title": "View order details", "openUrlAction": { "url": "https://partner.com/view/orderstatus" } } } ], "receipt": { "userVisibleOrderId": "BXZ-1603357328" } } } } ] } } }
অসফল অনুরোধ
যদি একটি জমা দেওয়ার অনুরোধ অসফল হয়, SubmitOrderResponseMessage
OrderState সেট করতে হবে। REJECTED
state
প্রতিক্রিয়াটিতে অবশ্যই RejectionInfo অন্তর্ভুক্ত থাকতে হবে, যাতে ত্রুটির ধরন বর্ণনা করার জন্য একটি RejectionType
অবজেক্ট থাকে।
অসফল প্রতিক্রিয়া উদাহরণ
JSON
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "REJECTED", "label": "Order rejected" }, "updateTime": "2017-05-10T02:30:00.000Z", "rejectionInfo": { "type": "PAYMENT_DECLINED", "reason": "Insufficient funds" }, "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "VIEW_DETAILS", "button": { "title": "View order", "openUrlAction": { "url": "https://orderview.partner.com?orderid=sample_action_order_id" } } } ] } } } ] } } }
আদেশ বাস্তবায়ন জমা দিন
সাবমিট অর্ডার API বাস্তবায়ন করার সময় নিম্নলিখিত পদক্ষেপগুলি গ্রহণ করা উচিত।
বৈধতা
- চেকআউট সেট আপে সম্পন্ন পরিষেবা, কার্ট এবং প্রচারের বৈধতা সম্পাদন করুন৷
- প্রয়োজনে নিম্নোক্ত প্রকারের একটি দিয়ে প্রত্যাখ্যান তথ্য ফেরত দিন:
প্রত্যাখ্যান ইনফো টাইপ | কেস ব্যবহার করুন |
---|---|
UNAVAILABLE_SLOT | পূরণের সময় আর বৈধ নয়। |
PROMO_USER_INELIGIBLE | ব্যবহারকারীর জন্য প্রচারের যোগ্যতা যাচাই করার অনুরোধে যোগাযোগ অবজেক্টে ইমেলটি ব্যবহার করুন। পদোন্নতির সাথে সাবমিট অর্ডার বাস্তবায়নের উদাহরণ দেখুন। |
INELIGIBLE |
|
PAYMENT_DECLINED | পেমেন্ট প্রক্রিয়া করা যাবে না. উদাহরণস্বরূপ, এটি অপর্যাপ্ত তহবিলের কারণে হতে পারে। |
UNKNOWN | অন্য কোনো বৈধতা ত্রুটির জন্য. |
অর্ডার স্টেট সেট করুন। বৈধতা ত্রুটির সম্মুখীন হলে state
REJECTED
। ঐচ্ছিকভাবে, আপনি FoodOrderUpdateExtension ব্যবহার করে একটি নির্দিষ্ট প্রত্যাখ্যানের কারণ প্রদান করতে পারেন। foodOrderErrors
। সাবমিট অর্ডার ভ্যালিডেশনে উদাহরণ দেখুন।
পেমেন্ট প্রক্রিয়া
- কার্টের মূল্য, ফি, ডিসকাউন্ট, ট্যাক্স এবং গ্র্যাচুইটি যোগ করে
totalPrice
গণনা করুন। CheckoutResponseMessage- এ প্রত্যাবর্তিতtotalPrice
এবং গ্র্যাচুইটির পরিমাণের পরিবর্তন যদি ব্যবহারকারীর দ্বারা গ্র্যাচুইটি পরিবর্তন করা যায় তাহলেtotalPrice
একই হওয়া উচিত। আরো বিস্তারিত জানার জন্য সাবমিট অর্ডার চলাকালীন মূল্য পরিবর্তন দেখুন. - আপনি
CREATED
বাCONFIRMED
অর্ডার স্টেট সহ একটি প্রতিক্রিয়া ফেরত দিলে অর্ডার এবং পেমেন্ট প্রক্রিয়া করুন। - জেনারেট ক্লায়েন্ট লাইব্রেরিতে বর্ণিত স্কিমা থেকে তৈরি জেনারেট টাইপ ব্যবহার করে একটি বৈধ প্রতিক্রিয়া বিন্যাস ফেরত দেওয়া হয়েছে তা নিশ্চিত করুন।
- GoogleProvidedPaymentInstrument ব্যবহার করুন। অর্থপ্রদান প্রক্রিয়া করার জন্য
instrumentToken
। পেমেন্ট প্রসেস করা না গেলেPAYMENT_DECLINED
টাইপ সহ প্রত্যাখ্যান তথ্য ফেরত দিন। আরও বিস্তারিত জানার জন্য প্রসেস পেমেন্ট দেখুন। - অর্ডারটি ইমেল বা এসএমএস দ্বারা প্রক্রিয়াকরণের পর অবিলম্বে ব্যবহারকারীকে অবহিত করুন।
প্রতিক্রিয়া ফেরত দিন
- অর্ডার স্টেট সেট করুন। কোনো ত্রুটি না থাকলে
CREATED
বাCONFIRMED
state
। - অর্ডার স্টেট সেট করুন। ত্রুটির সম্মুখীন হলে
REJECTED
state
সংশ্লিষ্ট RejectionInfoType- এর সাথে RejectionInfo অবজেক্ট অন্তর্ভুক্ত করুন। - অর্ডার আপডেট সেট করুন।
orderManagementActions
।