1. আপনি শুরু করার আগে
ইন্টারনেট অফ থিংস (IoT) বিকাশকারী হিসাবে, আপনি ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন তৈরি করতে পারেন যা আপনার ব্যবহারকারীদের Google হোম অ্যাপে স্পর্শ নিয়ন্ত্রণ এবং Google সহকারীর সাথে ভয়েস কমান্ডের মাধ্যমে তাদের ডিভাইসগুলি নিয়ন্ত্রণ করার ক্ষমতা দেয়।
ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশনের জন্য ডিবাগিং টুল শেখা Google অ্যাসিস্ট্যান্টের সাথে প্রোডাকশন কোয়ালিটি ইন্টিগ্রেশন তৈরি করার জন্য একটি গুরুত্বপূর্ণ ধাপ। সহজে নিরীক্ষণ এবং ডিবাগিং সহজতর করার জন্য, Google ক্লাউড প্ল্যাটফর্ম (GCP) মেট্রিক্স এবং লগিং এবং স্মার্ট হোমের জন্য টেস্ট স্যুট আপনার ইন্টিগ্রেশনের সমস্যাগুলি সনাক্ত করতে এবং সমাধান করতে আপনাকে সহায়তা করার জন্য উপলব্ধ।
পূর্বশর্ত
- একটি ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন ডেভেলপার গাইড তৈরি করুন পড়ুন
- Google অ্যাসিস্ট্যান্ট কোডল্যাবে স্মার্ট হোম ডিভাইসগুলি কানেক্ট করুন
আপনি কি নির্মাণ করবেন
এই কোডল্যাবে, আপনি 2টি ত্রুটি সহ একটি ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন স্থাপন করবেন এবং এটিকে অ্যাসিস্ট্যান্টের সাথে সংযুক্ত করবেন, তারপর স্মার্ট হোম এবং Google ক্লাউড প্ল্যাটফর্ম (GCP) মেট্রিক্স এবং লগিংয়ের জন্য টেস্ট স্যুটের মাধ্যমে ইন্টিগ্রেশনের ত্রুটিগুলি ডিবাগ করবেন।
আপনি কি শিখবেন
- কিভাবে GCP মেট্রিক্স এবং লগিং ব্যবহার করবেন উৎপাদন সমস্যা চিহ্নিত করতে এবং সমাধান করতে
- কার্যকরী এবং API সমস্যাগুলি সনাক্ত করতে স্মার্ট হোমের জন্য টেস্ট স্যুট কীভাবে ব্যবহার করবেন
আপনি কি প্রয়োজন হবে
- একটি ওয়েব ব্রাউজার, যেমন Google Chrome
- Google Home অ্যাপ ইনস্টল করা একটি iOS বা Android ডিভাইস
- Node.js সংস্করণ 10.16 বা তার পরে
- একটি Google ক্লাউড বিলিং অ্যাকাউন্ট
2. ত্রুটিপূর্ণ অ্যাপ চালান
সোর্স কোড পান
আপনার ডেভেলপমেন্ট মেশিনে এই কোডল্যাবের নমুনা ডাউনলোড করতে নিম্নলিখিত লিঙ্কে ক্লিক করুন:
...অথবা আপনি কমান্ড লাইন থেকে GitHub সংগ্রহস্থল ক্লোন করতে পারেন:
$ git clone https://github.com/google-home/smarthome-debug.git
প্রকল্প সম্পর্কে
ওয়াশার অ্যাপটিতে নিম্নলিখিত সাবডিরেক্টরি রয়েছে:
-
public
: স্মার্ট ওয়াশারের অবস্থা সহজেই নিয়ন্ত্রণ এবং নিরীক্ষণ করার জন্য একটি ফ্রন্টএন্ড UI। -
functions
: একটি সম্পূর্ণরূপে বাস্তবায়িত ক্লাউড পরিষেবা যা ফায়ারবেস এবং ফায়ারবেস রিয়েলটাইম ডেটাবেসের জন্য ক্লাউড ফাংশনগুলির সাথে স্মার্ট ওয়াশার পরিচালনা করে৷
ফায়ারবেসের সাথে সংযোগ করুন
আপনার ডেভেলপমেন্ট মেশিনে টার্মিনাল খুলুন। washer-faulty
ডিরেক্টরিতে নেভিগেট করুন, তারপর Google অ্যাসিস্ট্যান্ট কোডল্যাবে Connect স্মার্ট হোম ডিভাইসে তৈরি আপনার ইন্টিগ্রেশন প্রকল্পের সাথে Firebase CLI সেট আপ করুন:
$ cd washer-faulty $ firebase use <firebase-project-id>
ফায়ারবেসে স্থাপন করুন
functions
ফোল্ডারে নেভিগেট করুন এবং npm.
$ cd functions $ npm install
দ্রষ্টব্য: আপনি যদি নীচের বার্তাটি দেখতে পান, আপনি উপেক্ষা করে এগিয়ে যেতে পারেন৷ সতর্কতাটি কিছু পুরানো নির্ভরতার কারণে এবং আপনি এখানে আরো বিস্তারিত জানতে পারেন।
found 5 high severity vulnerabilities run `npm audit fix` to fix them, or `npm audit` for details
এখন আপনি নির্ভরতাগুলি ইনস্টল করেছেন এবং আপনার প্রকল্পটি কনফিগার করেছেন, আপনি ত্রুটিযুক্ত ওয়াশার অ্যাপ স্থাপন করতে প্রস্তুত৷
$ firebase deploy
এটি হল কনসোল আউটপুট যা আপনাকে দেখতে হবে:
... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/<Firebase-project-id>/overview Hosting URL: https://<Firebase-project-id>.firebaseapp.com
হোমগ্রাফ আপডেট করুন
ওয়েব অ্যাপ দেখতে আপনার ব্রাউজারে হোস্টিং URL খুলুন ( https://<firebase-project-id>.firebaseapp.com
)। ওয়েব UI-তে, রিফ্রেশ ক্লিক করুন ত্রুটিযুক্ত ওয়াশার অ্যাপ থেকে সাম্প্রতিক ডিভাইস মেটাডেটা সহ অনুরোধ সিঙ্কের মাধ্যমে হোমগ্রাফ আপডেট করার বোতাম:
Google Home অ্যাপটি খুলুন এবং যাচাই করুন যে আপনি Faulty Washer নামের ওয়াশার ডিভাইসটি দেখতে পাচ্ছেন।
3. আপনার ইন্টিগ্রেশন পরীক্ষা করুন
আপনি আপনার প্রকল্প স্থাপন করার পরে, পরীক্ষা করুন যে আপনার ইন্টিগ্রেশন ওয়াশার নিয়ন্ত্রণ করে।
ওয়াশার পরীক্ষা করুন
আপনি যখন আপনার ফোনের মাধ্যমে নিম্নলিখিত ভয়েস কমান্ডগুলির মধ্যে যেকোনো একটি চেষ্টা করেন তখন মান পরিবর্তন পরীক্ষা করুন:
"ওহে গুগল, আমার ওয়াশার চালু করুন।"
"ওহে গুগল, আমার ওয়াশার শুরু করুন।"
"ওহে গুগল, আমার ওয়াশার থামান।"
"ওহে গুগল, আমার ওয়াশার আবার শুরু কর।"
"ওহে গুগল, আমার ওয়াশার বন্ধ করুন।"
আপনি লক্ষ্য করবেন যে আপনি ওয়াশারটি বিরতি / পুনরায় চালু করার সময় সহকারী প্রতিক্রিয়া জানায় যে ভয়েসের মাধ্যমে কিছু ভুল হয়েছে:
"দুঃখিত, আমি <project display name> এ পৌঁছাতে পারিনি।"
এই সমস্যাটি ডিবাগ করতে, আপনাকে প্রথমে ত্রুটিটি সংকুচিত করতে এবং মূল কারণ সনাক্ত করতে আরও তথ্যের প্রয়োজন৷
স্মার্টহোম অ্যানালিটিক্স ড্যাশবোর্ড
ত্রুটিগুলি পরিদর্শন করার একটি ভাল জায়গা হল স্মার্টহোম অ্যানালিটিক্স ড্যাশবোর্ড , যা আপনার ক্লাউড পূরণের জন্য ব্যবহার এবং স্বাস্থ্য মেট্রিক্সের চার্টগুলিকে একত্রিত করে:
- ব্যবহারের মেট্রিক্স আপনার ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশনের ব্যবহারের প্রবণতাকে প্রতিফলিত করে, যার মধ্যে দৈনিক সক্রিয় ব্যবহারকারীর সংখ্যা এবং আপনার পূরণের জন্য মোট অনুরোধের সংখ্যা।
- হেলথ মেট্রিক্স আপনাকে আপনার ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন, অনুরোধের লেটেন্সি, সাফল্যের শতাংশ এবং ত্রুটি বিভাজন কভার করার ক্ষেত্রে অসামঞ্জস্যতা নিরীক্ষণ করতে সাহায্য করে।
ত্রুটির কারণ সংকুচিত করতে, প্রকল্প ড্যাশবোর্ড অ্যাক্সেস করতে নীচের পদক্ষেপগুলি অনুসরণ করুন৷
- বিকাশকারী কনসোলে , প্রকল্প পৃষ্ঠায় যান।
- আপনার স্মার্ট হোম প্রকল্প নির্বাচন করুন.
- বাম মেনুতে Analytics ট্যাবে ক্লিক করুন।
- এটি আপনাকে Google ক্লাউডে আপনার প্রকল্পের জন্য ড্যাশবোর্ডগুলির একটি তালিকায় নিয়ে যাবে৷ Google Home Analytics - ক্লাউড ইন্টিগ্রেশন ড্যাশবোর্ড নির্বাচন করুন।
- হাইলাইট করা সময়সীমার জন্য ত্রুটি কোডগুলি দেখতে ক্লাউড পূর্ণতা ত্রুটি - স্ট্যাটাস ব্রেকডাউন চার্টে স্ক্রোল করুন৷
PARTNER_RESPONSE_MISSING_DEVICE
ত্রুটি কোড মূল কারণটির জন্য একটি ইঙ্গিত প্রদান করে৷ এর পরে, আরও বিশদ বিবরণের জন্য ত্রুটি কোডের উপর ভিত্তি করে ইভেন্ট লগগুলি পুনরুদ্ধার করুন৷
ইভেন্ট লগ অ্যাক্সেস করুন
ত্রুটি সম্পর্কে আরও বিশদ বিবরণ পেতে, ক্লাউড লগিং এর মাধ্যমে আপনার ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশনের জন্য ইভেন্ট লগগুলি অ্যাক্সেস করুন৷
Google ক্লাউড প্ল্যাটফর্মে নেভিগেশন মেনু খুলুন, এবং অপারেশনগুলির অধীনে, আপনার প্রকল্পের ইভেন্ট লগগুলি অ্যাক্সেস করতে লগিং > লগ এক্সপ্লোরার নির্বাচন করুন৷ বিকল্পভাবে, আপনি অনুসন্ধান বাক্সে লগ এক্সপ্লোরার অনুসন্ধান করতে পারেন।
অনুসন্ধান সমস্ত ক্ষেত্র ইনপুট ক্ষেত্রে, ক্যোয়ারী লিখুন PARTNER_RESPONSE_MISSING_DEVICE
এবং রান কোয়েরি ক্লিক করুন। ক্যোয়ারির সাথে মিলে যাওয়া লগগুলি ফলাফল বিভাগে প্রদর্শিত হয়৷
ত্রুটির লগটি ত্রুটির বিবরণ সহ একটি স্মার্ট হোম ইভেন্ট দেখায়:
- সাম্প্রতিক ব্যর্থ ভয়েস কমান্ডের সাথে সংশ্লিষ্ট ব্যবহারকারীর পদক্ষেপ হল "রিজুমিং ওয়াশার" (
actionType:
"STARTSTOP_UNPAUSE
"), - সংশ্লিষ্ট ডিবাগিং বার্তাটি হল "
JSON response does not include device.
"
ডিবাগিং বার্তার উপর ভিত্তি করে, আপনার পরীক্ষা করা উচিত কেন ওয়াশার অ্যাপটি EXECUTE
প্রতিক্রিয়াতে সঠিক ডিভাইসটি অন্তর্ভুক্ত করে না।
ত্রুটির মূল কারণ চিহ্নিত করুন
functions/index.js
এ, EXECUTE
হ্যান্ডলার খুঁজুন ( onExecute
অ্যারেতে) যা প্রতিটি কমান্ডের স্থিতি এবং নতুন ডিভাইসের অবস্থা প্রদান করে। একটি EXECUTE
প্রতিক্রিয়াতে ডিভাইস আইডি সন্নিবেশ করা updateDevice
ফাংশনের সমাধানের উপর নির্ভর করে:
index.js
app.onExecute(async (body) => {
...
for (const command of intent.payload.commands) {
for (const device of command.devices) {
for (const execution of command.execution) {
executePromises.push(
updateDevice(execution, device.id)
.then((data) => {
result.ids.push(device.id);
Object.assign(result.states, data);
})
.catch((e) =>
functions.logger.error('EXECUTE',
device.id, e.message)));
}
}
}
updateDevice
ফাংশনটি কীভাবে ওয়াশারে পজ/রিজুমে পরিচালনা করে তা আরও পরীক্ষা করে দেখুন, এবং আপনি পজ/রিজুমে কমান্ডের সাথে মিলের জন্য স্ট্রিংটি ভুল দেখতে পাবেন:
index.js
const updateDevice = async (execution, deviceId) => {
const {params, command} = execution;
let state; let ref;
switch (command) {
...
case 'action.devices.commands.PauseUnpausePause':
state = {isPaused: params.pause};
if (params.pause) state.isRunning = false;
ref = firebaseRef.child(deviceId).child('StartStop');
break;
}
return ref.update(state)
.then(() => state);
};
ত্রুটি ঠিক করুন
এখন আপনি ত্রুটির মূল কারণ চিহ্নিত করেছেন, আপনি বিরতি / পুনরায় শুরু কমান্ডের জন্য স্ট্রিং সংশোধন করতে পারেন:
index.js
const updateDevice = async (execution, deviceId) => {
const {params, command} = execution;
let state; let ref;
switch (command) {
...
case 'action.devices.commands.PauseUnpause':
state = {isPaused: params.pause};
if (params.pause) state.isRunning = false;
ref = firebaseRef.child(deviceId).child('StartStop');
break;
}
return ref.update(state)
.then(() => state);
};
আপনার ফিক্স পরীক্ষা
Firebase CLI ব্যবহার করে আপডেট করা কোড স্থাপন করুন:
firebase deploy --only functions
নিম্নলিখিত ভয়েস কমান্ডগুলি পুনরায় চেষ্টা করুন, এবং আপনি যখন ওয়াশারকে বিরতি / পুনরায় চালু করবেন তখন আপনি সহকারী সঠিকভাবে প্রতিক্রিয়া দেখতে পাবেন।
"ওহে গুগল, আমার ওয়াশার থামান।"
=>
"অবশ্যই, ওয়াশার থামাচ্ছি।"
"ওহে গুগল, আমার ওয়াশার আবার শুরু কর।"
=>
"বুঝলাম, ওয়াশার আবার চালু করছি।"
আপনি প্রশ্ন জিজ্ঞাসা করে আপনার ওয়াশারের বর্তমান অবস্থা পরীক্ষা করতে পারেন।
"ওহে গুগল, আমার ওয়াশার কি চালু আছে?"
"ওহে গুগল, আমার ওয়াশার কি চলছে?"
"ওহে গুগল, আমার ওয়াশার কোন সাইকেল চালু আছে?"
4. টেস্ট স্যুটের সাথে আপনার ইন্টিগ্রেশন পরীক্ষা করুন
ম্যানুয়ালি পরীক্ষা করার পাশাপাশি, আপনি স্মার্ট হোমের জন্য স্বয়ংক্রিয় টেস্ট স্যুট ব্যবহার করতে পারেন আপনার ইন্টিগ্রেশনের সাথে যুক্ত ডিভাইসের ধরন এবং বৈশিষ্ট্যের উপর ভিত্তি করে ব্যবহারের ক্ষেত্রে যাচাই করতে। টেস্ট স্যুট আপনার ইন্টিগ্রেশনে সমস্যাগুলি সনাক্ত করতে একাধিক পরীক্ষা চালায় এবং ইভেন্ট লগগুলিতে ডাইভ করার আগে আপনার ডিবাগিং ত্বরান্বিত করতে ব্যর্থ পরীক্ষার ক্ষেত্রে তথ্যপূর্ণ বার্তাগুলি দেখায়৷
স্মার্ট হোমের জন্য টেস্ট স্যুট চালান
টেস্ট স্যুট দ্বারা আপনার ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন পরীক্ষা করতে এই নির্দেশাবলী অনুসরণ করুন:
- আপনার ওয়েব ব্রাউজারে, স্মার্ট হোমের জন্য টেস্ট স্যুট খুলুন।
- উপরের-ডান কোণায় বোতামটি ব্যবহার করে Google-এ সাইন ইন করুন। এটি টেস্ট স্যুটকে সরাসরি Google অ্যাসিস্ট্যান্টকে কমান্ড পাঠাতে দেয়।
- প্রজেক্ট আইডি ফিল্ডে, আপনার ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশনের প্রোজেক্ট আইডি লিখুন। এবং তারপর এগিয়ে যেতে পরবর্তী ক্লিক করুন.
- টেস্ট সেটিংস ধাপে, আপনি টেস্ট স্যুট দেখতে পাবেন ডিভাইসের ধরন এবং ওয়াশারের বৈশিষ্ট্যের তালিকা।
- টেস্ট রিকোয়েস্ট সিঙ্ক অপশনটি অক্ষম করুন যেহেতু নমুনা ওয়াশার অ্যাপে ওয়াশার যোগ / অপসারণ / পুনঃনামকরণ করার জন্য কোনও UI নেই৷ একটি প্রোডাকশন সিস্টেমে, ব্যবহারকারী যখনই ডিভাইসগুলি যোগ / অপসারণ / পুনঃনামকরণ করে তখন আপনাকে অবশ্যই অনুরোধ সিঙ্ক ট্রিগার করতে হবে৷
- পরীক্ষা চালানো শুরু করতে পরবর্তী ক্লিক করুন।
টেস্ট স্যুট চালানো শেষ হওয়ার পরে, পরীক্ষার ক্ষেত্রে ফলাফল দেখুন। আপনি নিজ নিজ ত্রুটি বার্তা সহ ধরা দুটি ব্যর্থ পরীক্ষার ক্ষেত্রে লক্ষ্য করবেন:
ব্যর্থতার জন্য আপনার ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন ডিবাগ করতে, আপনাকে প্রথমে ত্রুটি বার্তা বিশ্লেষণ করে ত্রুটির মূল কারণ সনাক্ত করতে হবে।
ত্রুটি বার্তা বিশ্লেষণ
বিকাশকারীদের মূল কারণ সনাক্ত করতে সহায়তা করার জন্য, টেস্ট স্যুট প্রতিটি ব্যর্থ পরীক্ষার ক্ষেত্রে ত্রুটির বার্তাগুলি দেখায় যা ব্যর্থতার কারণ নির্দেশ করে।
উপরের প্রথম ব্যর্থ পরীক্ষার ক্ষেত্রে,
এর ত্রুটি বার্তাটি নির্দেশ করে যে টেস্ট স্যুট "isPause": true
, কিন্তু প্রকৃত অবস্থাগুলি শুধুমাত্র "isPause": false
।
এছাড়াও, দ্বিতীয় ব্যর্থ পরীক্ষার ক্ষেত্রে ত্রুটির বার্তাটি আপনার ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন থেকে QUERY
প্রতিক্রিয়ার রাজ্যগুলিকে নির্দেশ করে "isPause": true
, যা "isPause": false
একীকরণ:
উভয় ত্রুটির বার্তা অনুসারে, আপনার একীকরণ প্রতিবেদনের অবস্থা সঠিক মান সহ isPaused
কিনা তা পরীক্ষা করা উচিত।
ত্রুটির মূল কারণ চিহ্নিত করুন
ওপেন functions/index.js
, যেটিতে reportstate
ফাংশন রয়েছে যা রিপোর্ট স্টেটের মাধ্যমে হোম গ্রাফে স্টেট পরিবর্তন পোস্ট করে। রিপোর্ট স্টেট পেলোড পরিদর্শন করুন, এবং আপনি দেখতে পাবেন পেলোডটিতে isPaused
স্টেট নেই, যা টেস্ট স্যুট ব্যর্থ পরীক্ষার ক্ষেত্রে পরীক্ষা করেছে।
index.js
exports.reportstate = functions.database.ref('{deviceId}').onWrite(
async (change, context) => {
...
const requestBody = {
requestId: 'ff36a3cc', /* Any unique ID */
agentUserId: USER_ID,
payload: {
devices: {
states: {
/* Report the current state of our washer */
[context.params.deviceId]: {
online: true,
on: snapshot.OnOff.on,
isRunning: snapshot.StartStop.isRunning,
currentRunCycle: [{
currentCycle: 'rinse',
nextCycle: 'spin',
lang: 'en',
}],
currentTotalRemainingTime: 1212,
currentCycleRemainingTime: 301,
},
},
},
},
};
const res = await homegraph.devices.reportStateAndNotification({
requestBody,
});
...
});
ত্রুটি ঠিক করুন
এখন যেহেতু আপনি ত্রুটির মূল কারণ চিহ্নিত করেছেন, রিপোর্ট স্টেট পেলোডে isPaused
অবস্থা যোগ করে functions/index.js
সংশোধন করুন:
index.js
exports.reportstate = functions.database.ref('{deviceId}').onWrite(
async (change, context) => {
...
const requestBody = {
requestId: 'ff36a3cc', /* Any unique ID */
agentUserId: USER_ID,
payload: {
devices: {
states: {
/* Report the current state of our washer */
[context.params.deviceId]: {
online: true,
on: snapshot.OnOff.on,
isPaused: snapshot.StartStop.isPaused,
isRunning: snapshot.StartStop.isRunning,
currentRunCycle: [{
currentCycle: 'rinse',
nextCycle: 'spin',
lang: 'en',
}],
currentTotalRemainingTime: 1212,
currentCycleRemainingTime: 301,
},
},
},
},
};
...
});
আপনার ফিক্স পরীক্ষা
Firebase CLI ব্যবহার করে আপডেট করা কোড স্থাপন করুন:
$ firebase deploy --only functions
স্মার্ট হোমের জন্য টেস্ট স্যুটটি পুনরায় চালান, এবং আপনি দেখতে পাবেন যে সমস্ত পরীক্ষায় উত্তীর্ণ হয়েছে৷
5. অভিনন্দন
অভিনন্দন! আপনি স্মার্ট হোম এবং জিসিপি মেট্রিক্স এবং লগিংয়ের জন্য টেস্ট স্যুটের মাধ্যমে ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন সমস্যাগুলি কীভাবে সমাধান করবেন তা সফলভাবে শিখেছেন।
আরও জানুন
এই কোডল্যাবটি তৈরি করে, নিম্নলিখিত অনুশীলনগুলি চেষ্টা করুন এবং অতিরিক্ত সংস্থানগুলি অন্বেষণ করুন:
- আপনার ডিভাইসে আরও সমর্থিত বৈশিষ্ট্য যোগ করুন এবং টেস্ট স্যুট দিয়ে তাদের পরীক্ষা করুন।
- ড্যাশবোর্ড তৈরি করুন, সতর্কতা সেট আপ করুন, এবং আপনার ইন্টিগ্রেশন সম্পর্কে সহায়ক ব্যবহারের মেট্রিক্স পেতে প্রোগ্রাম্যাটিকভাবে মেট্রিক্স ডেটা অ্যাক্সেস করুন ।
- স্মার্ট হোমের জন্য স্থানীয় পরিপূর্ণতা অন্বেষণ করুন।
- আরও অন্বেষণ করতে আমাদের GitHub নমুনা দেখুন।
আপনি ব্যবহারকারীদের কাছে আপনার ইন্টিগ্রেশন প্রকাশ করার সার্টিফিকেশন প্রক্রিয়া সহ পর্যালোচনার জন্য একটি ইন্টিগ্রেশন পরীক্ষা এবং জমা দেওয়ার বিষয়ে আরও জানতে পারেন।