@tencentcloud/ai-desk-customer-vue 1.4.0 → 1.5.1

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 (58) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/assets/feedback_dialog_close.svg +3 -0
  3. package/assets/feedback_dislike_after.svg +3 -0
  4. package/assets/feedback_dislike_before.svg +10 -0
  5. package/assets/feedback_dislike_hover.svg +10 -0
  6. package/assets/feedback_like_after.svg +14 -0
  7. package/assets/feedback_like_before.svg +10 -0
  8. package/assets/feedback_like_hover.svg +10 -0
  9. package/assets/green_check.svg +4 -0
  10. package/components/CustomerServiceChat/index-web.vue +18 -0
  11. package/components/CustomerServiceChat/message-input/message-input-editor-web.vue +1 -0
  12. package/components/CustomerServiceChat/message-input/message-input-quote/index.vue +29 -20
  13. package/components/CustomerServiceChat/message-input-toolbar/emoji-picker/emoji-picker-dialog.vue +35 -35
  14. package/components/CustomerServiceChat/message-input-toolbar/index-web.vue +1 -1
  15. package/components/CustomerServiceChat/message-list/index-web.vue +5 -0
  16. package/components/CustomerServiceChat/message-list/message-elements/feedback-button.vue +369 -0
  17. package/components/CustomerServiceChat/message-list/message-elements/message-bubble-web.vue +30 -11
  18. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/marked.ts +17 -10
  19. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-branch.vue +13 -5
  20. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-concurrency-limit.vue +1 -1
  21. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-desk.vue +8 -6
  22. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-ivr-form/form-branch.vue +117 -0
  23. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/{message-single-form → message-ivr-form}/form-input.vue +65 -111
  24. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/{message-single-form → message-ivr-form}/index.vue +7 -2
  25. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-branch/branch-pc.vue +5 -3
  26. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-branch/index.vue +3 -1
  27. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-mobile/input-mobile.vue +1 -0
  28. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-mobile/label-mobile.vue +4 -2
  29. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/component-pc/label-pc.vue +5 -3
  30. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/form-mobile.vue +17 -5
  31. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-multi-form/form-pc.vue +21 -1
  32. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-order.vue +2 -1
  33. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-product-card.vue +2 -1
  34. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-rating/message-rating-number.vue +9 -13
  35. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-rating/message-rating-star.vue +11 -18
  36. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-robot-welcome.vue +1 -0
  37. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-stream.vue +14 -10
  38. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-timeout-warning.vue +29 -0
  39. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/styles/common.scss +1 -0
  40. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-plugin-web.vue +22 -2
  41. package/components/CustomerServiceChat/message-list/message-elements/message-quote/index-web.vue +6 -24
  42. package/components/CustomerServiceChat/message-list/message-elements/message-text.vue +0 -9
  43. package/components/CustomerServiceChat/message-list/message-elements/read-status/index.vue +31 -20
  44. package/components/CustomerServiceChat/message-list/message-elements/simple-message-list/index.vue +2 -1
  45. package/components/common/Toast/index-web.vue +4 -2
  46. package/constant.ts +11 -1
  47. package/locales/en/aidesk.ts +28 -16
  48. package/locales/fil/aidesk.ts +28 -16
  49. package/locales/id/aidesk.ts +28 -16
  50. package/locales/ja/aidesk.ts +28 -16
  51. package/locales/ms/aidesk.ts +28 -16
  52. package/locales/ru/aidesk.ts +28 -16
  53. package/locales/th/aidesk.ts +28 -16
  54. package/locales/vi/aidesk.ts +28 -16
  55. package/locales/zh_cn/aidesk.ts +28 -16
  56. package/locales/zh_tw/aidesk.ts +28 -16
  57. package/package.json +1 -1
  58. package/components/CustomerServiceChat/message-list/message-elements/message-desk/message-desk-elements/message-single-form/form-branch.vue +0 -68
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div class="message-rating-star">
3
- <p class="rating-head">
3
+ <p class="rating-head-tail">
4
4
  {{ props.ratingTemplate.head }}
5
5
  </p>
6
6
  <div class="rating-card">
@@ -49,7 +49,7 @@
49
49
  </div>
50
50
  <p
51
51
  v-if="hasReply"
52
- class="rating-tail"
52
+ class="rating-head-tail"
53
53
  :style="{
54
54
  marginTop: 20 + 'px',
55
55
  }"
@@ -125,17 +125,15 @@ export default {
125
125
  });
126
126
 
127
127
  const setValue = (val: number) => {
128
- if (hasReply.value) {
129
- return;
128
+ if (!hasReply.value && !hasExpire.value) {
129
+ value.value = val;
130
130
  }
131
- value.value = val;
132
131
  };
133
132
 
134
133
  const setHoverValue = (value: number) => {
135
- if (hasReply.value) {
136
- return;
134
+ if (!hasReply.value && !hasExpire.value) {
135
+ hoverValue.value = value;
137
136
  }
138
- hoverValue.value = value;
139
137
  };
140
138
 
141
139
  const submitRatingStar = async () => {
@@ -176,16 +174,11 @@ export default {
176
174
  };
177
175
  </script>
178
176
  <style lang="scss" scoped>
179
- .rating-head {
180
- font-size: 14px;
181
- font-weight: 400;
182
- color: #999;
183
- }
184
-
185
- .rating-tail {
177
+ .rating-head-tail {
186
178
  font-size: 14px;
187
179
  font-weight: 400;
188
180
  color: #999;
181
+ word-break: break-word;
189
182
  }
190
183
 
191
184
  .card-title {
@@ -199,11 +192,11 @@ export default {
199
192
  border-radius: 20px;
200
193
  border: 0;
201
194
  margin-top: 10px;
202
- padding-top: 20px;
203
- padding-bottom: 20px;
204
-
195
+ min-width: 240px;
196
+ padding: 10px;
205
197
  button:disabled {
206
198
  background: #d8d8d8;
199
+ cursor: default;
207
200
  }
208
201
  }
209
202
 
@@ -164,6 +164,7 @@ export default {
164
164
  font-weight: 500;
165
165
  color: #1c66e5;
166
166
  gap: 10px;
167
+ word-break: break-word;
167
168
  }
168
169
 
169
170
  .welcome-item:hover {
@@ -1,13 +1,15 @@
1
1
  <template>
2
- <div class="message-stream">
3
- <span v-if="isCursorBlinking" class="blinking-cursor">|</span>
4
- <pre ref="preRef" :class="['message-marked']" v-html="displayedContent" />
5
- </div>
6
- <div v-if="image" class="rich-image-previewer" @click="closeImage">
7
- <img
8
- class="rich-image-preview"
9
- :src="imageSrc"
10
- />
2
+ <div>
3
+ <div class="message-stream">
4
+ <span v-if="isCursorBlinking" class="blinking-cursor">|</span>
5
+ <pre ref="preRef" :class="['message-marked']" v-html="displayedContent" />
6
+ </div>
7
+ <div v-if="image" class="rich-image-previewer" @click="closeImage">
8
+ <img
9
+ class="rich-image-preview"
10
+ :src="imageSrc"
11
+ />
12
+ </div>
11
13
  </div>
12
14
  </template>
13
15
 
@@ -146,9 +148,11 @@ const closeImage = () => {
146
148
  <style lang="scss" scoped>
147
149
  .message-stream {
148
150
  overflow-wrap: break-word;
149
- word-break: keep-all;
151
+ word-break: normal;
150
152
  white-space: normal;
151
153
  font-size: 14px;
154
+ font-family: PingFangSC-Regular;
155
+ user-select: text;
152
156
  }
153
157
 
154
158
  .blinking-cursor {
@@ -0,0 +1,29 @@
1
+ <template>
2
+ <div>
3
+ {{ props.payload.content }}
4
+ </div>
5
+ </template>
6
+
7
+ <script lang="ts">
8
+ import { customerServicePayloadType } from '../../../../../../interface';
9
+
10
+ interface Props {
11
+ payload: customerServicePayloadType;
12
+ }
13
+
14
+ export default {
15
+ props: {
16
+ payload: {
17
+ type: Object as () => customerServicePayloadType,
18
+ default: () => ({}),
19
+ },
20
+ },
21
+ setup(props: Props) {
22
+ return {
23
+ props,
24
+ };
25
+ },
26
+ };
27
+ </script>
28
+ <style lang="scss" scoped>
29
+ </style>
@@ -125,6 +125,7 @@
125
125
  margin: 0;
126
126
  padding: 0;
127
127
  font-family: PingFangSC-Regular;
128
+ user-select: text;
128
129
 
129
130
  .message-marked_code-container {
130
131
  display: flex;
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <MessagePluginLayout
3
3
  :message="props.message"
4
+ :blinkMessageIDList="props.blinkMessageIDList"
4
5
  :showStyle="pluginMessageType.showStyle"
5
6
  :bubbleClassNameList="[
6
7
  pluginMessageType.pluginType === 'room' ? 'message-bubble-room' : '',
@@ -14,8 +15,12 @@
14
15
  v-if="pluginMessageType.pluginType === 'customer'"
15
16
  :message="props.message"
16
17
  @heightChanged="onHeightChanged"
18
+ @messageSent="onMessageSent"
17
19
  />
18
20
  </template>
21
+ <template #messageTip>
22
+ <TimeoutWarning :payload="payload"/>
23
+ </template>
19
24
  </MessagePluginLayout>
20
25
  </template>
21
26
 
@@ -29,6 +34,10 @@ import {
29
34
  } from './message-desk-elements/index';
30
35
  import MessagePluginLayout from './message-plugin-layout-web.vue';
31
36
  import MessageCustomerService from './message-desk-elements/message-desk.vue';
37
+ import { CUSTOM_MESSAGE_SRC } from '../../../../../constant';
38
+ import TimeoutWarning from './message-desk-elements/message-timeout-warning.vue';
39
+ import { customerServicePayloadType } from '../../../../../interface';
40
+ import { JSONToObject } from '../../../../../utils/index';
32
41
  const { computed } = vue;
33
42
 
34
43
  interface IProps {
@@ -46,18 +55,26 @@ const emits = defineEmits([
46
55
  'handleToggleMessageItem',
47
56
  'handleH5LongPress',
48
57
  'heightChanged',
58
+ 'messageSent',
49
59
  ]);
50
60
  const messageModel = computed(() => TUIStore.getMessageModel(props.message.ID));
51
61
 
62
+ const payload = computed<customerServicePayloadType>(() => {
63
+ return props.message && JSONToObject(props.message?.payload?.data);
64
+ });
65
+
52
66
  const pluginMessageType = computed<{ pluginType: string; showStyle: string }>(
53
67
  () => {
54
68
  let typeObj = { pluginType: '', showStyle: '' };
55
69
  if (isCustomerServicePluginMessage(messageModel.value as any)) {
70
+ const src = payload.value.src;
56
71
  typeObj = {
57
- pluginType: 'customer',
72
+ pluginType: src === CUSTOM_MESSAGE_SRC.TIMEOUT_WARNING ? 'customer_tip' : 'customer',
58
73
  showStyle: isCustomServiceMessageInvisible(messageModel.value as any)
59
74
  ? ''
60
- : 'bubble',
75
+ : src === CUSTOM_MESSAGE_SRC.TIMEOUT_WARNING
76
+ ? 'tip'
77
+ : 'bubble',
61
78
  };
62
79
  }
63
80
  return typeObj;
@@ -81,6 +98,9 @@ const handleH5LongPress = (e: any, message: IMessageModel, type: string) => {
81
98
  const onHeightChanged = () => {
82
99
  emits('heightChanged');
83
100
  };
101
+ const onMessageSent = () => {
102
+ emits('messageSent');
103
+ };
84
104
  </script>
85
105
 
86
106
  <style lang="scss" scoped>
@@ -1,10 +1,5 @@
1
1
  <template>
2
2
  <div style="display:flex;width: fit-content;">
3
- <div v-if="hasQuoteContent&&isH5" :class="{
4
- 'mobile-left-box': true,
5
- reverse: message.flow === 'out',
6
- in:message.flow === 'in',
7
- }"></div>
8
3
  <div
9
4
  v-if="hasQuoteContent"
10
5
  :class="{
@@ -218,8 +213,8 @@ async function scrollToOriginalMessage() {
218
213
  padding: 12px;
219
214
  font-size: 12px;
220
215
  color: #666;
221
- word-wrap: break-word;
222
- word-break: break-all;
216
+ overflow-wrap: break-word;
217
+ word-break: normal;
223
218
  background-color: #fbfbfb;
224
219
  border-radius: 8px;
225
220
  line-height: 16.8px;
@@ -233,12 +228,12 @@ async function scrollToOriginalMessage() {
233
228
  .reverse.reference-content {
234
229
  margin-right: 44px;
235
230
  margin-left: auto;
236
- border-radius: 0 8px 8px 0;
231
+ border-radius: 8px;
237
232
  }
238
233
  .isMobile.reference-content.in {
239
234
  margin-right: auto;
240
235
  background: #f3f4f7;
241
- border-radius: 0 8px 8px 0;
236
+ border-radius: 8px;
242
237
  }
243
238
  .isMobile.reverse.reference-content {
244
239
  margin-right: 10px;
@@ -247,20 +242,6 @@ async function scrollToOriginalMessage() {
247
242
  color: white;
248
243
 
249
244
  }
250
- .mobile-left-box {
251
- display:inline-block;
252
- background: #FFFFFF33;
253
- width: 5px;
254
- margin-top: 4px;
255
- border-radius: 8px 0 0 8px;
256
- }
257
- .mobile-left-box.in {
258
- display:inline-block;
259
- background: #e1e2e5;
260
- width: 5px;
261
- margin-top: 4px;
262
- border-radius: 8px 0 0 8px;
263
- }
264
245
  .revoked-text {
265
246
  color: #999;
266
247
  }
@@ -274,7 +255,8 @@ async function scrollToOriginalMessage() {
274
255
  .max-double-line {
275
256
  font-family: PingFangSC-Regular;
276
257
  font-size: 14px;
277
- word-break: break-all;
258
+ overflow-wrap: break-word;
259
+ word-break: normal;
278
260
  overflow: hidden;
279
261
  display: -webkit-box;
280
262
  max-height: 33px;
@@ -84,15 +84,6 @@ watchEffect(() => {
84
84
  }
85
85
 
86
86
  .text {
87
- white-space: pre-wrap;
88
- font-size: 14px;
89
- text-size-adjust: none;
90
- font-family: PingFangSC-Regular;
91
- overflow-wrap: break-word;
92
- word-break: break-all;
93
- }
94
-
95
- .text:lang(en) {
96
87
  white-space: pre-wrap;
97
88
  font-size: 14px;
98
89
  text-size-adjust: none;
@@ -18,24 +18,24 @@ import TUIChatEngine, {
18
18
  IMessageModel,
19
19
  TUITranslateService,
20
20
  } from '@tencentcloud/chat-uikit-engine';
21
+ import { ReadState } from '../../../../../constant';
21
22
  const { computed, ref, onMounted, onUnmounted } = vue;
22
23
 
23
24
  interface IProps {
24
25
  message: IMessageModel;
26
+ prevStatus: ReadState;
25
27
  }
26
28
 
27
29
  const props = withDefaults(defineProps<IProps>(), {
28
30
  message: () => ({} as IMessageModel),
31
+ prevStatus: ReadState.Unread,
29
32
  });
30
- const ReadStatus = true;
31
-
32
- enum ReadState {
33
- Read,
34
- Unread,
35
- AllRead,
36
- NotShow,
37
- PartiallyRead,
33
+ const isInHumanService = ref(false);
34
+
35
+ interface IEmits {
36
+ (e: 'setStatus', status:ReadState): void;
38
37
  }
38
+ const emits = defineEmits<IEmits>();
39
39
 
40
40
  const TYPES = TUIChatEngine.TYPES;
41
41
  // User-level read receipt toggle has the highest priority.
@@ -48,18 +48,25 @@ onMounted(() => {
48
48
  TUIStore.watch(StoreName.USER, {
49
49
  displayMessageReadReceipt: onDisplayMessageReadReceiptUpdate,
50
50
  });
51
+ TUIStore.watch(StoreName.CUSTOM, {
52
+ isInHumanService: onInHumanServiceUpdate,
53
+ });
51
54
  });
52
55
 
53
56
  onUnmounted(() => {
54
57
  TUIStore.unwatch(StoreName.USER, {
55
58
  displayMessageReadReceipt: onDisplayMessageReadReceiptUpdate,
56
59
  });
60
+ TUIStore.unwatch(StoreName.CUSTOM, {
61
+ isInHumanService: onInHumanServiceUpdate,
62
+ });
57
63
  });
58
64
 
65
+ const onInHumanServiceUpdate = (value: boolean) => {
66
+ isInHumanService.value = value;
67
+ };
68
+
59
69
  const isShowReadStatus = computed<boolean>(() => {
60
- if (!ReadStatus) {
61
- return false;
62
- }
63
70
  if (!isDisplayMessageReadReceipt.value) {
64
71
  return false;
65
72
  }
@@ -127,23 +134,27 @@ const readState = computed<ReadState>(() => {
127
134
  return isPeerRead ? ReadState.Read : ReadState.Unread;
128
135
  }
129
136
  } else if (conversationType === 'GROUP') {
130
- if (needReadReceipt) {
131
- if (readCount === 0) {
132
- return ReadState.Unread;
133
- } else if (unreadCount === 0) {
134
- return ReadState.AllRead;
135
- } else {
136
- return ReadState.PartiallyRead;
137
- }
138
- } else {
137
+ if (!needReadReceipt) {
139
138
  return ReadState.NotShow;
140
139
  }
140
+ if (!isInHumanService.value) {
141
+ return ReadState.AllRead;
142
+ }
143
+ // 特殊判断: 群里只有1人时设置已读 (未接到人工时)
144
+ if (readCount === 0) {
145
+ return props.prevStatus === ReadState.AllRead ? ReadState.AllRead : ReadState.Unread;
146
+ } else if (unreadCount === 0) {
147
+ return ReadState.AllRead;
148
+ } else {
149
+ return ReadState.PartiallyRead;
150
+ }
141
151
  }
142
152
  return ReadState.Unread;
143
153
  });
144
154
 
145
155
  const readStatusText = computed(() => {
146
156
  const { readCount = 0 } = props.message.readReceiptInfo;
157
+ emits('setStatus', readState.value);
147
158
  switch (readState.value) {
148
159
  case ReadState.Read:
149
160
  return TUITranslateService.t('TUIChat.已读');
@@ -374,7 +374,8 @@ function resolveBigFaceUrl(bigFaceKey: string): string {
374
374
  .text {
375
375
  vertical-align: bottom;
376
376
  display: inline;
377
- word-break: break-all;
377
+ overflow-wrap: break-word;
378
+ word-break: normal;
378
379
  }
379
380
 
380
381
  .simple-emoji {
@@ -127,7 +127,8 @@ const handleStyle = (type?: string) => {
127
127
  border-radius: 3px;
128
128
  padding: 10px 15px;
129
129
  width: fit-content;
130
- word-break: break-all;
130
+ overflow-wrap: break-word;
131
+ word-break: normal;
131
132
  }
132
133
  }
133
134
 
@@ -148,7 +149,8 @@ const handleStyle = (type?: string) => {
148
149
  font-size: 14px;
149
150
  letter-spacing: 0;
150
151
  text-align: center;
151
- word-break: break-all;
152
+ overflow-wrap: break-word;
153
+ word-break: normal;
152
154
  }
153
155
  }
154
156
 
package/constant.ts CHANGED
@@ -33,6 +33,7 @@ export const CUSTOM_MESSAGE_SRC = {
33
33
  MULTI_FORM: '33',
34
34
  THINKING: '35',
35
35
  CONCURRENCY_LIMIT: '36',
36
+ TIMEOUT_WARNING: '37',
36
37
  };
37
38
 
38
39
  // im message extra type
@@ -140,6 +141,7 @@ export const WHITE_LIST = [
140
141
  CUSTOM_MESSAGE_SRC.MULTI_FORM,
141
142
  CUSTOM_MESSAGE_SRC.CONCURRENCY_LIMIT,
142
143
  CUSTOM_MESSAGE_SRC.ORDER,
144
+ CUSTOM_MESSAGE_SRC.TIMEOUT_WARNING,
143
145
  ];
144
146
 
145
147
  export const TOOLBAR_BUTTON_TYPE = {
@@ -155,4 +157,12 @@ export const INPUT_TOOLBAR_TYPE = {
155
157
  RATING: 'rating',
156
158
  }
157
159
 
158
- export const USER_DEFAULT_AVATAR = 'https://web.sdk.qcloud.com/im/desk/assets/user_default_avatar.png';
160
+ export const USER_DEFAULT_AVATAR = 'https://web.sdk.qcloud.com/im/desk/assets/user_default_avatar.png';
161
+
162
+ export enum ReadState {
163
+ Read,
164
+ Unread,
165
+ AllRead,
166
+ NotShow,
167
+ PartiallyRead,
168
+ }
@@ -1,19 +1,31 @@
1
1
  const AIDesk = {
2
- "结束人工会话": "End human service",
3
- "转人工服务": "Human service",
4
- "跳转": "Goto",
5
- "立即填写": "Fill now",
6
- "已提交": "Submitted",
7
- "提交": "Submit",
8
- "查看内容": "View content",
9
- "请填写必填项": "Please fill in the required fields",
10
- "Hi,我是": "Hi, I'm ",
11
- "请输入内容":"Please enter the content",
12
- "如果满意请给好评哦~":"If you're satisfied, please give a good review~",
13
- "请对本次服务进行评价": "Please rate this service",
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",
17
- "服务评价": "Feedback",
2
+ "结束人工会话": "End human service",
3
+ "转人工服务": "Human service",
4
+ "跳转": "Goto",
5
+ "立即填写": "Fill now",
6
+ "已提交": "Submitted",
7
+ "提交": "Submit",
8
+ "查看内容": "View content",
9
+ "请填写必填项": "Please fill in the required fields",
10
+ "Hi,我是": "Hi, I'm ",
11
+ "请输入内容":"Please enter the content",
12
+ "如果满意请给好评哦~":"If you're satisfied, please give a good review~",
13
+ "请对本次服务进行评价": "Please rate this service",
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",
17
+ "服务评价": "Feedback",
18
+ "满意":"Satisfied",
19
+ "不满意":"Dissatisfied",
20
+ "感谢您的反馈,我们会持续优化改进":"Thank you for your feedback, we will continue to improve",
21
+ "您遇到了哪方面的问题":"What problem did you encounter",
22
+ "其他反馈内容":"Other feedback",
23
+ "取消":"Cancel",
24
+ "答非所问":"Irrelevant answer",
25
+ "未匹配相关内容":"No relevant content matched",
26
+ "信息错误":"Incorrect information",
27
+ "上下文理解错误":"Context misunderstanding",
28
+ "格式不规范":"Improper format",
29
+ "内容不完整":"Incomplete content",
18
30
  }
19
31
  export default AIDesk;
@@ -1,19 +1,31 @@
1
1
  const AIDesk = {
2
- "结束人工会话":"Tapusin ang Usapan",
3
- "转人工服务": "Ilipat sa Serbisyo ng Tao",
4
- "跳转":"Tumalon",
5
- "立即填写": "Punan Agad",
6
- "已提交": "Naisumite Na",
7
- "提交": "Isumite",
8
- "查看内容": "Tingnan ang Nilalaman",
9
- "请填写必填项": "Mangyaring punan ang mga kinakailangang field",
10
- "Hi,我是": "Hi, ako ",
11
- "请输入内容":"Pakilagay ang nilalaman",
12
- "如果满意请给好评哦~":"Kung nasiyahan ka, mangyaring magbigay ng magandang pagsusuri~",
13
- "请对本次服务进行评价": "Mangyaring suriin ang serbisyong ito",
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",
17
- "服务评价": "Pagsusuri ng Serbisyo",
2
+ "结束人工会话":"Tapusin ang Usapan",
3
+ "转人工服务": "Ilipat sa Serbisyo ng Tao",
4
+ "跳转":"Tumalon",
5
+ "立即填写": "Punan Agad",
6
+ "已提交": "Naisumite Na",
7
+ "提交": "Isumite",
8
+ "查看内容": "Tingnan ang Nilalaman",
9
+ "请填写必填项": "Mangyaring punan ang mga kinakailangang field",
10
+ "Hi,我是": "Hi, ako ",
11
+ "请输入内容":"Pakilagay ang nilalaman",
12
+ "如果满意请给好评哦~":"Kung nasiyahan ka, mangyaring magbigay ng magandang pagsusuri~",
13
+ "请对本次服务进行评价": "Mangyaring suriin ang serbisyong ito",
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",
17
+ "服务评价": "Pagsusuri ng Serbisyo",
18
+ "满意":"Nasisiyahan",
19
+ "不满意":"Hindi nasisiyahan",
20
+ "感谢您的反馈,我们会持续优化改进":"Salamat sa iyong feedback, patuloy naming pagbubutihin",
21
+ "您遇到了哪方面的问题":"Anong problema ang iyong naranasan",
22
+ "其他反馈内容":"Iba pang feedback",
23
+ "取消":"Kanselahin",
24
+ "答非所问":"Hindi nauugnay na sagot",
25
+ "未匹配相关内容":"Walang katugmang nilalaman",
26
+ "信息错误":"Maling impormasyon",
27
+ "上下文理解错误":"Maling pag-unawa sa konteksto",
28
+ "格式不规范":"Hindi tamang pormat",
29
+ "内容不完整":"Hindi kumpletong nilalaman",
18
30
  }
19
31
  export default AIDesk;
@@ -1,19 +1,31 @@
1
1
  const AIDesk = {
2
- "结束人工会话": "Selesai",
3
- "转人工服务": "Layanan manusia",
4
- "跳转": "Goto",
5
- "立即填写": "Isi sekarang",
6
- "已提交": "Terkirim",
7
- "提交": "Kirim",
8
- "查看内容": "Lihat konten",
9
- "请填写必填项": "Harap isi bidang yang wajib diisi",
10
- "Hi,我是": "Hai, saya adalah ",
11
- "请输入内容":"Silakan masukkan konten",
12
- "如果满意请给好评哦~":"Jika Anda puas, silakan berikan ulasan yang bagus~",
13
- "请对本次服务进行评价": "Silakan beri penilaian untuk layanan ini",
14
- "提交评价": "Kirim Ulasan",
15
- "服务评价": "Ulasan Layanan",
16
- "并发限制": "Saat ini banyak pengguna yang mengakses. Mohon coba lagi nanti",
17
- "分支选项异常": "Konten tidak normal, silakan periksa konfigurasi alur tugas"
2
+ "结束人工会话": "Selesai",
3
+ "转人工服务": "Layanan manusia",
4
+ "跳转": "Goto",
5
+ "立即填写": "Isi sekarang",
6
+ "已提交": "Terkirim",
7
+ "提交": "Kirim",
8
+ "查看内容": "Lihat konten",
9
+ "请填写必填项": "Harap isi bidang yang wajib diisi",
10
+ "Hi,我是": "Hai, saya adalah ",
11
+ "请输入内容":"Silakan masukkan konten",
12
+ "如果满意请给好评哦~":"Jika Anda puas, silakan berikan ulasan yang bagus~",
13
+ "请对本次服务进行评价": "Silakan beri penilaian untuk layanan ini",
14
+ "提交评价": "Kirim Ulasan",
15
+ "服务评价": "Ulasan Layanan",
16
+ "并发限制": "Saat ini banyak pengguna yang mengakses. Mohon coba lagi nanti",
17
+ "分支选项异常": "Konten tidak normal, silakan periksa konfigurasi alur tugas",
18
+ "满意":"Puas",
19
+ "不满意":"Tidak puas",
20
+ "感谢您的反馈,我们会持续优化改进":"Terima kasih atas masukan Anda, kami akan terus memperbaiki",
21
+ "您遇到了哪方面的问题":"Masalah apa yang Anda hadapi",
22
+ "其他反馈内容":"Masukan lainnya",
23
+ "取消":"Batal",
24
+ "答非所问":"Jawaban tidak relevan",
25
+ "未匹配相关内容":"Tidak ada konten yang cocok",
26
+ "信息错误":"Informasi salah",
27
+ "上下文理解错误":"Kesalahan pemahaman konteks",
28
+ "格式不规范":"Format tidak standar",
29
+ "内容不完整":"Konten tidak lengkap",
18
30
  }
19
31
  export default AIDesk;