@tencentcloud/ai-desk-customer-vue 1.0.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/assets/send_button_h5.svg +1 -0
- package/components/CustomerServiceChat/index-web.vue +3 -3
- package/components/CustomerServiceChat/message-input/index-web.vue +16 -7
- package/components/CustomerServiceChat/message-input/message-input-editor-web.vue +5 -2
- package/components/CustomerServiceChat/message-list/index-web.vue +6 -0
- package/components/CustomerServiceChat/message-list/message-elements/message-bubble-web.vue +14 -15
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/marked.ts +1 -1
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-branch.vue +25 -6
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-concurrency-limit.vue +40 -0
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-desk.vue +32 -8
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-branch/branch-pc.vue +93 -73
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-branch/index.vue +53 -52
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-mobile/input-mobile.vue +73 -80
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-mobile/label-mobile.vue +21 -24
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-mobile/radios-mobile.vue +115 -116
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-pc/input-pc.vue +69 -73
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-pc/label-pc.vue +21 -25
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-pc/radio-pc.vue +87 -77
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/form-mobile.vue +213 -200
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/form-pc.vue +122 -113
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/index.vue +7 -7
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-order.vue +142 -0
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-rating/message-rating-number.vue +2 -1
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-rating/message-rating-star.vue +2 -1
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-rich-text.vue +8 -6
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-stream.vue +89 -6
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-plugin-web.vue +5 -0
- package/components/CustomerServiceChat/message-list/scroll-button/index.vue +15 -3
- package/components/common/BottomPopup/index.vue +1 -1
- package/constant.ts +10 -4
- package/locales/en/aidesk.ts +3 -1
- package/locales/fil/aidesk.ts +3 -1
- package/locales/id/aidesk.ts +4 -2
- package/locales/ja/aidesk.ts +4 -2
- package/locales/ms/aidesk.ts +4 -2
- package/locales/ru/aidesk.ts +5 -3
- package/locales/th/aidesk.ts +3 -1
- package/locales/vi/aidesk.ts +4 -2
- package/locales/zh_cn/aidesk.ts +4 -3
- package/locales/zh_tw/aidesk.ts +3 -1
- package/package.json +1 -1
- package/server.ts +53 -16
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
<MessageCustomerService
|
|
14
14
|
v-if="pluginMessageType.pluginType === 'customer'"
|
|
15
15
|
:message="props.message"
|
|
16
|
+
@heightChanged="onHeightChanged"
|
|
16
17
|
/>
|
|
17
18
|
</template>
|
|
18
19
|
</MessagePluginLayout>
|
|
@@ -44,6 +45,7 @@ const emits = defineEmits([
|
|
|
44
45
|
'resendMessage',
|
|
45
46
|
'handleToggleMessageItem',
|
|
46
47
|
'handleH5LongPress',
|
|
48
|
+
'heightChanged',
|
|
47
49
|
]);
|
|
48
50
|
const messageModel = computed(() => TUIStore.getMessageModel(props.message.ID));
|
|
49
51
|
|
|
@@ -76,6 +78,9 @@ const handleToggleMessageItem = (
|
|
|
76
78
|
const handleH5LongPress = (e: any, message: IMessageModel, type: string) => {
|
|
77
79
|
emits('handleH5LongPress', e, message, type);
|
|
78
80
|
};
|
|
81
|
+
const onHeightChanged = () => {
|
|
82
|
+
emits('heightChanged');
|
|
83
|
+
};
|
|
79
84
|
</script>
|
|
80
85
|
|
|
81
86
|
<style lang="scss" scoped>
|
|
@@ -91,7 +91,9 @@ function onMessageListUpdated(newMessageList: IMessageModel[]) {
|
|
|
91
91
|
messageList.value = newMessageList || [];
|
|
92
92
|
const lastMessage = messageList.value?.[messageList.value?.length - 1];
|
|
93
93
|
isExistLastMessage.value = !!(
|
|
94
|
-
|
|
94
|
+
// 过滤在线消息
|
|
95
|
+
// @ts-ignore
|
|
96
|
+
lastMessage && !lastMessage?._message._onlineOnlyFlag && lastMessage?.time < currentLastMessageTime?.value
|
|
95
97
|
);
|
|
96
98
|
}
|
|
97
99
|
|
|
@@ -104,6 +106,9 @@ function onNewMessageListUpdated(newMessageList: IMessageModel[]) {
|
|
|
104
106
|
&& !message.isDeleted
|
|
105
107
|
&& !message.isRevoked
|
|
106
108
|
&& !isTypingMessage(message)
|
|
109
|
+
// 过滤在线消息
|
|
110
|
+
// @ts-ignore
|
|
111
|
+
&& !message._message._onlineOnlyFlag
|
|
107
112
|
) {
|
|
108
113
|
newMessageCount.value += 1;
|
|
109
114
|
}
|
|
@@ -167,9 +172,17 @@ function scrollToMessageListBottom() {
|
|
|
167
172
|
emits('scrollToLatestMessage');
|
|
168
173
|
}
|
|
169
174
|
|
|
175
|
+
function hideScrollButton() {
|
|
176
|
+
if (isScrollButtonVisible.value) {
|
|
177
|
+
isScrollButtonVisible.value = false;
|
|
178
|
+
resetNewMessageCount();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
170
182
|
defineExpose({
|
|
171
183
|
judgeScrollOverOneScreen,
|
|
172
184
|
isScrollButtonVisible,
|
|
185
|
+
hideScrollButton,
|
|
173
186
|
});
|
|
174
187
|
</script>
|
|
175
188
|
|
|
@@ -179,8 +192,6 @@ defineExpose({
|
|
|
179
192
|
bottom: 10px;
|
|
180
193
|
right: 10px;
|
|
181
194
|
width: auto;
|
|
182
|
-
min-width: 92px;
|
|
183
|
-
max-width: 115px;
|
|
184
195
|
height: 28px;
|
|
185
196
|
background: #fff;
|
|
186
197
|
border: 1px solid #e0e0e0;
|
|
@@ -198,6 +209,7 @@ defineExpose({
|
|
|
198
209
|
font-size: 10px;
|
|
199
210
|
color: #147aff;
|
|
200
211
|
margin-left: 3px;
|
|
212
|
+
margin-right: 3px;
|
|
201
213
|
}
|
|
202
214
|
}
|
|
203
215
|
</style>
|
package/constant.ts
CHANGED
|
@@ -23,12 +23,16 @@ export const CUSTOM_MESSAGE_SRC = {
|
|
|
23
23
|
PRODUCT_CARD: '22',
|
|
24
24
|
SATISFACTION_CON: '23',
|
|
25
25
|
USER_SATISFACTION: '24',
|
|
26
|
+
SEAT_STATUS: '26',
|
|
27
|
+
USER_END_SESSION: '27',
|
|
28
|
+
ORDER:'28',
|
|
26
29
|
ROBOT_MSG: '29',
|
|
27
30
|
RICH_TEXT: '30',
|
|
28
31
|
STREAM_TEXT: '31',
|
|
29
|
-
MULTI_BRANCH:'32',
|
|
30
|
-
MULTI_FORM:'33',
|
|
31
|
-
THINKING:'35',
|
|
32
|
+
MULTI_BRANCH: '32',
|
|
33
|
+
MULTI_FORM: '33',
|
|
34
|
+
THINKING: '35',
|
|
35
|
+
CONCURRENCY_LIMIT: '36',
|
|
32
36
|
};
|
|
33
37
|
|
|
34
38
|
// im message extra type
|
|
@@ -134,4 +138,6 @@ export const WHITE_LIST = [
|
|
|
134
138
|
CUSTOM_MESSAGE_SRC.STREAM_TEXT,
|
|
135
139
|
CUSTOM_MESSAGE_SRC.MULTI_BRANCH,
|
|
136
140
|
CUSTOM_MESSAGE_SRC.MULTI_FORM,
|
|
137
|
-
|
|
141
|
+
CUSTOM_MESSAGE_SRC.CONCURRENCY_LIMIT,
|
|
142
|
+
CUSTOM_MESSAGE_SRC.ORDER,
|
|
143
|
+
];
|
package/locales/en/aidesk.ts
CHANGED
|
@@ -12,5 +12,7 @@ const AIDesk = {
|
|
|
12
12
|
"如果满意请给好评哦~":"If you're satisfied, please give a good review~",
|
|
13
13
|
"请对本次服务进行评价": "Please rate this service",
|
|
14
14
|
"提交评价": "Feedback",
|
|
15
|
+
"并发限制": "There are currently too many users accessing the service. Please try again later",
|
|
16
|
+
"分支选项异常": "Content is abnormal, please check the task flow configuration"
|
|
15
17
|
}
|
|
16
|
-
export default AIDesk;
|
|
18
|
+
export default AIDesk;
|
package/locales/fil/aidesk.ts
CHANGED
|
@@ -12,5 +12,7 @@ const AIDesk = {
|
|
|
12
12
|
"如果满意请给好评哦~":"Kung nasiyahan ka, mangyaring magbigay ng magandang pagsusuri~",
|
|
13
13
|
"请对本次服务进行评价": "Mangyaring suriin ang serbisyong ito",
|
|
14
14
|
"提交评价": "Ipasa ang pagsusuri",
|
|
15
|
+
"并发限制": "Maraming tao ang naghahanap ng tulong ngayon, subukan muli mamaya",
|
|
16
|
+
"分支选项异常": "Ang nilalaman ay abnormal, pakisuri ang configuration ng task flow"
|
|
15
17
|
}
|
|
16
|
-
export default AIDesk;
|
|
18
|
+
export default AIDesk;
|
package/locales/id/aidesk.ts
CHANGED
|
@@ -11,6 +11,8 @@ const AIDesk = {
|
|
|
11
11
|
"请输入内容":"Silakan masukkan konten",
|
|
12
12
|
"如果满意请给好评哦~":"Jika Anda puas, silakan berikan ulasan yang bagus~",
|
|
13
13
|
"请对本次服务进行评价": "Silakan beri penilaian untuk layanan ini",
|
|
14
|
-
"提交评价": "Kirim Ulasan"
|
|
14
|
+
"提交评价": "Kirim Ulasan",
|
|
15
|
+
"并发限制": "Saat ini banyak pengguna yang mengakses. Mohon coba lagi nanti",
|
|
16
|
+
"分支选项异常": "Konten tidak normal, silakan periksa konfigurasi alur tugas"
|
|
15
17
|
}
|
|
16
|
-
export default AIDesk;
|
|
18
|
+
export default AIDesk;
|
package/locales/ja/aidesk.ts
CHANGED
|
@@ -11,6 +11,8 @@ const AIDesk = {
|
|
|
11
11
|
"请输入内容":"内容を入力してください",
|
|
12
12
|
"如果满意请给好评哦~":"ご満足いただけましたら、ぜひ良いレビューをお願いします〜",
|
|
13
13
|
"请对本次服务进行评价": "このサービスについて評価をお願いします",
|
|
14
|
-
"提交评价": "評価を提出する"
|
|
14
|
+
"提交评价": "評価を提出する",
|
|
15
|
+
"并发限制": "現在アクセスが集中しております。しばらくしてから再度お試しください",
|
|
16
|
+
"分支选项异常": "コンテンツに異常があります。タスクフローの設定を確認してください"
|
|
15
17
|
}
|
|
16
|
-
export default AIDesk;
|
|
18
|
+
export default AIDesk;
|
package/locales/ms/aidesk.ts
CHANGED
|
@@ -11,6 +11,8 @@ const AIDesk = {
|
|
|
11
11
|
"请输入内容":"Sila masukkan kandungan",
|
|
12
12
|
"如果满意请给好评哦~":"Jika anda berpuas hati, sila berikan ulasan yang baik~",
|
|
13
13
|
"请对本次服务进行评价": "Sila beri penilaian untuk perkhidmatan ini",
|
|
14
|
-
"提交评价": "Hantar Penilaian"
|
|
14
|
+
"提交评价": "Hantar Penilaian",
|
|
15
|
+
"并发限制": "Terdapat terlalu ramai pengguna pada masa ini. Sila cuba lagi nanti",
|
|
16
|
+
"分支选项异常": "Kandungan tidak normal, sila semak konfigurasi aliran tugas"
|
|
15
17
|
}
|
|
16
|
-
export default AIDesk;
|
|
18
|
+
export default AIDesk;
|
package/locales/ru/aidesk.ts
CHANGED
|
@@ -10,7 +10,9 @@ const AIDesk = {
|
|
|
10
10
|
"Hi,我是": "Привет, я ",
|
|
11
11
|
"请输入内容":"Пожалуйста, введите содержание",
|
|
12
12
|
"如果满意请给好评哦~":"Если вы удовлетворены, пожалуйста, оставьте хороший отзыв~",
|
|
13
|
-
"请对本次服务进行评价": "Оцените обслуживание",
|
|
14
|
-
"提交评价": "Отправить оценку"
|
|
13
|
+
"请对本次服务进行评价": "Оцените обслуживание",
|
|
14
|
+
"提交评价": "Отправить оценку",
|
|
15
|
+
"并发限制": "В данный момент слишком много пользователей. Попробуйте позже",
|
|
16
|
+
"分支选项异常": "Содержимое аномально, пожалуйста, проверьте конфигурацию потока задач"
|
|
15
17
|
}
|
|
16
|
-
export default AIDesk;
|
|
18
|
+
export default AIDesk;
|
package/locales/th/aidesk.ts
CHANGED
|
@@ -12,5 +12,7 @@ const AIDesk = {
|
|
|
12
12
|
"如果满意请给好评哦~": "หากพอใจแล้วก็อย่าลืมรีวิวให้ด้วยนะ~",
|
|
13
13
|
"请对本次服务进行评价": "กรุณาประเมินบริการครั้งนี้",
|
|
14
14
|
"提交评价": "ส่งการประเมิน",
|
|
15
|
+
"并发限制": "ปัจจุบันมีผู้ใช้งานจำนวนมาก กรุณาลองใหม่ในภายหลัง",
|
|
16
|
+
"分支选项异常": "เนื้อหาผิดปกติ กรุณาตรวจสอบการตั้งค่ากระบวนการงาน"
|
|
15
17
|
}
|
|
16
|
-
export default AIDesk;
|
|
18
|
+
export default AIDesk;
|
package/locales/vi/aidesk.ts
CHANGED
|
@@ -11,6 +11,8 @@ const AIDesk = {
|
|
|
11
11
|
"请输入内容":"Vui lòng nhập nội dung",
|
|
12
12
|
"如果满意请给好评哦~":"Nếu bạn hài lòng, hãy cho chúng tôi một đánh giá tốt nhé~",
|
|
13
13
|
"请对本次服务进行评价": "Vui lòng đánh giá dịch vụ này",
|
|
14
|
-
"提交评价": "Gửi đánh giá"
|
|
14
|
+
"提交评价": "Gửi đánh giá",
|
|
15
|
+
"并发限制": "Hiện có quá nhiều người đang truy cập. Vui lòng thử lại sau",
|
|
16
|
+
"分支选项异常": "Nội dung bất thường, vui lòng kiểm tra cấu hình luồng tác vụ"
|
|
15
17
|
}
|
|
16
|
-
export default AIDesk;
|
|
18
|
+
export default AIDesk;
|
package/locales/zh_cn/aidesk.ts
CHANGED
package/locales/zh_tw/aidesk.ts
CHANGED
package/package.json
CHANGED
package/server.ts
CHANGED
|
@@ -12,22 +12,38 @@ import TUIChatEngine, {
|
|
|
12
12
|
TUITranslateService,
|
|
13
13
|
SendMessageParams,
|
|
14
14
|
SendMessageOptions,
|
|
15
|
+
TUIUserService,
|
|
15
16
|
} from '@tencentcloud/chat-uikit-engine';
|
|
16
17
|
import Log from './utils/logger';
|
|
17
18
|
import { version } from './package.json'
|
|
18
19
|
import { Toast, TOAST_TYPE } from "./components/common/Toast/index-web";
|
|
19
20
|
|
|
21
|
+
interface IInitWithProfile {
|
|
22
|
+
SDKAppID: number,
|
|
23
|
+
userID: string,
|
|
24
|
+
userSig: string,
|
|
25
|
+
nickName?: string,
|
|
26
|
+
avatar?: string,
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
interface IProfile {
|
|
30
|
+
nick?: string,
|
|
31
|
+
avatar?: string,
|
|
32
|
+
}
|
|
33
|
+
|
|
20
34
|
export default class TUICustomerServer {
|
|
21
35
|
private isLoggedIn: boolean;
|
|
22
36
|
static instance: TUICustomerServer;
|
|
23
37
|
private customerServiceAccounts: any[];
|
|
24
38
|
private loggedInUserID: string;
|
|
39
|
+
private myProfile: IProfile;
|
|
25
40
|
constructor() {
|
|
26
41
|
TUICore.registerService(TUIConstants.TUICustomerServicePlugin.SERVICE.NAME, this);
|
|
27
42
|
TUICore.registerExtension(TUIConstants.TUIContact.EXTENSION.CONTACT_LIST.EXT_ID, this);
|
|
28
43
|
this.customerServiceAccounts = ['@customer_service_account'];
|
|
29
44
|
this.isLoggedIn = false;
|
|
30
45
|
this.loggedInUserID = '';
|
|
46
|
+
this.myProfile = {};
|
|
31
47
|
}
|
|
32
48
|
|
|
33
49
|
static getInstance(): TUICustomerServer {
|
|
@@ -61,12 +77,8 @@ export default class TUICustomerServer {
|
|
|
61
77
|
})
|
|
62
78
|
}
|
|
63
79
|
|
|
64
|
-
/**
|
|
65
|
-
* init
|
|
66
|
-
*/
|
|
67
80
|
public init(SDKAppID:number, userID:string, userSig:string) {
|
|
68
81
|
Log.l(`TUICustomerServer.init version:${version} SDKAppID:${SDKAppID} userID:${userID} isLoggedIn:${this.isLoggedIn} loggedInUserID:${this.loggedInUserID}`);
|
|
69
|
-
// Backward compatibility, the new version executes the init operation by default in index.ts
|
|
70
82
|
if (this.isLoggedIn) {
|
|
71
83
|
if (this.loggedInUserID === userID) {
|
|
72
84
|
return;
|
|
@@ -76,11 +88,23 @@ export default class TUICustomerServer {
|
|
|
76
88
|
this.loginCustomerUIKit(SDKAppID, userID, userSig);
|
|
77
89
|
});
|
|
78
90
|
} else {
|
|
79
|
-
// Execute call server when native plugin TUICallKit exists
|
|
80
91
|
this.loginCustomerUIKit(SDKAppID, userID, userSig);
|
|
81
92
|
}
|
|
82
93
|
}
|
|
83
94
|
|
|
95
|
+
public initWithProfile(options: IInitWithProfile) {
|
|
96
|
+
const { SDKAppID, userID, userSig, nickName, avatar } = options;
|
|
97
|
+
Log.l(`TUICustomerServer.initWithProfile version:${version}`);
|
|
98
|
+
if (nickName) {
|
|
99
|
+
// chat 个人资料的昵称是 nick
|
|
100
|
+
this.myProfile.nick = nickName;
|
|
101
|
+
}
|
|
102
|
+
if (avatar) {
|
|
103
|
+
this.myProfile.avatar = avatar;
|
|
104
|
+
}
|
|
105
|
+
this.init(SDKAppID, userID, userSig);
|
|
106
|
+
}
|
|
107
|
+
|
|
84
108
|
public unInit() {
|
|
85
109
|
return TUIChatEngine.logout();
|
|
86
110
|
}
|
|
@@ -140,18 +164,31 @@ export default class TUICustomerServer {
|
|
|
140
164
|
Log.l(`TUICustomerServer.onCall method:${method} params:`, params);
|
|
141
165
|
if (method === TUIConstants.TUICustomerServicePlugin.SERVICE.METHOD.ACTIVE_CONVERSATION) {
|
|
142
166
|
if (this.isCustomerConversation(params.conversationID)) {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
},
|
|
153
|
-
}, { onlineUserOnly: true });
|
|
167
|
+
// 如果有资料,确保资料更新完成(或失败)后再激活会话服务流
|
|
168
|
+
if (Object.keys(this.myProfile).length > 0) {
|
|
169
|
+
Log.l(`TUICustomerServer.onCall updateMyProfile:${JSON.stringify(this.myProfile)}`);
|
|
170
|
+
TUIUserService.updateMyProfile({...this.myProfile}).finally(() => {
|
|
171
|
+
this.activeServiceFlow(params);
|
|
172
|
+
});
|
|
173
|
+
} else {
|
|
174
|
+
this.activeServiceFlow(params);
|
|
175
|
+
}
|
|
154
176
|
}
|
|
155
177
|
}
|
|
156
178
|
}
|
|
179
|
+
|
|
180
|
+
// 激活会话服务流
|
|
181
|
+
private activeServiceFlow(params: any) {
|
|
182
|
+
TUIChatService.sendCustomMessage({
|
|
183
|
+
to: params.conversationID.slice(3),
|
|
184
|
+
conversationType: TUIChatEngine.TYPES.CONV_C2C,
|
|
185
|
+
payload: {
|
|
186
|
+
data: JSON.stringify({
|
|
187
|
+
src: '7',
|
|
188
|
+
customerServicePlugin: 0,
|
|
189
|
+
triggeredContent: typeof params.robotLang === 'undefined' ? undefined : { language: params.robotLang }
|
|
190
|
+
}),
|
|
191
|
+
},
|
|
192
|
+
}, { onlineUserOnly: true });
|
|
193
|
+
}
|
|
157
194
|
}
|