Here’s how to improve your LINE chatbot with rich messages, carousels, buttons, AI/NLP integration, and chat log storage in a database.
1. Improve Bot with Rich Messages, Carousels, and Buttons
LINE supports flex messages (rich UI elements like buttons, carousels, and images).
Example: Sending a Button Message
Modify LineBotController.php
to send a button with options.
Install Image Storage (Optional)
If you need to host images, store them in public/images/
and serve them via Laravel.
Modify webhook()
Method
use LINE\LINEBot\MessageBuilder\TemplateMessageBuilder;
use LINE\LINEBot\MessageBuilder\TemplateBuilder\ButtonTemplateBuilder;
use LINE\LINEBot\TemplateActionBuilder\MessageTemplateActionBuilder;
public function webhook(Request $request)
{
$events = $request->all();
foreach ($events['events'] as $event) {
$replyToken = $event['replyToken'];
$userMessage = strtolower($event['message']['text']);
if ($userMessage === "menu") {
// Create button template
$buttonTemplate = new ButtonTemplateBuilder(
"Welcome!", // Title
"Choose an option", // Text
"https://yourdomain.com/images/menu.jpg", // Image URL
[
new MessageTemplateActionBuilder("Say Hello", "Hello!"),
new MessageTemplateActionBuilder("Get Info", "info")
]
);
$message = new TemplateMessageBuilder("Menu options", $buttonTemplate);
$this->bot->replyMessage($replyToken, $message);
} else {
// Default reply
$textMessage = new TextMessageBuilder("You said: " . $userMessage);
$this->bot->replyMessage($replyToken, $textMessage);
}
}
return response()->json(['status' => 'ok']);
}
Test:
- Type
menu
in LINE chat. - A message with buttons should appear.
2. Integrate AI/NLP for Smart Replies
To make your bot smarter, integrate OpenAI (ChatGPT), Dialogflow, or Wit.ai.
Using OpenAI (ChatGPT)
Install OpenAI SDK
Run:
composer require openai-php/client
Modify .env
OPENAI_API_KEY=your_openai_api_key
Modify LineBotController.php
use OpenAI\Client as OpenAIClient;
use LINE\LINEBot\MessageBuilder\TextMessageBuilder;
private $openai;
public function __construct()
{
$httpClient = new CurlHTTPClient(env('LINE_ACCESS_TOKEN'));
$this->bot = new LINEBot($httpClient, ['channelSecret' => env('LINE_SECRET')]);
$this->openai = \OpenAI::client(env('OPENAI_API_KEY'));
}
public function webhook(Request $request)
{
$events = $request->all();
foreach ($events['events'] as $event) {
$replyToken = $event['replyToken'];
$userMessage = $event['message']['text'];
// Get AI-generated response
$response = $this->openai->completions()->create([
'model' => 'gpt-3.5-turbo',
'messages' => [
['role' => 'system', 'content' => 'You are a helpful chatbot.'],
['role' => 'user', 'content' => $userMessage]
]
]);
$aiReply = $response['choices'][0]['message']['content'];
$message = new TextMessageBuilder($aiReply);
$this->bot->replyMessage($replyToken, $message);
}
return response()->json(['status' => 'ok']);
}
Test AI Replies:
- Type “Who is Elon Musk?” in LINE chat.
- The bot should generate a response using ChatGPT.
3. Store Chat Logs in a Database
Migrate Database
Run:
php artisan make:migration create_chat_logs_table
Edit Migration File
public function up()
{
Schema::create('chat_logs', function (Blueprint $table) {
$table->id();
$table->string('user_id');
$table->text('message');
$table->text('response');
$table->timestamps();
});
}
Run:
php artisan migrate
Modify LineBotController.php
to Store Messages
use App\Models\ChatLog;
public function webhook(Request $request)
{
$events = $request->all();
foreach ($events['events'] as $event) {
$replyToken = $event['replyToken'];
$userId = $event['source']['userId'];
$userMessage = $event['message']['text'];
// AI Reply
$response = $this->openai->completions()->create([
'model' => 'gpt-3.5-turbo',
'messages' => [
['role' => 'system', 'content' => 'You are a helpful chatbot.'],
['role' => 'user', 'content' => $userMessage]
]
]);
$aiReply = $response['choices'][0]['message']['content'];
// Save to database
ChatLog::create([
'user_id' => $userId,
'message' => $userMessage,
'response' => $aiReply
]);
$message = new TextMessageBuilder($aiReply);
$this->bot->replyMessage($replyToken, $message);
}
return response()->json(['status' => 'ok']);
}
Final Testing
✅ Type menu
→ Shows button options.
✅ Type “Who is Elon Musk?” → Uses OpenAI for a smart response.
✅ Check database → Logs are stored in chat_logs
table.
Next Steps
- Add Rich Messages: Use Flex Messages for a better UI.
- Integrate Payments: Add a payment gateway with QR codes.
- Deploy on Cloud: Use AWS, DigitalOcean, or Firebase.