আপনি RCS ও Google Wallet-এর সাথে Google Messages ব্যবহার করে একটি নির্বিঘ্ন চেক-ইন প্রক্রিয়া ডিজাইন করতে পারেন: ব্যবহারকারী তার চেক-ইন সম্পন্ন করেন, বোর্ডিং পাস গ্রহণ করেন এবং Messages অ্যাপ থেকেই সরাসরি Google Wallet-এ তা যুক্ত করেন। ওয়ালেটে যুক্ত হয়ে গেলে, ফ্লাইটের বিবরণে কোনো পরিবর্তন হলে পাসটি স্বয়ংক্রিয়ভাবে আপডেট হয়ে যায়। এর ফলে ব্যবহারকারীরা সরাসরি তাদের ফোনেই একটি হালনাগাদ বোর্ডিং পাস দ্রুত পেয়ে যান।
এই ডকুমেন্টটিতে গুগল ওয়ালেটে বোর্ডিং পাস ফ্লো বাস্তবায়নের প্রযুক্তিগত ধাপগুলো বর্ণনা করা হয়েছে। এতে RBM-এর মাধ্যমে একটি মসৃণ ও কার্যকর চেক-ইন অভিজ্ঞতার জন্য ডিজাইন টিপসসহ একটি নমুনা কথোপকথনও রয়েছে।
প্রযুক্তিগত বাস্তবায়ন
গুগল ওয়ালেটে বোর্ডিং পাস ফ্লো বাস্তবায়ন করতে, আপনাকে গুগল ওয়ালেট এপিআই এবং আরবিএম এপিআই নিয়ে কাজ করতে হবে।
পূর্বশর্ত
গুগল ওয়ালেট এপিআই ব্যবহার শুরু করতে, এই প্রয়োজনীয় ধাপগুলো অনুসরণ করুন:
- একটি ওয়ালেট ইস্যুকারী অ্যাকাউন্টের জন্য সাইন আপ করুন , যাতে আপনি গুগল ওয়ালেটের জন্য পাস তৈরি ও বিতরণ করতে পারেন।
- আপনার যদি আগে থেকে কোনো গুগল ক্লাউড (GCP) প্রজেক্ট না থাকে, তাহলে একটি তৈরি করুন।
- গুগল ওয়ালেট এপিআই সক্রিয় করুন।
- একটি সার্ভিস অ্যাকাউন্ট ও কী তৈরি করুন, যাতে আপনি গুগল ওয়ালেট এপিআই কল করতে পারেন।
- Google Pay এবং Wallet Console-এ পরিষেবা অ্যাকাউন্টটি অনুমোদন করুন।
- নতুন বোর্ডিং ক্লাস তৈরি করতে বোর্ডিং পাস টেমপ্লেটটি ব্যবহার করুন।
গুগল ওয়ালেট এপিআই
বোর্ডিং পাস তৈরি করতে এবং RBM-এর জন্য একটি 'অ্যাড টু গুগল ওয়ালেট' ইউআরএল জেনারেট করতে, এই ধাপগুলো অনুসরণ করুন:
- প্রয়োজনীয় প্রমাণীকরণ ও অনুমোদন সম্পন্ন করুন।
- একটি Passes অবজেক্ট তৈরি করুন।
- একটি স্বাক্ষরিত JSON ওয়েব টোকেন (JWT) সংগ্রহ করুন। একটি এনকোডেড JWT-এর সর্বোচ্চ দৈর্ঘ্য হলো ২০৪৮ অক্ষর।
- গুগল ওয়ালেটে যোগ করার জন্য একটি ইউআরএল তৈরি করতে JWT ব্যবহার করুন।
আরবিএম এপিআই
RBM থেকে 'Add to Google Wallet' সাজেশন পাঠাতে, একটি 'Open URL' অ্যাকশন পাঠান। মেসেজ পেলোডে নিম্নলিখিত বিষয়গুলো অন্তর্ভুক্ত করুন:
-
textজন্য, 'Add to Google Wallet' লিখুন। -
urlজন্য, 'Add to Google Wallet' ইউআরএলটি প্রবেশ করান।
সাজেশন লেবেলে গুগল ওয়ালেট আইকনটি স্বয়ংক্রিয়ভাবে দেখানো হবে।

কথোপকথন ডিজাইন
এই নমুনাটি ব্যবহারকারীদের একটি সম্পূর্ণ চেক-ইন প্রক্রিয়ার মধ্য দিয়ে পথ দেখানোর জন্য কথোপকথনের অনন্য শক্তিকে ব্যবহার করে। এটি দেখায় যে কীভাবে আপনি স্বাভাবিক কথোপকথন এবং ওয়ান-ট্যাপ সাজেশন ও রিচ কার্ডের মতো উন্নত বৈশিষ্ট্য ব্যবহার করে ব্যবহারকারীদের তাদের লক্ষ্যে পৌঁছাতে সাহায্য করতে পারেন। এক্ষেত্রে তাদের লক্ষ্যগুলো হলো: (১) আমার ফ্লাইট অভিজ্ঞতা নিজের মতো করে সাজানো, (২) আমার বোর্ডিং পাস গ্রহণ করা, এবং (৩) বিমানবন্দরে দ্রুত ব্যবহারের জন্য এটি গুগল ওয়ালেটে যোগ করা।
এরপরে কথোপকথনটির একটি সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে। এর পরে ডিজাইন সংক্রান্ত কিছু পরামর্শ এবং কার্যপ্রবাহের একটি ধাপে ধাপে বিশ্লেষণ রয়েছে। আপনার এজেন্টের জন্য অনুরূপ ডিজাইন বাস্তবায়ন করতে, ধাপগুলোর পরে দেওয়া কোডের নমুনাগুলো দেখুন।

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

কোডের নমুনা
const suggestions = [ { reply: { text: '⚡ Check in', postbackData: 'checkIn', }, }, { reply: { text: '⏰ Remind me later', postbackData: 'remindMe', }, }, { reply: { text: '✈️ View my flight details', postbackData: 'flightDetails', }, }, { reply: { text: '🔀 Change my flight', postbackData: 'flightChange', }, }, ]; const params = { messageText: 'Check-in for your flight', messageDescription: '👏 Happy morning, Jo! Check-in is now open for your flight from London to Mumbai on ' + getFlightTime() + ' at 2:00PM. What would you like to do? ', msisdn: phoneNumber, suggestions: suggestions, imageUrl: getImageUrl('fly.png'), height: 'MEDIUM', }; rbmApiHelper.sendRichCard(params);
ব্যবহারকারী চেক ইন করার জন্য একটি প্রস্তাবিত উত্তরে ট্যাপ করেন।

এজেন্ট চেক-ইন প্রক্রিয়া সম্পর্কে প্রত্যাশা নির্ধারণ করে দেন।

কোডের নমুনা
const params = { messageText: "OK, great. It's just 3 simple steps to check in. Here's the first step to get you onboard:", msisdn: msisdn, }; let self = this; rbmApiHelper.sendMessage(params, function (response, err) { self.sendPolicyImage(msisdn); });
এজেন্ট ব্যবহারকারীকে নিরাপত্তা নীতিতে সম্মতি দিতে অনুরোধ করে।

কোডের নমুনা
const suggestions = [ { reply: { text: 'Yes, I agree', postbackData: 'policy_agree', }, }, { reply: { text: "No, I don't agree", postbackData: 'policy_nack', }, }, ]; const params = { messageText: 'Baggage safety policy', messageDescription: 'To help us ensure a safe flight, please review our safety policy and let us know you agree', msisdn: msisdn, suggestions: suggestions, imageUrl: getImageUrl('policyImage.png'), height: 'MEDIUM', orientation: 'HORIZONTAL', thumbnailImageAlignment: 'LEFT', }; rbmApiHelper.sendRichCard(params);
ব্যবহারকারী সম্মতি জানাতে একটি প্রস্তাবিত উত্তরে ট্যাপ করেন।

এজেন্ট ব্যবহারকারীকে ধন্যবাদ জানায় এবং পরবর্তী ধাপটি সম্পর্কে জানায়।

কোডের নমুনা
const params = { messageText: "Thank you - A safe passenger is a happy passenger! Here's the next step:", msisdn: msisdn, }; let self = this; rbmApiHelper.sendMessage(params, function (response, err) { self.sendPlan(msisdn); });
এজেন্ট ব্যবহারকারীকে একটি আসন বেছে নিতে বলে।

কোডের নমুনা
const suggestions = [ { reply: { text: 'View the seat map', postbackData: 'view_seat_map', }, }, ]; const outerSuggestions = [ { reply: { text: '17A', postbackData: 'seat_17A', }, }, { reply: { text: '17C', postbackData: 'seat_17C', }, }, { reply: { text: '18A', postbackData: 'seat_18A', }, }, { reply: { text: 'Show me more', postbackData: 'more', }, }, ]; const params = { messageText: 'Choose your seat', messageDescription: "It's time to sit back and get comfy! 💺 We've recommended some seats based on your last flight. Choose the one you want, or let us know your preferred seat by typing the number.", msisdn: msisdn, imageUrl: getImageUrl('seatMap.png'), height: 'TALL', orientation: 'VERTICAL', outerSuggestions: outerSuggestions }; rbmApiHelper.sendRichCard(params);
ব্যবহারকারী তার নির্বাচিত আসনের জন্য একটি প্রস্তাবিত উত্তরে ট্যাপ করেন।

এজেন্ট ব্যবহারকারীর পছন্দ নিশ্চিত করে।

কোডের নমুনা
this.seatmap[msisdn] = seat; const params = { messageText: `Seat ${seat}, you got it`, msisdn: msisdn, }; let self = this; rbmApiHelper.sendMessage(params, function(res) { self.sendFoodOptions(msisdn); });
এজেন্ট ব্যবহারকারীকে তার উড়োজাহাজের খাবার বেছে নিতে বলেন।

কোডের নমুনা
const params = { messageText: `Now let's talk food 😋 You can pre-order your in-flight meal. Would you be happy with a vegetarian entree or a chicken entree?`, msisdn: msisdn, }; let self = this; rbmApiHelper.sendMessage(params, function(res) { self.sendFoodDetails(msisdn); });
এজেন্ট খাবারের বিকল্পগুলো দেখায়।

কোডের নমুনা
const cardContents = [ { title: 'Panzanella salad (v)', description: 'Ingredients: bread, lettuce, onions, tomatoes, olive oil', suggestions: [ { reply: { text: 'Choose vegetarian', postbackData: 'veggie', }, }, ], media: { height: 'MEDIUM', contentInfo: { fileUrl: getImageUrl('salad.jpg'), }, }, }, { title: 'Grilled chicken with greens', description: 'Ingredients: chicken, potatoes, peppers, olive oil', suggestions: [ { reply: { text: 'Choose chicken', postbackData: 'chicken', }, }, ], media: { height: 'MEDIUM', contentInfo: { fileUrl: getImageUrl('chicken.png'), }, }, }, ]; const params = { msisdn: msisdn, cardContents: cardContents, }; rbmApiHelper.sendCarouselCard(params);
ব্যবহারকারী তার নির্বাচিত খাবারের জন্য একটি প্রস্তাবিত উত্তরে ট্যাপ করেন।

এজেন্ট ব্যবহারকারীর পছন্দ নিশ্চিত করে।

কোডের নমুনা
const params = { messageText: `Vegetarian it is 💚`, msisdn: msisdn, }; let self = this; rbmApiHelper.sendMessage(params, function (response, err) { self.sendAskConfirmation(msisdn); });
এজেন্ট চেক-ইনের বিবরণ সংক্ষেপে তুলে ধরেন।

কোডের নমুনা
let seat = this.seatmap[msisdn]; const suggestions = [ { reply: { text: "Yes, I'm happy with that", postbackData: 'happy', }, }, { reply: { text: 'Change my seat', postbackData: 'change_seat', }, }, { reply: { text: 'Change my meal', postbackData: 'change_meal', }, }, ]; const params = { messageText: "Here's what we've noted down: You've opted for seat " + seat + " and a vegetarian meal. Please confirm your choices.", msisdn: msisdn, suggestions: suggestions }; rbmApiHelper.sendMessage(params);
ব্যবহারকারী চেক-ইন বিবরণ নিশ্চিত করতে একটি প্রস্তাবিত উত্তরে ট্যাপ করেন।

এজেন্ট ঘোষণা করেন যে চেক-ইন সম্পন্ন হয়েছে।

কোডের নমুনা
const params = { messageText: "Hooray! You're now checked in for your flight ☑️ Here's your boarding pass. We're so happy to host you soon!", msisdn: msisdn, }; let self = this; rbmApiHelper.sendMessage(params, function (response, err) { self.sendWalletPass(msisdn); });
এজেন্ট ব্যবহারকারীর বোর্ডিং পাস পাঠিয়ে দেন।

কোডের নমুনা
this.walletHelper.createFlightPassUrl(this.seatmap[msisdn]).then((url) => { let suggestions = [ { action: { text: 'Add to Google Wallet', postbackData: 'addToWallet', openUrlAction: { url: url }, }, }, ]; const params = { messageText: 'HS123 LHR to BOM\nPassenger: Jo Flow', messageDescription: "We'll keep you up to date! You'll get a notification if your flight details change.", msisdn: msisdn, suggestions: suggestions, imageUrl: getImageUrl('boardingPass.png'), height: 'TALL', orientation: 'HORIZONTAL', thumbnailImageAlignment: 'LEFT', }; rbmApiHelper.sendRichCard(params); });
এই হরাইজন্টাল রিচ কার্ডটিতে থাকা ছবিটি হলো এয়ারলাইন কর্তৃক প্রদত্ত একটি সম্পূর্ণ কার্যকরী বোর্ডিং পাস। ছবিটিতে স্ক্যানযোগ্য বারকোডসহ বোর্ডিংয়ের জন্য প্রয়োজনীয় সমস্ত তথ্য প্রদর্শিত থাকা উচিত। ব্যবহারকারীরা গুগলের মেসেজেস অ্যাপ থেকে তাদের বোর্ডিং পাস দেখতে ও স্ক্যান করতে ছবিটিতে ট্যাপ করতে পারেন।
রিচ কার্ডে ‘Add to Google Wallet’ লেখা একটি সাজেশন দেখা যায়। এই সাজেশনটি একটি ‘Open URL’ অ্যাকশন চালু করে, যা Google Wallet অ্যাপটি খুলে দেয়। সেখানে ব্যবহারকারী বোর্ডিং পাসটি নিজের ওয়ালেটে যোগ করতে পারেন। (যদি ব্যবহারকারীর ডিভাইসে অ্যাপটি না থাকে, তবে তাকে এটি ইনস্টল করার জন্য অনুরোধ করা হয়।) পাসটি Google Wallet-এ যোগ করার পর, ব্যবহারকারী স্বয়ংক্রিয়ভাবে একটি ফ্লাইট রিমাইন্ডার পান এবং ফ্লাইটের বিবরণে কোনো পরিবর্তন হলে স্ট্যাটাস আপডেটও পান।
যেসব ব্যবহারকারী গুগল ওয়ালেটে তাদের পাস যোগ করেন না, তাদেরও হালনাগাদ তথ্য জানানো উচিত। রিচ কার্ডে প্রদর্শিত বোর্ডিং তথ্যে কোনো পরিবর্তন হলে ব্যবহারকারীকে বার্তা পাঠান।
ব্যবহারকারী পাসটি গুগল ওয়ালেটে যোগ করার জন্য একটি প্রস্তাবিত পদক্ষেপে ট্যাপ করেন।

গুগল ওয়ালেট অ্যাপটি খোলে। ব্যবহারকারী তার ওয়ালেটে পাসটি যোগ করার জন্য একটি বোতামে ট্যাপ করেন।

ব্যবহারকারী তার পাসটি দেখার জন্য একটি বোতামে ট্যাপ করেন।

কিউআর কোডসহ বোর্ডিং পাসটি দেখানো হচ্ছে।
