LINE chatbot with rich messages, carousels, buttons, AI/NLP integration, and chat log storage in a database

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

  1. Add Rich Messages: Use Flex Messages for a better UI.
  2. Integrate Payments: Add a payment gateway with QR codes.
  3. Deploy on Cloud: Use AWS, DigitalOcean, or Firebase.

Leave a Comment