এই নির্দেশিকা আপনাকে একটি অ্যাকশন প্রোজেক্ট ডেভেলপ করার প্রসেসের মাধ্যমে নিয়ে যায় যা রিজার্ভেশন করার জন্য Orders API ব্যবহার করে।
ট্রানজ্যাকশন ফ্লো
আপনার অ্যাকশন প্রোজেক্ট রিজার্ভেশন ম্যানেজ করার সময়, এটি নিম্নলিখিত ফ্লো ব্যবহার করে:
- ট্রানজ্যাকশন সংক্রান্ত প্রয়োজনীয়তা যাচাই করা (ঐচ্ছিক) - কথোপকথনের শুরুতে ট্রানজ্যাকশন সংক্রান্ত প্রয়োজনীয়তা যাচাই করার হেল্পার ব্যবহার করে নিশ্চিত করুন যে ব্যবহারকারী ট্রানজ্যাকশন করতে পারবেন।
- অর্ডার তৈরি করা - ব্যবহারকারীকে "কার্ট অ্যাসেম্বলি"র মাধ্যমে নিয়ে যান যেখানে তিনি নিজের রিজার্ভেশনের বিবরণ তৈরি করেন।
- অর্ডার প্রস্তাব করুন - "কার্ট" সম্পূর্ণ হয়ে গেলে, ব্যবহারকারীকে রিজার্ভেশন "অর্ডার" প্রস্তাব করুন, যাতে তিনি সেটি সঠিক কিনা তা কনফার্ম করতে পারেন। রিজার্ভেশন কনফার্ম করা হলে, আপনি রিজার্ভেশনের বিবরণ সহ একটি উত্তর পাবেন।
- অর্ডার চূড়ান্ত করুন এবং রসিদ পাঠান - অর্ডার কনফার্ম হয়ে গেলে, আপনার রিজার্ভেশন সিস্টেম আপডেট করুন এবং ব্যবহারকারীকে রসিদ পাঠান।
- অর্ডার সংক্রান্ত আপডেট পাঠান - রিজার্ভেশনের লাইফস্প্যান চলাকালীন, Orders API-তে PATCH অনুরোধ পাঠিয়ে ব্যবহারকারীকে রিজার্ভেশন স্ট্যাটাস সংক্রান্ত আপডেট দিন।
বিধিনিষেধ ও পর্যালোচনা সংক্রান্ত নির্দেশিকা
মনে রাখবেন যে ট্রানজ্যাকশন এবং অর্ডার API ব্যবহার করে এমন অ্যাকশনের ক্ষেত্রে অতিরিক্ত নীতি প্রযোজ্য। ট্রানজ্যাকশন সহ অ্যাকশন পর্যালোচনা করতে আমাদের ছয় সপ্তাহ পর্যন্ত সময় লাগতে পারে, তাই আপনার রিলিজ শিডিউল প্ল্যান করার সময় সেই সময়টি বিবেচনা করুন। পর্যালোচনা করার প্রসেস সহজ করতে, পর্যালোচনার জন্য আপনার অ্যাকশন জমা দেওয়ার আগে ট্রানজ্যাকশনের জন্য নীতি ও নির্দেশিকা মেনে চলছেন কিনা তা নিশ্চিত করুন।
আপনি শুধুমাত্র নিম্নলিখিত দেশগুলিতে Orders API ব্যবহার করে এমন অ্যাকশন ডিপ্লয় করতে পারবেন:
|
অস্ট্রেলিয়া ব্রাজিল কানাডা ইন্দোনেশিয়া |
জাপান মেক্সিকো কাতার রাশিয়া |
সিঙ্গাপুর সুইজারল্যান্ড থাইল্যান্ড তুরস্ক যুক্তরাজ্য মার্কিন যুক্তরাষ্ট্র |
আপনার প্রোজেক্ট তৈরি করুন
ট্রানজ্যাকশন সংক্রান্ত কথোপকথনের বিস্তারিত উদাহরণের জন্য, আমাদের Node.js-এ ট্রানজ্যাকশন স্যাম্পেল দেখুন।
সেট-আপ করুন
আপনার অ্যাকশন তৈরি করার সময়, আপনি যে ট্রানজ্যাকশন করতে চান তা অ্যাকশন কনসোলে উল্লেখ করতে হবে।
আপনার প্রোজেক্ট ও ফুলফিলমেন্ট সেট-আপ করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
- নতুন প্রোজেক্ট তৈরি করুন অথবা আগে থেকে থাকা প্রোজেক্ট ইমপোর্ট করুন।
- ডিপ্লয় করুন > ডিরেক্টরি তথ্য বিকল্পে নেভিগেট করুন।
অতিরিক্ত তথ্য > ট্রানজ্যাকশন > "আপনার অ্যাকশন কি ভৌত প্রোডাক্টের ট্রানজ্যাকশন করার জন্য Transactions API ব্যবহার করে?" বিকল্পের পাশে থাকা বক্সে টিকচিহ্ন দিন।

ট্রানজ্যাকশন সংক্রান্ত প্রয়োজনীয়তা যাচাই করুন (ঐচ্ছিক)
ব্যবহারকারী রিজার্ভেশন সেট-আপ করতে চান বলে জানানোর সাথে সাথেই, তিনি রিজার্ভেশনের অনুরোধ করতে পারবেন কিনা তা আপনাকে চেক করতে হবে। যেমন, চালু করার সময় আপনার অ্যাকশন হয়ত জিজ্ঞাসা করতে পারে, "আপনি কি সিট রিজার্ভ করতে চান?" ব্যবহারকারী "হ্যাঁ" বললে, তিনি যাতে ট্রানজ্যাকশন চালিয়ে যেতে পারেন তা নিশ্চিত করুন এবং ট্রানজ্যাকশন চালিয়ে যাওয়ার ক্ষেত্রে বাধা সৃষ্টি করছে এমন কোনও সেটিংস থাকলে তা ঠিক করার সুযোগ দিন। এটি করতে, আপনাকে এমন একটি দৃশ্যে ট্রানজিশন করতে হবে যা ট্রানজ্যাকশনের প্রয়োজনীয়তা চেক করে।
ট্রানজ্যাকশন সংক্রান্ত প্রয়োজনীয়তা চেক করার দৃশ্য তৈরি করুন
- দৃশ্য ট্যাব থেকে,
TransactionRequirementsCheckনাম দিয়ে নতুন দৃশ্য যোগ করুন। - স্লট পূরণ বিকল্পের মধ্যে, নতুন স্লট যোগ করতে + আইকনে ক্লিক করুন।
- ধরন বেছে নিন বিকল্পের মধ্যে, স্লটের ধরন হিসেবে
actions.type.TransactionRequirementsCheckResultবেছে নিন। - স্লটের নাম ফিল্ডে, স্লটের নাম
TransactionRequirementsCheckদিন। - স্লট ভ্যালু রাইটব্যাক কাস্টমাইজ করুন চেকবক্স চালু করুন (ডিফল্ট হিসেবে চালু করা থাকে)।
সেভ করুন বিকল্পে ক্লিক করুন।

ট্রানজ্যাকশন সংক্রান্ত প্রয়োজনীয়তা চেক করার ফলে নিম্নলিখিত ফলাফলগুলির মধ্যে একটি পাওয়া যায়:
- প্রয়োজনীয়তা পূরণ করা হলে, সেশন প্যারামিটার সাফল্যের শর্তে সেট করা হয় এবং আপনি ব্যবহারকারীর অর্ডার তৈরি করার কাজ চালিয়ে যেতে পারেন।
- এক বা একাধিক প্রয়োজনীয়তা পূরণ করা না গেলে, সেশন প্যারামিটার
ব্যর্থতার শর্ত সহ সেট করা হয়। এই ক্ষেত্রে, আপনাকে কথোপকথনটি ট্রানজ্যাকশন সংক্রান্ত অভিজ্ঞতা থেকে
অন্য দিকে ঘুরিয়ে দিতে হবে অথবা কথোপকথনটি শেষ করতে হবে।
- ব্যর্থতার কারণ হওয়া কোনও সমস্যা যদি ব্যবহারকারী সমাধান করতে পারেন, তাহলে তাকে ডিভাইসে সেই সমস্যা সমাধান করার জন্য প্রম্পট করা হবে। যদি কথোপকথনটি শুধুমাত্র ভয়েস সারফেসে হয়, তাহলে ব্যবহারকারীর ফোনে একটি হ্যান্ডঅফ শুরু করা হবে।
ট্রানজ্যাকশন সংক্রান্ত প্রয়োজনীয়তা চেক করার ফলাফল ম্যানেজ করুন
- দৃশ্য ট্যাব থেকে, আপনার নতুন তৈরি করা
TransactionRequirementsCheckদৃশ্য বেছে নিন। - শর্ত বিকল্পের অধীনে, নতুন শর্ত যোগ করতে + আইকনে ক্লিক করুন।
টেক্সট ফিল্ডে, সাফল্যের শর্ত চেক করার জন্য নিম্নলিখিত শর্ত সিনট্যাক্স লিখুন:
scene.slots.status == "FINAL" && session.params.TransactionRequirementsCheck.resultType == "CAN_TRANSACT"আপনি এইমাত্র যে শর্ত যোগ করেছেন সেটির উপর কার্সর নিয়ে যান এবং
if scene.slots.status == "FINAL"-এর আগে এটি প্লেস করতে উপরের দিকে দেখানো তীরচিহ্নে ক্লিক করুন।প্রম্পট পাঠান বিকল্প চালু করুন এবং ব্যবহারকারীকে জানানোর জন্য একটি সহজ প্রম্পট প্রদান করুন যে তারা ট্রানজ্যাকশন করার জন্য প্রস্তুত:
candidates: - first_simple: variants: - speech: >- Looks like you're good to go!.ট্রানজিশন বিকল্পের অধীনে অন্য একটি দৃশ্য বেছে নিন, যাতে ব্যবহারকারী কথোপকথন চালিয়ে যেতে এবং ট্রানজ্যাকশন করতে পারেন।

শর্ত
else if scene.slots.status == "FINAL"বেছে নিন।প্রম্পট পাঠান বিকল্প চালু করুন এবং ব্যবহারকারীকে জানানোর জন্য একটি সহজ প্রম্পট প্রদান করুন যে তিনি ট্রানজ্যাকশন করতে পারছেন না:
candidates: - first_simple: variants: - speech: Transaction requirements check failed.ট্রানজিশন বিকল্পের অধীনে, কোনও ব্যবহারকারী ট্রানজ্যাকশন করতে না পারলে, কথোপকথন শেষ করতে কথোপকথন শেষ করুন বিকল্প বেছে নিন।

অর্ডার তৈরি করুন
ব্যবহারকারীর প্রয়োজনীয় তথ্য পাওয়ার পরে, "কার্ট অ্যাসেম্বলি" অভিজ্ঞতা তৈরি করুন যা ব্যবহারকারীকে তার রিজার্ভেশন তৈরি করতে সাহায্য করে। প্রতিটি Action-এর জন্য তাদের পরিষেবার সাথে মানানসই কার্ট অ্যাসেম্বলি ফ্লো সামান্য আলাদা হবে।
একটি সাধারণ কার্ট অ্যাসেম্বলি অভিজ্ঞতায়, ব্যবহারকারী তার রিজার্ভেশনে যোগ করার জন্য তালিকা থেকে বিকল্প বেছে নেন, যদিও আপনি ব্যবহারকারীর অভিজ্ঞতা সহজ করার জন্য কথোপকথন ডিজাইন করতে পারেন। যেমন, কার্ট অ্যাসেম্বলি অভিজ্ঞতা তৈরি করুন যা ব্যবহারকারীকে সহজ হ্যাঁ বা না প্রশ্নের মাধ্যমে মাসিক রিজার্ভেশন শিডিউল করতে দেয়। এছাড়াও, আপনি ব্যবহারকারীকে "সাজেস্ট করা" রিজার্ভেশনের ক্যারোজেল বা তালিকা কার্ড দেখাতে পারেন।
ব্যবহারকারীর বিকল্পগুলি ভিজ্যুয়ালি উপস্থাপন করতে আমরা রিচ রেসপন্স ব্যবহার করার সাজেশন দিই, তবে কথোপকথনটি এমনভাবে ডিজাইন করুন যাতে ব্যবহারকারী শুধুমাত্র তার ভয়েস ব্যবহার করে তার কার্ট তৈরি করতে পারেন। কার্ট অ্যাসেম্বলি অভিজ্ঞতার কিছু পেশাদার পদ্ধতি এবং উদাহরণের জন্য, ডিজাইন নির্দেশিকা দেখুন।
অর্ডার তৈরি করা
আপনার কথোপকথন চলাকালীন, ব্যবহারকারীর রিজার্ভেশন সংক্রান্ত বিবরণ সংগ্রহ করুন এবং তারপরে
একটি 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
};
অর্ডার প্রস্তাব করুন
আপনি রিজার্ভেশন অর্ডার তৈরি করার পরে, ব্যবহারকারীকে সেটি কনফার্ম বা বাতিল করার জন্য দেখাতে হবে। এটি করতে, আপনাকে এমন একটি দৃশ্যে ট্রানজিশন করতে হবে যা ট্রানজ্যাকশন সংক্রান্ত সিদ্ধান্ত নেয়।
ট্রানজ্যাকশন সংক্রান্ত সিদ্ধান্ত নেওয়ার দৃশ্য তৈরি করুন
- দৃশ্য ট্যাব থেকে,
TransactionDecisionনাম দিয়ে একটি নতুন দৃশ্য যোগ করুন। - স্লট পূরণ বিকল্পের মধ্যে, নতুন স্লট যোগ করতে + আইকনে ক্লিক করুন।
- ধরন বেছে নিন বিকল্পের অধীনে, স্লটের ধরন হিসেবে
actions.type.TransactionDecisionValueবেছে নিন। - স্লটের নাম ফিল্ডে, স্লটের নাম
TransactionDecisionদিন। - স্লট ভ্যালু রাইটব্যাক কাস্টমাইজ করুন চেকবক্স চালু করুন (ডিফল্ট হিসেবে চালু করা থাকে)।
- স্লট কনফিগার করুন বিকল্পের মধ্যে, ড্রপডাউন থেকে সেশন প্যারামিটার ব্যবহার করুন বিকল্প বেছে নিন।
- স্লট কনফিগার করুন বিকল্পের অধীনে,টেক্সট ফিল্ডে অর্ডার স্টোর করার জন্য ব্যবহৃত সেশন প্যারামিটারের নাম লিখুন (যেমন
$session.params.order)। সেভ করুন বিকল্পে ক্লিক করুন।

TransactionDecisionValue স্লট পূরণ করার চেষ্টায়, Assistant একটি বিল্ট-ইন অভিজ্ঞতা শুরু করে
যেখানে আপনার পাস করা Order সরাসরি "কার্ট প্রিভিউ কার্ড"-এ
রেন্ডার করা হয়। ব্যবহারকারী "রিজার্ভেশন শিডিউল করো" বলতে, ট্রানজ্যাকশন বাতিল করতে
অথবা রিজার্ভেশনের বিবরণ পরিবর্তন করার অনুরোধ করতে পারেন।
এই পর্যায়ে ব্যবহারকারী অর্ডারে পরিবর্তন করার অনুরোধও করতে পারেন। এই ক্ষেত্রে, কার্ট অ্যাসেম্বলি অভিজ্ঞতা শেষ করার পরে আপনার ফুলফিলমেন্ট অর্ডার পরিবর্তনের অনুরোধ ম্যানেজ করতে পারে কিনা তা আপনাকে নিশ্চিত করতে হবে।
ট্রানজ্যাকশন সংক্রান্ত সিদ্ধান্তের ফলাফল ম্যানেজ করুন
TransactionDecisionValue স্লট পূরণ করা হলে, ট্রানজ্যাকশন সংক্রান্ত সিদ্ধান্তে ব্যবহারকারীর উত্তর সেশন প্যারামিটারে স্টোর করা হবে। এই ভ্যালুতে নিম্নলিখিত
জিনিস আছে:
ORDER_ACCEPTED,ORDER_REJECTED,CART_CHANGE_REQUESTEDUSER_CANNOT_TRANSACT।
ট্রানজ্যাকশন সংক্রান্ত সিদ্ধান্তের ফলাফল ম্যানেজ করতে:
- দৃশ্য ট্যাব থেকে, আপনার নতুন তৈরি করা
TransactionDecisionদৃশ্য বেছে নিন। - শর্ত বিকল্পের অধীনে, নতুন শর্ত যোগ করতে + আইকনে ক্লিক করুন।
টেক্সট ফিল্ডে, সাফল্যের শর্ত চেক করার জন্য নিম্নলিখিত শর্ত সিনট্যাক্স লিখুন:
scene.slots.status == "FINAL" && session.params.TransactionDecision.transactionDecision == "ORDER_ACCEPTED"আপনি এইমাত্র যে শর্ত যোগ করেছেন তার উপরে কার্সর নিয়ে যান এবং
if scene.slots.status == "FINAL"-এর আগে এটি প্লেস করতে উপরের দিকে দেখানো তীরচিহ্নে ক্লিক করুন।প্রম্পট পাঠান বিকল্প চালু করুন এবং ব্যবহারকারীকে তার রিজার্ভেশন সম্পূর্ণ হয়েছে তা জানানোর জন্য একটি সহজ প্রম্পট প্রদান করুন:
candidates: - first_simple: variants: - speech: >- Transaction completed! Your reservation $session.params.TransactionDecision.order.merchantOrderId is all set!কথোপকথন শেষ করতে ট্রানজিশন বিকল্পের অধীনে কথোপকথন শেষ করুন বিকল্প বেছে নিন।

শর্ত বিকল্পের অধীনে, নতুন শর্ত যোগ করতে + আইকনে ক্লিক করুন।
ব্যর্থতার শর্ত চেক করতে, টেক্সট ফিল্ডে নিম্নলিখিত শর্তের সিনট্যাক্স লিখুন:
scene.slots.status == "FINAL" && session.params.TransactionDecision.transactionDecision == "ORDER_REJECTED"আপনি এইমাত্র যে শর্ত যোগ করেছেন তার উপরে কার্সর নিয়ে যান এবং
if scene.slots.status == "FINAL"-এর আগে এটি প্লেস করতে উপরের দিকে দেখানো তীরচিহ্নে ক্লিক করুন।প্রম্পট পাঠান বিকল্প চালু করুন এবং ব্যবহারকারীকে অর্ডার বাতিল করা হয়েছে তা জানানোর জন্য একটি সহজ প্রম্পট প্রদান করুন:
candidates: - first_simple: variants: - speech: Looks like you don't want to set up a reservation. Goodbye.কথোপকথন শেষ করতে ট্রানজিশন বিকল্পের অধীনে কথোপকথন শেষ করুন বিকল্প বেছে নিন।
শর্ত
else if scene.slots.status == "FINAL"বেছে নিন।প্রম্পট পাঠান বিকল্প চালু করুন এবং ব্যবহারকারীকে জানানোর জন্য একটি সহজ প্রম্পট প্রদান করুন যে তিনি ট্রানজ্যাকশন করতে পারছেন না:
candidates: - first_simple: variants: - speech: >- Transaction failed with status $session.params.TransactionDecision.transactionDecisionব্যবহারকারী ট্রানজ্যাকশন করতে না পারলে, কথোপকথন শেষ করতে, ট্রানজিশন বিকল্পের মধ্যে থেকে কথোপকথন শেষ করুন বিকল্প বেছে নিন।

রিজার্ভেশন চূড়ান্ত করুন এবং একটি রসিদ পাঠান
TransactionDecisionValue স্লট ORDER_ACCEPTED ফলাফল রিটার্ন করলে,
রিজার্ভেশন শিডিউল করার জন্য প্রয়োজনীয় প্রসেসিং আপনাকে অবিলম্বে সম্পূর্ণ করতে হবে (যেমন, আপনার নিজস্ব ডেটাবেসে এটি সেভ করা)।
কথোপকথন চালিয়ে যেতে সহজ উত্তর পাঠান। ব্যবহারকারী আপনার উত্তরের সাথে একটি "আড়াল করা রসিদ কার্ড" পাবেন।
অর্ডার সংক্রান্ত প্রাথমিক আপডেট পাঠাতে:
- দৃশ্য ট্যাব থেকে, আপনার
TransactionDecisionদৃশ্য বেছে নিন। শর্ত বিকল্পের অধীনে, সেই শর্ত বেছে নিন যা সফল ফলাফল চেক করে,
ORDER_ACCEPTED:scene.slots.status == "FINAL" && session.params.TransactionDecision.transactionDecision == "ORDER_ACCEPTED"এই শর্তের জন্য, আপনার ওয়েবহুক কল করুন বিকল্প চালু করুন এবং ইনটেন্ট হ্যান্ডলারের নাম দিন, যেমন
update_order।
আপনার ওয়েবহুক কোডে, প্রাথমিক অর্ডার আপডেট পাঠানোর জন্য একটি ইনটেন্ট হ্যান্ডলার যোগ করুন:
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' })); });
অর্ডার সংক্রান্ত আপডেট পাঠান
রিজার্ভেশনের স্ট্যাটাস তার লাইফটাইম চলাকালীন পরিবর্তিত হয়। ব্যবহারকারীকে রিজার্ভেশন অর্ডারের আপডেট পাঠান, এর জন্য Orders API-তে HTTP PATCH অনুরোধ পাঠান, যাতে অর্ডারের স্ট্যাটাস ও বিবরণ থাকে।
Orders API-তে অ্যাসিঙ্ক্রোনাস অনুরোধ সেট-আপ করুন
Orders API-তে অর্ডার আপডেট করার অনুরোধ অ্যাক্সেস টোকেনের মাধ্যমে
অনুমোদিত হয়। Orders API-তে অর্ডার আপডেট PATCH করতে, আপনার Actions Console প্রোজেক্টের সাথে যুক্ত JSON
পরিষেবা অ্যাকাউন্ট কী ডাউনলোড করুন, তারপর বিয়ারার টোকেনের জন্য পরিষেবা অ্যাকাউন্ট কী এক্সচেঞ্জ করুন যা
HTTP অনুরোধের Authorization হেডারে পাস করা যেতে পারে।
আপনার পরিষেবা অ্যাকাউন্টের 'কী' ফিরিয়ে আনতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
- Google Cloud কনসোলে, মেনু ☰ > API ও পরিষেবা > ক্রেডেনশিয়াল > ক্রেডেনশিয়াল তৈরি করুন > পরিষেবা অ্যাকাউন্ট 'কী' বিকল্পে যান।
- সার্ভিস অ্যাকাউন্ট বিকল্পের মধ্যে, নতুন সার্ভিস অ্যাকাউন্ট বিকল্প বেছে নিন।
- পরিষেবা অ্যাকাউন্ট
service-account-এ সেট করুন। - ভূমিকা প্রোজেক্ট > মালিক হিসেবে সেট করুন।
- কী-এর ধরন JSON হিসেবে সেট করুন।
- তৈরি করুন বিকল্প বেছে নিন।
- আপনার লোকাল মেশিনে একটি ব্যক্তিগত JSON পরিষেবা অ্যাকাউন্ট কী ডাউনলোড করা হবে।
আপনার অর্ডার আপডেট কোডে, Google APIs ক্লায়েন্ট লাইব্রেরি এবং "https://www.googleapis.com/auth/actions.order.developer" স্কোপ ব্যবহার করে বিয়ারার টোকেনের জন্য আপনার সার্ভিস কী এক্সচেঞ্জ করুন। আপনি API ক্লায়েন্ট লাইব্রেরির GitHub পৃষ্ঠায় ইনস্টলেশন সংক্রান্ত ধাপ ও উদাহরণ দেখতে পাবেন।
কী এক্সচেঞ্জের উদাহরণ দেখতে আমাদের Node.js স্যাম্পেল-এ
order-update.js রেফারেন্স দেখুন।
অর্ডার সংক্রান্ত আপডেট পাঠান
OAuth বিয়ারার টোকেনের জন্য আপনার পরিষেবা অ্যাকাউন্ট কী এক্সচেঞ্জ করার পরে, Orders API-তে অনুমোদিত PATCH অনুরোধ হিসেবে অর্ডার আপডেট পাঠান।
Orders API URL:
PATCH https://actions.googleapis.com/v3/orders/${orderId}
আপনার অনুরোধে নিম্নলিখিত হেডার প্রদান করুন:
"Authorization: Bearer token"-এ OAuth বিয়ারার টোকেন ব্যবহার করে আপনার পরিষেবা অ্যাকাউন্ট কী এক্সচেঞ্জ করেছেন।"Content-Type: application/json"।
PATCH অনুরোধে নিম্নলিখিত ফর্ম্যাটের 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 অর্ডার আপডেট পাঠান। প্রতিটি রিজার্ভেশনের জন্য প্রতিটি স্ট্যাটাস ভ্যালু প্রয়োজন হয় না।
আপনার প্রোজেক্ট টেস্ট করা
আপনার প্রোজেক্ট পরীক্ষা করার সময়, কোনও পেমেন্ট পদ্ধতিতে চার্জ না করেই আপনার অ্যাকশন পরীক্ষা করতে, আপনি অ্যাকশন কনসোলে স্যান্ডবক্স মোড চালু করতে পারেন। স্যান্ডবক্স মোড চালু করতে, এই ধাপগুলি অনুসরণ করুন:
- Actions কনসোলে, নেভিগেশনে টেস্ট করুন বিকল্পে ক্লিক করুন।
- সেটিংস বিকল্পে ক্লিক করুন।
- ডেভেলপমেন্ট স্যান্ডবক্স বিকল্প চালু করুন।
ফিজিক্যাল ট্রানজ্যাকশনের জন্য, আপনি স্যাম্পেলে isInSandbox ফিল্ডটি true-এ সেট করতে পারেন। এই অ্যাকশনটি Actions কনসোলে স্যান্ডবক্স মোড সেটিং চালু করার
মতোই। isInSandbox ব্যবহার করে এমন কোড স্নিপেট দেখতে, অর্ডার সংক্রান্ত আপডেট পাঠান বিভাগ দেখুন।
সমস্যার সমাধান
পরীক্ষা করার সময় কোনও সমস্যা হলে, ট্রানজ্যাকশনের জন্য আমাদের সমস্যার সমাধান করার ধাপ পড়ুন।