@trtc/calls-uikit-react 4.5.7 → 4.5.9

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trtc/calls-uikit-react",
3
- "version": "4.5.7",
3
+ "version": "4.5.9",
4
4
  "main": "./tuicall-uikit-react.umd.js",
5
5
  "module": "./tuicall-uikit-react.es.js",
6
6
  "types": "./types/index.d.ts",
@@ -14,7 +14,7 @@
14
14
  },
15
15
  "dependencies": {
16
16
  "@tencentcloud/tui-core-lite": "~1.0.1",
17
- "@trtc/call-engine-lite-js": "~4.0.8",
17
+ "@trtc/call-engine-lite-js": "~4.0.10",
18
18
  "@tencentcloud/lite-chat": "^1.6.3",
19
19
  "@trtc/call-engine-lite-wx": "~5.0.6"
20
20
  },
@@ -26,6 +26,7 @@ import {
26
26
  } from '../context';
27
27
  import { MessagePlugin } from '../components/base/Message/MessagePlugin';
28
28
  import FloatingWindow from '../components/common/FloatingWindow';
29
+ import { UIKitModal } from '../components/common/UIKitModal';
29
30
  import useGetSpeakers from '../hooks/useGetSpeakers';
30
31
  import TUICallKitStyle from './TUICallKit.module.scss';
31
32
  import Portal from '../components/base/Portal/Portal';
@@ -177,6 +178,21 @@ export default function TUICallKit(props: ITUICallKitProps) {
177
178
  setTranslateContextValue({ t: value });
178
179
  }
179
180
 
181
+ // Consume the MODAL_ERROR store written by handleModalError (e.g. package errors
182
+ // -1001/-1002, no camera/microphone 60003/60004). UIKitModal.openModal is imperative
183
+ // and mounts its own portal on document.body, so it works even when callStatus is IDLE
184
+ // and the component tree below returns null.
185
+ const handleModalErrorChange = (value) => {
186
+ if (value) {
187
+ UIKitModal.openModal({
188
+ id: value?.id,
189
+ title: value?.title,
190
+ content: value?.content,
191
+ type: 'error',
192
+ });
193
+ }
194
+ };
195
+
180
196
  const watchOptions = {
181
197
  [NAME.CALL_STATUS]: handleCallStatusChange,
182
198
  [NAME.IS_GROUP]: handleIsGroupChange,
@@ -192,6 +208,7 @@ export default function TUICallKit(props: ITUICallKitProps) {
192
208
  [NAME.IS_SHOW_ENABLE_VIRTUAL_BACKGROUND]: handleIsShowEnableVirtualBackgroundChange,
193
209
  [NAME.IS_MUTE_SPEAKER]: handleMuteSpeakerChange,
194
210
  [NAME.TRANSLATE]: handleTranslateChange,
211
+ [NAME.MODAL_ERROR]: handleModalErrorChange,
195
212
  };
196
213
 
197
214
  useLayoutEffect(() => {
@@ -22,19 +22,22 @@ const WEB_MODAL_ERROR_CODES = [
22
22
  60004,
23
23
  60006,
24
24
  -1201,
25
+ -1202,
25
26
  30000,
26
27
  20007,
27
28
  101002,
29
+ 101011,
30
+ -3301,
28
31
  ];
29
32
 
30
33
  const WEB_MODAL_ERROR_MAP = {
31
34
  '-1001': {
32
35
  id: 10001,
33
- key: 'error.10001'
36
+ key: 'error.10001',
34
37
  },
35
38
  '-1002': {
36
39
  id: 10002,
37
- key: 'error.10002'
40
+ key: 'error.10002',
38
41
  },
39
42
  '-1101': {
40
43
  id: 10004,
@@ -56,6 +59,12 @@ const WEB_MODAL_ERROR_MAP = {
56
59
  id: 10008,
57
60
  key: 'error.10008'
58
61
  },
62
+ // -1202 + native message 'invitee_list cannot be null': the caller tried to
63
+ // call themselves, so the invitee list ends up empty after filtering.
64
+ '-1202': {
65
+ id: 10017,
66
+ key: 'error.10017'
67
+ },
59
68
  '30000': {
60
69
  id: 10012,
61
70
  key: 'error.10012'
@@ -67,6 +76,24 @@ const WEB_MODAL_ERROR_MAP = {
67
76
  '101002': {
68
77
  id: 10014,
69
78
  key: 'error.10014'
79
+ },
80
+ // Same native code 101002 is reused for the "invalid callee list length" scenario,
81
+ // distinguished by message. See handleWebModalError for the message-based selection.
82
+ '101002_CALLEE_LIST': {
83
+ id: 10018,
84
+ key: 'error.10018'
85
+ },
86
+ // 101011: package ability not supported, needs an upgrade on the console.
87
+ // Message references the engine's ERROR_PACKAGE_NOT_SUPPORTED wording.
88
+ '101011': {
89
+ id: 10016,
90
+ key: 'error.10016'
91
+ },
92
+ '-3301': {
93
+ id: 10015,
94
+ key: 'error.10015',
95
+ // Message shown when the call is initiated from the Chat + TUICallKit integrated scenario.
96
+ chatKey: 'error.10015.chat'
70
97
  }
71
98
  };
72
99
  // @endif
@@ -75,7 +102,10 @@ const WEB_MODAL_ERROR_MAP = {
75
102
  const MINI_MODAL_ERROR_CODES = [
76
103
  -1001,
77
104
  -1002,
105
+ -1202,
78
106
  101002,
107
+ 101011,
108
+ -3301,
79
109
  ];
80
110
 
81
111
  const MINI_MODAL_ERROR_MAP = {
@@ -87,36 +117,80 @@ const MINI_MODAL_ERROR_MAP = {
87
117
  id: 10002,
88
118
  content: '您暂不支持使用该能力,请前往购买页购买开通'
89
119
  },
120
+ // -1202 + native message 'invitee_list cannot be null': the caller tried to
121
+ // call themselves, so the invitee list ends up empty after filtering.
122
+ '-1202': {
123
+ id: 10017,
124
+ content: '发起通话失败:被叫 userID 不能是当前登录用户自己,请检查传入的被叫 userID'
125
+ },
90
126
  '101002': {
91
127
  id: 10014,
92
- content: '发起通话失败,用户 ID 无效,请确认该用户已注册'
128
+ content: '发起通话失败:被叫 userID 无效,请确认该 userID 已注册并登录过 TUICallKit'
129
+ },
130
+ // Same native code 101002 is reused for the "invalid callee list length" scenario,
131
+ // distinguished by message. See handleMiniModalError for the message-based selection.
132
+ '101002_CALLEE_LIST': {
133
+ id: 10018,
134
+ content: '发起通话失败:单次呼叫的被叫用户数量需在 1 到 8 之间,请检查传入的 userIDList'
135
+ },
136
+ // 101011: package ability not supported, needs an upgrade on the console.
137
+ // Content references the engine's ERROR_PACKAGE_NOT_SUPPORTED wording.
138
+ '101011': {
139
+ id: 10016,
140
+ content: '您的应用还未开通音视频通话(TUICallKit)能力,您可以去控制台申请免费体验:https://console.cloud.tencent.com/im/detail 或购买通话能力套餐包:https://buy.cloud.tencent.com/avc 有疑问请参考:https://cloud.tencent.com/document/product/647/104662'
141
+ },
142
+ '-3301': {
143
+ id: 10015,
144
+ content: '未开通 TRTC 服务导致进房失败,请到控制台为您的应用开通 TRTC 服务',
145
+ // Content shown when the call is initiated from the Chat + TUICallKit integrated scenario.
146
+ chatContent: '当前为 Chat 融合场景,未开通 TRTC 服务导致进房失败,请到 IM 控制台为您的应用开通 TRTC 服务'
93
147
  }
94
148
  }
95
149
  // @endif
96
150
 
97
- export function handleModalError(error) {
151
+ // Resolve the modal map key for an error. Code 101002 is reused by two scenarios
152
+ // (invalid userId / invalid callee list length), so it is disambiguated by message.
153
+ // Matches both the raw native message and the marker appended by the engine, so it
154
+ // works whether or not the engine has already localized the message.
155
+ function resolveModalErrorKey(error) {
156
+ if (error.code === 101002) {
157
+ const message = error?.message || '';
158
+ if (message.includes('CalleeList_Account length must be between 1 and 8')
159
+ || message.includes('ERROR_INVALID_CALLEE_LIST')) {
160
+ return '101002_CALLEE_LIST';
161
+ }
162
+ }
163
+ return error.code.toString();
164
+ }
165
+
166
+ // `isFromChat` marks whether the current call is initiated from the Chat + TUICallKit
167
+ // integrated scenario (true) or from standalone TUICallKit (false), so the modal can
168
+ // show source-specific guidance for package errors such as -1001 / -1002.
169
+ export function handleModalError(error, isFromChat = false) {
98
170
  if (!error || !error?.code) {
99
171
  return;
100
172
  }
101
173
 
102
174
  // @if process.env.BUILD_TARGET!='MINI'
103
- handleWebModalError(error);
175
+ handleWebModalError(error, isFromChat);
104
176
  // @endif
105
177
 
106
178
  // @if process.env.BUILD_TARGET='MINI'
107
- handleMiniModalError(error);
179
+ handleMiniModalError(error, isFromChat);
108
180
  // @endif
109
181
  }
110
182
 
111
183
  // @if process.env.BUILD_TARGET!='MINI'
112
- function handleWebModalError(error) {
184
+ function handleWebModalError(error, isFromChat = false) {
113
185
  if (!WEB_MODAL_ERROR_CODES.includes(error.code)) {
114
186
  return;
115
187
  }
116
188
 
117
- const errorInfo = WEB_MODAL_ERROR_MAP[error.code.toString()];
189
+ const errorInfo = WEB_MODAL_ERROR_MAP[resolveModalErrorKey(error)];
118
190
  if (errorInfo) {
119
- let content = t(errorInfo.key);
191
+ // Prefer the Chat-integrated message when available and the call comes from Chat.
192
+ const messageKey = isFromChat && errorInfo.chatKey ? errorInfo.chatKey : errorInfo.key;
193
+ let content = t(messageKey);
120
194
  TUIStore.update(StoreName.CALL, NAME.MODAL_ERROR, {
121
195
  id: errorInfo.id,
122
196
  content: content,
@@ -127,16 +201,18 @@ function handleWebModalError(error) {
127
201
  // @endif
128
202
 
129
203
  // @if process.env.BUILD_TARGET='MINI'
130
- function handleMiniModalError(error) {
204
+ function handleMiniModalError(error, isFromChat = false) {
131
205
  if (!MINI_MODAL_ERROR_CODES.includes(error.code)) {
132
206
  return;
133
207
  }
134
208
 
135
- const errorInfo = MINI_MODAL_ERROR_MAP[error.code.toString()];
209
+ const errorInfo = MINI_MODAL_ERROR_MAP[resolveModalErrorKey(error)];
136
210
  if (errorInfo) {
211
+ // Prefer the Chat-integrated content when available and the call comes from Chat.
212
+ const content = isFromChat && errorInfo.chatContent ? errorInfo.chatContent : errorInfo.content;
137
213
  UIKitModal.openModal({
138
214
  id: errorInfo.id,
139
- content: errorInfo.content,
215
+ content: content,
140
216
  title: '错误',
141
217
  type: 'error'
142
218
  });
@@ -275,6 +275,14 @@ export default class ChatCombine {
275
275
  */
276
276
  private async _handleTUICoreOnClick(options, type: CallMediaType) {
277
277
  try {
278
+ // Guard: block starting a new call while already busy. `calls()` returns
279
+ // silently when the status is not IDLE, so we surface a toast here to let
280
+ // the user know a call is already in progress.
281
+ if (TUIStore.getData(StoreName.CALL, NAME.CALL_STATUS) !== CallStatus.IDLE) {
282
+ TUIStore.update(StoreName.CALL, NAME.TOAST_INFO, { content: 'in-calling-cannot-start-new', type: 'info' });
283
+ return;
284
+ }
285
+
278
286
  const { groupID, userIDList = [], version = '', ...rest } = options;
279
287
 
280
288
  await this._callService?.calls({ chatGroupID: groupID, userIDList, type, ...rest });
@@ -344,7 +344,7 @@ export default class EngineEventHandler {
344
344
  private async _handleUserVideoAvailable(event: any): Promise<any> {
345
345
  const { userID: userId, isVideoAvailable } = analyzeEventData(event);
346
346
  console.log(`${NAME.PREFIX}_handleUserVideoAvailable event data: ${JSON.stringify(event)}.`);
347
-
347
+
348
348
  this._setRemoteUserInfoAudioVideoAvailable(isVideoAvailable, NAME.VIDEO, userId);
349
349
  try {
350
350
  isVideoAvailable && await this._startRemoteView(userId);
@@ -395,7 +395,7 @@ export default class EngineEventHandler {
395
395
  remoteUserInfoList.push({ userId });
396
396
  TUIStore.update(StoreName.CALL, NAME.REMOTE_USER_INFO_LIST, remoteUserInfoList);
397
397
  TUIStore.update(StoreName.CALL, NAME.REMOTE_USER_INFO_EXCLUDE_VOLUMN_LIST, remoteUserInfoList);
398
-
398
+
399
399
  const [userInfo] = await getRemoteUserProfile([userId], this._callService?.getTim());
400
400
  remoteUserInfoList = TUIStore.getData(StoreName.CALL, NAME.REMOTE_USER_INFO_LIST);
401
401
  remoteUserInfoList.forEach((obj) => {
@@ -27,7 +27,7 @@ const TUIGlobal: ITUIGlobal = TuiGlobal.getInstance();
27
27
  const TUIStore: ITUIStore = TuiStore.getInstance();
28
28
  const uiDesign = UIDesign.getInstance();
29
29
  uiDesign.setTUIStore(TUIStore);
30
- const version = '4.5.7';
30
+ const version = '4.5.9';
31
31
  import AIAssistant from './AIAssistant'; // 仅 web 支持 AI 实时字幕
32
32
  const frameWork = 'react';
33
33
  export { TUIGlobal, TUIStore, uiDesign };
@@ -65,8 +65,8 @@ export default class TUICallService {
65
65
  console.log(`${NAME.PREFIX}version: ${version}`);
66
66
  this._wasmReadyPromise = new Promise(resolve => {
67
67
  this._wasmReadyResolve = resolve;
68
- });
69
- this._loadWasm();
68
+ });
69
+ this._loadWasm();
70
70
  this._watchTUIStore();
71
71
  this._engineEventHandler = EngineEventHandler.getInstance({ callService: this });
72
72
 
@@ -90,7 +90,7 @@ export default class TUICallService {
90
90
  return;
91
91
  }
92
92
  await this._wasmReadyPromise;
93
-
93
+
94
94
  if (!this._isInitialized) {
95
95
  await this._doInit(params);
96
96
  this._isInitialized = true;
@@ -215,7 +215,7 @@ export default class TUICallService {
215
215
  const response = await this._tuiCallEngine.calls(callsParams);
216
216
  await this._updateCallStoreAfterCall(userIDList, response);
217
217
  } catch (error: any) {
218
- handleModalError(error);
218
+ handleModalError(error, this._isFromChat);
219
219
  this._handleCallError(error, 'calls');
220
220
  }
221
221
  }
@@ -251,7 +251,7 @@ export default class TUICallService {
251
251
  // setLocalUserInfoAudioVideoAvailable(true, NAME.VIDEO);
252
252
  // }
253
253
  } catch (error) {
254
- handleModalError(error);
254
+ handleModalError(error, this._isFromChat);
255
255
  this._handleCallError(error, 'join');
256
256
  }
257
257
  }
@@ -381,7 +381,7 @@ export default class TUICallService {
381
381
  error,
382
382
  });
383
383
  if (handleRepeatedCallError(error)) return;
384
- handleModalError(error);
384
+ handleModalError(error, this._isFromChat);
385
385
  noDevicePermissionToast(error, CallMediaType.AUDIO, this._tuiCallEngine);
386
386
  this._resetCallStore();
387
387
  }
@@ -412,7 +412,7 @@ export default class TUICallService {
412
412
  }
413
413
  });
414
414
  } catch (error) {
415
- handleModalError(error);
415
+ handleModalError(error, this._isFromChat);
416
416
  console.debug(error);
417
417
  }
418
418
  this._resetCallStore();
@@ -426,7 +426,7 @@ export default class TUICallService {
426
426
  this._chatCombine?.callTUIService({ message: response?.data?.message });
427
427
  }
428
428
  } catch (error) {
429
- handleModalError(error);
429
+ handleModalError(error, this._isFromChat);
430
430
  console.debug(error);
431
431
  }
432
432
  this._resetCallStore();
@@ -759,7 +759,7 @@ export default class TUICallService {
759
759
  private _resetCallStore() {
760
760
  this._cleanupAvoidRepeatCallState();
761
761
  this._bellContext?.stop();
762
-
762
+
763
763
  const oldStatusStr = generateStatusChangeText();
764
764
  this._stopTimer();
765
765
  // localUserInfo, language 在通话结束后不需要清除
@@ -106,4 +106,9 @@ export enum ROOM_ID_TYPE {
106
106
  NUMBER_ROOM_ID = 1,
107
107
  // eslint-disable-next-line no-unused-vars
108
108
  STRING_ROOM_ID = 2,
109
+ };
110
+ export enum CloudRecordPolicy {
111
+ FollowConsoleConfig = 0,
112
+ Enable = 1,
113
+ Disable = 2,
109
114
  };
@@ -11,6 +11,7 @@ import {
11
11
  AudioPlayBackDevice,
12
12
  FeatureButton,
13
13
  LayoutMode,
14
+ CloudRecordPolicy,
14
15
  } from './const/index';
15
16
  import { t } from './locales/index';
16
17
 
@@ -34,4 +35,5 @@ export {
34
35
  uiDesign,
35
36
  FeatureButton,
36
37
  LayoutMode,
38
+ CloudRecordPolicy,
37
39
  };
@@ -1,4 +1,4 @@
1
- import { CallStatus, CallRole } from '../const/index';
1
+ import { CallStatus, CallRole, CloudRecordPolicy } from '../const/index';
2
2
 
3
3
  type SDKAppID = { SDKAppID: number; } | { sdkAppID: number; };
4
4
  export interface IInitParamsBase {
@@ -19,6 +19,7 @@ export interface ICallsParams {
19
19
  userData?: string;
20
20
  timeout?: number;
21
21
  offlinePushInfo?: IOfflinePushInfo;
22
+ cloudRecordPolicy?: CloudRecordPolicy;
22
23
  }
23
24
  // userInfo interface
24
25
  export interface IUserInfo {
@@ -126,6 +126,7 @@ export const en = {
126
126
  'not-supported-webrtc': 'Your current environment does not support WebRTC',
127
127
  'blacklist-user-tips': 'The identifier is in blacklist. Failed to send this message!',
128
128
  'is-already-calling': 'TUICallKit is already on a call',
129
+ 'in-calling-cannot-start-new': 'A call is in progress. You cannot start a new call.',
129
130
  'need-init': 'Before initiating a call with TUICallKit, ensure that the TUICallKitAPI.init() method has executed successfully. ',
130
131
  "can't call yourself": "Can't call yourself", // eslint-disable-line
131
132
  'Use-phone-and-computer': 'Use your mobile phone and computer to experience video calls',
@@ -144,7 +145,12 @@ export const en = {
144
145
  'error.10008': "TUICallEngine has not completed initialization or login. Please ensure you have successfully executed init or login operations before calling this function. Solution: <a href='https://cloud.tencent.com/document/product/647/78769#3a61f42b-e06f-49af-88bf-362d40025887'>View Documentation</a>",
145
146
  'error.10012': "Detected that the current page is under HTTP protocol. To ensure smooth access and full functionality of TUICallEngine SDK for production environment users, please use HTTPS protocol (or localhost) to access the audio/video application page. For details, please visit: <a href='https://web.sdk.qcloud.com/trtc/webrtc/v5/doc/zh-cn/tutorial-05-info-browser.html#h2-3'>View Documentation</a>",
146
147
  'error.10013': "Call failed: You have been blocked by the other party or you have blocked the other party",
147
- 'error.10014': "Call initiation failed. User ID is invalid. Please confirm that the user is registered.",
148
+ 'error.10014': "Failed to start the call: the callee userID is invalid. Please make sure the userID is registered and has logged in to TUICallKit.",
149
+ 'error.10015': "Failed to enter the room because the TRTC service is not activated. Please go to the <a href='https://console.cloud.tencent.com/trtc'>console</a> to activate the TRTC service for your application",
150
+ 'error.10015.chat': "You are currently in the Chat + TUICallKit integrated scenario. Failed to enter the room because the TRTC service is not activated. Please go to the <a href='https://console.cloud.tencent.com/im/rtc-config'>IM console</a> to activate the TRTC service for your application",
151
+ 'error.10016': "Your application has not enabled the audio and video call (TUICallKit) capability. You can apply for a free trial in the <a href='https://console.cloud.tencent.com/im/detail'>console</a>, or purchase the <a href='https://buy.cloud.tencent.com/avc'>call capability package</a>. If you have any questions, please refer to the <a href='https://cloud.tencent.com/document/product/647/104662'>documentation</a>",
152
+ 'error.10017': "Failed to start the call: the callee userID cannot be the current logged-in user. Please check the callee userID you passed in.",
153
+ 'error.10018': "Failed to start the call: the number of callees in a single call must be between 1 and 8. Please check the userIDList you passed in.",
148
154
  'error': 'Error',
149
155
  // AI Subtitle Settings
150
156
  'ai-subtitle': 'AI Subtitle',
@@ -1,5 +1,5 @@
1
1
  export const ja_JP = {
2
- // 按钮文案
2
+ // 按钮文案
3
3
  'hangup': '通話終了',
4
4
  'reject': '拒否',
5
5
  'accept': '応答',
@@ -55,7 +55,7 @@ export const ja_JP = {
55
55
  'open camera': 'オープンカメラ',
56
56
  'close camera': 'カメラを閉じる',
57
57
  'open microphone': 'オープンマイク',
58
- 'close microphone': 'マイクを閉じる',
58
+ 'close microphone': 'マイクを閉じる',
59
59
  'camera enabled': 'カメラオン',
60
60
  'camera disabled': 'カメラオフ',
61
61
  'microphone enabled': 'マイクオン',
@@ -128,6 +128,7 @@ export const ja_JP = {
128
128
  'not-supported-webrtc': '現在の環境はWebRTCをサポートしていません',
129
129
  'blacklist-user-tips': 'ユーザーはブラックリストに登録され、通話が開始できませんでした',
130
130
  'is-already-calling': 'TUICallKit はすでに通話中です',
131
+ 'in-calling-cannot-start-new': '通話中のため、新しい通話を開始できません',
131
132
  'need-init': 'TUICallKitで通話を開始する前に、TUICallKitAPI.init() メソッドが正常に実行されたことを確認してください。',
132
133
  "can't call yourself": '自分に電話をかけることができません',
133
134
  'accept-error': '接続できませんでした',
@@ -143,7 +144,11 @@ export const ja_JP = {
143
144
  'error.10008': "TUICallEngineが初期化またはログインを完了していません。この機能を呼び出す前に、initまたはlogin操作が正常に実行されていることを確認してください。解決策:<a href='https://cloud.tencent.com/document/product/647/78769#3a61f42b-e06f-49af-88bf-362d40025887'>ドキュメントを確認</a>",
144
145
  'error.10012': "現在のページがHTTPプロトコル下にあることが検出されました。本番環境のユーザーがTUICallEngine SDKの全機能をスムーズに利用できるようにするため、音声・ビデオアプリケーションページにはHTTPSプロトコル(またはlocalhost)を使用してアクセスしてください。詳細については、<a href='https://web.sdk.qcloud.com/trtc/webrtc/v5/doc/zh-cn/tutorial-05-info-browser.html#h2-3'>ドキュメントを確認</a>してください",
145
146
  'error.10013': "通話失敗:相手にブロックされているか、または相手をブロックしています",
146
- 'error.10014': "通話の開始に失敗しました。ユーザーIDが無効です。ユーザーが登録されていることを確認してください。",
147
+ 'error.10014': "通話の発信に失敗しました:着信側 userID が無効です。該当 userID が登録済みで、TUICallKit にログインしたことがあることを確認してください。",
148
+ 'error.10015.chat': "現在は Chat と TUICallKit の統合シナリオです。TRTC サービスが有効化されていないため、ルームへの入室に失敗しました。<a href='https://console.cloud.tencent.com/im/rtc-config'>IM コンソール</a>でアプリケーションの TRTC サービスを有効化してください",
149
+ 'error.10016': "あなたのアプリケーションは音声・ビデオ通話(TUICallKit)機能を有効にしていません。<a href='https://console.cloud.tencent.com/im/detail'>コンソール</a>で無料体験を申請するか、<a href='https://buy.cloud.tencent.com/avc'>通話機能パッケージ</a>を購入してください。ご不明な点がある場合は、<a href='https://cloud.tencent.com/document/product/647/104662'>ドキュメント</a>をご参照ください",
150
+ 'error.10017': "通話の発信に失敗しました:着信側 userID を現在ログイン中のユーザー自身に指定することはできません。渡した着信側 userID を確認してください。",
151
+ 'error.10018': "通話の発信に失敗しました:1 回の通話で指定できる着信側ユーザー数は 1〜8 人である必要があります。渡した userIDList を確認してください。",
147
152
  'error': 'エラー',
148
153
  // AI Subtitle Settings
149
154
  'ai-subtitle': 'AI字幕',
@@ -124,6 +124,7 @@ export const zh = {
124
124
  'not-supported-webrtc': '当前环境不支持 WebRTC',
125
125
  'blacklist-user-tips': '发起通话失败,被对方拉入黑名单,禁止发起!',
126
126
  'is-already-calling': 'TUICallKit 已在通话状态',
127
+ 'in-calling-cannot-start-new': '正在通话中,无法发起新的通话',
127
128
  'need-init': 'TUICallKit 发起通话前需保证 TUICallKitAPI.init() 方法执行成功',
128
129
  "can't call yourself": '不能呼叫自己', // eslint-disable-line
129
130
  'accept-error': '接通失败',
@@ -139,7 +140,12 @@ export const zh = {
139
140
  'error.10008': "TUICallEngine 尚未完成初始化或登录。请确保在调用此功能前,已成功执行 init 或 login 操作。解决方案:<a href='https://cloud.tencent.com/document/product/647/78769#3a61f42b-e06f-49af-88bf-362d40025887'>查看文档</a>",
140
141
  'error.10012': "检测到当前页面正处于 http 协议下,为确保生产环境用户顺畅接入和体验 TUICallEngine SDK 的全部功能,请使用 https 协议(或 localhost)访问音视频应用页面。详情请前往:<a href='https://web.sdk.qcloud.com/trtc/webrtc/v5/doc/zh-cn/tutorial-05-info-browser.html#h2-3'>查看文档</a>",
141
142
  'error.10013': "呼叫失败:您已被对方拉黑或您拉黑了对方",
142
- 'error.10014': "发起通话失败,用户 ID 无效,请确认该用户已注册。",
143
+ 'error.10014': "发起通话失败:被叫 userID 无效,请确认该 userID 已注册并登录过 TUICallKit。",
144
+ 'error.10015': "未开通 TRTC 服务导致进房失败,请前往<a href='https://console.cloud.tencent.com/trtc'>控制台</a>为您的应用开通 TRTC 服务",
145
+ 'error.10015.chat': "当前为 Chat 与 TUICallKit 融合场景,未开通 TRTC 服务导致进房失败,请前往 <a href='https://console.cloud.tencent.com/im/rtc-config'>IM 控制台</a>为您的应用开通 TRTC 服务",
146
+ 'error.10016': "您的应用还未开通音视频通话(TUICallKit)能力,您可以去<a href='https://console.cloud.tencent.com/im/detail'>控制台</a>申请免费体验,或购买<a href='https://buy.cloud.tencent.com/avc'>通话能力套餐包</a>,有疑问请参考<a href='https://cloud.tencent.com/document/product/647/104662'>相关文档</a>",
147
+ 'error.10017': "发起通话失败:被叫 userID 不能是当前登录用户自己,请检查传入的被叫 userID。",
148
+ 'error.10018': "发起通话失败:单次呼叫的被叫用户数量需在 1 到 8 之间,请检查传入的 userIDList。",
143
149
  'error': '错误',
144
150
  // AI Subtitle Settings
145
151
  'ai-subtitle': 'AI 字幕',
package/src/index.ts CHANGED
@@ -35,7 +35,7 @@ const TUICallType = {
35
35
  AUDIO_CALL: 1,
36
36
  VIDEO_CALL: 2,
37
37
  };
38
- const Version = '4.5.7'; // basic-demo 原来上报使用
38
+ const Version = '4.5.9'; // basic-demo 原来上报使用
39
39
 
40
40
  // 输出产物
41
41
  export {