Skip to main content

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.

Image of 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í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

Bạn có thể thay đổi các button trên thanh toolbar bằng function renderToolbar

Image of 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