১. শুরু করার আগে
এই কোডল্যাবে, আপনি শিখবেন কিভাবে একটি ফ্লাটার অ্যাপে একটি সাধারণ Dialogflow Essentials (ES) টেক্সট এবং ভয়েস বট ইন্টিগ্রেট করতে হয়। Dialogflow ES হলো কথোপকথনমূলক UI তৈরির জন্য একটি ডেভেলপমেন্ট স্যুট। যেমন চ্যাটবট, ভয়েস বট, ফোন গেটওয়ে। আপনি এই সবকিছু একই টুল দিয়ে তৈরি করতে পারেন এবং এমনকি ২০টিরও বেশি বিভিন্ন ভাষায় একাধিক চ্যানেল সাপোর্ট করতে পারেন। Dialogflow, Google Assistant, Slack, এবং Facebook Messenger-এর মতো অনেক জনপ্রিয় কথোপকথন প্ল্যাটফর্মের সাথে ইন্টিগ্রেট করে। আপনি যদি এই প্ল্যাটফর্মগুলোর কোনোটির জন্য একটি এজেন্ট তৈরি করতে চান, তবে আপনার অনেকগুলো ইন্টিগ্রেশন অপশনের মধ্যে একটি ব্যবহার করা উচিত। তবে, মোবাইল ডিভাইসের জন্য একটি চ্যাটবট তৈরি করতে হলে, আপনাকে একটি কাস্টম ইন্টিগ্রেশন তৈরি করতে হবে। একটি অন্তর্নিহিত মেশিন লার্নিং মডেলকে প্রশিক্ষণ দেওয়ার জন্য আপনি ট্রেনিং ফ্রেজ উল্লেখ করে ইনটেন্ট তৈরি করবেন।
এই ল্যাবটি একজন সাধারণ ক্লাউড ডেভেলপারের অভিজ্ঞতাকে প্রতিফলিত করার জন্য সাজানো হয়েছে:
- পরিবেশ সেটআপ
- ডায়ালগফ্লো: একটি নতুন ডায়ালগফ্লো ES এজেন্ট তৈরি করুন
- ডায়ালগফ্লো: ডায়ালগফ্লো কনফিগার করুন
- গুগল ক্লাউড: একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন
- ফ্লাটার: একটি চ্যাট অ্যাপ্লিকেশন তৈরি করা
- ফ্লাটার প্রজেক্ট তৈরি করা
- সেটিংস এবং অনুমতিগুলি কনফিগার করা
- নির্ভরতা যোগ করা হচ্ছে
- পরিষেবা অ্যাকাউন্টের সাথে সংযোগ স্থাপন।
- ভার্চুয়াল ডিভাইস বা ফিজিক্যাল ডিভাইসে অ্যাপ্লিকেশনটি চালানো
- ফ্লাটার: স্পিচ টু টেক্সট সাপোর্ট সহ চ্যাট ইন্টারফেস তৈরি করা
- চ্যাট ইন্টারফেস তৈরি করা
- চ্যাট ইন্টারফেস লিঙ্ক করা
- অ্যাপে Dialogflow gRPC প্যাকেজ একীভূত করা
- ডায়ালগফ্লো: ডায়ালগফ্লো এজেন্টের মডেলিং
- ওয়েলকাম ও ফলব্যাক ইন্টেন্ট কনফিগার করুন
- একটি প্রায়শই জিজ্ঞাসিত প্রশ্ন (FAQ) জ্ঞানভান্ডার ব্যবহার করুন।
পূর্বশর্ত
- ডার্ট/ফ্লাটারের প্রাথমিক অভিজ্ঞতা
- গুগল ক্লাউড প্ল্যাটফর্মে প্রাথমিক অভিজ্ঞতা
- Dialogflow ES-এর সাথে প্রাথমিক অভিজ্ঞতা
আপনি যা তৈরি করবেন
এই কোডল্যাবটি আপনাকে দেখাবে কীভাবে একটি মোবাইল FAQ বট তৈরি করতে হয়, যা Dialogflow টুলটি সম্পর্কে সবচেয়ে সাধারণ প্রশ্নগুলোর উত্তর দিতে পারে। ব্যবহারকারীরা উত্তর পাওয়ার জন্য টেক্সট ইন্টারফেসের মাধ্যমে অথবা মোবাইল ডিভাইসের বিল্ট-ইন মাইক্রোফোনের মাধ্যমে ভয়েস স্ট্রিম করতে পারবেন। |
|
আপনি যা শিখবেন
- Dialogflow Essentials ব্যবহার করে কীভাবে একটি চ্যাটবট তৈরি করবেন
- Dialogflow gRPC প্যাকেজ ব্যবহার করে কীভাবে একটি Flutter অ্যাপে Dialogflow ইন্টিগ্রেট করবেন
- Dialogflow দিয়ে কীভাবে টেক্সট ইনটেন্ট শনাক্ত করবেন
- মাইক্রোফোনের মাধ্যমে Dialogflow-তে কীভাবে ভয়েস স্ট্রিম করবেন
- পাবলিক FAQ ইম্পোর্ট করতে নলেজ বেস কানেক্টর কীভাবে ব্যবহার করবেন
- ভার্চুয়াল বা ফিজিক্যাল ডিভাইসে টেক্সট এবং ভয়েস ইন্টারফেসের মাধ্যমে চ্যাটবটটি পরীক্ষা করুন।
আপনার যা যা লাগবে
- Dialogflow এজেন্ট তৈরি করতে আপনার একটি Google Identity / Gmail ঠিকানা লাগবে।
- একটি সার্ভিস অ্যাকাউন্ট ডাউনলোড করার জন্য আপনার গুগল ক্লাউড প্ল্যাটফর্মে অ্যাক্সেস প্রয়োজন হবে।
- একটি ফ্লাটার ডেভ এনভায়রনমেন্ট
আপনার ফ্লাটার ডেভ এনভায়রনমেন্ট সেট আপ করুন
- যে অপারেটিং সিস্টেমে আপনি ফ্লাটার ইনস্টল করছেন, সেটি নির্বাচন করুন।
- ম্যাকওএস ব্যবহারকারীদের জন্য: https://flutter.dev/docs/get-started/install/macos
- উইন্ডোজ: https://flutter.dev/docs/get-started/install/windows
- লিনাক্স: https://flutter.dev/docs/get-started/install/linux
- ChromeOS: https://flutter.dev/docs/get-started/install/chromeos
- আপনি আমাদের কমান্ড-লাইন টুলগুলোর সাথে যেকোনো টেক্সট এডিটর ব্যবহার করে ফ্লাটার দিয়ে অ্যাপ তৈরি করতে পারেন। তবে, এই ওয়ার্কশপে অ্যান্ড্রয়েড স্টুডিও ব্যবহার করা হবে। অ্যান্ড্রয়েড স্টুডিওর জন্য ফ্লাটার এবং ডার্ট প্লাগইনগুলো আপনাকে কোড কমপ্লিশন, সিনট্যাক্স হাইলাইটিং, উইজেট এডিটিং সহায়তা, রান ও ডিবাগ সাপোর্ট এবং আরও অনেক কিছু প্রদান করে। https://flutter.dev/docs/get-started/editor- এ দেওয়া ধাপগুলো অনুসরণ করুন।
২. পরিবেশ সেটআপ
ডায়ালগফ্লো: একটি নতুন ডায়ালগফ্লো ES এজেন্ট তৈরি করুন
- খুলুন
- বাম দিকের বারে, লোগোর ঠিক নিচে, ড্রপডাউন থেকে " Create New Agent " নির্বাচন করুন। (উল্লেখ্য, "Global" লেখা ড্রপডাউনটিতে ক্লিক করবেন না, কারণ FAQ নলেজ বেস ব্যবহার করার জন্য আমাদের একটি Global Dialogflow ইনস্ট্যান্সের প্রয়োজন হবে।)
- একজন এজেন্টের নাম নির্দিষ্ট করুন
yourname-dialogflow(আপনার নিজের নাম ব্যবহার করুন) - ডিফল্ট ভাষা হিসেবে ইংরেজি (en) নির্বাচন করুন।
- ডিফল্ট টাইম জোন হিসেবে, আপনার সবচেয়ে কাছের টাইম জোনটি বেছে নিন।
- মেগা এজেন্ট নির্বাচন করবেন না । (এই বৈশিষ্ট্যটির মাধ্যমে আপনি একটি সর্বব্যাপী এজেন্ট তৈরি করতে পারেন, যা ‘সাব’ এজেন্টদের মধ্যে সমন্বয় সাধন করতে পারে। এখন আমাদের এটির প্রয়োজন নেই।)
- তৈরি করুন- এ ক্লিক করুন।

ডায়ালগফ্লো কনফিগার করুন
- আপনার প্রোজেক্টের নামের পাশে, বাম দিকের মেনুতে থাকা গিয়ার আইকনটিতে ক্লিক করুন।

- নিম্নলিখিত এজেন্ট বিবরণটি লিখুন: Dialogflow FAQ Chatbot
- বিটা ফিচারগুলো চালু করুন , সুইচটি অন করুন।

- স্পিচ ট্যাবে ক্লিক করুন এবং নিশ্চিত করুন যে অটো স্পিচ অ্যাডাপটেশন বক্সটি সক্রিয় আছে।
- ঐচ্ছিকভাবে, আপনি প্রথম সুইচটিও চালু করতে পারেন, এটি স্পিচ মডেলকে উন্নত করবে, কিন্তু এই সুবিধাটি কেবল তখনই পাওয়া যাবে যখন আপনি ডায়ালগফ্লো ট্রায়াল আপগ্রেড করবেন।
- সংরক্ষণ করুন ক্লিক করুন
গুগল ক্লাউড: একটি পরিষেবা অ্যাকাউন্ট নিন
Dialogflow-তে এজেন্ট তৈরি করার পর, Google Cloud কনসোলে একটি Google Cloud প্রজেক্ট তৈরি করতে হবে।
- Google Cloud Console খুলুন:
- নিশ্চিত করুন যে আপনি Dialogflow-এর মতো একই Google অ্যাকাউন্ট দিয়ে লগ ইন করেছেন এবং উপরের নীল বারে 'project:
yourname-dialogflowনির্বাচন করুন। - এরপর, উপরের টুলবারে
Dialogflow APIলিখে সার্চ করুন এবং ড্রপডাউন থেকে Dialogflow API-এর ফলাফলের উপর ক্লিক করুন।

- নীল রঙের ম্যানেজ বাটনে ক্লিক করুন এবং বাম দিকের মেনু বারে থাকা ক্রেডেনশিয়ালস -এ ক্লিক করুন। (ডায়ালগফ্লো এখনও চালু না থাকলে, প্রথমে এনাবল-এ ক্লিক করুন)

- আপনার স্ক্রিনের উপরের দিকে থাকা 'Create credentials'- এ ক্লিক করুন এবং 'Service account' বেছে নিন।

- একটি সার্ভিস অ্যাকাউন্টের নাম (
flutter_dialogflow, আইডি এবং বিবরণ নির্দিষ্ট করুন এবং 'Create' বোতামে চাপ দিন।

- ধাপ ২-এ, আপনাকে
Dialogflow API Adminরোলটি নির্বাচন করতে হবে, এরপর ‘Continue’ এবং ‘Done’-এ ক্লিক করুন। -
flutter_dialogflowসার্ভিস অ্যাকাউন্টে ক্লিক করুন, Keys ট্যাবে ক্লিক করুন এবং Add Key > Create new key- তে ক্লিক করুন।

- একটি JSON কী তৈরি করুন। এটির নাম পরিবর্তন করে
credentials.jsonরাখুন এবং আপনার হার্ড ড্রাইভের কোনো সুরক্ষিত স্থানে সংরক্ষণ করুন। আমরা এটি পরে ব্যবহার করব।

চমৎকার, আমাদের প্রয়োজনীয় সমস্ত টুল সঠিকভাবে সেট আপ করা হয়েছে। আমরা এখন আমাদের অ্যাপে Dialogflow ইন্টিগ্রেট করার কাজ শুরু করতে পারি!
৩. ফ্লাটার: চ্যাট অ্যাপ্লিকেশন তৈরি করা
বয়লারপ্লেট অ্যাপ তৈরি করুন
- অ্যান্ড্রয়েড স্টুডিও খুলুন এবং একটি নতুন ফ্লাটার প্রজেক্ট শুরু করুন।
- প্রজেক্টের ধরণ হিসেবে ফ্লাটার অ্যাপ্লিকেশন নির্বাচন করুন। তারপর নেক্সট-এ ক্লিক করুন।
- ফ্লাটার এসডিকে পাথটি এসডিকে-এর অবস্থান নির্দিষ্ট করে কিনা তা যাচাই করুন (টেক্সট ফিল্ডটি খালি থাকলে 'Install SDK...' নির্বাচন করুন)।
- একটি প্রজেক্টের নাম লিখুন (যেমন,
flutter_dialogflow_agent)। তারপর Next বাটনে ক্লিক করুন। - প্যাকেজের নাম পরিবর্তন করুন এবং ফিনিশ-এ ক্লিক করুন।

এটি ম্যাটেরিয়াল কম্পোনেন্টসহ একটি নমুনা অ্যাপ্লিকেশন তৈরি করবে।
অ্যান্ড্রয়েড স্টুডিও কর্তৃক এসডিকে ইনস্টল এবং প্রজেক্টটি তৈরি হওয়া পর্যন্ত অপেক্ষা করুন।
সেটিংস এবং অনুমতি
- আমরা যে অডিও রেকর্ডার লাইব্রেরি sound_stream ব্যবহার করব, তার জন্য minSdk কমপক্ষে ২১ প্রয়োজন। তাই android/app/build.gradle ফাইলের defaultConfig ব্লকে এটি পরিবর্তন করা যাক। (উল্লেখ্য, android ফোল্ডারে দুটি build.gradle ফাইল আছে, কিন্তু app ফোল্ডারের ফাইলটিই সঠিক।)
defaultConfig {
applicationId "com.myname.flutter_dialogflow_agent"
minSdkVersion 21
targetSdkVersion 30
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
- মাইক্রোফোনের অনুমতি দিতে এবং অ্যাপটিকে ক্লাউডে চলমান Dialogflow এজেন্টের সাথে সংযোগ স্থাপন করতে দেওয়ার জন্য, আমাদের app/src/main/AndroidManifest.xml ফাইলে INTERNET এবং RECORD_AUDIO পারমিশনগুলো যোগ করতে হবে। আপনার ফ্লাটার প্রজেক্টে একাধিক AndroidManifest.xml ফাইল থাকতে পারে, কিন্তু আপনার main ফোল্ডারের ফাইলটি প্রয়োজন হবে। আপনি সরাসরি manifest ট্যাগের ভেতরে লাইনগুলো যোগ করতে পারেন।
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
নির্ভরতা যোগ করা হচ্ছে
আমরা sound_stream , rxdart এবং dialogflow_grpc প্যাকেজগুলো ব্যবহার করব।
-
sound_streamনির্ভরতা যোগ করুন
$ flutter pub add sound_stream Resolving dependencies... async 2.8.1 (2.8.2 available) characters 1.1.0 (1.2.0 available) matcher 0.12.10 (0.12.11 available) + sound_stream 0.3.0 test_api 0.4.2 (0.4.5 available) vector_math 2.1.0 (2.1.1 available) Downloading sound_stream 0.3.0... Changed 1 dependency!
-
dialogflow_grpcনির্ভরতা যোগ করুন
flutter pub add dialogflow_grpc Resolving dependencies... + archive 3.1.5 async 2.8.1 (2.8.2 available) characters 1.1.0 (1.2.0 available) + crypto 3.0.1 + dialogflow_grpc 0.2.9 + fixnum 1.0.0 + googleapis_auth 1.1.0 + grpc 3.0.2 + http 0.13.4 + http2 2.0.0 + http_parser 4.0.0 matcher 0.12.10 (0.12.11 available) + protobuf 2.0.0 test_api 0.4.2 (0.4.5 available) + uuid 3.0.4 vector_math 2.1.0 (2.1.1 available) Downloading dialogflow_grpc 0.2.9... Downloading grpc 3.0.2... Downloading http 0.13.4... Downloading archive 3.1.5... Changed 11 dependencies!
-
rxdartনির্ভরতা যোগ করুন
$ flutter pub add rxdart Resolving dependencies... async 2.8.1 (2.8.2 available) characters 1.1.0 (1.2.0 available) matcher 0.12.10 (0.12.11 available) + rxdart 0.27.2 test_api 0.4.2 (0.4.5 available) vector_math 2.1.0 (2.1.1 available) Downloading rxdart 0.27.2... Changed 1 dependency!
সার্ভিস অ্যাকাউন্ট এবং গুগল ক্লাউড প্রজেক্টের তথ্য লোড করা হচ্ছে
- আপনার প্রজেক্টে একটি ডিরেক্টরি তৈরি করুন এবং এর নাম দিন:
assets। - গুগল ক্লাউড কনসোল থেকে ডাউনলোড করা credentials.json ফাইলটি assets ফোল্ডারে সরান।
- pubspec.yaml ফাইলটি খুলুন এবং flutter ব্লকে সার্ভিস অ্যাকাউন্টটি যোগ করুন।
flutter:
uses-material-design: true
assets:
- assets/credentials.json
একটি ভৌত ডিভাইসে অ্যাপ্লিকেশনটি চালানো
আপনার কাছে অ্যান্ড্রয়েড ডিভাইস থাকলে, আপনি ইউএসবি কেবলের মাধ্যমে ফোনটি সংযোগ করে ডিভাইসটিতে ডিবাগ করতে পারেন। আপনার অ্যান্ড্রয়েড ডিভাইসের ডেভেলপার অপশন স্ক্রিনের মাধ্যমে এটি সেট আপ করতে, এই ধাপগুলো অনুসরণ করুন।
ভার্চুয়াল ডিভাইসে অ্যাপ্লিকেশনটি চালানো হচ্ছে
যদি আপনি অ্যাপ্লিকেশনটি কোনো ভার্চুয়াল ডিভাইসে চালাতে চান, তাহলে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
- টুলস > এভিডি ম্যানেজার-এ ক্লিক করুন। (অথবা উপরের টুলবার থেকে এভিডি ম্যানেজার নির্বাচন করুন, নিচের চিত্রে এটি গোলাপী রঙে হাইলাইট করা আছে)

- আমরা একটি টার্গেট অ্যান্ড্রয়েড ভার্চুয়াল ডিভাইস তৈরি করব, যাতে কোনো ফিজিক্যাল ডিভাইস ছাড়াই আমাদের অ্যাপ্লিকেশনটি পরীক্ষা করতে পারি। বিস্তারিত জানতে, ‘ম্যানেজিং এভিডি’ দেখুন। নতুন ভার্চুয়াল ডিভাইসটি বেছে নেওয়ার পর, সেটি চালু করার জন্য আপনি সেটিতে ডাবল ক্লিক করতে পারেন।


- অ্যান্ড্রয়েড স্টুডিওর প্রধান টুলবারে, ড্রপডাউন থেকে টার্গেট হিসেবে একটি অ্যান্ড্রয়েড ডিভাইস নির্বাচন করুন এবং নিশ্চিত করুন যে main.dart ফাইলটি নির্বাচিত আছে। এরপর রান বাটনটি (সবুজ ত্রিভুজ) চাপুন।
IDE-র একদম নিচে, আপনি কনসোলে লগগুলো দেখতে পাবেন। আপনি লক্ষ্য করবেন যে এটি অ্যান্ড্রয়েড এবং আপনার স্টার্টার ফ্লাটার অ্যাপ ইনস্টল করছে। এতে এক মিনিট সময় লাগবে, ভার্চুয়াল ডিভাইসটি প্রস্তুত হয়ে গেলে পরিবর্তন করা খুব দ্রুত হবে। আপনার কাজ শেষ হয়ে গেলে, এটি স্টার্টার ফ্লাটার অ্যাপটি খুলে দেবে।

- চলুন আমাদের চ্যাটবট অ্যাপের জন্য মাইক্রোফোনটি চালু করি। অপশনগুলো খোলার জন্য ভার্চুয়াল ডিভাইসের অপশন বাটনে ক্লিক করুন। মাইক্রোফোন ট্যাবে, তিনটি সুইচই চালু করুন।

- কত দ্রুত পরিবর্তন করা যায় তা দেখানোর জন্য চলুন হট রিলোড ব্যবহার করে দেখি।
lib/main.dart ফাইলে, MyApp ক্লাসের MyHomePage টাইটেলটি পরিবর্তন করে Flutter Dialogflow Agent করুন। এবং primarySwatch- টি পরিবর্তন করে Colors.orange করুন।

ফাইলটি সেভ করুন , অথবা অ্যান্ড্রয়েড স্টুডিও টুলবারে থাকা বোল্ট আইকনটিতে ক্লিক করুন। আপনি ভার্চুয়াল ডিভাইসে সরাসরি পরিবর্তনটি দেখতে পাবেন।
৪. ফ্লাটার: STT সাপোর্ট সহ চ্যাট ইন্টারফেস তৈরি করা
চ্যাট ইন্টারফেস তৈরি করা
- lib ফোল্ডারে একটি নতুন ফ্লাটার উইজেট ফাইল তৈরি করুন। (lib ফোল্ডারে রাইট-ক্লিক করে New > Flutter Widget > Stateful widget-এ যান), ফাইলটির নাম দিন:
chat.dart
নিম্নলিখিত কোডটি এই ফাইলে পেস্ট করুন। এই ডার্ট ফাইলটি চ্যাট ইন্টারফেস তৈরি করে। এখানে Dialogflow এখনও কাজ করবে না, এটি কেবল সমস্ত কম্পোনেন্টের লেআউট এবং স্ট্রিম চালু করার জন্য মাইক্রোফোন কম্পোনেন্টের ইন্টিগ্রেশন। ফাইলের কমেন্টগুলো নির্দেশ করবে যে, আমরা পরবর্তীতে কোথায় Dialogflow ইন্টিগ্রেট করব।
// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:rxdart/rxdart.dart';
import 'package:sound_stream/sound_stream.dart';
// TODO import Dialogflow
class Chat extends StatefulWidget {
Chat({Key key}) : super(key: key);
@override
_ChatState createState() => _ChatState();
}
class _ChatState extends State<Chat> {
final List<ChatMessage> _messages = <ChatMessage>[];
final TextEditingController _textController = TextEditingController();
bool _isRecording = false;
RecorderStream _recorder = RecorderStream();
StreamSubscription _recorderStatus;
StreamSubscription<List<int>> _audioStreamSubscription;
BehaviorSubject<List<int>> _audioStream;
// TODO DialogflowGrpc class instance
@override
void initState() {
super.initState();
initPlugin();
}
@override
void dispose() {
_recorderStatus?.cancel();
_audioStreamSubscription?.cancel();
super.dispose();
}
// Platform messages are asynchronous, so we initialize in an async method.
Future<void> initPlugin() async {
_recorderStatus = _recorder.status.listen((status) {
if (mounted)
setState(() {
_isRecording = status == SoundStreamStatus.Playing;
});
});
await Future.wait([
_recorder.initialize()
]);
// TODO Get a Service account
}
void stopStream() async {
await _recorder.stop();
await _audioStreamSubscription?.cancel();
await _audioStream?.close();
}
void handleSubmitted(text) async {
print(text);
_textController.clear();
//TODO Dialogflow Code
}
void handleStream() async {
_recorder.start();
_audioStream = BehaviorSubject<List<int>>();
_audioStreamSubscription = _recorder.audioStream.listen((data) {
print(data);
_audioStream.add(data);
});
// TODO Create SpeechContexts
// Create an audio InputConfig
// TODO Make the streamingDetectIntent call, with the InputConfig and the audioStream
// TODO Get the transcript and detectedIntent and show on screen
}
// The chat interface
//
//------------------------------------------------------------------------------------
@override
Widget build(BuildContext context) {
return Column(children: <Widget>[
Flexible(
child: ListView.builder(
padding: EdgeInsets.all(8.0),
reverse: true,
itemBuilder: (_, int index) => _messages[index],
itemCount: _messages.length,
)),
Divider(height: 1.0),
Container(
decoration: BoxDecoration(color: Theme.of(context).cardColor),
child: IconTheme(
data: IconThemeData(color: Theme.of(context).accentColor),
child: Container(
margin: const EdgeInsets.symmetric(horizontal: 8.0),
child: Row(
children: <Widget>[
Flexible(
child: TextField(
controller: _textController,
onSubmitted: handleSubmitted,
decoration: InputDecoration.collapsed(hintText: "Send a message"),
),
),
Container(
margin: EdgeInsets.symmetric(horizontal: 4.0),
child: IconButton(
icon: Icon(Icons.send),
onPressed: () => handleSubmitted(_textController.text),
),
),
IconButton(
iconSize: 30.0,
icon: Icon(_isRecording ? Icons.mic_off : Icons.mic),
onPressed: _isRecording ? stopStream : handleStream,
),
],
),
),
)
),
]);
}
}
//------------------------------------------------------------------------------------
// The chat message balloon
//
//------------------------------------------------------------------------------------
class ChatMessage extends StatelessWidget {
ChatMessage({this.text, this.name, this.type});
final String text;
final String name;
final bool type;
List<Widget> otherMessage(context) {
return <Widget>[
new Container(
margin: const EdgeInsets.only(right: 16.0),
child: CircleAvatar(child: new Text('B')),
),
new Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(this.name,
style: TextStyle(fontWeight: FontWeight.bold)),
Container(
margin: const EdgeInsets.only(top: 5.0),
child: Text(text),
),
],
),
),
];
}
List<Widget> myMessage(context) {
return <Widget>[
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
Text(this.name, style: Theme.of(context).textTheme.subtitle1),
Container(
margin: const EdgeInsets.only(top: 5.0),
child: Text(text),
),
],
),
),
Container(
margin: const EdgeInsets.only(left: 16.0),
child: CircleAvatar(
child: Text(
this.name[0],
style: TextStyle(fontWeight: FontWeight.bold),
)),
),
];
}
@override
Widget build(BuildContext context) {
return Container(
margin: const EdgeInsets.symmetric(vertical: 10.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: this.type ? myMessage(context) : otherMessage(context),
),
);
}
}
chat.dart ফাইলে Widget build খুঁজুন। এটি চ্যাটবট ইন্টারফেসটি তৈরি করে, যার মধ্যে রয়েছে:
- একটি লিস্টভিউ, যেখানে ব্যবহারকারী এবং চ্যাটবটের সমস্ত চ্যাট বেলুন থাকে। এটি ChatMessage ক্লাস ব্যবহার করে, যা একটি অ্যাভাটার এবং টেক্সট সহ চ্যাট মেসেজ তৈরি করে।
- টেক্সট কোয়েরি প্রবেশ করানোর জন্য টেক্সটফিল্ড
- Dialogflow-তে টেক্সট কোয়েরি পাঠানোর জন্য সেন্ড আইকন সহ আইকনবাটন ।
- Dialogflow-তে অডিও স্ট্রিম পাঠানোর জন্য মাইক্রোফোনসহ একটি আইকনবাটন , যা চাপলে এর অবস্থা পরিবর্তিত হয়।
চ্যাট ইন্টারফেস লিঙ্ক করা
- main.dart ফাইলটি খুলুন এবং
Widget buildপরিবর্তন করুন, যাতে এটি শুধুমাত্রChat()ইন্টারফেসটি ইনস্ট্যানশিয়েট করে। বাকি সব ডেমো কোড মুছে ফেলা যেতে পারে।
import 'package:flutter/material.dart';
import 'chat.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
// This is the theme of your application.
//
// Try running your application with "flutter run". You'll see the
// application has a blue toolbar. Then, without quitting the app, try
// changing the primarySwatch below to Colors.green and then invoke
// "hot reload" (press "r" in the console where you ran "flutter run",
// or simply save your changes to "hot reload" in a Flutter IDE).
// Notice that the counter didn't reset back to zero; the application
// is not restarted.
primarySwatch: Colors.orange,
),
home: MyHomePage(title: 'Flutter Dialogflow Agent'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
// This widget is the home page of your application. It is stateful, meaning
// that it has a State object (defined below) that contains fields that affect
// how it looks.
// This class is the configuration for the state. It holds the values (in this
// case the title) provided by the parent (in this case the App widget) and
// used by the build method of the State. Fields in a Widget subclass are
// always marked "final".
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
// This method is rerun every time setState is called, for instance as done
// by the _incrementCounter method above.
//
// The Flutter framework has been optimized to make rerunning build methods
// fast, so that you can just rebuild anything that needs updating rather
// than having to individually change instances of widgets.
return Scaffold(
appBar: AppBar(
// Here we take the value from the MyHomePage object that was created by
// the App.build method, and use it to set our appbar title.
title: Text(widget.title),
),
body: Center(
// Center is a layout widget. It takes a single child and positions it
// in the middle of the parent.
child: Chat())
);
}
}
- অ্যাপ্লিকেশনটি চালান। ( যদি অ্যাপটি আগে চালু করা হয়ে থাকে, তাহলে ভার্চুয়াল ডিভাইসটি বন্ধ করুন এবং main.dart পুনরায় চালান )। যখন আপনি প্রথমবার চ্যাট ইন্টারফেস সহ আপনার অ্যাপটি চালাবেন, তখন একটি অনুমতি পপ-আপ আসবে, যেখানে জিজ্ঞাসা করা হবে আপনি মাইক্রোফোন ব্যবহারের অনুমতি দিতে চান কিনা। অ্যাপটি ব্যবহার করার সময় ক্লিক করুন।

- টেক্সট এরিয়া এবং বাটনগুলো নিয়ে পরীক্ষা করুন। যখন আপনি কোনো টেক্সট কোয়েরি টাইপ করে এন্টার চাপবেন, অথবা সেন্ড বাটনে ট্যাপ করবেন, তখন অ্যান্ড্রয়েড স্টুডিও-র রান ট্যাবে টেক্সট কোয়েরিটি লগ করা দেখতে পাবেন। যখন আপনি মাইক্রোফোন বাটনে ট্যাপ করে সেটি বন্ধ করবেন, তখন রান ট্যাবে অডিও স্ট্রিমটি লগ করা দেখতে পাবেন।

চমৎকার, আমরা এখন অ্যাপ্লিকেশনটিকে ডায়ালগফ্লো-এর সাথে ইন্টিগ্রেট করার জন্য প্রস্তুত!
আপনার ফ্লাটার অ্যাপকে Dialogflow_gRPC-এর সাথে একীভূত করা
- chat.dart ফাইলটি খুলুন এবং নিম্নলিখিত ইম্পোর্টগুলো যোগ করুন:
import 'package:dialogflow_grpc/dialogflow_grpc.dart';
import 'package:dialogflow_grpc/generated/google/cloud/dialogflow/v2beta1/session.pb.dart';
- ফাইলের একদম উপরে,
// TODO DialogflowGrpcV2Beta1 class instanceঠিক নিচে, Dialogflow ক্লাস ইনস্ট্যান্সটি রাখার জন্য নিম্নলিখিত লাইনটি যোগ করুন:
DialogflowGrpcV2Beta1 dialogflow;
- initPlugin() মেথডটি খুঁজুন এবং TODO কমেন্টের ঠিক নিচে নিম্নলিখিত কোডটি যোগ করুন:
// Get a Service account
final serviceAccount = ServiceAccount.fromString(
'${(await rootBundle.loadString('assets/credentials.json'))}');
// Create a DialogflowGrpc Instance
dialogflow = DialogflowGrpcV2Beta1.viaServiceAccount(serviceAccount);
এটি আপনার গুগল ক্লাউড প্রজেক্টে সার্ভিস অ্যাকাউন্ট দিয়ে অনুমোদিত একটি Dialogflow ইনস্ট্যান্স তৈরি করবে। (নিশ্চিত করুন যে আপনার assets ফোল্ডারে credentials.json ফাইলটি আছে!)
আবার, Dialogflow gRPC কীভাবে ব্যবহার করতে হয় তার ডেমো দেখানোর জন্য এটি ঠিক আছে, কিন্তু প্রোডাকশন অ্যাপের ক্ষেত্রে, আপনি credentials.json ফাইলটি assets ফোল্ডারে রাখতে চাইবেন না, কারণ এটি নিরাপদ বলে বিবেচিত হয় না।
detectIntent কল করা
- এবার
handleSubmitted()মেথডটি খুঁজুন, এখানেই আসল জাদুটা হবে। TODO কমেন্টের ঠিক নিচে নিচের কোডটি যোগ করুন। এই কোডটি ব্যবহারকারীর টাইপ করা মেসেজটি ListView-তে যোগ করবে:
ChatMessage message = ChatMessage(
text: text,
name: "You",
type: true,
);
setState(() {
_messages.insert(0, message);
});
- এখন, আগের কোডের ঠিক নিচে, আমরা detectIntent কলটি করব, যেখানে আমরা ইনপুট থেকে টেক্সট এবং একটি languageCode পাস করব। - ফলাফলটি (
data.queryResult.fulfillmentএর মধ্যে) ListView-তে প্রিন্ট করা হবে:
DetectIntentResponse data = await dialogflow.detectIntent(text, 'en-US');
String fulfillmentText = data.queryResult.fulfillmentText;
if(fulfillmentText.isNotEmpty) {
ChatMessage botMessage = ChatMessage(
text: fulfillmentText,
name: "Bot",
type: false,
);
setState(() {
_messages.insert(0, botMessage);
});
}
- ভার্চুয়াল ডিভাইসটি চালু করুন এবং ডিটেক্ট ইনটেন্ট কলটি পরীক্ষা করুন। টাইপ করুন:
hi। এটি আপনাকে ডিফল্ট স্বাগত বার্তা দিয়ে অভিবাদন জানাবে। আপনি অন্য কিছু টাইপ করলে, এটি আপনাকে ডিফল্ট ফলব্যাকটি ফেরত পাঠাবে।
একটি streamingDetectIntent কল করা হচ্ছে
- এখন
handleStream()মেথডটি খুঁজুন, অডিও স্ট্রিমিংয়ের ক্ষেত্রে আসল জাদুটা এখানেই। প্রথমে প্রথম TODO-এর ঠিক নিচে, ভয়েস মডেলকে বায়াস করার জন্য একটি biasList সহ একটি audio InputConfigV2beta1 তৈরি করুন। যেহেতু আমরা একটি ফোন (ভার্চুয়াল ডিভাইস) ব্যবহার করছি, তাই sampleHertz হবে 16000 এবং এনকোডিং হবে Linear 16। এটি আপনার মেশিনের হার্ডওয়্যার / ব্যবহৃত মাইক্রোফোনের উপর নির্ভর করে। আমার ম্যাকবুকের অভ্যন্তরীণ মাইকের জন্য 16000 যথেষ্ট ছিল। ( https://pub.dev/packages/sound_stream প্যাকেজের তথ্য দেখুন)
var biasList = SpeechContextV2Beta1(
phrases: [
'Dialogflow CX',
'Dialogflow Essentials',
'Action Builder',
'HIPAA'
],
boost: 20.0
);
// See: https://cloud.google.com/dialogflow/es/docs/reference/rpc/google.cloud.dialogflow.v2#google.cloud.dialogflow.v2.InputAudioConfig
var config = InputConfigV2beta1(
encoding: 'AUDIO_ENCODING_LINEAR_16',
languageCode: 'en-US',
sampleRateHertz: 16000,
singleUtterance: false,
speechContexts: [biasList]
);
- এরপরে, আমরা
dialogflowঅবজেক্টের উপরstreamingDetectIntentমেথডটি কল করব, যেটি আমাদের Dialogflow সেশন ধারণ করে:
final responseStream = dialogflow.streamingDetectIntent(config, _audioStream);
- responseStream-এর মাধ্যমে, আমরা অবশেষে আগত ট্রান্সক্রিপ্ট, শনাক্তকৃত ব্যবহারকারীর কোয়েরি, এবং শনাক্তকৃত মিলে যাওয়া ইন্টেন্ট রেসপন্স শুনতে পারি। আমরা এটি স্ক্রিনে একটি
ChatMessageএ প্রিন্ট করব:
// Get the transcript and detectedIntent and show on screen
responseStream.listen((data) {
//print('----');
setState(() {
//print(data);
String transcript = data.recognitionResult.transcript;
String queryText = data.queryResult.queryText;
String fulfillmentText = data.queryResult.fulfillmentText;
if(fulfillmentText.isNotEmpty) {
ChatMessage message = new ChatMessage(
text: queryText,
name: "You",
type: true,
);
ChatMessage botMessage = new ChatMessage(
text: fulfillmentText,
name: "Bot",
type: false,
);
_messages.insert(0, message);
_textController.clear();
_messages.insert(0, botMessage);
}
if(transcript.isNotEmpty) {
_textController.text = transcript;
}
});
},onError: (e){
//print(e);
},onDone: () {
//print('done');
});
ব্যাস, আপনার অ্যাপ্লিকেশনটি চালু করুন এবং ভার্চুয়াল ডিভাইসে এটি পরীক্ষা করুন, মাইক্রোফোন বোতামটি চাপুন এবং বলুন: "হ্যালো" ।
এটি Dialogflow-এর ডিফল্ট ওয়েলকাম ইন্টেন্টটি চালু করবে। ফলাফলগুলো স্ক্রিনে প্রিন্ট করা হবে। যেহেতু এখন Dialogflow ইন্টিগ্রেশনের সাথে Flutter চমৎকারভাবে কাজ করছে, আমরা আমাদের চ্যাটবট কথোপকথন নিয়ে কাজ শুরু করতে পারি।
৫. ডায়ালগফ্লো: ডায়ালগফ্লো এজেন্টের মডেলিং
Dialogflow Essentials হলো কথোপকথনমূলক UI তৈরির জন্য একটি ডেভেলপমেন্ট স্যুট। এর মাধ্যমে চ্যাটবট, ভয়েস বট, ফোন গেটওয়ে তৈরি করা যায়। আপনি এই সবই একই টুল দিয়ে তৈরি করতে পারেন এবং এমনকি ২০টিরও বেশি ভিন্ন ভাষায় একাধিক চ্যানেল সমর্থন করতে পারেন। Dialogflow-এর UX ডিজাইনার (এজেন্ট মডেলার, ভাষাবিদ) বা ডেভেলপাররা একটি অন্তর্নিহিত মেশিন লার্নিং মডেলকে প্রশিক্ষণ দেওয়ার জন্য ট্রেনিং ফ্রেজ নির্দিষ্ট করে ইনটেন্ট তৈরি করেন।
একটি ইন্টেন্ট ব্যবহারকারীর উদ্দেশ্যকে শ্রেণিবদ্ধ করে। প্রতিটি Dialogflow ES এজেন্টের জন্য আপনি একাধিক ইন্টেন্ট সংজ্ঞায়িত করতে পারেন, যেখানে আপনার সম্মিলিত ইন্টেন্টগুলো একটি সম্পূর্ণ কথোপকথন পরিচালনা করতে পারে। প্রতিটি ইন্টেন্টে প্যারামিটার এবং প্রতিক্রিয়া থাকতে পারে।
একটি ইনটেন্ট মেলানোকে ইনটেন্ট ক্লাসিফিকেশন বা ইনটেন্ট ম্যাচিং নামেও পরিচিত। এটিই Dialogflow ES-এর মূল ধারণা। একবার একটি ইনটেন্ট মিলে গেলে, এটি একটি প্রতিক্রিয়া ফেরত দিতে পারে, প্যারামিটার সংগ্রহ করতে পারে (এনটিটি এক্সট্র্যাকশন) অথবা ওয়েবহুক কোড ট্রিগার করতে পারে (ফুলফিলমেন্ট), যেমন—একটি ডাটাবেস থেকে ডেটা আনার জন্য।
যখন কোনো ব্যবহারকারী চ্যাটবটে কিছু লেখেন বা বলেন, যা ব্যবহারকারীর অভিব্যক্তি বা উক্তি হিসাবে পরিচিত, তখন Dialogflow ES প্রশিক্ষণ বাক্যাংশগুলোর উপর ভিত্তি করে সেই অভিব্যক্তিটিকে আপনার Dialogflow এজেন্টের সর্বোত্তম অভিপ্রায়ের সাথে মিলিয়ে নেয়। এর নেপথ্যে থাকা Dialogflow ES মেশিন লার্নিং মডেলটি সেই প্রশিক্ষণ বাক্যাংশগুলোর উপরই প্রশিক্ষিত হয়েছিল।
Dialogflow ES ‘context’ নামক একটি ধারণার উপর ভিত্তি করে কাজ করে। ঠিক মানুষের মতোই, Dialogflow ES দ্বিতীয় এবং তৃতীয়বার কথা বলার সময়ও প্রেক্ষাপট মনে রাখতে পারে। এভাবেই এটি ব্যবহারকারীর পূর্ববর্তী উক্তিগুলোর হিসাব রাখতে পারে।
Dialogflow Intents সম্পর্কে এখানে আরও তথ্য দেওয়া হলো ।
ডিফল্ট ওয়েলকাম ইনটেন্ট পরিবর্তন করা
যখন আপনি একটি নতুন Dialogflow এজেন্ট তৈরি করেন, তখন দুটি ডিফল্ট ইন্টেন্ট স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায়। ডিফল্ট ওয়েলকাম ইন্টেন্ট হলো সেই প্রথম ফ্লো, যেখানে আপনি এজেন্টের সাথে কথোপকথন শুরু করার সময় পৌঁছান। ডিফল্ট ফলব্যাক ইন্টেন্ট হলো সেই ফ্লো, যা আপনি তখন পাবেন যখন এজেন্ট আপনার কথা বুঝতে পারে না অথবা আপনার বলা কথার সাথে কোনো ইন্টেন্ট মেলাতে পারে না।
ডিফল্ট ওয়েলকাম ইনটেন্ট-এর স্বাগত বার্তাটি হলো:
ব্যবহারকারী | এজেন্ট |
হ্যালো | হ্যালো, আমি ডায়ালগফ্লো FAQ বট, আমি ডায়ালগফ্লো সম্পর্কিত প্রশ্নের উত্তর দিতে পারি। |
- ইন্টেন্ট-এ ক্লিক করুন > ডিফল্ট ওয়েলকাম ইন্টেন্ট
- Responses পর্যন্ত নিচে স্ক্রোল করুন।
- সমস্ত টেক্সট উত্তর মুছে ফেলুন।
- ডিফল্ট ট্যাবে, নিম্নলিখিত ২টি প্রতিক্রিয়া তৈরি করুন:
- হ্যালো, আমি ডায়ালগফ্লো FAQ বট। আমি ডায়ালগফ্লো সম্পর্কিত প্রশ্নের উত্তর দিতে পারি। আপনি কী জানতে চান?
- নমস্কার, আমি ডায়ালগফ্লো FAQ বট। ডায়ালগফ্লো সম্পর্কে আপনার কি কোনো প্রশ্ন আছে? আমি কীভাবে সাহায্য করতে পারি?
কনফিগারেশনটি এই স্ক্রিনশটের অনুরূপ হওয়া উচিত।

- সংরক্ষণ করুন ক্লিক করুন
- চলুন এই ইন্টেন্টটি পরীক্ষা করে দেখি। প্রথমে, আমরা এটি Dialogflow Simulator-এ পরীক্ষা করতে পারি। Type: Hello । এটির এই বার্তাগুলোর মধ্যে একটি ফেরত আসা উচিত:
- হ্যালো, আমি ডায়ালগফ্লো FAQ বট। আমি ডায়ালগফ্লো সম্পর্কিত প্রশ্নের উত্তর দিতে পারি। আপনি কী জানতে চান?
- নমস্কার, আমি ডায়ালগফ্লো FAQ বট। ডায়ালগফ্লো সম্পর্কে আপনার কি কোনো প্রশ্ন আছে? আমি কীভাবে সাহায্য করতে পারি?
ডিফল্ট ফলব্যাক ইন্টেন্ট পরিবর্তন করা
- ক্লিক ইন্টেন্ট > ডিফল্ট ফলব্যাক ইন্টেন্ট
- Responses পর্যন্ত নিচে স্ক্রোল করুন।
- সমস্ত টেক্সট উত্তর মুছে ফেলুন।
- ডিফল্ট ট্যাবে, নিম্নলিখিত প্রতিক্রিয়াটি তৈরি করুন:
- দুর্ভাগ্যবশত, আমি এই প্রশ্নের উত্তর জানি না। আপনি কি আমাদের ওয়েবসাইটটি দেখেছেন? http://www.dialogflow.com?
- সংরক্ষণ করুন ক্লিক করুন
একটি অনলাইন জ্ঞানভান্ডারের সাথে সংযোগ স্থাপন
নলেজ কানেক্টরগুলো নির্ধারিত ইনটেন্টগুলোর পরিপূরক হিসেবে কাজ করে। এগুলো স্বয়ংক্রিয় প্রতিক্রিয়া খুঁজে বের করার জন্য নলেজ ডকুমেন্টগুলো পার্স করে। (উদাহরণস্বরূপ, CSV ফাইল, অনলাইন ওয়েবসাইট বা এমনকি PDF ফাইল থেকে প্রায়শই জিজ্ঞাসিত প্রশ্ন (FAQ) বা আর্টিকেল!) এগুলো কনফিগার করতে, আপনাকে এক বা একাধিক নলেজ বেস নির্ধারণ করতে হয়, যা হলো নলেজ ডকুমেন্টের সংগ্রহ।
নলেজ কানেক্টর সম্পর্কে আরও পড়ুন।
চলুন এটা চেষ্টা করে দেখি।
- মেনু থেকে নলেজ (বিটা) নির্বাচন করুন।

- ডানদিকের নীল বোতামটি ক্লিক করুন: নলেজ বেস তৈরি করুন
- নলেজ বেস নাম হিসেবে ‘Dialogflow FAQ’ টাইপ করুন এবং সেভ করুন।
- প্রথমটি তৈরি করুন লিঙ্কে ক্লিক করুন

- এটি একটি উইন্ডো খুলবে।
নিম্নলিখিত কনফিগারেশনটি ব্যবহার করুন:
ডকুমেন্টের নাম: DialogflowFAQ জ্ঞানের ধরণ: FAQ মাইম টাইপ: text/html
- যে URL থেকে আমরা ডেটা লোড করি তা হলো:
https://www.leeboonstra.dev/faqs/
- তৈরি করতে ক্লিক করুন
একটি জ্ঞানভান্ডার তৈরি করা হয়েছে:

- Responses সেকশন পর্যন্ত স্ক্রোল করুন এবং Add Response-এ ক্লিক করুন।
নিম্নলিখিত উত্তরগুলি তৈরি করুন এবং সংরক্ষণ করুন।
$Knowledge.Answer[1]
- বিস্তারিত দেখুন- এ ক্লিক করুন

- FAQ ওয়েবপেজ আপডেট হলে স্বয়ংক্রিয়ভাবে পরিবর্তনগুলো আনার জন্য ‘Enable Automatic Reload’ নির্বাচন করুন এবং সেভ করুন।
এটি Dialogflow-তে আপনার যোগ করা সমস্ত প্রায়শই জিজ্ঞাসিত প্রশ্ন (FAQ) প্রদর্শন করবে। এটা খুবই সহজ!
জেনে রাখুন যে, আপনার এজেন্টে প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী (FAQ) ইম্পোর্ট করার জন্য আপনি একটি অনলাইন HTML ওয়েবসাইটও নির্দেশ করতে পারেন। এমনকি একটি টেক্সট ব্লকসহ পিডিএফ আপলোড করাও সম্ভব, এবং Dialogflow নিজেই প্রশ্নগুলো তৈরি করে দেবে।
এখন FAQ-গুলোকে আপনার ইনটেন্ট ফ্লো-এর পাশাপাশি এজেন্টগুলিতে যোগ করার জন্য 'অতিরিক্ত' বিষয় হিসেবে দেখা উচিত। নলেজ বেস FAQ-গুলো মডেলকে প্রশিক্ষণ দিতে পারে না। তাই সম্পূর্ণ ভিন্নভাবে প্রশ্ন করলেও কোনো মিল নাও পাওয়া যেতে পারে, কারণ এতে ন্যাচারাল ল্যাঙ্গুয়েজ আন্ডারস্ট্যান্ডিং (মেশিন লার্নিং মডেল) ব্যবহার করা হয় না। এই কারণেই কখনও কখনও আপনার FAQ-গুলোকে ইনটেন্টে রূপান্তর করা লাভজনক হয়।
- ডানদিকের সিমুলেটরে প্রশ্নগুলো পরীক্ষা করুন।
- যখন সবকিছু ঠিকঠাক কাজ করবে, তখন আপনার ফ্লাটার অ্যাপে ফিরে যান এবং এই নতুন কন্টেন্ট দিয়ে আপনার চ্যাট ও ভয়েস বট পরীক্ষা করুন! ডায়ালগফ্লোতে লোড করা প্রশ্নগুলো জিজ্ঞাসা করুন।

৬. অভিনন্দন
অভিনন্দন, আপনি Dialogflow চ্যাটবট ইন্টিগ্রেশন সহ আপনার প্রথম Flutter অ্যাপটি সফলভাবে তৈরি করেছেন, খুব ভালো!
আমরা যা আলোচনা করেছি
- Dialogflow Essentials ব্যবহার করে কীভাবে একটি চ্যাটবট তৈরি করবেন
- ফ্লাটার অ্যাপে ডায়ালগফ্লো কীভাবে ইন্টিগ্রেট করবেন
- Dialogflow দিয়ে কীভাবে টেক্সট ইনটেন্ট শনাক্ত করবেন
- মাইক্রোফোনের মাধ্যমে Dialogflow-তে কীভাবে ভয়েস স্ট্রিম করবেন
- নলেজ বেস কানেক্টর কীভাবে ব্যবহার করবেন
এরপর কী?
এই কোড ল্যাবটি কি আপনার ভালো লেগেছে? তাহলে এই চমৎকার Dialogflow ল্যাবগুলোও দেখে নিন!
- গুগল অ্যাসিস্ট্যান্টের সাথে ডায়ালগফ্লো একীভূত করা
- গুগল চ্যাটের সাথে ডায়ালগফ্লো একীভূত করা
- Dialogflow ব্যবহার করে Google Assistant-এর জন্য অ্যাকশন তৈরি করুন (লেভেল ১)
- গুগল ক্যালেন্ডার + এর সাথে ডায়ালগফ্লো সংযুক্ত করে পরিপূর্ণতা উপলব্ধি করুন । আপনার প্রথম ফ্লাটার অ্যাপ তৈরি করুন।
আমি কীভাবে ডার্ট/ফ্লাটারের জন্য Dialogflow gRPC প্যাকেজটি তৈরি করেছি, তা জানতে আগ্রহী?
- গুগল ক্লাউড gRPC API নিয়ে কাজ করার গোপন ম্যানুয়ালটি দেখতে আমার ব্লগ আর্টিকেলটি দেখুন।