@tencentcloud/ai-desk-customer-vue 1.3.0 → 1.5.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 +23 -4
- package/assets/customer_avatar.png +0 -0
- package/assets/face.svg +10 -0
- package/assets/feedback_dialog_close.svg +3 -0
- package/assets/feedback_dislike_after.svg +3 -0
- package/assets/feedback_dislike_before.svg +10 -0
- package/assets/feedback_dislike_hover.svg +10 -0
- package/assets/feedback_like_after.svg +14 -0
- package/assets/feedback_like_before.svg +10 -0
- package/assets/feedback_like_hover.svg +10 -0
- package/assets/files.svg +5 -0
- package/assets/green_check.svg +4 -0
- package/assets/image.svg +8 -0
- package/assets/rating_tool_icon.svg +5 -0
- package/assets/rating_tool_icon_h5.svg +1 -0
- package/assets/video.svg +8 -0
- package/assets/video_h5.svg +1 -0
- package/components/CustomerServiceChat/chat-header/index-web.vue +16 -14
- package/components/CustomerServiceChat/index-web.vue +87 -13
- package/components/CustomerServiceChat/message-input/index-web.vue +31 -5
- package/components/CustomerServiceChat/message-input/message-input-editor-web.vue +25 -0
- package/components/CustomerServiceChat/message-input/message-input-quote/index.vue +29 -20
- package/components/CustomerServiceChat/message-input-toolbar/emoji-picker/emoji-picker-dialog.vue +36 -36
- package/components/CustomerServiceChat/message-input-toolbar/emoji-picker/index.vue +1 -1
- package/components/CustomerServiceChat/message-input-toolbar/file-upload/index.vue +6 -8
- package/components/CustomerServiceChat/message-input-toolbar/image-upload/index.vue +11 -16
- package/components/CustomerServiceChat/message-input-toolbar/index-web.vue +61 -18
- package/components/CustomerServiceChat/message-input-toolbar/rating-tool/index.vue +72 -0
- package/components/CustomerServiceChat/message-input-toolbar/toolbar-item-container/style/h5.scss +10 -1
- package/components/CustomerServiceChat/message-input-toolbar/user-define-input-tool.vue +80 -0
- package/components/CustomerServiceChat/message-input-toolbar/video-upload/index.vue +9 -14
- package/components/CustomerServiceChat/message-list/index-web.vue +38 -6
- package/components/CustomerServiceChat/message-list/message-elements/feedback-button.vue +369 -0
- package/components/CustomerServiceChat/message-list/message-elements/message-bubble-web.vue +81 -15
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/marked.ts +17 -10
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-branch.vue +18 -10
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-concurrency-limit.vue +1 -1
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-desk.vue +13 -6
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-ivr-form/form-branch.vue +117 -0
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/{message-single-form → message-ivr-form}/form-input.vue +65 -111
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/{message-single-form → message-ivr-form}/index.vue +7 -2
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-branch/branch-pc.vue +25 -9
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-branch/index.vue +5 -3
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-mobile/input-mobile.vue +1 -0
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-mobile/label-mobile.vue +4 -2
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-pc/label-pc.vue +5 -3
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/form-mobile.vue +17 -5
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/form-pc.vue +21 -1
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-order.vue +3 -3
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-product-card.vue +2 -1
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-rating/message-rating-number.vue +9 -13
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-rating/message-rating-star.vue +11 -18
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-robot-welcome.vue +1 -0
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-stream.vue +14 -10
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-timeout-warning.vue +29 -0
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/styles/common.scss +1 -0
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-plugin-web.vue +22 -2
- package/components/CustomerServiceChat/message-list/message-elements/message-file.vue +1 -1
- package/components/CustomerServiceChat/message-list/message-elements/message-quote/index-web.vue +6 -24
- package/components/CustomerServiceChat/message-list/message-elements/message-text.vue +0 -9
- package/components/CustomerServiceChat/message-list/message-elements/read-status/index.vue +31 -20
- package/components/CustomerServiceChat/message-list/message-elements/simple-message-list/index.vue +2 -1
- package/components/CustomerServiceChat/message-list/scroll-button/index.vue +3 -3
- package/components/CustomerServiceChat/message-list/style/web.scss +2 -1
- package/components/CustomerServiceChat/message-toolbar-button/index.vue +111 -42
- package/components/CustomerServiceChat/message-toolbar-button/toolbar-button-end-human-service.vue +59 -0
- package/components/CustomerServiceChat/message-toolbar-button/toolbar-button-human-service.vue +55 -0
- package/components/CustomerServiceChat/message-toolbar-button/toolbar-button-service-rating.vue +59 -0
- package/components/common/Toast/index-web.vue +4 -2
- package/constant.ts +25 -0
- package/interface.ts +35 -5
- package/locales/en/aidesk.ts +28 -15
- package/locales/fil/aidesk.ts +28 -15
- package/locales/id/aidesk.ts +28 -15
- package/locales/ja/aidesk.ts +28 -15
- package/locales/ms/aidesk.ts +28 -15
- package/locales/ru/aidesk.ts +28 -15
- package/locales/th/aidesk.ts +28 -15
- package/locales/vi/aidesk.ts +28 -15
- package/locales/zh_cn/aidesk.ts +28 -15
- package/locales/zh_tw/aidesk.ts +28 -15
- package/package.json +1 -1
- package/server.ts +5 -1
- package/utils/state.js +30 -0
- package/utils/utils.ts +48 -1
- package/assets/face.png +0 -0
- package/assets/files.png +0 -0
- package/assets/image.png +0 -0
- package/assets/video.png +0 -0
- package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-single-form/form-branch.vue +0 -68
package/locales/vi/aidesk.ts
CHANGED
|
@@ -1,18 +1,31 @@
|
|
|
1
1
|
const AIDesk = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
2
|
+
"结束人工会话": "Kết thúc cuộc trò chuyện với người",
|
|
3
|
+
"转人工服务": "Chuyển sang dịch vụ của người",
|
|
4
|
+
"跳转": "Chuyển hướng",
|
|
5
|
+
"立即填写": "Điền ngay",
|
|
6
|
+
"已提交": "Đã gửi",
|
|
7
|
+
"提交": "Gửi",
|
|
8
|
+
"查看内容": "Xem nội dung",
|
|
9
|
+
"请填写必填项": "Vui lòng điền vào các mục bắt buộc",
|
|
10
|
+
"Hi,我是": "Xin chào, tôi là ",
|
|
11
|
+
"请输入内容":"Vui lòng nhập nội dung",
|
|
12
|
+
"如果满意请给好评哦~":"Nếu bạn hài lòng, hãy cho chúng tôi một đánh giá tốt nhé~",
|
|
13
|
+
"请对本次服务进行评价": "Vui lòng đánh giá dịch vụ này",
|
|
14
|
+
"提交评价": "Gửi đánh giá",
|
|
15
|
+
"服务评价": " Đánh giá dịch vụ",
|
|
16
|
+
"并发限制": "Hiện có quá nhiều người đang truy cập. Vui lòng thử lại sau",
|
|
17
|
+
"分支选项异常": "Nội dung bất thường, vui lòng kiểm tra cấu hình luồng tác vụ",
|
|
18
|
+
"满意":"Hài lòng",
|
|
19
|
+
"不满意":"Không hài lòng",
|
|
20
|
+
"感谢您的反馈,我们会持续优化改进":"Cảm ơn phản hồi của bạn, chúng tôi sẽ tiếp tục cải thiện",
|
|
21
|
+
"您遇到了哪方面的问题":"Bạn gặp vấn đề gì",
|
|
22
|
+
"其他反馈内容":"Phản hồi khác",
|
|
23
|
+
"取消":"Hủy",
|
|
24
|
+
"答非所问":"Câu trả lời không liên quan",
|
|
25
|
+
"未匹配相关内容":"Không có nội dung phù hợp",
|
|
26
|
+
"信息错误":"Thông tin sai",
|
|
27
|
+
"上下文理解错误":"Hiểu sai ngữ cảnh",
|
|
28
|
+
"格式不规范":"Định dạng không chuẩn",
|
|
29
|
+
"内容不完整":"Nội dung không đầy đủ",
|
|
17
30
|
}
|
|
18
31
|
export default AIDesk;
|
package/locales/zh_cn/aidesk.ts
CHANGED
|
@@ -1,18 +1,31 @@
|
|
|
1
1
|
const AIDesk = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
2
|
+
"结束人工会话": "结束会话",
|
|
3
|
+
"转人工服务": "转人工服务",
|
|
4
|
+
"跳转": "跳转",
|
|
5
|
+
"立即填写": "立即填写",
|
|
6
|
+
"已提交": "已提交",
|
|
7
|
+
"提交": "提交",
|
|
8
|
+
"查看内容": "查看内容",
|
|
9
|
+
"请填写必填项": "请填写必填项",
|
|
10
|
+
"Hi,我是": "Hi,我是",
|
|
11
|
+
"请输入内容": "请输入内容",
|
|
12
|
+
"如果满意请给好评哦~": "如果满意请给好评哦~",
|
|
13
|
+
"请对本次服务进行评价": "请对本次服务进行评价",
|
|
14
|
+
"提交评价": "提交评价",
|
|
15
|
+
"服务评价": "服务评价",
|
|
16
|
+
"并发限制": "当前咨询人数较多,请稍后再试",
|
|
17
|
+
"分支选项异常": "内容异常,请检查任务流配置",
|
|
18
|
+
"满意":"满意",
|
|
19
|
+
"不满意":"不满意",
|
|
20
|
+
"感谢您的反馈,我们会持续优化改进":"感谢您的反馈,我们会持续优化改进",
|
|
21
|
+
"您遇到了哪方面的问题":"您遇到了哪方面的问题",
|
|
22
|
+
"其他反馈内容":"其他反馈内容",
|
|
23
|
+
"取消":"取消",
|
|
24
|
+
"答非所问":"答非所问",
|
|
25
|
+
"未匹配相关内容":"未匹配相关内容",
|
|
26
|
+
"信息错误":"信息错误",
|
|
27
|
+
"上下文理解错误":"上下文理解错误",
|
|
28
|
+
"格式不规范":"格式不规范",
|
|
29
|
+
"内容不完整":"内容不完整",
|
|
17
30
|
}
|
|
18
31
|
export default AIDesk;
|
package/locales/zh_tw/aidesk.ts
CHANGED
|
@@ -1,18 +1,31 @@
|
|
|
1
1
|
const AIDesk = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
2
|
+
"结束人工会话": "結束會話",
|
|
3
|
+
"转人工服务": "轉人工服務",
|
|
4
|
+
"跳转": "跳轉",
|
|
5
|
+
"立即填写": "立即填寫",
|
|
6
|
+
"已提交": "已提交",
|
|
7
|
+
"提交": "提交",
|
|
8
|
+
"查看内容": "查看內容",
|
|
9
|
+
"请填写必填项": "請填寫必填項",
|
|
10
|
+
"Hi,我是": "Hi,我是",
|
|
11
|
+
"请输入内容": "請輸入內容",
|
|
12
|
+
"如果满意请给好评哦~": "如果滿意請給好評哦~",
|
|
13
|
+
"请对本次服务进行评价": "請對本次服務進行評價",
|
|
14
|
+
"提交评价": "提交評價",
|
|
15
|
+
"服务评价": "服務評價",
|
|
16
|
+
"并发限制": "目前諮詢人數較多,請稍後再試",
|
|
17
|
+
"分支选项异常": "內容異常,請檢查任務流配置",
|
|
18
|
+
"满意":"滿意",
|
|
19
|
+
"不满意":"不滿意",
|
|
20
|
+
"感谢您的反馈,我们会持续优化改进":"感謝您的反饋,我們會持續優化改進",
|
|
21
|
+
"您遇到了哪方面的问题":"您遇到了哪方面的問題",
|
|
22
|
+
"其他反馈内容":"其他反饋內容",
|
|
23
|
+
"取消":"取消",
|
|
24
|
+
"答非所问":"答非所問",
|
|
25
|
+
"未匹配相关内容":"未匹配相關內容",
|
|
26
|
+
"信息错误":"信息錯誤",
|
|
27
|
+
"上下文理解错误":"上下文理解錯誤",
|
|
28
|
+
"格式不规范":"格式不規範",
|
|
29
|
+
"内容不完整":"內容不完整",
|
|
17
30
|
}
|
|
18
31
|
export default AIDesk;
|
package/package.json
CHANGED
package/server.ts
CHANGED
|
@@ -17,6 +17,9 @@ import TUIChatEngine, {
|
|
|
17
17
|
import Log from './utils/logger';
|
|
18
18
|
import { version } from './package.json'
|
|
19
19
|
import { Toast, TOAST_TYPE } from "./components/common/Toast/index-web";
|
|
20
|
+
import { switchReadStatus } from "./utils/utils";
|
|
21
|
+
import state from "./utils/state";
|
|
22
|
+
import { USER_DEFAULT_AVATAR } from "./constant";
|
|
20
23
|
|
|
21
24
|
interface IInitWithProfile {
|
|
22
25
|
SDKAppID: number,
|
|
@@ -43,7 +46,7 @@ export default class TUICustomerServer {
|
|
|
43
46
|
this.customerServiceAccounts = ['@customer_service_account'];
|
|
44
47
|
this.isLoggedIn = false;
|
|
45
48
|
this.loggedInUserID = '';
|
|
46
|
-
this.myProfile = {};
|
|
49
|
+
this.myProfile = { avatar: USER_DEFAULT_AVATAR };
|
|
47
50
|
}
|
|
48
51
|
|
|
49
52
|
static getInstance(): TUICustomerServer {
|
|
@@ -65,6 +68,7 @@ export default class TUICustomerServer {
|
|
|
65
68
|
this.isLoggedIn = true;
|
|
66
69
|
this.loggedInUserID = userID;
|
|
67
70
|
TUIConversationService.switchConversation('C2C@customer_service_account');
|
|
71
|
+
switchReadStatus(state.get('showReadStatus'));
|
|
68
72
|
TUIChatEngine.chat.callExperimentalAPI('isFeatureEnabledForStat', Math.pow(2, 42));
|
|
69
73
|
})
|
|
70
74
|
.catch((error) => {
|
package/utils/state.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
const state = {
|
|
2
|
+
data: {},
|
|
3
|
+
// listeners: [],
|
|
4
|
+
|
|
5
|
+
// 获取数据
|
|
6
|
+
get(key) {
|
|
7
|
+
return this.data[key];
|
|
8
|
+
},
|
|
9
|
+
|
|
10
|
+
// 设置数据
|
|
11
|
+
set(key, value) {
|
|
12
|
+
this.data[key] = value;
|
|
13
|
+
// this.notifyListeners();
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
// // 监听数据变化
|
|
17
|
+
// subscribe(callback) {
|
|
18
|
+
// this.listeners.push(callback);
|
|
19
|
+
// return () => {
|
|
20
|
+
// this.listeners = this.listeners.filter(cb => cb !== callback);
|
|
21
|
+
// };
|
|
22
|
+
// },
|
|
23
|
+
|
|
24
|
+
// // 通知所有监听器
|
|
25
|
+
// notifyListeners() {
|
|
26
|
+
// this.listeners.forEach(cb => cb(this.data));
|
|
27
|
+
// }
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export default state;
|
package/utils/utils.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
import TUIChatEngine, {
|
|
1
|
+
import TUIChatEngine, {
|
|
2
|
+
TUITranslateService,
|
|
3
|
+
TUIStore,
|
|
4
|
+
StoreName,
|
|
5
|
+
IMessageModel,
|
|
6
|
+
TUIUserService,
|
|
7
|
+
IConversationModel,
|
|
8
|
+
} from '@tencentcloud/chat-uikit-engine';
|
|
9
|
+
import Log from './logger';
|
|
2
10
|
|
|
3
11
|
export function deepCopy(data: any, hash = new WeakMap()) {
|
|
4
12
|
if (typeof data !== 'object' || data === null || data === undefined) {
|
|
@@ -159,3 +167,42 @@ export function calculateTimestamp(timestamp: number): string {
|
|
|
159
167
|
)}`;
|
|
160
168
|
}
|
|
161
169
|
}
|
|
170
|
+
|
|
171
|
+
export function getSafeUrl(url) {
|
|
172
|
+
try {
|
|
173
|
+
const decodedUrl = decodeURIComponent(url);
|
|
174
|
+
const parsedUrl = new URL(decodedUrl);
|
|
175
|
+
if (!['http:', 'https:'].includes(parsedUrl.protocol)) {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// 清除 username 和 password
|
|
180
|
+
parsedUrl.username = '';
|
|
181
|
+
parsedUrl.password = '';
|
|
182
|
+
return parsedUrl.href;
|
|
183
|
+
} catch (e) {
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export function openSafeUrl(content: string) {
|
|
189
|
+
const safeUrl = getSafeUrl(content);
|
|
190
|
+
if (safeUrl) {
|
|
191
|
+
window.open(safeUrl, '_blank', 'noopener,noreferrer');
|
|
192
|
+
} else {
|
|
193
|
+
Log.w(`Invalid URL provided:${content}`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// call after chat engine is ready
|
|
198
|
+
export function switchReadStatus(value: number) {
|
|
199
|
+
if (value !== 1) {
|
|
200
|
+
TUIUserService.switchMessageReadStatus(false);
|
|
201
|
+
} else {
|
|
202
|
+
TUIUserService.switchMessageReadStatus(true);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export function getTo(conversation: IConversationModel): string {
|
|
207
|
+
return conversation?.groupProfile?.groupID || conversation?.userProfile?.userID;
|
|
208
|
+
}
|
package/assets/face.png
DELETED
|
Binary file
|
package/assets/files.png
DELETED
|
Binary file
|
package/assets/image.png
DELETED
|
Binary file
|
package/assets/video.png
DELETED
|
Binary file
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="form-branch-container">
|
|
3
|
-
<p
|
|
4
|
-
v-if="props.title"
|
|
5
|
-
class="card-title"
|
|
6
|
-
>
|
|
7
|
-
{{ props.title }}
|
|
8
|
-
</p>
|
|
9
|
-
<div
|
|
10
|
-
v-for="(item, index) in props.list"
|
|
11
|
-
:key="index"
|
|
12
|
-
class="form-branch-item"
|
|
13
|
-
@click="listItemClick(item)"
|
|
14
|
-
>
|
|
15
|
-
{{ item.content }}
|
|
16
|
-
</div>
|
|
17
|
-
</div>
|
|
18
|
-
</template>
|
|
19
|
-
|
|
20
|
-
<script lang="ts">
|
|
21
|
-
interface branchItem {
|
|
22
|
-
content: string;
|
|
23
|
-
desc: string;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
interface Props {
|
|
27
|
-
title: string;
|
|
28
|
-
list: branchItem[];
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export default {
|
|
32
|
-
props: {
|
|
33
|
-
title: {
|
|
34
|
-
type: String,
|
|
35
|
-
default: '',
|
|
36
|
-
},
|
|
37
|
-
list: {
|
|
38
|
-
type: Array,
|
|
39
|
-
default: () => [],
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
emits: ['input-click'],
|
|
43
|
-
setup(props: Props, { emit }) {
|
|
44
|
-
const listItemClick = (branch: branchItem): void => {
|
|
45
|
-
emit('input-click', branch);
|
|
46
|
-
};
|
|
47
|
-
return {
|
|
48
|
-
props,
|
|
49
|
-
listItemClick,
|
|
50
|
-
};
|
|
51
|
-
},
|
|
52
|
-
};
|
|
53
|
-
</script>
|
|
54
|
-
<style lang="scss">
|
|
55
|
-
.form-branch-container {
|
|
56
|
-
.card-title {
|
|
57
|
-
margin-bottom: 8px;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
.form-branch-item {
|
|
61
|
-
font-weight: 400;
|
|
62
|
-
color: rgba(54, 141, 255, 1);
|
|
63
|
-
padding-top: 5px;
|
|
64
|
-
cursor: pointer;
|
|
65
|
-
padding-bottom: 5px;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
</style>
|