PSConversation
Cuộc hội thoại cho phép người dùng nhắn tin, tương tác, gửi file media, ghim tin nhắn,... với cá nhân hoặc nhóm.
Để hiển thị đầy đủ một cuộc hội thoại, hãy sử dụng component PSConversation
.
Cách sử dụng
import { PSChatProvider, PSConversation } from "@communi/chat-react";
import { useState } from "react";
export const App = () => {
const [threadId, setThreadId] = useState(null);
const config = {
features: {
[FEATURE_KEYS.ADD_GROUP_MEMBER]: false, // Không cho phép thêm thành viên mới
},
};
return (
<PSChatProvider>
<PSConversation
className="ps-conversation"
style={{ width: 600, height: "100%" }}
threadId="YOUR_THREAD_ID"
threadId={threadId}
onThreadChange={setThreadId}
/>
</PSChatProvider>
);
};
Props
Thuộc tính | Mô tả | Kiểu dữ liệu | Bắt buộc |
---|---|---|---|
className | Tùy chỉnh class CSS | string | Không |
config | Cài đặt enable/disable các tính năng Xem chi tiết | object | Không |
conversationId | Tham 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 conversationId | string | Không |
deskMode | Hiển thị giao diện dành cho CS Team | boolean | Không |
enableRTF | Tùy chỉnh có sử dụng rich text editor hay không (Mặc định: true ) | boolean | Không |
onBackButtonClick | Xử lý sự kiện người dùng nhấn nút trở về trên header | function | Không |
onGroupNameClick | Xử lý sự kiện người dùng click vào tên cuộc hội thoại | function(threadInfo: object) | Không |
onThreadChange | Xử lý sự kiện chuyển sang một cuộc hội thoại khác | function(id: string) | Không |
renderInvitationLink | Chỉnh sửa link mời tham gia nhóm được hiển thị | (invitationKey: string) => string | Không |
renderToolbar | Chỉnh sửa button trên toolbar Xem ví dụ | (defaultButtons: Array) => Array | Không |
showBackButton | Xác định xem có hiển thị back button. (Mặc định: false ) | boolean | Không |
style | Tùy chỉnh style CSS | object | Không |
threadId | Id của cuộc hội thoại. | string | Không |
userId | Id của đối tác trong cuộc hội thoại cá nhân | string | Không |
renderCustomMessage | Tùy chỉnh render custom message | function(data: MessageData) => ReactNode | Không |
renderThreadViewBottom | Tùy chỉnh thêm một vùng giao diện vào phía dưới conversation | function() => ReactNode | Không |
onMessagesLoaded | Hàm được gọi khi conversation đã tải xong message | function() => void | Không |
onSendMessage | Hàm được gọi lại khi gửi một message bất kỳ | function() => void | Không |
onBeforeSendMessage | Hàm được gọi lại ngay trước khi gửi một message bất kỳ | function() => void | Không |
onAfterSendMessage | Hàm được gọi lại ngay sau khi gửi một message bất kỳ | function() => void | không |
domainLinkMessage | Đường dẫn đến màn hình chat (VD: https://demo-web.piscale.com/chat) | string | không |
targetMessageId | ID của tin nhắn muốn jump đến | string | không |
Feature configs
Keys | Mô tả chức năng | Kiểu | Mặc định |
---|---|---|---|
FEATURE_KEYS.ADD_GROUP_MEMBER | Thêm thành viên vào trong nhóm | boolean | true |
FEATURE_KEYS.BLOCK_MEMBER | Chặn thành viên vào nhóm | boolean | true |
FEATURE_KEYS.BLOCK_USER | Block thành viên trong hệ thống | boolean | true |
FEATURE_KEYS.BLOCKED_LIST | Danh sách người dùng bị chặn khỏi nhóm | boolean | true |
FEATURE_KEYS.BOT_COMMANDS | Danh sách command với bot | boolean | true |
FEATURE_KEYS.CHANGE_GROUP_AVATAR | Thay đổi avatar của nhóm | boolean | true |
FEATURE_KEYS.CHANGE_GROUP_NAME | Thay đổi tên của nhóm | boolean | true |
FEATURE_KEYS.COMMENT_MESSAGE | Bình luận tin nhắn (sub-thread) | boolean | true |
FEATURE_KEYS.GRANT_ADMIN | Cấp quyền admin nhóm | boolean | true |
FEATURE_KEYS.GRANT_OWNER | Chuyển quyền sở hữu nhóm | boolean | true |
FEATURE_KEYS.LEAVE_THREAD | Rời khỏi nhóm | boolean | true |
FEATURE_KEYS.MUTED_GROUP_MEMBER | Tắt quyền gửi tin nhắn của thành viên | boolean | true |
FEATURE_KEYS.MUTED_LIST | Danh sách các thành viên bị chặn gửi tin nhắn | boolean | true |
FEATURE_KEYS.PIN_MESSAGE | Ghim tin nhắn | boolean | true |
FEATURE_KEYS.PRIVATE_MESSAGE | Gửi tin nhắn các nhân giữa các user | boolean | true |
FEATURE_KEYS.RECALL_MESSAGE | Thu hồi tin nhắn | boolean | true |
FEATURE_KEYS.REMOVE_ADMIN | Xóa quyền admin của thành viên | boolean | true |
FEATURE_KEYS.REMOVE_GROUP_MEMBER | Xóa thành viên khỏi nhóm | boolean | true |
FEATURE_KEYS.REMOVE_MESSAGE_FOR_YOU | Xóa tin nhắn với bản thân | boolean | true |
FEATURE_KEYS.REMOVE_THREAD | Xóa cuộc hội thoại khỏi danh sách | boolean | true |
FEATURE_KEYS.SEARCH_THREAD | Tìm kiếm các cuộc hội thoại | boolean | true |
FEATURE_KEYS.SETUP_INVITATION_LINK | Cài đặt link mời tham gia nhóm | boolean | true |
FEATURE_KEYS.SHOW_INVITATION_LINK | Hiển thị link mời tham gia nhóm | boolean | true |
FEATURE_KEYS.UN_MUTED_GROUP_MEMBER | Bật lại quyền gửi tin nhắn của thành viên | boolean | true |
FEATURE_KEYS.UNBLOCK_MEMBER | Bỏ chặn thành viên vào nhóm | boolean | true |
FEATURE_KEYS.UNPIN_MESSAGE | Bỏ ghim tin nhắn | boolean | true |
Customization
1. Tùy chỉnh Toolbar
Bạn có thể thay đổi các button trên thanh toolbar bằng function 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ị tin nhắn theo yêu cầu của bạn
import { PSChatProvider, PSConversation } from "@communi/chat-react";
import { useCallback } from "react";
export const Component = () => {
const renderCustomMessage = useCallback((messageData) => {
const messageId = messageData.messageId;
const data = messageData.data;
return <div>{`Đây là custom message, data: ${JSON.stringify(data)}`}</div>;
}, []);
return (
<PSChatProvider>
<PSConversation renderCustomMessage={renderCustomMessage} />
</PSChatProvider>
);
};
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