@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.
Files changed (43) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/assets/send_button_h5.svg +1 -0
  3. package/components/CustomerServiceChat/index-web.vue +3 -3
  4. package/components/CustomerServiceChat/message-input/index-web.vue +16 -7
  5. package/components/CustomerServiceChat/message-input/message-input-editor-web.vue +5 -2
  6. package/components/CustomerServiceChat/message-list/index-web.vue +6 -0
  7. package/components/CustomerServiceChat/message-list/message-elements/message-bubble-web.vue +14 -15
  8. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/marked.ts +1 -1
  9. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-branch.vue +25 -6
  10. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-concurrency-limit.vue +40 -0
  11. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-desk.vue +32 -8
  12. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-branch/branch-pc.vue +93 -73
  13. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-branch/index.vue +53 -52
  14. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-mobile/input-mobile.vue +73 -80
  15. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-mobile/label-mobile.vue +21 -24
  16. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-mobile/radios-mobile.vue +115 -116
  17. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-pc/input-pc.vue +69 -73
  18. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-pc/label-pc.vue +21 -25
  19. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-pc/radio-pc.vue +87 -77
  20. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/form-mobile.vue +213 -200
  21. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/form-pc.vue +122 -113
  22. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/index.vue +7 -7
  23. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-order.vue +142 -0
  24. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-rating/message-rating-number.vue +2 -1
  25. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-rating/message-rating-star.vue +2 -1
  26. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-rich-text.vue +8 -6
  27. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-stream.vue +89 -6
  28. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-plugin-web.vue +5 -0
  29. package/components/CustomerServiceChat/message-list/scroll-button/index.vue +15 -3
  30. package/components/common/BottomPopup/index.vue +1 -1
  31. package/constant.ts +10 -4
  32. package/locales/en/aidesk.ts +3 -1
  33. package/locales/fil/aidesk.ts +3 -1
  34. package/locales/id/aidesk.ts +4 -2
  35. package/locales/ja/aidesk.ts +4 -2
  36. package/locales/ms/aidesk.ts +4 -2
  37. package/locales/ru/aidesk.ts +5 -3
  38. package/locales/th/aidesk.ts +3 -1
  39. package/locales/vi/aidesk.ts +4 -2
  40. package/locales/zh_cn/aidesk.ts +4 -3
  41. package/locales/zh_tw/aidesk.ts +3 -1
  42. package/package.json +1 -1
  43. 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
- lastMessage && lastMessage?.time < currentLastMessageTime?.value
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>
@@ -146,7 +146,7 @@ watch(
146
146
  );
147
147
 
148
148
  const closeBottomPopup = () => {
149
- if (isUniFrameWork || isH5) {
149
+ if (isH5) {
150
150
  emits('onClose', dialogRef);
151
151
  }
152
152
  };
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
+ ];
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -12,5 +12,7 @@ const AIDesk = {
12
12
  "如果满意请给好评哦~": "หากพอใจแล้วก็อย่าลืมรีวิวให้ด้วยนะ~",
13
13
  "请对本次服务进行评价": "กรุณาประเมินบริการครั้งนี้",
14
14
  "提交评价": "ส่งการประเมิน",
15
+ "并发限制": "ปัจจุบันมีผู้ใช้งานจำนวนมาก กรุณาลองใหม่ในภายหลัง",
16
+ "分支选项异常": "เนื้อหาผิดปกติ กรุณาตรวจสอบการตั้งค่ากระบวนการงาน"
15
17
  }
16
- export default AIDesk;
18
+ export default AIDesk;
@@ -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;
@@ -11,7 +11,8 @@ const AIDesk = {
11
11
  "请输入内容": "请输入内容",
12
12
  "如果满意请给好评哦~": "如果满意请给好评哦~",
13
13
  "请对本次服务进行评价": "请对本次服务进行评价",
14
- "提交评价": "提交评价"
15
-
14
+ "提交评价": "提交评价",
15
+ "并发限制": "当前咨询人数较多,请稍后再试",
16
+ "分支选项异常": "内容异常,请检查任务流配置"
16
17
  }
17
- export default AIDesk;
18
+ export default AIDesk;
@@ -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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tencentcloud/ai-desk-customer-vue",
3
- "version": "1.0.1",
3
+ "version": "1.3.0",
4
4
  "description": "Vue UIKit for AI Desk",
5
5
  "main": "index",
6
6
  "keywords": [
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
- TUIChatService.sendCustomMessage({
144
- to: params.conversationID.slice(3),
145
- conversationType: TUIChatEngine.TYPES.CONV_C2C,
146
- payload: {
147
- data: JSON.stringify({
148
- src: '7',
149
- customerServicePlugin: 0,
150
- triggeredContent: typeof params.robotLang === 'undefined' ? undefined : { language: params.robotLang }
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
  }