Chat mặc định là chức năng đưa giao diện EzyChat trực tiếp vào các trang web của EzyPlatform. Cơ chế này sử dụng cấu hình toàn hệ thống, không yêu cầu tạo chat profile và không cần khóa nhúng. Sau khi bạn đã cài đặt thành công, sẽ có một bong bóng chat dạng icon hiển thị cố định trên giao diện của mọi trang, người dùng có thể nhấn vào icon, điền một số thông tin và bắt đầu chat.
Cấu hình Facebook Webhook

Cách chat mặc định được tích hợp

Khi web runtime chuẩn bị trả về một trang, EzyChat sử dụng một view decorator để bổ sung tài nguyên và cấu hình chat vào view.
Nếu tùy chọn Hiển thị trên web được bật, decorator sẽ:
  • Thêm CSS của EzyChat vào trang.
  • Thêm JavaScript chính của EzyChat.
  • Thêm thư viện Markdown.
  • Thêm socket client nếu chat qua socket được bật.
  • Đưa các thiết lập giao diện và hành vi vào value map của trang.
sequenceDiagram
    actor User as Người dùng
    participant Web as Web runtime
    participant Decorator as EzyChat view decorator
    participant Setting as Cấu hình EzyChat
    participant Page as Trang HTML

    User->>Web: Mở một trang
    Web->>Decorator: Trang chuẩn bị được render
    Decorator->>Setting: Kiểm tra hiển thị chat

    alt Đã bật chat
        Setting-->>Decorator: Cấu hình chat mặc định
        Decorator->>Page: Thêm CSS
        Decorator->>Page: Thêm JavaScript
        Decorator->>Page: Thêm biến cấu hình
    end

    Page-->>User: Trang có giao diện chat
Khác với widget theo profile, chat mặc định không tạo iframe và không cần tải trang widget riêng. Giao diện chat được JavaScript dựng trực tiếp trong trang hiện tại.

Bật chat mặc định

Đăng nhập trang quản trị, mở phần cài đặt EzyChat và bật:
Hiển thị trên web: Bật
Đây là công tắc chính. Khi tắt, EzyChat không bổ sung JavaScript, CSS hoặc biến cấu hình chat vào các view của website.
Việc bật tùy chọn này không liên quan đến trạng thái của bất kỳ chat profile nào.

Chọn phương thức giao tiếp

Tùy chọn Chat qua socket trên web xác định phương thức chat mặc định.

Sử dụng socket

Khi bật socket, EzyChat bổ sung socket client vào trang. Tin nhắn và trạng thái đang nhập có thể được truyền theo thời gian thực.
Trước khi bật, cần bảo đảm:
  • Socket server đang hoạt động.
  • Socket application của EzyChat đã được cài đặt.
  • Trình duyệt có thể kết nối tới WebSocket URL.
  • Reverse proxy hỗ trợ WebSocket upgrade.
  • Danh tính người dùng được gắn với phiên socket.

Sử dụng HTTP

Khi tắt socket, giao diện sử dụng API web để tạo kênh, lấy lịch sử và gửi tin nhắn.
Đây là lựa chọn phù hợp cho lần cài đặt đầu tiên vì chỉ yêu cầu web runtime hoạt động.

Cấu hình thông tin người dùng

Chat mặc định đọc các yêu cầu thông tin từ cấu hình toàn cục:
  • Yêu cầu thông tin người dùng trước khi chat.
  • Yêu cầu email.
  • Yêu cầu số điện thoại.
  • Cho phép đính kèm tệp.
Nếu người truy cập chưa đăng nhập, thao tác tạo kênh sẽ bị từ chối với trạng thái chưa xác thực. Giao diện sau đó chuyển sang quy trình yêu cầu thông tin hoặc đăng ký tài khoản.
Một cấu hình khởi đầu phù hợp là:
Thiết lậpGiá trị gợi ý
Yêu cầu thông tin người dùngBật
Yêu cầu emailBật
Yêu cầu số điện thoạiTắt
Cho phép đính kèm tệpTắt cho đến khi media được cấu hình

Cấu hình giao diện

Giao diện chat mặc định sử dụng trực tiếp các thiết lập toàn cục.

Nút mở chat

Có thể cấu hình:
  • Kiểu nút: hình tròn, vuông bo góc hoặc hình vuông.
  • Vị trí: bên trái hoặc bên phải.
  • Kích thước: nhỏ, trung bình hoặc lớn.
  • Màu nền.
  • Ảnh launcher.
  • Hiệu ứng thu hút chú ý.
Giá trị mặc định của plugin:
Kiểu nút: circle
Vị trí: right
Kích thước: medium
Màu: #ff7675
Nếu URL ảnh launcher được để trống, giao diện sử dụng biểu tượng chat mặc định.

Ảnh nhân viên hỗ trợ

Ảnh này được hiển thị bên cạnh tin nhắn do phía hỗ trợ gửi. Nếu không cấu hình riêng, plugin sử dụng tài nguyên mặc định:
/ezychat/images/supporter.png

JavaScript và CSS

Tài nguyên mặc định là:
/ezychat/js/main.js
/ezychat/css/style.css
Chỉ thay các URL này khi cần sử dụng CDN hoặc một bản giao diện đã tùy biến. JavaScript và CSS thay thế phải tương thích với phiên bản plugin hiện tại.

Giới hạn tin nhắn

Cấu hình Độ dài tin nhắn tối đa kiểm soát nội dung người dùng có thể gửi.
Giá trị mặc định:
3000 ký tự
Validation được thực hiện ở server, vì vậy việc thay đổi giới hạn chỉ ở frontend là không đủ.

Cách tạo kênh mặc định

Khi người dùng bắt đầu chat, frontend gọi API tạo hoặc lấy kênh hỗ trợ mà không gửi khóa profile.
sequenceDiagram
    actor User as Người dùng
    participant UI as Giao diện chat mặc định
    participant API as Web API
    participant Channel as Dịch vụ kênh
    participant Supporter as Nhân viên hỗ trợ chung

    User->>UI: Bắt đầu chat
    UI->>API: Tạo hoặc lấy kênh hỗ trợ
    Note over UI,API: Không gửi embed key

    API->>Channel: Tìm kênh gần nhất của người dùng

    alt Chưa có kênh
        Channel->>Channel: Tạo kênh SUPPORT
        Channel->>Channel: Thêm người dùng
        Channel->>Supporter: Thêm nhân viên hỗ trợ chung
    end

    API-->>UI: Thông tin kênh
Do request không có profile hoặc embedKey:
  • Không tìm chat profile.
  • Không gắn chatProfileId vào kênh.
  • Không thêm thành viên từ chat profile.
  • Không áp dụng cấu hình giao diện của profile.
  • Không kiểm tra allowed origin của profile.
Kênh vẫn là một kênh hỗ trợ bình thường và sử dụng nhân viên hỗ trợ chung của EzyChat.

Nhân viên hỗ trợ

Chat mặc định sử dụng danh sách quản trị viên có vai trò hỗ trợ chung.
Khi tạo kênh, EzyChat:
  1. Thêm người dùng vào kênh.
  2. Lấy danh sách quản trị viên hỗ trợ.
  3. Thêm các quản trị viên đó vào kênh.
  4. Kiểm tra lại danh sách này khi xử lý tin nhắn và bổ sung thành viên còn thiếu nếu cần.
Vì vậy, để chat mặc định hoạt động đầy đủ, cần gán vai trò hỗ trợ cho ít nhất một tài khoản quản trị viên.
Không cần thêm thành viên vào chat profile.

Chatbot mặc định

Chat mặc định có thể sử dụng chatbot mà không cần profile.
Khi một kênh không được gắn profile, hệ thống tìm chatbot theo cấu hình chung:
  1. Đọc chatbot service mặc định.
  2. Kiểm tra xem có default profile riêng của service hay không.
  3. Nếu có, sử dụng profile đó làm cấu hình chatbot.
  4. Nếu không, gọi trực tiếp chatbot service mặc định với cấu hình chung.
Điều này có nghĩa là “không cần chat profile” đối với giao diện và việc tạo kênh. Tuy nhiên, hệ thống vẫn có thể tham chiếu một profile mặc định của chatbot service nếu quản trị viên đã cấu hình nó.
Để chatbot trả lời, vẫn cần:
  • Một chatbot service đã được đăng ký.
  • Danh tính chatbot đã được khởi tạo.
  • Chatbot được thêm vào kênh.
  • Chatbot đang được bật cho kênh.
  • Người dùng chưa vượt quá hạn mức phản hồi.

Cấu hình chatbot

Các thiết lập toàn cục gồm:
Thiết lậpMặc định
Số tin nhắn dùng làm ngữ cảnh20
Số câu trả lời tối đa mỗi người dùng20
Chu kỳ làm mới hạn mức30 phút
Tắt giới hạnĐặt hạn mức bằng 0
Nếu chưa có chatbot provider, để trống tên chatbot service. Việc cấu hình tên service không tự tạo kết nối đến nhà cung cấp AI.

Cấu hình kênh

Chat mặc định tạo kênh loại SUPPORT. Mặc định, danh sách loại kênh hỗ trợ còn bao gồm cả kênh OA.
Phần cài đặt kênh cũng cho phép cấu hình secret dùng khi băm mật khẩu khóa kênh. Nếu sử dụng chức năng này:
  • Chọn một secret dài và ngẫu nhiên.
  • Không đưa secret xuống frontend.
  • Không thay đổi secret sau khi đã có mật khẩu kênh đang sử dụng.

Cấu hình đề xuất

Để cài đặt chat mặc định lần đầu:
Hiển thị trên web: Bật
Chat qua socket: Tắt
Yêu cầu thông tin người dùng: Bật
Yêu cầu email: Bật
Yêu cầu số điện thoại: Tắt
Cho phép đính kèm: Tắt
Độ dài tin nhắn tối đa: 3000

Kiểu nút: circle
Vị trí: right
Kích thước: medium
Màu: #ff7675

Chatbot service: Để trống
Sau đó:
  1. Gán vai trò hỗ trợ cho một quản trị viên.
  2. Mở một trang web được render bởi EzyPlatform.
  3. Kiểm tra nút chat xuất hiện.
  4. Đăng nhập hoặc nhập thông tin người dùng.
  5. Tạo cuộc hội thoại.
  6. Kiểm tra kênh xuất hiện trong trang quản trị.
  7. Gửi và nhận tin nhắn qua HTTP.
  8. Chỉ bật socket, tệp đính kèm hoặc chatbot sau khi luồng cơ bản hoạt động.

Phân biệt với chat profile

Chat profile chỉ cần thiết trong các trường hợp:
  • Nhúng widget vào một website khác.
  • Cần một khóa nhúng riêng.
  • Cần giới hạn allowed origin.
  • Cần giao diện riêng cho từng website.
  • Cần nhóm nhân viên hỗ trợ riêng.
  • Cần chatbot hoặc system message riêng.
  • Cần chọn phương thức truyền tải riêng cho từng widget.
flowchart TD
    Need["Cần hiển thị chat"]

    Need --> Question{"Chat nằm trong web EzyPlatform?"}
    Question -->|Có| Default["Dùng chat mặc định<br/>Cấu hình toàn cục"]
    Question -->|Không| Profile["Tạo chat profile<br/>Dùng khóa nhúng"]

    Default --> NoProfile["Không cần profile"]
    Profile --> Embed["Nhúng embed.js hoặc iframe"]