insurerOptions(); } protected function insurerOptions() { $question = Question::create("Choose Your Options:") ->addButtons([ Button::create("🔹 Select Insurers")->value("insurers"), Button::create("🔹 Talk to our Service Executive")->value("service_executive"), Button::create("◀️ Go Back")->value("go_back"), ]); $this->bot->ask($question, function ($answer) { $path = $this->bot->userStorage()->get('path'); array_push($path, $answer->getValue() ); $this->bot->userStorage()->save([ 'path' => $path ]); switch ($answer->getValue()) { case "insurers": $data = ChatbotHelper::getInsurersList(); log_message("error",'data: '.json_encode($data)); $question = Question::create("Select an Insurer:"); $page = $this->bot->userStorage()->get('insurer_page') ?? 0; $perPage = 5; $totalPages = ceil(count($data) / $perPage); $insurersToShow = array_slice($data, $page * $perPage, $perPage); $buttons = []; foreach ($insurersToShow as $insurer) { $buttons[] = Button::create("🔹 " . $insurer['short_name'])->value($insurer['short_name']); } // Add pagination buttons if ($page > 0) { $buttons[] = Button::create("⬅️ Previous")->value("previous_page"); } if (($page + 1) < $totalPages) { $buttons[] = Button::create("➡️ Next")->value("next_page"); } $question = Question::create("Choose an Insurer:") ->addButtons($buttons); $this->bot->ask($question, function ($response) { $selected = $response->getValue(); if ($selected == "previous_page") { $this->bot->userStorage()->save(["insurer_page" => max(0, $this->bot->userStorage()->get('insurer_page') - 1)]); $this->insurerOptions(); } elseif ($selected == "next_page") { $this->bot->userStorage()->save(["insurer_page" => $this->bot->userStorage()->get('insurer_page') + 1]); $this->insurerOptions(); } else { $this->say("You selected: " . $selected); } }); break; case "service_executive": $this->bot->startConversation(new serviceExecutiveConversation()); break; case "go_back": $this->bot->startConversation(new MainMenuConversation()); break; default: $this->say("Invalid selection. Please choose an option."); $this->policyOptions(); break; } }); } }