Mở Đầu

MockingBot là một nền tảng chatbot mạnh mẽ, hỗ trợ người dùng tạo ra các kịch bản giao tiếp tự động mà không cần viết mã phức tạp. Một trong những tính năng quan trọng giúp nâng cao trải nghiệm người dùng là vẽ table (bảng) trong tin nhắn trả về. Bảng không chỉ giúp trình bày dữ liệu một cách rõ ràng, mà còn tạo cảm giác chuyên nghiệp, tăng tính thẩm mỹ và khả năng tương tác.

Bài viết này sẽ cung cấp cho bạn một hướng dẫn chi tiết, từng bước một, về cách vẽ table trong MockingBot. Chúng tôi sẽ giải thích khái niệm cơ bản, giới thiệu các phương pháp tạo bảng, cách tùy chỉnh kiểu dáng, và một số mẹo tối ưu để bảng hiển thị tốt trên mọi thiết bị. Ngoài ra, chúng tôi sẽ chia sẻ các ví dụ thực tế và các lỗi thường gặp để bạn có thể tránh được những rắc rối không đáng có.

Lưu ý: Bài viết này hướng tới người dùng đã có kiến thức cơ bản về MockingBot, bao gồm cách tạo flow, sử dụng block và trả lời người dùng. Nếu bạn chưa quen, hãy tham khảo tài liệu giới thiệu nền tảng trước khi tiến hành.

1. Tổng Quan Về Table Trong MockingBot

1.1 Table là gì?

Table (bảng) trong MockingBot là một cấu trúc dữ liệu dạng HTML table được chuyển đổi thành dạng tin nhắn (text) hoặc rich message (tin nhắn giàu nội dung) mà người dùng cuối sẽ nhận được. Bảng có thể chứa:

  • Tiêu đề (header): Dòng đầu tiên mô tả các cột.
  • Dòng dữ liệu (row): Các hàng chứa thông tin thực tế.
  • Ô (cell): Mỗi giao điểm giữa hàng và cột.

1.2 Khi nào nên sử dụng table?

Trường hợp Lý do
Liệt kê danh sách sản phẩm, giá, số lượng Dễ so sánh và đọc nhanh
Thống kê số liệu (doanh thu, số lượng bán) Trực quan, hỗ trợ quyết định
Hiển thị lịch trình, thời gian, địa điểm Cấu trúc rõ ràng
Trình bày kết quả truy vấn dữ liệu Định dạng chuẩn, không lộn xộn

1.3 Định Dạng Table Được Hỗ Trợ

MockingBot hỗ trợ ba kiểu hiển thị bảng:

Kiểu Mô tả Định Dạng
Plain Text Table Bảng dạng text thuần, dùng ký tự |, -, : để vẽ Markdown-like
HTML Table Bảng HTML chuẩn, được chuyển thành rich message <table>...</table>
Rich Message Table Được xây dựng bằng JSON theo chuẩn Carousel/Template của nền tảng { "type": "table", ... }

Trong phần sau, chúng ta sẽ tập trung vào Plain Text Table và HTML Table, vì chúng là hai cách phổ biến nhất và dễ thực hiện.

2. Cú Pháp Cơ Bản Để Vẽ Table

2.1 Plain Text Table (Markdown-like)

Đây là cách nhanh nhất, không cần viết HTML. Cú pháp tương tự như trong Markdown:

| Tiêu đề 1 | Tiêu đề 2 | Tiêu đề 3 |
|-----------|:--------:|----------:|
| Dòng 1 C1 | Dòng 1 C2 | Dòng 1 C3 |
| Dòng 2 C1 | Dòng 2 C2 | Dòng 2 C3 |
  • Dòng tiêu đề: Bắt đầu và kết thúc bằng |.
  • Dòng phân cách: Dùng - để tạo đường kẻ, : để căn lề (trái, giữa, phải).
  • Các dòng dữ liệu: Cũng dùng | để ngăn cách các ô.

2.1.1 Căn Lề

Cú pháp Kết quả
:--- Căn trái
:---: Căn giữa
---: Căn phải

2.1.2 Ví Dụ Thực Tế

| Sản phẩm | Giá (VNĐ) | Số lượng |
|----------|----------:|----------:|
| Bút bi | 5,000 | 100 |
| Sổ A5 | 15,000 | 50 |
| Thước kẻ| 7,000 | 80 |

Khi bot trả lời, người dùng sẽ nhận được:

Sản phẩm Giá (VNĐ) Số lượng
Bút bi 5,000 100
Sổ A5 15,000 50
Thước kẻ 7,000 80

2.2 HTML Table

Nếu muốn kiểm soát chi tiết hơn (màu sắc, độ rộng cột, CSS), bạn có thể sử dụng HTML. MockingBot sẽ tự động chuyển HTML thành rich message nếu kênh hỗ trợ (ví dụ: Facebook Messenger, Zalo, Telegram).

2.2.1 Cú pháp cơ bản

<table border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse;"> <thead> <tr> <th>STT</th> <th>Tên sản phẩm</th> <th>Giá (VNĐ)</th> <th>Số lượng</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>Bút bi</td> <td>5,000</td> <td>100</td> </tr> <tr> <td>2</td> <td>Sổ A5</td> <td>15,000</td> <td>50</td> </tr> <tr> <td>3</td> <td>Thước kẻ</td> <td>7,000</td> <td>80</td> </tr> </tbody>
</table>

Khi gửi, người dùng sẽ thấy một bảng có viền, màu nền tiêu đề tùy chỉnh (nếu thêm CSS). Để tránh lỗi, không dùng các thẻ script và giữ CSS trong thuộc tính style.

2.2.2 Tùy chỉnh màu sắc và độ rộng

<table border="0" cellpadding="8" cellspacing="0" style="width:100%;border:1px solid #e0e0e0;"> <thead style="background:#f5f5f5;"> <tr> <th style="width:10%;">STT</th> <th style="width:40%;">Tên sản phẩm</th> <th style="width:25%;text-align:right;">Giá (VNĐ)</th> <th style="width:25%;text-align:center;">Số lượng</th> </tr> </thead> <tbody> <!-- rows --> </tbody>
</table>
  • background cho màu nền tiêu đề.
  • text-align để căn lề nội dung trong ô.
  • width để kiểm soát chiều rộng cột, hữu ích khi bảng hiển thị trên điện thoại.

3. Thực Hiện Table Trong Flow MockingBot

3.1 Tạo Block Trả Về Văn Bản (Text Block)

  1. Mở Flow: Vào Flow Builder, chọn node nơi bạn muốn trả lời bằng bảng.
  2. Thêm Block: Click Add Block → Text.
  3. Nhập nội dung: Sử dụng cú pháp Plain Text Table hoặc dán đoạn HTML vào ô nội dung.
  4. Lưu & Kiểm tra: Click Save, sau đó Test trong môi trường sandbox.

Mẹo: Khi dùng HTML, hãy bật tùy chọn Allow HTML (nếu có) để bot không tự động escape ký tự.

3.2 Sử Dụng Variable Động Để Điền Dữ Liệu

MockingBot hỗ trợ variables (biến) để chèn dữ liệu động (từ API, database, hoặc user input). Ví dụ, giả sử bạn có một mảng JSON:

 {"name":"Bút bi","price":5000,"qty":100}, {"name":"Sổ A5","price":15000,"qty":50}, {"name":"Thước kẻ","price":7000,"qty":80} 

Bạn có thể dùng loop trong block:

  1. Add Loop Block: Chọn Loop → For Each Item.
  2. Set Variable: Mỗi vòng lặp sẽ có biến item.
  3. Inside Loop, Add Text Block: Sử dụng cú pháp:
| {{loop_index}} | {{item.name}} | {{item.price}} | {{item.qty}} |
  1. Kết thúc Loop: Khi vòng lặp hoàn thành, bảng sẽ được kết hợp lại.

3.2.1 Tạo Table Động Với HTML

Nếu muốn HTML, bạn có thể xây dựng một string chứa HTML trong một Script Block (JavaScript) và lưu vào một biến, sau đó trả về biến này.

let rows = "";
data.forEach((item, idx) => { rows += `<tr> <td>${idx + 1}</td> <td>${item.name}</td> <td style="text-align:right;">${item.price.toLocaleString()}</td> <td style="text-align:center;">${item.qty}</td> </tr>`;
});
let tableHTML = `<table border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse;"> <thead> <tr><th>STT</th><th>Tên</th><th>Giá (VNĐ)</th><th>Số lượng</th></tr> </thead> <tbody>${rows}</tbody> </table>`;
variables.set("productTable", tableHTML);

Sau đó, trong Text Block, chỉ cần:

{{productTable}}

Bot sẽ trả về bảng HTML đã được tạo sẵn.

3.3 Kiểm Tra Trên Các Kênh Khác Nhau

MockingBot hỗ trợ nhiều kênh (Facebook, Zalo, Telegram, LINE, Viber…). Mỗi kênh có khả năng hiển thị HTML khác nhau:

Kênh Hỗ trợ HTML? Ghi chú
Facebook Messenger ✅ (giới hạn) Chỉ hỗ trợ một số thẻ (<b>, <i>, <a>, <table>).
Zalo OA ✅ Đảm bảo không dùng CSS phức tạp.
Telegram ✅ Hiển thị tốt, nhưng không hỗ trợ border.
LINE ❌ Chỉ hỗ trợ Plain Text Table.
Viber ✅ Hỗ trợ CSS cơ bản.

Khi triển khai, bạn nên test trên từng kênh bằng cách gửi tin nhắn thử nghiệm. Đối với kênh không hỗ trợ HTML, chuyển sang Plain Text Table.

4. Tối Ưu Hóa Table Để Trải Nghiệm Người Dùng Tốt Nhất

4.1 Giữ Bảng Ngắn Gọn

  • Không quá 10 dòng: Khi bảng quá dài, người dùng sẽ phải cuộn, gây khó chịu.
  • Sử dụng pagination: Nếu dữ liệu nhiều, hãy chia thành nhiều tin nhắn hoặc sử dụng Quick Reply để chuyển trang.

4.2 Định Dạng Số và Tiền Tệ

Sử dụng hàm formatNumber hoặc toLocaleString để hiển thị số có dấu phẩy, đồng tiền.

let priceFormatted = item.price.toLocaleString('vi-VN');

4.3 Thêm Icon/Emoji Để Nổi Bật

Bạn có thể chèn emoji vào tiêu đề hoặc ô để tạo điểm nhấn.

| 📌 STT | 📦 Tên sản phẩm | 💰 Giá (VNĐ) | 🔢 Số lượng |

4.4 Đảm Bảo Độ Rộng Tương Thích Mobile

  • Không cố định chiều rộng (tránh width: 600px).
  • Sử dụng percentage hoặc để mặc định, để bảng tự co giãn.
  • Kiểm tra trên device emulator trong MockingBot.

4.5 Xử Lý Trường Hợp Không Có Dữ Liệu

Nếu API trả về rỗng, bạn nên trả lời:

Hiện không có dữ liệu nào phù hợp. Vui lòng thử lại sau hoặc thay đổi điều kiện tìm kiếm.

Thay vì gửi bảng trống, điều này giúp người dùng không bị nhầm lẫn.

5. Các Lỗi Thường Gặp Khi Vẽ Table Và Cách Khắc Phục

Lỗi Nguyên nhân Cách khắc phục
Bảng không hiển thị, chỉ xuất hiện ký tự | Kênh không hỗ trợ HTML và không nhận dạng Markdown Chuyển sang Plain Text Table hoặc sử dụng Quick Reply để gửi lại.
Các cột bị lệch, nội dung tràn Không đặt border-collapse hoặc cellpadding Thêm style="border-collapse:collapse;" và cellpadding="5" vào thẻ <table>.
Emoji không hiển thị trên một số thiết bị Font không hỗ trợ Kiểm tra trên thiết bị thực, tránh dùng emoji quá phức tạp.
Dữ liệu động không được thay thế Biến chưa được khởi tạo hoặc sai tên Đảm bảo biến được set trước khi dùng, và tên biến đúng ({{productTable}}).
HTML bị escape thành ký tự &lt; Tùy chọn “Allow HTML” bị tắt Mở tùy chọn trong Text Block hoặc dùng Script Block để trả về HTML.
Bảng quá dài, người dùng không thể cuộn Không chia trang Sử dụng Loop + Quick Reply “Xem tiếp” để tạo pagination.

6. Ví Dụ Thực Tế: Xây Dựng Bảng Báo Cáo Doanh Thu

Giả sử bạn có API trả về doanh thu theo tháng:

{ "report": {"month":"Tháng 1","revenue":12000000}, {"month":"Tháng 2","revenue":15000000}, {"month":"Tháng 3","revenue":11000000}, {"month":"Tháng 4","revenue":17000000} }

6.1 Bước 1: Gọi API

Trong API Block, cấu hình GET request tới endpoint, lưu trả về vào biến apiResponse.

6.2 Bước 2: Tạo Bảng HTML Động

Thêm Script Block sau API Block:

let data = variables.get("apiResponse").report;
let rows = "";
data.forEach((item, idx) => { rows += `<tr> <td>${idx + 1}</td> <td>${item.month}</td> <td style="text-align:right;">${item.revenue.toLocaleString('vi-VN')} VNĐ</td> </tr>`;
});
let htmlTable = `<table border="0" cellpadding="6" cellspacing="0" style="width:100%;border:1px solid #dcdcdc;"> <thead style="background:#f0f0f0;"> <tr> <th>#</th> <th>Tháng</th> <th>Doanh thu</th> </tr> </thead> <tbody>${rows}</tbody> </table>`;
variables.set("revenueTable", htmlTable);

6.3 Bước 3: Trả Về Bảng

Trong Text Block, nhập:

📊 Báo cáo doanh thu 2026 📊 {{revenueTable}} 👉 Để xem chi tiết hơn, nhập "Chi tiết".

Khi người dùng nhập câu lệnh, bot sẽ trả về bảng đẹp mắt, hiển thị đúng định dạng trên các kênh hỗ trợ.

7. Các Công Cụ Hỗ Trợ Tạo Table Nhanh

Công cụ Mô tả Link
Markdown Table Generator Tạo bảng Markdown bằng giao diện kéo thả https://www.tablesgenerator.com/markdown_tables
HTML Table Generator Tạo HTML table với tùy chỉnh CSS https://www.tablesgenerator.com/html_tables
MockingBot Playground Kiểm tra nhanh cú pháp trong môi trường sandbox https://playground.mockingbot.com
JSON Formatter Định dạng JSON để lấy dữ liệu cho bảng https://jsonformatter.curiousconcept.com

Bạn có thể tạo bảng ở ngoài, sao chép và dán vào MockingBot để tiết kiệm thời gian.

8. Tổng Kết

Việc vẽ table trong MockingBot không chỉ là một kỹ thuật hiển thị dữ liệu, mà còn là một công cụ quan trọng để nâng cao trải nghiệm người dùng, tăng tính chuyên nghiệp và giúp người dùng nhanh chóng nắm bắt thông tin. Trong bài viết, chúng tôi đã:

  1. Giới thiệu khái niệm bảng và các kiểu hiển thị (Plain Text, HTML, Rich Message).
  2. Trình bày cú pháp cơ bản cho cả hai kiểu phổ biến nhất.
  3. Hướng dẫn cách tích hợp bảng vào flow, bao gồm việc sử dụng biến động và vòng lặp.
  4. Đưa ra các mẹo tối ưu (độ dài, định dạng số, emoji, responsive).
  5. Liệt kê lỗi thường gặp và cách khắc phục.
  6. Cung cấp ví dụ thực tế về báo cáo doanh thu.
  7. Giới thiệu các công cụ hỗ trợ nhanh.

Bằng cách làm theo các bước trên, bạn có thể tự tin tạo ra những bảng đẹp mắt, phù hợp với mọi kênh và tình huống sử dụng. Hãy thử ngay trong dự án MockingBot của mình, và đừng ngại sáng tạo thêm các kiểu bố cục, màu sắc để phù hợp với thương hiệu và nhu cầu người dùng.

Nếu còn thắc mắc, hãy truy cập trung tâm trợ giúp của MockingBot hoặc tham gia cộng đồng người dùng để chia sẻ kinh nghiệm và nhận hỗ trợ nhanh chóng. Chúc bạn thành công!

Rate this post
Mục nhập này đã được đăng trong Blog. Đánh dấu trang permalink.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *