ডায়ালগফ্লো এসেনশিয়াল এবং অ্যানড্রয়েডের জন্য ভয়েস বট তৈরি করুন ফ্লাটার

১. শুরু করার আগে

এই কোডল্যাবে, আপনি শিখবেন কিভাবে একটি সাধারণ ডায়ালগফ্লো এসেনশিয়ালস (ES) টেক্সট এবং ভয়েস বটকে একটি ফ্লটার অ্যাপে ইন্টিগ্রেট করতে হয়। ডায়ালগফ্লো ES হল কথোপকথনমূলক UI তৈরির জন্য একটি ডেভেলপমেন্ট স্যুট। সুতরাং চ্যাটবট, ভয়েস বট, ফোন গেটওয়ে। আপনি একই টুল দিয়ে এটি তৈরি করতে পারেন এবং এমনকি আপনি 20 টিরও বেশি ভাষায় একাধিক চ্যানেল সমর্থন করতে পারেন। ডায়ালগফ্লো গুগল অ্যাসিস্ট্যান্ট, স্ল্যাক এবং ফেসবুক মেসেঞ্জারের মতো অনেক জনপ্রিয় কথোপকথন প্ল্যাটফর্মের সাথে ইন্টিগ্রেট করে। আপনি যদি এই প্ল্যাটফর্মগুলির একটির জন্য একটি এজেন্ট তৈরি করতে চান, তাহলে আপনার অনেকগুলি ইন্টিগ্রেশন বিকল্পের মধ্যে একটি ব্যবহার করা উচিত। তবে, মোবাইল ডিভাইসের জন্য একটি চ্যাটবট তৈরি করতে, আপনাকে একটি কাস্টম ইন্টিগ্রেশন তৈরি করতে হবে। একটি অন্তর্নিহিত মেশিন লার্নিং মডেলকে প্রশিক্ষণ দেওয়ার জন্য প্রশিক্ষণ বাক্যাংশ নির্দিষ্ট করে আপনি উদ্দেশ্য তৈরি করবেন।

এই ল্যাবটি একটি সাধারণ ক্লাউড ডেভেলপার অভিজ্ঞতা প্রতিফলিত করার জন্য তৈরি করা হয়েছে:

  1. পরিবেশ সেটআপ
  • ডায়ালগফ্লো: একটি নতুন ডায়ালগফ্লো ইএস এজেন্ট তৈরি করুন
  • ডায়ালগফ্লো: ডায়ালগফ্লো কনফিগার করুন
  • গুগল ক্লাউড: একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন
  1. ফ্লাটার: একটি চ্যাট অ্যাপ্লিকেশন তৈরি করা
  • একটি ফ্লাটার প্রকল্প তৈরি করা
  • সেটিংস এবং অনুমতি কনফিগার করা
  • নির্ভরতা যোগ করা হচ্ছে
  • পরিষেবা অ্যাকাউন্টের সাথে লিঙ্ক করা।
  • ভার্চুয়াল ডিভাইস বা ফিজিক্যাল ডিভাইসে অ্যাপ্লিকেশন চালানো
  1. ফ্লাটার: স্পিচ টু টেক্সট সাপোর্টের মাধ্যমে চ্যাট ইন্টারফেস তৈরি করা
  • চ্যাট ইন্টারফেস তৈরি করা হচ্ছে
  • চ্যাট ইন্টারফেস লিঙ্ক করা হচ্ছে
  • অ্যাপে Dialogflow gRPC প্যাকেজ ইন্টিগ্রেট করা
  1. ডায়ালগফ্লো: ডায়ালগফ্লো এজেন্টের মডেলিং
  • স্বাগত এবং ফলব্যাক ইন্টেন্ট কনফিগার করুন
  • একটি FAQ জ্ঞান ভিত্তি ব্যবহার করুন

পূর্বশর্ত

  • মৌলিক ডার্ট/ফ্লাটার অভিজ্ঞতা
  • গুগল ক্লাউড প্ল্যাটফর্মের মৌলিক অভিজ্ঞতা
  • ডায়ালগফ্লো ইএস এর সাথে মৌলিক অভিজ্ঞতা

তুমি কী তৈরি করবে

এই কোডল্যাবটি আপনাকে দেখাবে কিভাবে একটি মোবাইল FAQ বট তৈরি করতে হয়, যা Dialogflow টুল সম্পর্কে বেশিরভাগ সাধারণ প্রশ্নের উত্তর দিতে পারে। ব্যবহারকারীরা টেক্সট ইন্টারফেসের সাথে ইন্টারঅ্যাক্ট করতে পারেন অথবা উত্তর পেতে মোবাইল ডিভাইসের অন্তর্নির্মিত মাইক্রোফোনের মাধ্যমে ভয়েস স্ট্রিম করতে পারেন।

তুমি কি শিখবে

  • ডায়ালগফ্লো এসেনশিয়ালস দিয়ে কীভাবে একটি চ্যাটবট তৈরি করবেন
  • Dialogflow gRPC প্যাকেজের সাহায্যে Dialogflow কে একটি Flutter অ্যাপে কীভাবে একীভূত করবেন
  • ডায়ালগফ্লো ব্যবহার করে টেক্সট ইন্টেন্ট কীভাবে সনাক্ত করা যায়
  • মাইক্রোফোনের মাধ্যমে ডায়ালগফ্লোতে কীভাবে ভয়েস স্ট্রিম করবেন
  • পাবলিক FAQ আমদানি করতে নলেজ বেস সংযোগকারী কীভাবে ব্যবহার করবেন
  • ভার্চুয়াল বা ফিজিক্যাল ডিভাইসে টেক্সট এবং ভয়েস ইন্টারফেসের মাধ্যমে চ্যাটবটটি পরীক্ষা করুন।

তোমার যা লাগবে

  • একটি Dialogflow এজেন্ট তৈরি করতে আপনার একটি Google পরিচয় / Gmail ঠিকানার প্রয়োজন হবে।
  • একটি পরিষেবা অ্যাকাউন্ট ডাউনলোড করার জন্য আপনার Google ক্লাউড প্ল্যাটফর্ম অ্যাক্সেসের প্রয়োজন হবে
  • একটি ফ্লাটার ডেভেলপমেন্ট পরিবেশ

আপনার Flutter ডেভেলপমেন্ট সেট আপ করুন

  1. আপনি যে অপারেটিং সিস্টেমে Flutter ইনস্টল করছেন তা নির্বাচন করুন।
  1. আপনি আমাদের কমান্ড-লাইন টুলের সাথে যেকোনো টেক্সট এডিটর ব্যবহার করে Flutter দিয়ে অ্যাপ তৈরি করতে পারেন। তবে, এই কর্মশালায় Android Studio ব্যবহার করা হবে। Android Studio-এর Flutter এবং Dart প্লাগইনগুলি আপনাকে কোড সম্পূর্ণকরণ, সিনট্যাক্স হাইলাইটিং, উইজেট সম্পাদনা সহায়তা, রান এবং ডিবাগ সমর্থন এবং আরও অনেক কিছু প্রদান করে। https://flutter.dev/docs/get-started/editor- এ ধাপগুলি অনুসরণ করুন।

2. পরিবেশ সেটআপ

ডায়ালগফ্লো: একটি নতুন ডায়ালগফ্লো ইএস এজেন্ট তৈরি করুন

  1. খুলুন
  2. বাম বারে, লোগোর ঠিক নীচে, ড্রপডাউনে " নতুন এজেন্ট তৈরি করুন " নির্বাচন করুন। (দ্রষ্টব্য, "গ্লোবাল" লেখা ড্রপডাউনে ক্লিক করবেন না, FAQ জ্ঞান ভিত্তি ব্যবহার করার জন্য আমাদের একটি গ্লোবাল ডায়ালগফ্লো ইনস্ট্যান্সের প্রয়োজন হবে।)
  3. এজেন্টের নাম উল্লেখ করুন yourname-dialogflow (আপনার নিজের নাম ব্যবহার করুন)
  4. ডিফল্ট ভাষা হিসেবে, ইংরেজি - en বেছে নিন।
  5. ডিফল্ট সময় অঞ্চল হিসেবে, আপনার সবচেয়ে কাছের সময় অঞ্চলটি বেছে নিন।
  6. মেগা এজেন্ট নির্বাচন করবেন না । (এই বৈশিষ্ট্যের সাহায্যে আপনি একটি ওভারআর্চিং এজেন্ট তৈরি করতে পারেন, যা "সাব" এজেন্টদের মধ্যে সমন্বয় করতে পারে। আমাদের এখন এটির প্রয়োজন নেই।)
  7. তৈরি করুন ক্লিক করুন।

নতুন প্রকল্প পর্দা তৈরি করুন

ডায়ালগফ্লো কনফিগার করুন

  1. আপনার প্রকল্পের নামের পাশে বাম মেনুতে গিয়ার আইকনে ক্লিক করুন।

নতুন প্রকল্পের ড্রপডাউন তৈরি করুন

  1. নিম্নলিখিত এজেন্টের বিবরণ লিখুন: ডায়ালগফ্লো FAQ চ্যাটবট
  2. বিটা বৈশিষ্ট্যগুলি সক্ষম করুন , সুইচটি উল্টান।

ডায়ালগফ্লো এসেনশিয়ালস V2Beta1

  1. স্পিচ ট্যাবে ক্লিক করুন এবং নিশ্চিত করুন যে অটো স্পিচ অ্যাডাপ্টেশন বক্সটি সক্রিয় আছে।
  2. ঐচ্ছিকভাবে, আপনি প্রথম সুইচটিও উল্টাতে পারেন, এটি স্পিচ মডেলকে উন্নত করবে, তবে এটি কেবল তখনই উপলব্ধ যখন আপনি ডায়ালগফ্লো ট্রায়াল আপগ্রেড করবেন।
  3. সংরক্ষণ করুন ক্লিক করুন

গুগল ক্লাউড: একটি পরিষেবা অ্যাকাউন্ট পান

Dialogflow-এ এজেন্ট তৈরি করার পর, Google Cloud কনসোলে একটি Google Cloud প্রকল্প তৈরি করা উচিত।

  1. গুগল ক্লাউড কনসোল খুলুন:
  2. নিশ্চিত করুন যে আপনি Dialogflow-এ থাকা একই Google অ্যাকাউন্ট দিয়ে লগ ইন করেছেন এবং উপরের নীল বারে project: yourname-dialogflow নির্বাচন করুন।
  3. এরপর, উপরের টুলবারে Dialogflow API অনুসন্ধান করুন এবং ড্রপডাউনে Dialogflow API ফলাফলে ক্লিক করুন।

Dialogflow API সক্ষম করুন

  1. নীল রঙের Manage বাটনে ক্লিক করুন, এবং বাম মেনু বারে Credentials- এ ক্লিক করুন। (যখন Dialogflow এখনও সক্রিয় না থাকে, তখন প্রথমে Enable-এ ক্লিক করুন)

শংসাপত্র GCP কনসোল

  1. আপনার স্ক্রিনের উপরে থাকা ক্রেডেনশিয়াল তৈরি করুন -এ ক্লিক করুন এবং পরিষেবা অ্যাকাউন্ট নির্বাচন করুন।

শংসাপত্র তৈরি করুন

  1. একটি পরিষেবা অ্যাকাউন্টের নাম উল্লেখ করুন: flutter_dialogflow , আইডি এবং বিবরণ, এবং Create টিপুন।

একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন

  1. ধাপ ২-এ, আপনাকে ভূমিকাটি নির্বাচন করতে হবে: Dialogflow API Admin , Continue এবং Done এ ক্লিক করুন।
  2. flutter_dialogflow পরিষেবা অ্যাকাউন্টে ক্লিক করুন, কী ট্যাবে ক্লিক করুন এবং কী যোগ করুন > নতুন কী তৈরি করুন টিপুন।

কী তৈরি করুন

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

JSON কী

নিখুঁত, আমাদের প্রয়োজনীয় সমস্ত সরঞ্জাম সঠিকভাবে সেট আপ করা হয়েছে। আমরা এখন আমাদের অ্যাপে Dialogflow ইন্টিগ্রেট করে শুরু করতে পারি!

৩. ফ্লাটার: চ্যাট অ্যাপ্লিকেশন তৈরি করা

বয়লারপ্লেট অ্যাপ তৈরি করুন

  1. অ্যান্ড্রয়েড স্টুডিও খুলুন এবং একটি নতুন ফ্লটার প্রকল্প শুরু করুন নির্বাচন করুন।
  2. প্রজেক্টের ধরণ হিসেবে Flutter Application নির্বাচন করুন। তারপর Next এ ক্লিক করুন।
  3. Flutter SDK পাথটি SDK-এর অবস্থান নির্দিষ্ট করে তা যাচাই করুন (যদি টেক্সট ফিল্ডটি ফাঁকা থাকে তবে SDK ইনস্টল করুন... নির্বাচন করুন)।
  4. একটি প্রকল্পের নাম লিখুন (উদাহরণস্বরূপ, flutter_dialogflow_agent )। তারপর Next এ ক্লিক করুন।
  5. প্যাকেজের নাম পরিবর্তন করুন এবং Finish এ ক্লিক করুন।

নতুন ফ্লাটার অ্যাপ্লিকেশন তৈরি করুন

এটি Material Components সহ একটি নমুনা অ্যাপ্লিকেশন তৈরি করবে।

অ্যান্ড্রয়েড স্টুডিও SDK ইনস্টল করে প্রকল্পটি তৈরি করার জন্য অপেক্ষা করুন।

সেটিংস এবং অনুমতি

  1. আমরা যে অডিও রেকর্ডার লাইব্রেরি sound_stream ব্যবহার করব, তার জন্য কমপক্ষে 21 minSdk প্রয়োজন। তাহলে defaultConfig ব্লকের android/app/build.gradle- এ এটি পরিবর্তন করা যাক। (দ্রষ্টব্য, android ফোল্ডারে 2টি build.gradle ফাইল আছে, কিন্তু app ফোল্ডারে থাকা ফাইলটি সঠিক।)
defaultConfig {
   applicationId "com.myname.flutter_dialogflow_agent"
   minSdkVersion 21
   targetSdkVersion 30
   versionCode flutterVersionCode.toInteger()
   versionName flutterVersionName
}
  1. মাইক্রোফোনকে অনুমতি দিতে এবং অ্যাপটিকে ক্লাউডে চলমান Dialogflow এজেন্টের সাথে যোগাযোগ করতে দিতে, আমাদের app/src/main/AndroidManifest.xml ফাইলে ইন্টারনেট এবং RECORD_AUDIO অনুমতি যোগ করতে হবে। আপনার Flutter প্রজেক্টে একাধিক AndroidManifest.xml ফাইল আছে, তবে আপনার মূল ফোল্ডারে থাকা একটি ফাইলের প্রয়োজন হবে। আপনি ম্যানিফেস্ট ট্যাগের ঠিক ভিতরে লাইনগুলি যোগ করতে পারেন।
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />

নির্ভরতা যোগ করা হচ্ছে

আমরা sound_stream , rxdart এবং dialogflow_grpc প্যাকেজ ব্যবহার করব।

  1. 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!
  1. 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!
  1. 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!

পরিষেবা অ্যাকাউন্ট এবং Google ক্লাউড প্রোজেক্টের তথ্য লোড করা হচ্ছে

  1. আপনার প্রকল্পে একটি ডিরেক্টরি তৈরি করুন এবং এর নাম দিন: assets
  2. গুগল ক্লাউড কনসোল থেকে ডাউনলোড করা credentials.json ফাইলটি assets ফোল্ডারে সরান।
  3. pubspec.yaml খুলুন এবং ফ্লাটার ব্লকে পরিষেবা অ্যাকাউন্ট যোগ করুন।
flutter:
  uses-material-design: true
  assets:
    - assets/credentials.json

একটি ফিজিক্যাল ডিভাইসে অ্যাপ্লিকেশন চালানো

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

একটি ভার্চুয়াল ডিভাইসে অ্যাপ্লিকেশনটি চালানো

যদি আপনি একটি ভার্চুয়াল ডিভাইসে অ্যাপ্লিকেশনটি চালাতে চান, তাহলে নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন:

  1. Tools> AVD Manager এ ক্লিক করুন। (অথবা উপরের টুলবার থেকে AVD Manager নির্বাচন করুন, নিচের চিত্রে এটি গোলাপী রঙে হাইলাইট করা হয়েছে)

অ্যান্ড্রয়েড স্টুডিওর শীর্ষ টুলবার

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

AVD গুলি পরিচালনা করুন

ভার্চুয়াল ডিভাইস

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

IDE এর নীচে, আপনি কনসোলের লগগুলি দেখতে পাবেন। আপনি লক্ষ্য করবেন যে এটি Android এবং আপনার স্টার্টার ফ্লাটার অ্যাপ ইনস্টল করছে। এতে এক মিনিট সময় লাগবে, ভার্চুয়াল ডিভাইসটি প্রস্তুত হয়ে গেলে, পরিবর্তনগুলি করা খুব দ্রুত হবে। আপনার সবকিছু সম্পন্ন হলে, এটি স্টার্টার ফ্লাটার অ্যাপটি খুলবে।

বয়লারপ্লেট অ্যাপ

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

AVD বিকল্পগুলি

  1. কত দ্রুত পরিবর্তন করা যায় তা দেখানোর জন্য চলুন হট রিলোড ব্যবহার করে দেখি।

lib/main.dart এ, MyApp ক্লাসে MyHomePage শিরোনামটি পরিবর্তন করুন: Flutter Dialogflow Agent । এবং primarySwatch কে Colors.orange এ পরিবর্তন করুন।

প্রথম কোড

ফাইলটি সংরক্ষণ করুন , অথবা অ্যান্ড্রয়েড স্টুডিও টুলবারের বোল্ট আইকনে ক্লিক করুন। আপনি ভার্চুয়াল ডিভাইসে সরাসরি পরিবর্তনটি দেখতে পাবেন।

৪. ফ্লাটার: STT সাপোর্টের মাধ্যমে চ্যাট ইন্টারফেস তৈরি করা

চ্যাট ইন্টারফেস তৈরি করা হচ্ছে

  1. lib ফোল্ডারে একটি নতুন Flutter উইজেট ফাইল তৈরি করুন। (lib ফোল্ডারে ডান-ক্লিক করুন, New > Flutter Widget > Stateful widget ), এই ফাইলটিকে কল করুন: chat.dart

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

// 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 এর জন্য অনুসন্ধান করুন। এটি চ্যাটবট ইন্টারফেস তৈরি করে, যার মধ্যে রয়েছে:

  • ListView-এ ব্যবহারকারী এবং চ্যাটবটের সমস্ত চ্যাট বেলুন থাকে। এটি ChatMessage ক্লাস ব্যবহার করে, যা অবতার এবং টেক্সট সহ চ্যাট বার্তা তৈরি করে।
  • টেক্সট কোয়েরি প্রবেশের জন্য টেক্সটফিল্ড
  • ডায়ালগফ্লোতে টেক্সট কোয়েরি পাঠানোর জন্য, সেন্ড আইকন সহ আইকন বোতাম
  • ডায়ালগফ্লোতে অডিও স্ট্রিম পাঠানোর জন্য একটি মাইক্রোফোন সহ আইকনবাটন , যা একবার চাপলে অবস্থা পরিবর্তন করে।

চ্যাট ইন্টারফেস লিঙ্ক করা হচ্ছে

  1. 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())
    );
  }
}
  1. অ্যাপ্লিকেশনটি চালান। ( যদি অ্যাপটি আগে শুরু করা হয়ে থাকে। ভার্চুয়াল ডিভাইসটি বন্ধ করুন এবং main.dart পুনরায় চালান )। যখন আপনি প্রথমবার চ্যাট ইন্টারফেস দিয়ে আপনার অ্যাপটি চালাবেন। তখন আপনি একটি অনুমতি পপ-আপ পাবেন, যেখানে জিজ্ঞাসা করা হবে যে আপনি মাইক্রোফোনটি অনুমতি দিতে চান কিনা। ক্লিক করুন: অ্যাপটি ব্যবহার করার সময়

অনুমতিসমূহ

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

অডিও স্ট্রিম লগ

দারুন, আমরা এখন অ্যাপ্লিকেশনটি Dialogflow এর সাথে ইন্টিগ্রেট করতে প্রস্তুত!

আপনার ফ্লাটার অ্যাপকে Dialogflow_gRPC এর সাথে একীভূত করা

  1. chat.dart খুলুন এবং নিম্নলিখিত আমদানিগুলি যোগ করুন:
import 'package:dialogflow_grpc/dialogflow_grpc.dart';
import 'package:dialogflow_grpc/generated/google/cloud/dialogflow/v2beta1/session.pb.dart';
  1. ফাইলের উপরের দিকে, // TODO DialogflowGrpcV2Beta1 class instance ঠিক নীচে, Dialogflow ক্লাস ইনস্ট্যান্স ধরে রাখতে নিম্নলিখিত লাইনটি যোগ করুন:
DialogflowGrpcV2Beta1 dialogflow;
  1. initPlugin() পদ্ধতিটি অনুসন্ধান করুন এবং TODO মন্তব্যের ঠিক নীচে নিম্নলিখিত কোডটি যুক্ত করুন:
    // Get a Service account
    final serviceAccount = ServiceAccount.fromString(
        '${(await rootBundle.loadString('assets/credentials.json'))}');
    // Create a DialogflowGrpc Instance
    dialogflow = DialogflowGrpcV2Beta1.viaServiceAccount(serviceAccount);

এটি আপনার Google ক্লাউড প্রোজেক্টের জন্য পরিষেবা অ্যাকাউন্টের সাথে অনুমোদিত একটি Dialogflow ইনস্ট্যান্স তৈরি করবে। (নিশ্চিত করুন যে আপনার সম্পদ ফোল্ডারে credentials.json আছে!)

আবার, Dialogflow gRPC এর সাথে কীভাবে কাজ করবেন তার ডেমো উদ্দেশ্যে এটি ঠিক আছে, কিন্তু প্রোডাকশন অ্যাপের জন্য, আপনি credentials.json ফাইলটি assets ফোল্ডারে সংরক্ষণ করতে চান না, কারণ এটি নিরাপদ বলে বিবেচিত হয় না।

একটি ডিটেক্টইন্টেন্ট কল করা হচ্ছে

  1. এবার handleSubmitted() মেথডটি খুঁজুন, এখানেই ম্যাজিকটি কাজ করে। TODO কমেন্টের ঠিক নীচে, নিম্নলিখিত কোডটি যোগ করুন। এই কোডটি ব্যবহারকারীর টাইপ করা বার্তাটি ListView-এ যোগ করবে:
ChatMessage message = ChatMessage(
 text: text,
 name: "You",
 type: true,
);

setState(() {
 _messages.insert(0, message);
});
  1. এখন, পূর্ববর্তী কোডের ঠিক নীচে, আমরা 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);
  });
}
  1. ভার্চুয়াল ডিভাইসটি চালু করুন এবং ডিটেক্ট ইনটেন্ট কলটি পরীক্ষা করুন। টাইপ করুন: hiএটি আপনাকে ডিফল্ট স্বাগত বার্তা দিয়ে স্বাগত জানাবে। যখন আপনি অন্য কিছু টাইপ করবেন, তখন এটি আপনাকে ডিফল্ট ফলব্যাক ফিরিয়ে দেবে।

স্ট্রিমিং ডিটেক্টইন্টেন্ট কল করা

  1. এবার handleStream() পদ্ধতিটি খুঁজুন, এখানেই অডিও স্ট্রিমিংয়ের জাদু কাজ করে। প্রথমে প্রথম TODO-এর ঠিক নীচে, ভয়েস মডেলকে বাইসা করার জন্য biasList সহ একটি অডিও 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]
);
  1. এরপর, আমরা dialogflow অবজেক্টে streamingDetectIntent মেথডটি কল করব, যা আমাদের Dialogflow সেশন ধরে রাখে:
final responseStream = dialogflow.streamingDetectIntent(config, _audioStream);
  1. 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 ডিফল্ট স্বাগতম অভিপ্রায়কে ট্রিগার করবে। ফলাফলগুলি স্ক্রিনে মুদ্রিত হবে। এখন যেহেতু Flutter Dialogflow ইন্টিগ্রেশনের সাথে দুর্দান্ত কাজ করে, আমরা আমাদের চ্যাটবট কথোপকথনে কাজ শুরু করতে পারি।

৫. ডায়ালগফ্লো: ডায়ালগফ্লো এজেন্টের মডেলিং

ডায়ালগফ্লো এসেনশিয়ালস হল কথোপকথনের UI তৈরির জন্য একটি ডেভেলপমেন্ট স্যুট। সুতরাং চ্যাটবট, ভয়েস বট, ফোন গেটওয়ে। আপনি একই টুল দিয়ে এটি তৈরি করতে পারেন এবং এমনকি আপনি 20 টিরও বেশি ভাষায় একাধিক চ্যানেল সমর্থন করতে পারেন। ডায়ালগফ্লো ইউএক্স ডিজাইনার (এজেন্ট মডেলার, ভাষাবিদ) বা ডেভেলপাররা একটি অন্তর্নিহিত মেশিন লার্নিং মডেলকে প্রশিক্ষণ দেওয়ার জন্য প্রশিক্ষণ বাক্যাংশ নির্দিষ্ট করে উদ্দেশ্য তৈরি করে।

একটি ইন্টেন্ট একজন ব্যবহারকারীর অভিপ্রায়কে শ্রেণীবদ্ধ করে। প্রতিটি ডায়ালগফ্লো ইএস এজেন্টের জন্য, আপনি অনেকগুলি অভিপ্রায় নির্ধারণ করতে পারেন, যেখানে আপনার সম্মিলিত অভিপ্রায়গুলি একটি সম্পূর্ণ কথোপকথন পরিচালনা করতে পারে। প্রতিটি অভিপ্রায় প্যারামিটার এবং প্রতিক্রিয়া ধারণ করতে পারে।

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

যখন একজন শেষ-ব্যবহারকারী চ্যাটবটে কিছু লেখেন বা বলেন, যাকে ব্যবহারকারীর অভিব্যক্তি বা উচ্চারণ বলা হয়, তখন Dialogflow ES প্রশিক্ষণ বাক্যাংশের উপর ভিত্তি করে আপনার Dialogflow এজেন্টের সর্বোত্তম অভিপ্রায়ের সাথে অভিব্যক্তিটি মেলায়। আন্ডার হুড Dialogflow ES মেশিন লার্নিং মডেলটি সেই প্রশিক্ষণ বাক্যাংশগুলির উপর প্রশিক্ষিত ছিল।

Dialogflow ES কনটেক্সট নামক একটি ধারণার সাথে কাজ করে। ঠিক একজন মানুষের মতো, Dialogflow ES দ্বিতীয় এবং তৃতীয় পালাক্রমে কনটেক্সট মনে রাখতে পারে। এইভাবে এটি পূর্ববর্তী ব্যবহারকারীর উচ্চারণ ট্র্যাক করতে পারে।

এখানে Dialogflow Intents সম্পর্কে আরও তথ্য রয়েছে

ডিফল্ট স্বাগতম অভিপ্রায় পরিবর্তন করা

যখন আপনি একটি নতুন Dialogflow এজেন্ট তৈরি করবেন, তখন দুটি ডিফল্ট ইন্টেন্ট স্বয়ংক্রিয়ভাবে তৈরি হবে। এজেন্টের সাথে কথোপকথন শুরু করার সময় আপনি প্রথম যে ফ্লোতে পাবেন, সেটি হল Default Welcome Intent । এজেন্ট আপনাকে বুঝতে না পারলে বা আপনি যা বলেছেন তার সাথে কোনও ইন্টেন্ট মেলাতে না পারলে আপনি যে ফ্লোটি পাবেন, সেটি হল Default Fallback Intent

ডিফল্ট ওয়েলকাম ইন্টেন্টের জন্য স্বাগত বার্তাটি এখানে:

ব্যবহারকারী

এজেন্ট

এই যে!

"হাই, আমি Dialogflow FAQ বট, আমি Dialogflow-এর প্রশ্নের উত্তর দিতে পারি।"

"তুমি কী জানতে চাও?"

  1. ইন্টেন্ট > ডিফল্ট ওয়েলকাম ইন্টেন্ট ক্লিক করুন।
  2. Response- এ নিচে স্ক্রোল করুন।
  3. সমস্ত টেক্সট প্রতিক্রিয়া সাফ করুন।
  4. ডিফল্ট ট্যাবে, নিম্নলিখিত 2টি প্রতিক্রিয়া তৈরি করুন:
  • হাই, আমি Dialogflow FAQ বট, আমি Dialogflow-এর প্রশ্নের উত্তর দিতে পারি। আপনি কী জানতে চান?
  • হাউডি, আমি Dialogflow FAQ বট, Dialogflow সম্পর্কে আপনার কি কোন প্রশ্ন আছে? আমি কিভাবে সাহায্য করতে পারি?

কনফিগারেশনটি এই স্ক্রিনশটের মতো হওয়া উচিত।

ডিফল্ট স্বাগতম অভিপ্রায় সম্পাদনা করুন

  1. সংরক্ষণ করুন ক্লিক করুন
  2. আসুন এই ইন্টেন্টটি পরীক্ষা করি। প্রথমে, আমরা এটি Dialogflow Simulator.Type: Hello তে পরীক্ষা করতে পারি। এটি নিম্নলিখিত বার্তাগুলির মধ্যে একটি ফেরত দেবে:
  • হাই, আমি Dialogflow FAQ বট, আমি Dialogflow-এর প্রশ্নের উত্তর দিতে পারি। আপনি কী জানতে চান?
  • হাউডি, আমি Dialogflow FAQ বট, Dialogflow সম্পর্কে আপনার কি কোন প্রশ্ন আছে? আমি কিভাবে সাহায্য করতে পারি?

ডিফল্ট ফলব্যাক ইন্টেন্ট পরিবর্তন করা

  1. ইন্টেন্ট > ডিফল্ট ফলব্যাক ইন্টেন্টে ক্লিক করুন।
  2. Response- এ নিচে স্ক্রোল করুন।
  3. সমস্ত টেক্সট প্রতিক্রিয়া সাফ করুন।
  4. ডিফল্ট ট্যাবে, নিম্নলিখিত প্রতিক্রিয়া তৈরি করুন:
  • দুর্ভাগ্যবশত আমি এই প্রশ্নের উত্তর জানি না। আপনি কি আমাদের ওয়েবসাইটটি দেখেছেন? http://www.dialogflow.com?
  1. সংরক্ষণ করুন ক্লিক করুন

একটি অনলাইন নলেজ বেসের সাথে সংযোগ স্থাপন করা

জ্ঞান সংযোগকারীরা সংজ্ঞায়িত উদ্দেশ্যের পরিপূরক। তারা স্বয়ংক্রিয় প্রতিক্রিয়া খুঁজে পেতে জ্ঞান নথি বিশ্লেষণ করে। (উদাহরণস্বরূপ, CSV ফাইল, অনলাইন ওয়েবসাইট, এমনকি PDF ফাইল থেকে প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী বা নিবন্ধ!) এগুলি কনফিগার করার জন্য, আপনি এক বা একাধিক জ্ঞান ভিত্তি সংজ্ঞায়িত করেন, যা জ্ঞান নথির সংগ্রহ।

নলেজ কানেক্টর সম্পর্কে আরও পড়ুন।

চলো এটা চেষ্টা করে দেখি।

  1. মেনু থেকে Knowledge (beta) নির্বাচন করুন।

জ্ঞান ভাণ্ডার

  1. ডান নীল বোতামে ক্লিক করুন: জ্ঞান ভাণ্ডার তৈরি করুন
  2. নলেজ বেস নাম হিসেবে টাইপ করুন; ডায়ালগফ্লো FAQ এবং সেভ টিপুন।
  3. প্রথম লিঙ্ক তৈরি করুন ক্লিক করুন

জ্ঞান ভাণ্ডার প্রথমটি

  1. এটি একটি উইন্ডো খুলবে।

নিম্নলিখিত কনফিগারেশনটি ব্যবহার করুন:

ডকুমেন্টের নাম: DialogflowFAQ জ্ঞানের ধরণ: FAQ মাইম প্রকার: text/html

  1. আমরা যে URL থেকে ডেটা লোড করি তা হল:

https://www.leeboonstra.dev/faqs/

  1. তৈরি করুন ক্লিক করুন

একটি জ্ঞান ভাণ্ডার তৈরি করা হয়েছে:

জ্ঞান ভাণ্ডার তৈরি হয়েছে

  1. "প্রতিক্রিয়া" বিভাগে স্ক্রোল করুন এবং "প্রতিক্রিয়া যোগ করুন" এ ক্লিক করুন।

নিম্নলিখিত উত্তরগুলি তৈরি করুন এবং সংরক্ষণ করুন টিপুন।

$Knowledge.Answer[1]
  1. বিস্তারিত দেখুন ক্লিক করুন

বিস্তারিত দেখুন

  1. FAQ ওয়েবপেজ আপডেট হলে স্বয়ংক্রিয়ভাবে পরিবর্তনগুলি আনতে স্বয়ংক্রিয়ভাবে পুনরায় লোড সক্ষম করুন নির্বাচন করুন এবং সংরক্ষণ করুন টিপুন।

এটি Dialogflow-এ আপনার দ্বারা বাস্তবায়িত সমস্ত FAQ প্রদর্শন করবে। এটা সহজ!

জেনে রাখুন যে আপনি আপনার এজেন্টের কাছে FAQ গুলি আমদানি করার জন্য FAQ সহ একটি অনলাইন HTML ওয়েবসাইটও নির্দেশ করতে পারেন। এমনকি টেক্সটের একটি ব্লক সহ একটি PDF আপলোড করাও সম্ভব, এবং Dialogflow নিজেই প্রশ্নগুলি নিয়ে আসবে।

এখন প্রায়শই জিজ্ঞাসিত প্রশ্নাবলীকে আপনার এজেন্টদের সাথে যোগ করার জন্য 'অতিরিক্ত' হিসেবে দেখা উচিত, যা আপনার উদ্দেশ্য প্রবাহের পাশে থাকবে। জ্ঞানভিত্তিক প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী মডেলটিকে প্রশিক্ষণ দিতে পারে না। তাই সম্পূর্ণ ভিন্ন উপায়ে প্রশ্ন জিজ্ঞাসা করলে, মিল নাও পেতে পারে কারণ এটি প্রাকৃতিক ভাষা বোঝার (মেশিন লার্নিং মডেল) কোনও ব্যবহার করে না। এই কারণেই কখনও কখনও আপনার প্রায়শই জিজ্ঞাসিত প্রশ্নাবলীকে উদ্দেশ্যগুলিতে রূপান্তর করা মূল্যবান।

  1. ডানদিকের সিমুলেটরে প্রশ্নগুলি পরীক্ষা করুন।
  2. সবকিছু ঠিক হয়ে গেলে, আপনার Flutter অ্যাপে ফিরে যান এবং এই নতুন কন্টেন্ট দিয়ে আপনার চ্যাট এবং ভয়েস বট পরীক্ষা করুন! Dialogflow-এ লোড করা প্রশ্নগুলি জিজ্ঞাসা করুন।

ফলাফল

৬. অভিনন্দন

অভিনন্দন, আপনি সফলভাবে একটি Dialogflow চ্যাটবট ইন্টিগ্রেশনের মাধ্যমে আপনার প্রথম Flutter অ্যাপ তৈরি করেছেন, দারুন!

আমরা যা কভার করেছি

  • ডায়ালগফ্লো এসেনশিয়ালস দিয়ে কীভাবে একটি চ্যাটবট তৈরি করবেন
  • কিভাবে একটি Flutter অ্যাপে Dialogflow ইন্টিগ্রেট করবেন
  • ডায়ালগফ্লো ব্যবহার করে টেক্সট ইন্টেন্ট কীভাবে সনাক্ত করা যায়
  • মাইক্রোফোনের মাধ্যমে ডায়ালগফ্লোতে কীভাবে ভয়েস স্ট্রিম করবেন
  • নলেজ বেস সংযোগকারী কীভাবে ব্যবহার করবেন

এরপর কী?

এই কোড ল্যাবটি উপভোগ করেছেন? এই দুর্দান্ত ডায়ালগফ্লো ল্যাবগুলি একবার দেখে নিন!

ডার্ট/ফ্লাটারের জন্য আমি কীভাবে ডায়ালগফ্লো জিআরপিসি প্যাকেজ তৈরি করেছি তাতে আগ্রহী?