ট্রিভিয়া গেমগুলি একটি আকর্ষক এবং শিক্ষামূলক অভিজ্ঞতা প্রদান করে যেখানে আপনি নতুন তথ্য শিখতে পারেন এবং বিভিন্ন বিষয়ে আপনার জ্ঞান প্রসারিত করতে পারেন। আজকাল, ট্রিভিয়া কুইজ মোবাইল এবং ওয়েব অ্যাপ্লিকেশানগুলি এই ধরনের কার্যকলাপের জন্য সবচেয়ে সাধারণ গো-টু এলাকা। হোয়াটসঅ্যাপে একটি ট্রিভিয়া গেম খেললে কেমন হয়? এই টিউটোরিয়াল গাইডে, আপনি শিখবেন কিভাবে হোয়াটসঅ্যাপ, ASP.NET কোর এবং এর জন্য Twilio ব্যবহার করে একটি ট্রিভিয়া কুইজ অ্যাপ্লিকেশন তৈরি করবেন ( ) এই টিউটোরিয়ালটির উদ্দেশ্য হল একটি ট্রিভিয়া গেম অ্যাপ্লিকেশন তৈরি করা যা ব্যবহারকারীদের WhatsApp ব্যবহার করে একাধিক-পছন্দের প্রশ্নের উত্তর দিতে এবং খেলতে দেয়। আপনি লিভারেজ হবে ব্যবহারকারীর অগ্রগতি সংরক্ষণ এবং পুনরুদ্ধার করতে, স্কোর ট্র্যাক করতে এবং গেমের অবস্থা বজায় রাখতে। ট্রিভিয়া API CC BY-NC 4.0 এর অধীনে লাইসেন্সপ্রাপ্ত ASP.NET কোরে সেশন এই প্রশ্নগুলি আনার জন্য, আপনি ট্রিভিয়া API, একটি REST API ব্যবহার করবেন, যা ডেভেলপারদের জন্য একাধিক পছন্দের ট্রিভিয়া প্রশ্ন প্রদান করে কুইজ অ্যাপ তৈরি করা সহজ করে তোলে। Trivia API সম্পর্কে আরও জানতে, অনুগ্রহ করে __ __ দেখুন। Trivia API ডকুমেন্টেশন পূর্বশর্ত এই টিউটোরিয়ালটি সম্পূর্ণ করতে আপনার প্রয়োজন হবে: একটি OS যা .NET সমর্থন করে (Windows/macOS/Linux) .NET 7 SDK একটি কোড সম্পাদক বা IDE (প্রস্তাবিত: , সঙ্গে , বা ) ভিসুয়াল স্টুডিও ভিজ্যুয়াল স্টুডিও কোড C# প্লাগইন জেটব্রেইন্স রাইডার ngrok CLI একটি বিনামূল্যে বা প্রদত্ত Twilio অ্যাকাউন্ট (যদি আপনার কাছে না থাকে, আপনি করতে পারেন ) বিনামূল্যে জন্য Twilio চেষ্টা করুন C# এবং ASP.NET কোরের অভিজ্ঞতা . এই টিউটোরিয়ালের সোর্স কোডটি GitHub-এ পাওয়া যাবে একটি নতুন ASP.NET কোর প্রকল্প সেট আপ করুন শুরু করতে, একটি পছন্দের কাজের ডিরেক্টরিতে আপনার শেল টার্মিনাল ব্যবহার করে, একটি নতুন ওয়েব API প্রকল্প তৈরি করতে নিম্নলিখিত কমান্ডগুলি চালান: dotnet new webapi -n TwilioWhatsAppTriviaApp --no-openapi উপরের স্নিপেটে দ্বিতীয় কমান্ডটি একটি নতুন ওয়েব API প্রকল্প তৈরি করবে নির্দিষ্ট নামের সাথে এবং OpenAPI (Swagger) সমর্থন ছাড়াই। আপনি যদি প্রকল্পে Swagger ব্যবহার করতে চান তবে উপরের কমান্ডে বাদ দিন। --no-openapi এই কমান্ডটি চালিয়ে প্রকল্প ডিরেক্টরিতে পরিবর্তন করুন: cd TwilioWhatsAppTriviaApp ইনস্টল করুন NuGet প্যাকেজ: ASP.NET কোরের জন্য Twilio হেল্পার লাইব্রেরি dotnet add package Twilio.AspNet.Core এই লাইব্রেরিটি একটি ASP.NET কোর অ্যাপ্লিকেশনে Twilio ওয়েবহুক এবং API-এর সাথে কাজ করা সহজ করে। আপনার পছন্দের IDE ব্যবহার করে প্রকল্পটি খুলুন। ফোল্ডারে, বয়লারপ্লেট টেমপ্লেট কন্ট্রোলার ফাইল, মুছে ফেলুন এবং প্রকল্প ডিরেক্টরিতে সরিয়ে দিন। কন্ট্রোলার WeatherForecastController.cs WeatherForcast.cs নিম্নলিখিত কমান্ডগুলি ব্যবহার করে আপনি এখনও পর্যন্ত যা করেছেন তা ভালভাবে কাজ করে তা নিশ্চিত করতে আপনার প্রকল্প তৈরি করুন এবং চালান: dotnet build dotnet run সফলভাবে প্রজেক্ট চালানোর পরে, ডিবাগিং কনসোলে প্রদর্শিত যেকোনও লোকালহোস্ট ইউআরএলের নোট নিন। আপনি ngrok ব্যবহার করে একটি সর্বজনীনভাবে অ্যাক্সেসযোগ্য স্থানীয় ওয়েব সার্ভার সেট আপ করতে এই URLগুলির যেকোনো একটি ব্যবহার করতে পারেন। সেশন বাস্তবায়ন করুন সেশন হল একটি ASP.NET কোর অ্যাপ্লিকেশনে ব্যবহারকারীর ডেটা সংরক্ষণ করার বিভিন্ন উপায়গুলির মধ্যে একটি। আপনি যখন অনুরোধগুলির মধ্যে ব্যবহারকারীর ডেটা ধরে রাখতে চান তখন এটি অপরিহার্য কারণ ডিফল্টরূপে, HTTP প্রোটোকল স্টেটলেস - এর মানে ডেটা সংরক্ষণ করা হয় না। নিম্নলিখিত কোডে দেখানো পরিবর্তন করে ইন-মেমরি সেশন প্রদানকারী যোগ করুন: Program.cs var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); builder.Services.AddDistributedMemoryCache(); builder.Services.AddSession(options => { options.IdleTimeout = TimeSpan.FromSeconds(40); options.Cookie.IsEssential = true; }); var app = builder.Build(); app.UseSession(); app.MapControllers(); app.Run(); বিতরণ করা মেমরি ক্যাশে পরিষেবা নিবন্ধন করে। এই পরিষেবাটি একটি ইন-মেমরি ক্যাশে সরবরাহ করে যা একাধিক অনুরোধ বা সেশন জুড়ে ডেটা সংরক্ষণ এবং পুনরুদ্ধার করতে ব্যবহার করা যেতে পারে। AddDistributedMemoryCache() সেশন পরিষেবা নিবন্ধন করে, অ্যাপ্লিকেশনটিকে সেশন অবস্থা বজায় রাখতে সক্ষম করে। প্যারামিটার আপনাকে বিভিন্ন সেশন-সম্পর্কিত বিকল্প কনফিগার করতে দেয়। নিষ্ক্রিয়তার সময়কাল সেট করতে ব্যবহৃত হয় যার পরে একটি সেশন নিষ্ক্রিয় বলে বিবেচিত হবে। এই ক্ষেত্রে, এটি 40 সেকেন্ডে সেট করা হয়েছে। নিশ্চিত করে যে সেশনের অবস্থা কার্যকর থাকে এবং এমনকি এমন পরিস্থিতিতেও যেখানে কুকি প্রত্যাখ্যান সক্রিয় থাকে। AddSession() options IdleTimeout Cookie.IsEssential অ্যাপ্লিকেশন পাইপলাইনে মিডলওয়্যার যোগ করে সেশন সমর্থন সক্ষম করা হয়েছে, অর্থাৎ, আপনার অ্যাপ্লিকেশনটি একটি সেশন অবজেক্টে অ্যাক্সেস লাভ করে যা ডেটা সংরক্ষণ এবং পুনরুদ্ধার করতে ব্যবহার করা যেতে পারে। UseSession মডেলগুলি তৈরি করুন আপনার প্রকল্প ডিরেক্টরিতে একটি নতুন ফোল্ডার, তৈরি করুন। নিম্নলিখিত কোড নমুনায় দেখানো বৈশিষ্ট্য সহ দুটি মডেল ক্লাস ফাইল যোগ করুন, এবং : মডেল TriviaApiResponse.cs Question.cs using Newtonsoft.Json; namespace TwilioWhatsAppTriviaApp.Models; public class TriviaApiResponse { [JsonProperty("category")] public string Category { get; set; } [JsonProperty("correctAnswer")] public string CorrectAnswer { get; set; } [JsonProperty("incorrectAnswers")] public List<string> IncorrectAnswers { get; set; } [JsonProperty("question")] public string Question { get; set; } [JsonProperty("type")] public string? Type { get; set; } [JsonProperty("difficulty")] public string Difficulty { get; set; } } namespace TwilioWhatsAppTriviaApp.Models; public class Question { public string QuestionText { get; set; } public List<(string option, bool isCorrect)> Options { get; set; } } মডেলে এমন বৈশিষ্ট্য রয়েছে যা ট্রিভিয়া API প্রতিক্রিয়ার ক্ষেত্রগুলিকে প্রতিনিধিত্ব করে। অ্যাট্রিবিউট নিশ্চিত করে যে প্রতিটি প্রপার্টি সংশ্লিষ্ট JSON ডেটা দিয়ে সঠিকভাবে পপুলেট করা হয়েছে। TriviaApiResponse JsonProperty ট্রিভিয়া প্রশ্নগুলি পরিচালনা করার একটি সুবিন্যস্ত উপায়ের জন্য, শ্রেণী উদ্ধারে আসে। এই ক্লাসটি একটি ট্রিভিয়া প্রশ্নের জন্য প্রয়োজনীয় তথ্য ধারণ করে, যার মধ্যে প্রশ্নের পাঠ্য এবং বিকল্পগুলির একটি তালিকা রয়েছে। প্রতিটি বিকল্পকে একটি টিপল দ্বারা উপস্থাপিত করা হয় যেখানে বিকল্প পাঠ্য এবং একটি বুলিয়ান মান নির্দেশ করে যে এটি সঠিক বিকল্প কিনা। Question ট্রিভিয়া সার্ভিস ক্লাস যোগ করুন আপনার প্রকল্প ডিরেক্টরিতে একটি ফোল্ডার তৈরি করুন এবং নামে একটি নতুন ক্লাস ফাইল যোগ করুন। নিম্নলিখিত কোডে দেখানো হিসাবে এর বিষয়বস্তু পরিবর্তন করুন: পরিষেবা TriviaService.cs using Newtonsoft.Json; using TwilioWhatsAppTriviaApp.Models; namespace TwilioWhatsAppTriviaApp.Services; public class TriviaService { private const string TheTriviaApiUrl = @"https://the-trivia-api.com/api/questions?limit=3"; private HttpClient httpClient; public TriviaService(HttpClient httpClient) { this.httpClient = httpClient; } public async Task<IEnumerable<TriviaApiResponse>> GetTrivia() { var response = await httpClient.GetAsync(TheTriviaApiUrl); var triviaJson = await response.Content.ReadAsStringAsync(); var trivia = JsonConvert.DeserializeObject<IEnumerable<TriviaApiResponse>>(triviaJson); return trivia; } public List<Question> ConvertTriviaToQuestions(IEnumerable<TriviaApiResponse> questions) { List<Question> newQuestions = new(); foreach (var question in questions) { var options = new List<(string option, bool isCorrect)>() { (question.CorrectAnswer, true), (question.IncorrectAnswers[0], false), (question.IncorrectAnswers[1], false), (question.IncorrectAnswers[2], false) }; // Shuffle the options randomly Random random = new(); options = options.OrderBy(_ => random.Next()).ToList(); newQuestions.Add(new Question { QuestionText = question.Question, Options = options }); } return newQuestions; } } ক্লাসে দুটি পদ্ধতি রয়েছে: এবং । পদ্ধতি একটি ক্যোয়ারী প্যারামিটার সহ ট্রিভিয়া API-তে HTTP GET অনুরোধ পাঠায়, , যা নির্দিষ্ট করে যে শুধুমাত্র 3টি প্রশ্ন ফেরত দেওয়া উচিত। সীমা পরামিতি ছাড়া, API ডিফল্টরূপে 10টি প্রশ্ন প্রদান করে। TriviaService GetTrivia ConvertTriviaToQuestions GetTrivia limit=3 পদ্ধতি API থেকে প্রতিক্রিয়াকে একটি সংগঠিত পদ্ধতিতে রূপান্তর করে। পদ্ধতিটি এলোমেলোভাবে সমস্ত প্রশ্নের বিকল্পগুলিকে এলোমেলো করে দেয়, যাতে একটি একক বিকল্প সমস্ত প্রশ্নের উত্তর হবে না। ConvertTriviaToQuestions আপনার অ্যাপ্লিকেশনের ডিপেন্ডেন্সি ইনজেকশন (DI) পাত্রে এবং HTTP ক্লায়েন্ট নিবন্ধন করতে, নিম্নলিখিত কোডে দেখানো হিসাবে পরিবর্তন করুন: TriviaService Program.cs using TwilioWhatsAppTriviaApp.Services; var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); builder.Services.AddDistributedMemoryCache(); builder.Services.AddSession(options => { options.IdleTimeout = TimeSpan.FromSeconds(40); options.Cookie.IsEssential = true; }); builder.Services.AddHttpClient(); builder.Services.AddScoped<TriviaService>(); var app = builder.Build(); app.UseSession(); app.MapControllers(); app.Run(); ট্রিভিয়া কন্ট্রোলার তৈরি করুন ফোল্ডারে নামের একটি ফাইলে একটি খালি API কন্ট্রোলার ক্লাস যুক্ত করুন এবং নিম্নলিখিত কোডে দেখানো হিসাবে এর বিষয়বস্তু পরিবর্তন করুন: কন্ট্রোলার TriviaController.cs using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using Twilio.AspNet.Core; using Twilio.TwiML; using Twilio.TwiML.Messaging; using TwilioWhatsAppTriviaApp.Models; using TwilioWhatsAppTriviaApp.Services; namespace WhatsappTrivia.Controllers; [Route("[controller]")] [ApiController] public class TriviaController : TwilioController { private const string SessionKeyIsGameOn = "IsGameOn"; private const string SessionKeyScore = "Score"; private const string SessionKeyCurrentQuestionIndex = "CurrentQuestionIndex"; private const string SessionKeyTotalQuestions = "TotalQuestions"; private const string SessionKeyQuestions = "Questions"; private static readonly string[] StartCommands = { "START", "S" }; private static readonly string[] OptionValues = { "A", "B", "C", "D" }; private readonly TriviaService triviaService; public TriviaController(TriviaService triviaService) { this.triviaService = triviaService; } [HttpPost] public async Task<IActionResult> Index() { var response = new MessagingResponse(); var form = await Request.ReadFormAsync(); var body = form["Body"].ToString().ToUpper().Trim(); await HttpContext.Session.LoadAsync(); var isGameOn = Convert.ToBoolean(HttpContext.Session.GetString(SessionKeyIsGameOn)); int currentQuestionIndex = HttpContext.Session.GetInt32(SessionKeyCurrentQuestionIndex) ?? 0; int totalQuestions = HttpContext.Session.GetInt32(SessionKeyTotalQuestions) ?? 0; if (StartCommands.Contains(body) && !isGameOn) { await StartGame(); HttpContext.Session.SetString(SessionKeyIsGameOn, "true"); response.Message(PresentQuestionWithOptions(currentQuestionIndex)); return TwiML(response); } if (OptionValues.Contains(body) && isGameOn) { var result = ProcessUserAnswer(body, currentQuestionIndex); response.Message(result); currentQuestionIndex++; if (currentQuestionIndex <= totalQuestions - 1) { HttpContext.Session.SetInt32(SessionKeyCurrentQuestionIndex, currentQuestionIndex); response.Append(new Message(PresentQuestionWithOptions(currentQuestionIndex))); } else { response.Append(new Message(EndTrivia())); } return TwiML(response); } response.Message(!isGameOn ? "*Hello! Send 'Start' or 'S' to play game*" : "*Invalid Input! Send a correct option 'A', 'B', 'C' or 'D'*"); return TwiML(response); } private async Task StartGame() { if (HttpContext.Session.GetString(SessionKeyQuestions) != null) { HttpContext.Session.Remove(SessionKeyQuestions); } var trivia = await this.triviaService.GetTrivia(); var questions = this.triviaService.ConvertTriviaToQuestions(trivia); AddNewQuestionsToSession(questions); HttpContext.Session.SetInt32(SessionKeyTotalQuestions, questions.Count); } private string ProcessUserAnswer(string userAnswer, int questionIndex) { bool optionIsCorrect = false; int score = HttpContext.Session.GetInt32(SessionKeyScore) ?? 0; var question = RetrieveQuestionFromSession(questionIndex); switch (userAnswer) { case "A": optionIsCorrect = question.Options[0].isCorrect; break; case "B": optionIsCorrect = question.Options[1].isCorrect; break; case "C": optionIsCorrect = question.Options[2].isCorrect; break; case "D": optionIsCorrect = question.Options[3].isCorrect; break; } if (optionIsCorrect) { score++; HttpContext.Session.SetInt32(SessionKeyScore, score); } return optionIsCorrect ? "_Correct ✅_" : $"_Incorrect ❌ Correct answer is {question.Options.Find(o => o.isCorrect).option.TrimEnd()}_"; } private string PresentQuestionWithOptions(int questionIndex) { var question = RetrieveQuestionFromSession(questionIndex); return $""" {questionIndex + 1}. {question.QuestionText} {OptionValues[0]}. {question.Options[0].option} {OptionValues[1]}. {question.Options[1].option} {OptionValues[2]}. {question.Options[2].option} {OptionValues[3]}. {question.Options[3].option} """; } private void AddNewQuestionsToSession(List<Question> questions) => HttpContext.Session.SetString(SessionKeyQuestions, JsonConvert.SerializeObject(questions)); private Question RetrieveQuestionFromSession(int questionIndex) { var questionsFromSession = HttpContext.Session.GetString(SessionKeyQuestions); return JsonConvert.DeserializeObject<List<Question>>(questionsFromSession)[questionIndex]; } private string EndTrivia() { var score = HttpContext.Session.GetInt32(SessionKeyScore) ?? 0; var totalQuestions = HttpContext.Session.GetInt32(SessionKeyTotalQuestions) ?? 0; var userResult = $""" Thanks for playing! 😊 You answered {score} out of {totalQuestions} questions correctly. To play again, send 'Start' or 'S' """; HttpContext.Session.Clear(); return userResult; } } এই কন্ট্রোলার ক্লাস ইনকামিং বার্তা পরিচালনা, সেশন স্টেট পরিচালনা এবং প্রতিক্রিয়া তৈরি করার জন্য দায়ী। এটি Twilio.AspNet.Core লাইব্রেরি দ্বারা প্রদত্ত ক্লাস থেকে উত্তরাধিকারসূত্রে প্রাপ্ত, যা আপনাকে পদ্ধতিতে অ্যাক্সেস দেয়। আপনি এর সাথে প্রতিক্রিয়া জানাতে এই পদ্ধতিটি ব্যবহার করতে পারেন . ক্লাস সেশনের সাথে ইন্টারঅ্যাক্ট করতে পদ্ধতি ব্যবহার করে। বৈধ ইনপুটগুলি হল এবং এর পঠনযোগ্য অ্যারেগুলির উপাদান৷ ব্যবহারকারী একটি সঠিক ইনপুট পাঠিয়েছে কিনা তা নিশ্চিত করার জন্য আগত বার্তার মূল অংশটিকে এই উপাদানগুলির সাথে তুলনা করা হয়, যদি তা না হয় তবে ব্যবহারকারীকে একটি বার্তা পাঠানো হবে যাতে তারা গেমের বর্তমান অবস্থার উপর ভিত্তি করে সঠিক ইনপুট তৈরি করতে অনুরোধ করে। "SessionKey" উপসর্গ সহ অন্যান্য ক্ষেত্রগুলি প্রোগ্রামে সেশন কীগুলির জন্য ব্যক্তিগত ধ্রুবক স্ট্রিংগুলি সংজ্ঞায়িত করতে ব্যবহৃত হয়। TwilioController TwiML TwiML, যা Twilio Markup Language TriviaController HttpContext.Session StartCommands OptionValues পদ্ধতি হল প্রধান অ্যাকশন পদ্ধতি যা রুটের মাধ্যমে WhatsApp থেকে ইনকামিং HTTP POST অনুরোধগুলি পরিচালনা করে। এটি ব্যবহার করে সেশন ডেটা লোড করে এবং এবং পদ্ধতি ব্যবহার করে সেশন থেকে গেমের অবস্থা সম্পর্কিত ডেটা পুনরুদ্ধার করে। Index /Trivia HttpContext.Session.LoadAsync() HttpContext.Session.GetString() HttpContext.Session.GetInt32() নির্দিষ্ট স্ট্রিংগুলির শুরুতে এবং শেষে আন্ডারস্কোর (_) এবং তারকাচিহ্ন (*) এর ব্যবহার হল রেন্ডার করা WhatsApp বার্তাগুলিতে যথাক্রমে তির্যক এবং গাঢ় পাঠ বিন্যাস অর্জন করা। প্রতিটি সহায়ক পদ্ধতি একটি নির্দিষ্ট কাজ সম্পাদন করে যা ক্লাসের প্রধান কার্যকারিতা সমর্থন করে। TriviaController পদ্ধতি ট্রিভিয়া প্রশ্ন পুনরুদ্ধার করে, গেমের জন্য উপযুক্ত একটি বিন্যাসে রূপান্তর করে এবং সেশনে সেগুলি সংরক্ষণ করে গেমটি শুরু করে। StartGame পদ্ধতি একটি প্রশ্নের ব্যবহারকারীর উত্তর প্রক্রিয়া করে এবং তা সঠিক কিনা তা নির্ধারণ করে। ProcessUserAnswer পদ্ধতি একটি প্রশ্ন ফর্ম্যাটিং এবং তার বিকল্পগুলির সাথে উপস্থাপনের জন্য দায়ী। PresentQuestionWithOptions পদ্ধতি সেশনে প্রশ্নের একটি তালিকা সংরক্ষণ করে। এটি প্রশ্নগুলিকে JSON ফর্ম্যাটে রূপান্তর করে এবং সেশনে JSON স্ট্রিং সংরক্ষণ করে। AddNewQuestionsToSession পদ্ধতি প্রশ্ন সূচক ব্যবহার করে সেশন থেকে একটি প্রশ্ন পুনরুদ্ধার করে। RetrieveQuestionFromSession পদ্ধতি ট্রিভিয়া গেমটি শেষ করার জন্য একটি বার্তা তৈরি করে। এই পদ্ধতিটি গেম সম্পর্কিত সেশন ডেটাও সরিয়ে দেয়। এ সেশন পরিষেবার কনফিগারেশনের উপর ভিত্তি করে, যখন সেশনটি 40 সেকেন্ডের জন্য নিষ্ক্রিয় থাকে তখন এটি স্বয়ংক্রিয়ভাবে ঘটে। EndTrivia Program.cs- আবেদন পরীক্ষা করুন অ্যাপ্লিকেশনটি পরীক্ষা করার জন্য, আপনাকে WhatsApp-এর জন্য Twilio Sandbox সেট আপ করতে হবে, আপনার অ্যাপ্লিকেশনের এন্ডপয়েন্টকে সর্বজনীনভাবে অ্যাক্সেসযোগ্য করে তুলতে হবে এবং একটি ওয়েবহুক হিসাবে স্যান্ডবক্স কনফিগারেশনে এন্ডপয়েন্ট URL যোগ করতে হবে। WhatsApp-এর জন্য Twilio Sandbox সেটআপ করুন যান , । টুইলিও কনসোল মেসেজে নেভিগেট করুন > এটি ব্যবহার করে দেখুন > একটি WhatsApp বার্তা পাঠান WhatsApp স্যান্ডবক্সের সাথে একটি সফল সংযোগ তৈরি করার জন্য আপনার ডিভাইস থেকে Twilio নম্বরে একটি WhatsApp বার্তা পাঠিয়ে স্যান্ডবক্সের সাথে সংযোগ করতে পৃষ্ঠার নির্দেশাবলী অনুসরণ করুন। একইভাবে, অন্যান্য ব্যক্তি যারা তাদের নিজ নিজ নম্বর দিয়ে আপনার অ্যাপ পরীক্ষা করতে চান তাদের একই পদ্ধতি অনুসরণ করতে হবে। পরীক্ষার জন্য ngrok ব্যবহার করে আপনার ওয়েবহুক প্রকাশ করুন এখন, একটি শেল টার্মিনাল খুলুন এবং ngrok শুরু করতে নিম্নলিখিত কমান্ডটি চালান এবং আপনার স্থানীয় ASP.NET কোর অ্যাপটি প্রকাশ করুন আপনার লোকালহোস্টের সম্পূর্ণ URL দিয়ে প্রতিস্থাপন করে আপনি প্রাথমিকভাবে কপি করেছেন: <localhost-url> ngrok http <localhost-url> ngrok একটি সর্বজনীন URL তৈরি করবে যা আপনার স্থানীয় ASP.NET অ্যাপে অনুরোধ ফরোয়ার্ড করে। এনগ্রোক টার্মিনাল উইন্ডোতে ফরওয়ার্ডিং লেবেলযুক্ত URLটি সন্ধান করুন এবং এটি অনুলিপি করুন। ফরোয়ার্ডিং Twilio ট্রাই হোয়াটসঅ্যাপ পৃষ্ঠাতে ফিরে যান, ক্লিক করুন এবং এনগ্রোক প্লাস রুট দ্বারা তৈরি URL সহ এন্ডপয়েন্ট ইউআরএলে পরিবর্তন করুন এবং পদ্ধতিটি POST-এ সেট করা আছে তা নিশ্চিত করুন। তারপর নতুন স্যান্ডবক্স কনফিগারেশন সংরক্ষণ করতে সংরক্ষণ করুন ক্লিক করুন। স্যান্ডবক্স সেটিংসে /ট্রিভিয়া ফরওয়ার্ডিং যখন একটি বার্তা আসে তখন প্রজেক্ট ডেমো নিম্নলিখিত কমান্ড ব্যবহার করে আপনার ASP.NET কোর প্রকল্প চালান: dotnet run এখন, টুইলিও স্যান্ডবক্স নম্বরের সাথে প্রাথমিক কথোপকথনে একটি বার্তা পাঠিয়ে আপনার আবেদন পরীক্ষা করুন। উপসংহার Twilio প্ল্যাটফর্ম এবং WhatsApp এর শক্তিকে কাজে লাগিয়ে, আপনি ব্যবহারকারীদের উপভোগ করার জন্য একটি নিমজ্জিত ট্রিভিয়া গেমের অভিজ্ঞতা তৈরি করেছেন। আপনি সেশন থেকে ডেটা সংরক্ষণ এবং পুনরুদ্ধার করতে শিখেছেন। এই প্রকল্পের উপর উন্নত করা যেতে পারে বিভিন্ন উপায় আছে. আপনি টাইমার যোগ করে, ব্যতিক্রমগুলি পরিচালনা করে, ব্যবহারকারীদের অসুবিধা চয়ন করার অনুমতি দিয়ে এবং The Trivia API URL এর মাধ্যমে একটি ক্যোয়ারী প্যারামিটার হিসাবে নির্বাচিত অসুবিধা প্রয়োগ করে এই প্রকল্পটিকে আরও উন্নত করতে পারেন (যেমন ) উপরন্তু, আপনি একটি সমাধান তৈরি করার সম্ভাবনা অন্বেষণ করতে পারেন যা ব্যবহারকারীদের WhatsApp এর মাধ্যমে সমীক্ষা পূরণ করতে দেয়। https://the-trivia-api.com/api/questions?difficulty=hard