Skip to main content

PSConversation

Cuộc hội thoại là một chức năng quan trọng trong UI SDK cho phép người dùng trả lời tin nhắn của nhau trong một kênh. Để hiển thị đầy đủ một cuộc hội thoại, hãy sử dụng component PSConversation.

PSConversation chứa nhiều các tính năng cho một cuộc hội thoại, gửi tin nhắn, gửi tệp, trả lời, ghim, thư viện...

Cách sử dụng

import { PSConversation } from "@communi/chat-react";
import { useState } from "react";

export const Component = () => {
const [threadId, setThreadId] = useState(null);

if(!threadId) return <EmptyConversation>
return (
<PSConversation
className="ps-conversation"
style={{ width: 600, height: '100%' }}
threadId="YOUR_THREAD_ID"
threadId={threadId}
onThreadChange={setThreadId}
config={{
features: {
[FEATURE_KEYS.TAG]: false, // Tắt hiển thị tag
},
}}
/>
);
};

Props API

Thuộc tínhMô tảKiểu dữ liệuBắt buộc
classNameTùy chỉnh class CSSstringKhông
configCài đặt enable/disable các tính năng Xem chi tiếtobjectKhông
conversationIdTham số để xác định PSConversation hiện tại đang được liên kết với PSThreadList hay PSDeskInfo nào trong trường hợp vẽ nhiều PSConversation trên cùng một màn hình, các component được liên kết phải có cùng conversationIdstringKhông
deskModeHiển thị giao diện dành cho CS TeambooleanKhông
enableRTFTùy chỉnh có sử dụng rich text editor hay không (Mặc định: true)booleanKhông
onBackButtonClickXử lý sự kiện người dùng nhấn nút trở về trên headerfunctionKhông
onGroupNameClickXử lý sự kiện người dùng click vào tên cuộc hội thoạifunction(threadInfo: object)Không
onThreadChangeXử lý sự kiện chuyển sang một cuộc hội thoại khácfunction(id: string)Không
renderInvitationLinkChỉnh sửa link mời tham gia nhóm được hiển thị(invitationKey: string) => stringKhông
renderToolbarChỉnh sửa button trên toolbar Xem ví dụ(defaultButtons: Array) => ArrayKhông
showBackButtonXác định xem có hiển thị back button. (Mặc định: false)booleanKhông
styleTùy chỉnh style CSSobjectKhông
threadIdId của cuộc hội thoại.stringKhông
userIdId của đối tác trong cuộc hội thoại cá nhânstringKhông
renderCustomMessageTùy chỉnh render custom messagefunction(data: MessageData) => ReactNodeKhông
renderThreadViewBottomTùy chỉnh thêm một vùng giao diện vào phía dưới conversationfunction() => ReactNodeKhông
onMessagesLoadedHàm được gọi khi conversation đã tải xong messagefunction() => voidKhông
onSendMessageHàm được gọi lại khi gửi một message bất kỳfunction() => voidKhông
onBeforeSendMessageHàm được gọi lại ngay trước khi gửi một message bất kỳfunction() => voidKhông
onAfterSendMessageHàm được gọi lại ngay sau khi gửi một message bất kỳfunction() => voidkhông
domainLinkMessageĐường dẫn đến màn hình chat (VD: https://demo-web.piscale.com/chat)stringkhông
targetMessageIdID của tin nhắn muốn jump đếnstringkhông

Feature configs

KeysMô tả chức năngKiểuMặc định
FEATURE_KEYS.ADD_GROUP_MEMBERThêm thành viên vào trong nhómbooleantrue
FEATURE_KEYS.BLOCK_MEMBERChặn thành viên vào nhómbooleantrue
FEATURE_KEYS.BLOCK_USERBlock thành viên trong hệ thốngbooleantrue
FEATURE_KEYS.BLOCKED_LISTDanh sách người dùng bị chặn khỏi nhómbooleantrue
FEATURE_KEYS.BOT_COMMANDSDanh sách command với botbooleantrue
FEATURE_KEYS.CHANGE_GROUP_AVATARThay đổi avatar của nhómbooleantrue
FEATURE_KEYS.CHANGE_GROUP_NAMEThay đổi tên của nhómbooleantrue
FEATURE_KEYS.COMMENT_MESSAGEBình luận tin nhắn (sub-thread)booleantrue
FEATURE_KEYS.GRANT_ADMINCấp quyền admin nhómbooleantrue
FEATURE_KEYS.GRANT_OWNERChuyển quyền sở hữu nhómbooleantrue
FEATURE_KEYS.LEAVE_THREADRời khỏi nhómbooleantrue
FEATURE_KEYS.MUTED_GROUP_MEMBERTắt quyền gửi tin nhắn của thành viênbooleantrue
FEATURE_KEYS.MUTED_LISTDanh sách các thành viên bị chặn gửi tin nhắnbooleantrue
FEATURE_KEYS.PIN_MESSAGEGhim tin nhắnbooleantrue
FEATURE_KEYS.PRIVATE_MESSAGEGửi tin nhắn các nhân giữa các userbooleantrue
FEATURE_KEYS.RECALL_MESSAGEThu hồi tin nhắnbooleantrue
FEATURE_KEYS.REMOVE_ADMINXóa quyền admin của thành viênbooleantrue
FEATURE_KEYS.REMOVE_GROUP_MEMBERXóa thành viên khỏi nhómbooleantrue
FEATURE_KEYS.REMOVE_MESSAGE_FOR_YOUXóa tin nhắn với bản thânbooleantrue
FEATURE_KEYS.REMOVE_THREADXóa cuộc hội thoại khỏi danh sáchbooleantrue
FEATURE_KEYS.SEARCH_THREADTìm kiếm các cuộc hội thoạibooleantrue
FEATURE_KEYS.SETUP_INVITATION_LINKCài đặt link mời tham gia nhómbooleantrue
FEATURE_KEYS.SHOW_INVITATION_LINKHiển thị link mời tham gia nhómbooleantrue
FEATURE_KEYS.UN_MUTED_GROUP_MEMBERBật lại quyền gửi tin nhắn của thành viênbooleantrue
FEATURE_KEYS.UNBLOCK_MEMBERBỏ chặn thành viên vào nhómbooleantrue
FEATURE_KEYS.UNPIN_MESSAGEBỏ ghim tin nhắnbooleantrue

Customization

1. Tùy chỉnh Toolbar

Chúng tôi cho phép người dùng có thể thay đổi các button trên thanh toolbar bằng thuộc tính renderToolbar

import { PSConversation } from "@communi/chat-react";

const handleRenderToolbar = (defaultButtons) => {
// Modify the defaultButtons array, then return the newButtons array
const newButtons = [
...defaultButtons,
{
id: "foo",
icon: <div>foo</div>,
tooltip: "foo",
onClick: handleClickFooButton,
},
{
id: "bar",
icon: <div>bar</div>,
tooltip: "bar",
onClick: handleClickBarButton,
},
];
return newButtons;
};

export const Component = () => {
return (
<PSConversation
className="flex-1"
threadId="YOUR_THREAD_ID"
renderToolbar={handleRenderToolbar}
onThreadChange={handleThreadChange}
/>
);
};

2. Custom message

Để tăng tính linh hoạt phục vụ cho nhiều nghiệp vụ của khách hàng, chúng tôi cho phép hiển thị UI phụ thuộc hoàn toàn vào dữ liệu tùy chỉnh của các bạn.


import { PSConversation } from "@communi/chat-react";
import { useState,useCallback } from "react";

export const Component = () => {
const [threadId, setThreadId] = useState(null);

const renderCustomMessage = useCallback((messageData)=> {
const messageId = messageData.messageId
const data = messageData.data
return <div>{`Đây là custom message, data: ${JSON.stringify(data)}`}</div>
},[]);

if(!threadId) return <EmptyConversation>;

return (
<PSConversation
className="ps-conversation"
style={{ width: 600, height: '100%' }}
threadId="YOUR_THREAD_ID"
threadId={threadId}
onThreadChange={setThreadId}
renderCustomMessage={renderCustomMessage}
config={{
features: {
[FEATURE_KEYS.TAG]: false, // Tắt hiển thị tag
},
}}
/>
);
};

Ghi chú

Một customMessage sẽ có thể ở một trong 2 dạng:

  • tempMessage chỉ tồn tại trên thiết bị của người dùng có messageId ở dạng chuỗi string ngẫu nhiên.
  • Tin nhắn thực tế đã được gửi với tất cả người dùng trong cuộc hội thoại, có messageId ở dạng number

Để tạo một customMessage, hãy sử dụng createCustomMessage hoặc appendTempMessage, Xem chi tiết