94 lines
3.7 KiB
PHP
94 lines
3.7 KiB
PHP
<?php
|
|
|
|
// namespace App\Conversations;
|
|
namespace App\Controllers\Chatbot;
|
|
|
|
use BotMan\BotMan\Messages\Conversations\Conversation;
|
|
use BotMan\BotMan\Messages\Outgoing\Question;
|
|
use BotMan\BotMan\Messages\Outgoing\Actions\Button;
|
|
|
|
use App\Helpers\ChatbotHelper;
|
|
|
|
class selectInsurerConversations extends Conversation
|
|
{
|
|
|
|
|
|
public function run()
|
|
{
|
|
$this->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;
|
|
}
|
|
});
|
|
}
|
|
|
|
}
|