@webex/internal-plugin-voicea 3.8.0 → 3.8.1-next.10
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/README.md +17 -0
- package/dist/constants.js +9 -2
- package/dist/constants.js.map +1 -1
- package/dist/types/constants.d.ts +7 -0
- package/dist/types/voicea.d.ts +19 -2
- package/dist/types/voicea.types.d.ts +6 -1
- package/dist/voicea.js +91 -17
- package/dist/voicea.js.map +1 -1
- package/dist/voicea.types.js.map +1 -1
- package/package.json +10 -10
- package/src/constants.ts +8 -0
- package/src/voicea.ts +106 -20
- package/src/voicea.types.ts +14 -1
- package/test/unit/spec/voicea.js +199 -28
package/README.md
CHANGED
|
@@ -54,6 +54,15 @@ await webex.internal.voicea.toggleTranscribing(true);
|
|
|
54
54
|
await webex.internal.voicea.toggleTranscribing(false);
|
|
55
55
|
```
|
|
56
56
|
|
|
57
|
+
Toggle Manual Captions
|
|
58
|
+
|
|
59
|
+
- Enable/Disable Manual Captioning in a meeting
|
|
60
|
+
|
|
61
|
+
```js
|
|
62
|
+
await webex.internal.voicea.toggleManualCaption(true);
|
|
63
|
+
await webex.internal.voicea.toggleManualCaption(false);
|
|
64
|
+
```
|
|
65
|
+
|
|
57
66
|
Set Spoken Language
|
|
58
67
|
|
|
59
68
|
- Host can set the spoken language of the meeting
|
|
@@ -71,6 +80,14 @@ Set Caption Language
|
|
|
71
80
|
webex.internal.voicea.requestLanguage('en');
|
|
72
81
|
```
|
|
73
82
|
|
|
83
|
+
Send Manual Closed Caption Messages
|
|
84
|
+
|
|
85
|
+
- Only captioner can send manual closed captions messages
|
|
86
|
+
|
|
87
|
+
```js
|
|
88
|
+
webex.internal.voicea.sendManualClosedCaption('Hello World', 9876543210, [654321, 123456, 789034, 893628], true);
|
|
89
|
+
```
|
|
90
|
+
|
|
74
91
|
Other Triggers:
|
|
75
92
|
|
|
76
93
|
- voicea:announcement - Triggered when voicea has
|
package/dist/constants.js
CHANGED
|
@@ -4,7 +4,7 @@ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/defi
|
|
|
4
4
|
_Object$defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.VOICEA = exports.TURN_ON_CAPTION_STATUS = exports.TRANSCRIPTION_TYPE = exports.EVENT_TRIGGERS = exports.ANNOUNCE_STATUS = exports.AIBRIDGE_RELAY_TYPES = void 0;
|
|
7
|
+
exports.VOICEA = exports.TURN_ON_CAPTION_STATUS = exports.TRANSCRIPTION_TYPE = exports.TOGGLE_MANUAL_CAPTION_STATUS = exports.EVENT_TRIGGERS = exports.DEFAULT_SPOKEN_LANGUAGE = exports.ANNOUNCE_STATUS = exports.AIBRIDGE_RELAY_TYPES = void 0;
|
|
8
8
|
var EVENT_TRIGGERS = exports.EVENT_TRIGGERS = {
|
|
9
9
|
VOICEA_ANNOUNCEMENT: 'voicea:announcement',
|
|
10
10
|
CAPTION_LANGUAGE_UPDATE: 'voicea:captionLanguageUpdate',
|
|
@@ -26,7 +26,8 @@ var AIBRIDGE_RELAY_TYPES = exports.AIBRIDGE_RELAY_TYPES = {
|
|
|
26
26
|
TRANSCRIPTION: 'voicea.transcription'
|
|
27
27
|
},
|
|
28
28
|
MANUAL: {
|
|
29
|
-
TRANSCRIPTION: 'aibridge.manual_transcription'
|
|
29
|
+
TRANSCRIPTION: 'aibridge.manual_transcription',
|
|
30
|
+
CAPTIONER: 'client.manual_transcription'
|
|
30
31
|
}
|
|
31
32
|
};
|
|
32
33
|
var TRANSCRIPTION_TYPE = exports.TRANSCRIPTION_TYPE = {
|
|
@@ -38,9 +39,11 @@ var TRANSCRIPTION_TYPE = exports.TRANSCRIPTION_TYPE = {
|
|
|
38
39
|
TRANSCRIPT_INTERIM_RESULTS: 'transcript_interim_results',
|
|
39
40
|
TRANSCRIPT_FINAL_RESULT: 'transcript_final_result',
|
|
40
41
|
MANUAL_CAPTION_INTERIM_RESULTS: 'manual_caption_interim_results',
|
|
42
|
+
MANUAL_CAPTION_INTERIM_RESULT: 'manual_caption_interim_result',
|
|
41
43
|
MANUAL_CAPTION_FINAL_RESULT: 'manual_caption_final_result'
|
|
42
44
|
};
|
|
43
45
|
var VOICEA = exports.VOICEA = 'voicea';
|
|
46
|
+
var DEFAULT_SPOKEN_LANGUAGE = exports.DEFAULT_SPOKEN_LANGUAGE = 'en';
|
|
44
47
|
var ANNOUNCE_STATUS = exports.ANNOUNCE_STATUS = {
|
|
45
48
|
IDLE: 'idle',
|
|
46
49
|
JOINED: 'joined',
|
|
@@ -51,4 +54,8 @@ var TURN_ON_CAPTION_STATUS = exports.TURN_ON_CAPTION_STATUS = {
|
|
|
51
54
|
ENABLED: 'enabled',
|
|
52
55
|
SENDING: 'sending'
|
|
53
56
|
};
|
|
57
|
+
var TOGGLE_MANUAL_CAPTION_STATUS = exports.TOGGLE_MANUAL_CAPTION_STATUS = {
|
|
58
|
+
IDLE: 'idle',
|
|
59
|
+
SENDING: 'sending'
|
|
60
|
+
};
|
|
54
61
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["EVENT_TRIGGERS","exports","VOICEA_ANNOUNCEMENT","CAPTION_LANGUAGE_UPDATE","SPOKEN_LANGUAGE_UPDATE","CAPTIONS_TURNED_ON","TRANSCRIBING_ON","TRANSCRIBING_OFF","NEW_CAPTION","EVA_COMMAND","HIGHLIGHT_CREATED","NEW_MANUAL_CAPTION","AIBRIDGE_RELAY_TYPES","VOICEA","ANNOUNCEMENT","CLIENT_ANNOUNCEMENT","TRANSLATION_REQUEST","TRANSLATION_RESPONSE","TRANSCRIPTION","MANUAL","TRANSCRIPTION_TYPE","UNKNOWN","EVA_WAKE","EVA_THANKS","EVA_CANCEL","TRANSCRIPT_INTERIM_RESULTS","TRANSCRIPT_FINAL_RESULT","MANUAL_CAPTION_INTERIM_RESULTS","MANUAL_CAPTION_FINAL_RESULT","ANNOUNCE_STATUS","IDLE","JOINED","JOINING","TURN_ON_CAPTION_STATUS","ENABLED","SENDING"],"sources":["constants.ts"],"sourcesContent":["export const EVENT_TRIGGERS = {\n VOICEA_ANNOUNCEMENT: 'voicea:announcement',\n CAPTION_LANGUAGE_UPDATE: 'voicea:captionLanguageUpdate',\n SPOKEN_LANGUAGE_UPDATE: 'voicea:spokenLanguageUpdate',\n CAPTIONS_TURNED_ON: 'voicea:captionOn',\n TRANSCRIBING_ON: 'voicea:transcribingOn',\n TRANSCRIBING_OFF: 'voicea:transcribingOff',\n\n NEW_CAPTION: 'voicea:newCaption',\n EVA_COMMAND: 'voicea:wxa',\n HIGHLIGHT_CREATED: 'voicea:highlightCreated',\n NEW_MANUAL_CAPTION: 'aibridge:newManualCaption',\n};\n\nexport const AIBRIDGE_RELAY_TYPES = {\n VOICEA: {\n ANNOUNCEMENT: 'voicea.annc',\n CLIENT_ANNOUNCEMENT: 'client.annc',\n TRANSLATION_REQUEST: 'voicea.transl.req',\n TRANSLATION_RESPONSE: 'voicea.transl.rsp',\n TRANSCRIPTION: 'voicea.transcription',\n },\n MANUAL: {\n TRANSCRIPTION: 'aibridge.manual_transcription',\n },\n};\n\nexport const TRANSCRIPTION_TYPE = {\n UNKNOWN: 'unknown',\n EVA_WAKE: 'eva_wake',\n EVA_THANKS: 'eva_thanks',\n EVA_CANCEL: 'eva_cancel',\n HIGHLIGHT_CREATED: 'highlight_created',\n TRANSCRIPT_INTERIM_RESULTS: 'transcript_interim_results',\n TRANSCRIPT_FINAL_RESULT: 'transcript_final_result',\n MANUAL_CAPTION_INTERIM_RESULTS: 'manual_caption_interim_results',\n MANUAL_CAPTION_FINAL_RESULT: 'manual_caption_final_result',\n};\n\nexport const VOICEA = 'voicea';\n\nexport const ANNOUNCE_STATUS = {\n IDLE: 'idle',\n JOINED: 'joined',\n JOINING: 'joining',\n};\n\nexport const TURN_ON_CAPTION_STATUS = {\n IDLE: 'idle',\n ENABLED: 'enabled',\n SENDING: 'sending',\n};\n"],"mappings":";;;;;;;AAAO,IAAMA,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG;EAC5BE,mBAAmB,EAAE,qBAAqB;EAC1CC,uBAAuB,EAAE,8BAA8B;EACvDC,sBAAsB,EAAE,6BAA6B;EACrDC,kBAAkB,EAAE,kBAAkB;EACtCC,eAAe,EAAE,uBAAuB;EACxCC,gBAAgB,EAAE,wBAAwB;EAE1CC,WAAW,EAAE,mBAAmB;EAChCC,WAAW,EAAE,YAAY;EACzBC,iBAAiB,EAAE,yBAAyB;EAC5CC,kBAAkB,EAAE;AACtB,CAAC;AAEM,IAAMC,oBAAoB,GAAAX,OAAA,CAAAW,oBAAA,GAAG;EAClCC,MAAM,EAAE;IACNC,YAAY,EAAE,aAAa;IAC3BC,mBAAmB,EAAE,aAAa;IAClCC,mBAAmB,EAAE,mBAAmB;IACxCC,oBAAoB,EAAE,mBAAmB;IACzCC,aAAa,EAAE;EACjB,CAAC;EACDC,MAAM,EAAE;IACND,aAAa,EAAE;
|
|
1
|
+
{"version":3,"names":["EVENT_TRIGGERS","exports","VOICEA_ANNOUNCEMENT","CAPTION_LANGUAGE_UPDATE","SPOKEN_LANGUAGE_UPDATE","CAPTIONS_TURNED_ON","TRANSCRIBING_ON","TRANSCRIBING_OFF","NEW_CAPTION","EVA_COMMAND","HIGHLIGHT_CREATED","NEW_MANUAL_CAPTION","AIBRIDGE_RELAY_TYPES","VOICEA","ANNOUNCEMENT","CLIENT_ANNOUNCEMENT","TRANSLATION_REQUEST","TRANSLATION_RESPONSE","TRANSCRIPTION","MANUAL","CAPTIONER","TRANSCRIPTION_TYPE","UNKNOWN","EVA_WAKE","EVA_THANKS","EVA_CANCEL","TRANSCRIPT_INTERIM_RESULTS","TRANSCRIPT_FINAL_RESULT","MANUAL_CAPTION_INTERIM_RESULTS","MANUAL_CAPTION_INTERIM_RESULT","MANUAL_CAPTION_FINAL_RESULT","DEFAULT_SPOKEN_LANGUAGE","ANNOUNCE_STATUS","IDLE","JOINED","JOINING","TURN_ON_CAPTION_STATUS","ENABLED","SENDING","TOGGLE_MANUAL_CAPTION_STATUS"],"sources":["constants.ts"],"sourcesContent":["export const EVENT_TRIGGERS = {\n VOICEA_ANNOUNCEMENT: 'voicea:announcement',\n CAPTION_LANGUAGE_UPDATE: 'voicea:captionLanguageUpdate',\n SPOKEN_LANGUAGE_UPDATE: 'voicea:spokenLanguageUpdate',\n CAPTIONS_TURNED_ON: 'voicea:captionOn',\n TRANSCRIBING_ON: 'voicea:transcribingOn',\n TRANSCRIBING_OFF: 'voicea:transcribingOff',\n\n NEW_CAPTION: 'voicea:newCaption',\n EVA_COMMAND: 'voicea:wxa',\n HIGHLIGHT_CREATED: 'voicea:highlightCreated',\n NEW_MANUAL_CAPTION: 'aibridge:newManualCaption',\n};\n\nexport const AIBRIDGE_RELAY_TYPES = {\n VOICEA: {\n ANNOUNCEMENT: 'voicea.annc',\n CLIENT_ANNOUNCEMENT: 'client.annc',\n TRANSLATION_REQUEST: 'voicea.transl.req',\n TRANSLATION_RESPONSE: 'voicea.transl.rsp',\n TRANSCRIPTION: 'voicea.transcription',\n },\n MANUAL: {\n TRANSCRIPTION: 'aibridge.manual_transcription',\n CAPTIONER: 'client.manual_transcription',\n },\n};\n\nexport const TRANSCRIPTION_TYPE = {\n UNKNOWN: 'unknown',\n EVA_WAKE: 'eva_wake',\n EVA_THANKS: 'eva_thanks',\n EVA_CANCEL: 'eva_cancel',\n HIGHLIGHT_CREATED: 'highlight_created',\n TRANSCRIPT_INTERIM_RESULTS: 'transcript_interim_results',\n TRANSCRIPT_FINAL_RESULT: 'transcript_final_result',\n MANUAL_CAPTION_INTERIM_RESULTS: 'manual_caption_interim_results',\n MANUAL_CAPTION_INTERIM_RESULT: 'manual_caption_interim_result',\n MANUAL_CAPTION_FINAL_RESULT: 'manual_caption_final_result',\n};\n\nexport const VOICEA = 'voicea';\nexport const DEFAULT_SPOKEN_LANGUAGE = 'en';\n\nexport const ANNOUNCE_STATUS = {\n IDLE: 'idle',\n JOINED: 'joined',\n JOINING: 'joining',\n};\n\nexport const TURN_ON_CAPTION_STATUS = {\n IDLE: 'idle',\n ENABLED: 'enabled',\n SENDING: 'sending',\n};\n\nexport const TOGGLE_MANUAL_CAPTION_STATUS = {\n IDLE: 'idle',\n SENDING: 'sending',\n};\n"],"mappings":";;;;;;;AAAO,IAAMA,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG;EAC5BE,mBAAmB,EAAE,qBAAqB;EAC1CC,uBAAuB,EAAE,8BAA8B;EACvDC,sBAAsB,EAAE,6BAA6B;EACrDC,kBAAkB,EAAE,kBAAkB;EACtCC,eAAe,EAAE,uBAAuB;EACxCC,gBAAgB,EAAE,wBAAwB;EAE1CC,WAAW,EAAE,mBAAmB;EAChCC,WAAW,EAAE,YAAY;EACzBC,iBAAiB,EAAE,yBAAyB;EAC5CC,kBAAkB,EAAE;AACtB,CAAC;AAEM,IAAMC,oBAAoB,GAAAX,OAAA,CAAAW,oBAAA,GAAG;EAClCC,MAAM,EAAE;IACNC,YAAY,EAAE,aAAa;IAC3BC,mBAAmB,EAAE,aAAa;IAClCC,mBAAmB,EAAE,mBAAmB;IACxCC,oBAAoB,EAAE,mBAAmB;IACzCC,aAAa,EAAE;EACjB,CAAC;EACDC,MAAM,EAAE;IACND,aAAa,EAAE,+BAA+B;IAC9CE,SAAS,EAAE;EACb;AACF,CAAC;AAEM,IAAMC,kBAAkB,GAAApB,OAAA,CAAAoB,kBAAA,GAAG;EAChCC,OAAO,EAAE,SAAS;EAClBC,QAAQ,EAAE,UAAU;EACpBC,UAAU,EAAE,YAAY;EACxBC,UAAU,EAAE,YAAY;EACxBf,iBAAiB,EAAE,mBAAmB;EACtCgB,0BAA0B,EAAE,4BAA4B;EACxDC,uBAAuB,EAAE,yBAAyB;EAClDC,8BAA8B,EAAE,gCAAgC;EAChEC,6BAA6B,EAAE,+BAA+B;EAC9DC,2BAA2B,EAAE;AAC/B,CAAC;AAEM,IAAMjB,MAAM,GAAAZ,OAAA,CAAAY,MAAA,GAAG,QAAQ;AACvB,IAAMkB,uBAAuB,GAAA9B,OAAA,CAAA8B,uBAAA,GAAG,IAAI;AAEpC,IAAMC,eAAe,GAAA/B,OAAA,CAAA+B,eAAA,GAAG;EAC7BC,IAAI,EAAE,MAAM;EACZC,MAAM,EAAE,QAAQ;EAChBC,OAAO,EAAE;AACX,CAAC;AAEM,IAAMC,sBAAsB,GAAAnC,OAAA,CAAAmC,sBAAA,GAAG;EACpCH,IAAI,EAAE,MAAM;EACZI,OAAO,EAAE,SAAS;EAClBC,OAAO,EAAE;AACX,CAAC;AAEM,IAAMC,4BAA4B,GAAAtC,OAAA,CAAAsC,4BAAA,GAAG;EAC1CN,IAAI,EAAE,MAAM;EACZK,OAAO,EAAE;AACX,CAAC"}
|
|
@@ -20,6 +20,7 @@ export declare const AIBRIDGE_RELAY_TYPES: {
|
|
|
20
20
|
};
|
|
21
21
|
MANUAL: {
|
|
22
22
|
TRANSCRIPTION: string;
|
|
23
|
+
CAPTIONER: string;
|
|
23
24
|
};
|
|
24
25
|
};
|
|
25
26
|
export declare const TRANSCRIPTION_TYPE: {
|
|
@@ -31,9 +32,11 @@ export declare const TRANSCRIPTION_TYPE: {
|
|
|
31
32
|
TRANSCRIPT_INTERIM_RESULTS: string;
|
|
32
33
|
TRANSCRIPT_FINAL_RESULT: string;
|
|
33
34
|
MANUAL_CAPTION_INTERIM_RESULTS: string;
|
|
35
|
+
MANUAL_CAPTION_INTERIM_RESULT: string;
|
|
34
36
|
MANUAL_CAPTION_FINAL_RESULT: string;
|
|
35
37
|
};
|
|
36
38
|
export declare const VOICEA = "voicea";
|
|
39
|
+
export declare const DEFAULT_SPOKEN_LANGUAGE = "en";
|
|
37
40
|
export declare const ANNOUNCE_STATUS: {
|
|
38
41
|
IDLE: string;
|
|
39
42
|
JOINED: string;
|
|
@@ -44,3 +47,7 @@ export declare const TURN_ON_CAPTION_STATUS: {
|
|
|
44
47
|
ENABLED: string;
|
|
45
48
|
SENDING: string;
|
|
46
49
|
};
|
|
50
|
+
export declare const TOGGLE_MANUAL_CAPTION_STATUS: {
|
|
51
|
+
IDLE: string;
|
|
52
|
+
SENDING: string;
|
|
53
|
+
};
|
package/dist/types/voicea.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export declare class VoiceaChannel extends WebexPlugin implements IVoiceaChannel
|
|
|
13
13
|
private vmcDeviceId?;
|
|
14
14
|
private announceStatus;
|
|
15
15
|
private captionStatus;
|
|
16
|
+
private toggleManualCaptionStatus;
|
|
17
|
+
private currentSpokenLanguage?;
|
|
16
18
|
/**
|
|
17
19
|
* @param {Object} e
|
|
18
20
|
* @returns {undefined}
|
|
@@ -74,6 +76,15 @@ export declare class VoiceaChannel extends WebexPlugin implements IVoiceaChannel
|
|
|
74
76
|
* @returns {void}
|
|
75
77
|
*/
|
|
76
78
|
requestLanguage: (languageCode: string) => void;
|
|
79
|
+
/**
|
|
80
|
+
* Send manual closed captions to voicea service
|
|
81
|
+
* @param {string} text
|
|
82
|
+
* @param {number} timeStamp
|
|
83
|
+
* @param {number[]} csis
|
|
84
|
+
* @param {boolean} isFinal
|
|
85
|
+
* @returns {void}
|
|
86
|
+
*/
|
|
87
|
+
sendManualClosedCaption: (text: string, timeStamp: number, csis: number[], isFinal: boolean) => void;
|
|
77
88
|
/**
|
|
78
89
|
* request turn on Captions
|
|
79
90
|
* @param {string} [languageCode] - Optional Parameter for spoken language code. Defaults to English
|
|
@@ -103,17 +114,23 @@ export declare class VoiceaChannel extends WebexPlugin implements IVoiceaChannel
|
|
|
103
114
|
turnOnCaptions: (spokenLanguage?: any) => undefined | Promise<void>;
|
|
104
115
|
/**
|
|
105
116
|
* Toggle transcribing for highlights
|
|
106
|
-
* @param {
|
|
117
|
+
* @param {boolean} activate true means to turn on transcribing and false means to turn off
|
|
107
118
|
* @param {string} spokenLanguage language code for spoken language
|
|
108
119
|
* @returns {Promise}
|
|
109
120
|
*/
|
|
110
121
|
toggleTranscribing: (activate: boolean, spokenLanguage?: string) => undefined | Promise<void>;
|
|
111
122
|
/**
|
|
112
123
|
* Toggle turn on manual caption
|
|
113
|
-
* @param {
|
|
124
|
+
* @param {boolean} enable true means to turn on manual caption, false means to turn off
|
|
114
125
|
* @returns {Promise}
|
|
115
126
|
*/
|
|
116
127
|
toggleManualCaption: (enable: boolean) => undefined | Promise<void>;
|
|
128
|
+
/**
|
|
129
|
+
* In meeting Spoken Language changed event
|
|
130
|
+
* @param {string} languageCode
|
|
131
|
+
* @returns {void}
|
|
132
|
+
*/
|
|
133
|
+
onSpokenLanguageUpdate: (languageCode: string) => void;
|
|
117
134
|
/**
|
|
118
135
|
* get caption status
|
|
119
136
|
* @returns {string}
|
|
@@ -10,7 +10,7 @@ interface AnnouncementPayload {
|
|
|
10
10
|
spoken_languages: string[];
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
|
-
type TRANSCRIPTION_TYPES = 'unknown' | 'eva_wake' | 'eva_thanks' | 'eva_cancel' | 'highlight_created' | 'transcript_interim_results' | 'transcript_final_result';
|
|
13
|
+
type TRANSCRIPTION_TYPES = 'unknown' | 'eva_wake' | 'eva_thanks' | 'eva_cancel' | 'highlight_created' | 'transcript_interim_results' | 'transcript_final_result' | 'manual_caption_interim_results' | 'manual_caption_interim_result' | 'manual_caption_final_result';
|
|
14
14
|
/**
|
|
15
15
|
* Class for an Transcription Object
|
|
16
16
|
*/
|
|
@@ -44,6 +44,8 @@ interface Highlight {
|
|
|
44
44
|
interface TranscriptionResponse {
|
|
45
45
|
type: TRANSCRIPTION_TYPES;
|
|
46
46
|
id: string;
|
|
47
|
+
sender: string;
|
|
48
|
+
data_source: string;
|
|
47
49
|
transcript_id: string;
|
|
48
50
|
translations?: {
|
|
49
51
|
[x: string]: string;
|
|
@@ -66,10 +68,13 @@ interface CaptionLanguageResponse {
|
|
|
66
68
|
}
|
|
67
69
|
interface IVoiceaChannel {
|
|
68
70
|
setSpokenLanguage: (languageCode: string) => Promise<void>;
|
|
71
|
+
onSpokenLanguageUpdate: (languageCode: string) => void;
|
|
69
72
|
requestLanguage: (languageCode: string) => void;
|
|
70
73
|
turnOnCaptions: () => undefined | Promise<void>;
|
|
71
74
|
toggleTranscribing: (activate: boolean, spokenLanguage: string) => undefined | Promise<void>;
|
|
72
75
|
deregisterEvents: () => void;
|
|
76
|
+
toggleManualCaption: (enable: boolean) => undefined | Promise<void>;
|
|
77
|
+
sendManualClosedCaption: (text: string, timeStamp: number, csis: number[], isFinal: boolean) => void;
|
|
73
78
|
}
|
|
74
79
|
type MeetingTranscripts = {
|
|
75
80
|
start_mills?: number;
|
package/dist/voicea.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
+
var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
|
|
5
|
+
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
|
|
6
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
|
|
7
|
+
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
|
|
8
|
+
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
|
|
4
9
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
5
10
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
11
|
_Object$defineProperty(exports, "__esModule", {
|
|
@@ -20,6 +25,8 @@ var _uuid = _interopRequireDefault(require("uuid"));
|
|
|
20
25
|
var _webexCore = require("@webex/webex-core");
|
|
21
26
|
var _constants = require("./constants");
|
|
22
27
|
var _utils = require("./utils");
|
|
28
|
+
function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
29
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
23
30
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
24
31
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // eslint-disable-next-line no-unused-vars
|
|
25
32
|
/**
|
|
@@ -48,11 +55,14 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
48
55
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "vmcDeviceId", void 0);
|
|
49
56
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "announceStatus", void 0);
|
|
50
57
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "captionStatus", void 0);
|
|
58
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "toggleManualCaptionStatus", void 0);
|
|
59
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "currentSpokenLanguage", void 0);
|
|
51
60
|
/**
|
|
52
61
|
* @param {Object} e
|
|
53
62
|
* @returns {undefined}
|
|
54
63
|
*/
|
|
55
64
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "eventProcessor", function (e) {
|
|
65
|
+
var _e$headers;
|
|
56
66
|
_this.seqNum = e.sequenceNumber + 1;
|
|
57
67
|
switch (e.data.relayType) {
|
|
58
68
|
case _constants.AIBRIDGE_RELAY_TYPES.VOICEA.ANNOUNCEMENT:
|
|
@@ -67,7 +77,11 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
67
77
|
_this.processTranscription(e.data.voiceaPayload);
|
|
68
78
|
break;
|
|
69
79
|
case _constants.AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:
|
|
70
|
-
|
|
80
|
+
case _constants.AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER:
|
|
81
|
+
_this.processManualTranscription(_objectSpread(_objectSpread({}, e.data.transcriptPayload), {}, {
|
|
82
|
+
sender: (_e$headers = e.headers) === null || _e$headers === void 0 ? void 0 : _e$headers.from,
|
|
83
|
+
data_source: e.data.relayType
|
|
84
|
+
}));
|
|
71
85
|
break;
|
|
72
86
|
default:
|
|
73
87
|
break;
|
|
@@ -79,18 +93,15 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
79
93
|
* @returns {void}
|
|
80
94
|
*/
|
|
81
95
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "processManualTranscription", function (transcriptPayload) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
break;
|
|
92
|
-
default:
|
|
93
|
-
break;
|
|
96
|
+
if (transcriptPayload.type === _constants.TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT || transcriptPayload.type === _constants.TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT) {
|
|
97
|
+
// @ts-ignore
|
|
98
|
+
_this.trigger(_constants.EVENT_TRIGGERS.NEW_MANUAL_CAPTION, {
|
|
99
|
+
isFinal: transcriptPayload.type === _constants.TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT,
|
|
100
|
+
transcriptId: transcriptPayload.id,
|
|
101
|
+
transcripts: transcriptPayload.transcripts,
|
|
102
|
+
sender: transcriptPayload.sender,
|
|
103
|
+
source: transcriptPayload.data_source
|
|
104
|
+
});
|
|
94
105
|
}
|
|
95
106
|
});
|
|
96
107
|
/**
|
|
@@ -177,7 +188,8 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
177
188
|
var voiceaLanguageOptions = {
|
|
178
189
|
captionLanguages: (_voiceaPayload$transl = voiceaPayload === null || voiceaPayload === void 0 ? void 0 : (_voiceaPayload$transl2 = voiceaPayload.translation) === null || _voiceaPayload$transl2 === void 0 ? void 0 : _voiceaPayload$transl2.allowed_languages) !== null && _voiceaPayload$transl !== void 0 ? _voiceaPayload$transl : [],
|
|
179
190
|
maxLanguages: (_voiceaPayload$transl3 = voiceaPayload === null || voiceaPayload === void 0 ? void 0 : (_voiceaPayload$transl4 = voiceaPayload.translation) === null || _voiceaPayload$transl4 === void 0 ? void 0 : _voiceaPayload$transl4.max_languages) !== null && _voiceaPayload$transl3 !== void 0 ? _voiceaPayload$transl3 : 0,
|
|
180
|
-
spokenLanguages: (_voiceaPayload$ASR$sp = voiceaPayload === null || voiceaPayload === void 0 ? void 0 : (_voiceaPayload$ASR = voiceaPayload.ASR) === null || _voiceaPayload$ASR === void 0 ? void 0 : _voiceaPayload$ASR.spoken_languages) !== null && _voiceaPayload$ASR$sp !== void 0 ? _voiceaPayload$ASR$sp : []
|
|
191
|
+
spokenLanguages: (_voiceaPayload$ASR$sp = voiceaPayload === null || voiceaPayload === void 0 ? void 0 : (_voiceaPayload$ASR = voiceaPayload.ASR) === null || _voiceaPayload$ASR === void 0 ? void 0 : _voiceaPayload$ASR.spoken_languages) !== null && _voiceaPayload$ASR$sp !== void 0 ? _voiceaPayload$ASR$sp : [],
|
|
192
|
+
currentSpokenLanguage: _this.currentSpokenLanguage
|
|
181
193
|
};
|
|
182
194
|
|
|
183
195
|
// @ts-ignore
|
|
@@ -266,6 +278,45 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
266
278
|
});
|
|
267
279
|
_this.seqNum += 1;
|
|
268
280
|
});
|
|
281
|
+
/**
|
|
282
|
+
* Send manual closed captions to voicea service
|
|
283
|
+
* @param {string} text
|
|
284
|
+
* @param {number} timeStamp
|
|
285
|
+
* @param {number[]} csis
|
|
286
|
+
* @param {boolean} isFinal
|
|
287
|
+
* @returns {void}
|
|
288
|
+
*/
|
|
289
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "sendManualClosedCaption", function (text, timeStamp, csis, isFinal) {
|
|
290
|
+
// @ts-ignore
|
|
291
|
+
if (!_this.webex.internal.llm.isConnected()) return;
|
|
292
|
+
|
|
293
|
+
// @ts-ignore
|
|
294
|
+
_this.webex.internal.llm.socket.send({
|
|
295
|
+
id: "".concat(_this.seqNum),
|
|
296
|
+
type: 'publishRequest',
|
|
297
|
+
recipients: {
|
|
298
|
+
// @ts-ignore
|
|
299
|
+
route: _this.webex.internal.llm.getBinding()
|
|
300
|
+
},
|
|
301
|
+
headers: {},
|
|
302
|
+
data: {
|
|
303
|
+
eventType: 'relay.event',
|
|
304
|
+
relayType: _constants.AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER,
|
|
305
|
+
transcriptPayload: {
|
|
306
|
+
type: isFinal ? _constants.TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT : _constants.TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT,
|
|
307
|
+
id: _uuid.default.v4(),
|
|
308
|
+
transcripts: [{
|
|
309
|
+
text: text,
|
|
310
|
+
start_millis: timeStamp,
|
|
311
|
+
end_millis: timeStamp,
|
|
312
|
+
csis: csis
|
|
313
|
+
}]
|
|
314
|
+
}
|
|
315
|
+
},
|
|
316
|
+
trackingId: "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString())
|
|
317
|
+
});
|
|
318
|
+
_this.seqNum += 1;
|
|
319
|
+
});
|
|
269
320
|
/**
|
|
270
321
|
* request turn on Captions
|
|
271
322
|
* @param {string} [languageCode] - Optional Parameter for spoken language code. Defaults to English
|
|
@@ -336,7 +387,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
336
387
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
337
388
|
while (1) switch (_context.prev = _context.next) {
|
|
338
389
|
case 0:
|
|
339
|
-
if (!_this.
|
|
390
|
+
if (!(_this.captionStatus === _constants.TURN_ON_CAPTION_STATUS.SENDING)) {
|
|
340
391
|
_context.next = 2;
|
|
341
392
|
break;
|
|
342
393
|
}
|
|
@@ -361,7 +412,7 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
361
412
|
}());
|
|
362
413
|
/**
|
|
363
414
|
* Toggle transcribing for highlights
|
|
364
|
-
* @param {
|
|
415
|
+
* @param {boolean} activate true means to turn on transcribing and false means to turn off
|
|
365
416
|
* @param {string} spokenLanguage language code for spoken language
|
|
366
417
|
* @returns {Promise}
|
|
367
418
|
*/
|
|
@@ -386,10 +437,13 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
386
437
|
});
|
|
387
438
|
/**
|
|
388
439
|
* Toggle turn on manual caption
|
|
389
|
-
* @param {
|
|
440
|
+
* @param {boolean} enable true means to turn on manual caption, false means to turn off
|
|
390
441
|
* @returns {Promise}
|
|
391
442
|
*/
|
|
392
443
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "toggleManualCaption", function (enable) {
|
|
444
|
+
if (_this.toggleManualCaptionStatus === _constants.TOGGLE_MANUAL_CAPTION_STATUS.SENDING) return undefined;
|
|
445
|
+
_this.toggleManualCaptionStatus = _constants.TOGGLE_MANUAL_CAPTION_STATUS.SENDING;
|
|
446
|
+
|
|
393
447
|
// @ts-ignore
|
|
394
448
|
return _this.request({
|
|
395
449
|
method: 'PUT',
|
|
@@ -401,8 +455,24 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
401
455
|
}
|
|
402
456
|
}
|
|
403
457
|
}).then(function () {
|
|
458
|
+
_this.toggleManualCaptionStatus = _constants.TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
404
459
|
return undefined;
|
|
460
|
+
}).catch(function () {
|
|
461
|
+
_this.toggleManualCaptionStatus = _constants.TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
462
|
+
throw new Error('toggle manual captions fail');
|
|
463
|
+
});
|
|
464
|
+
});
|
|
465
|
+
/**
|
|
466
|
+
* In meeting Spoken Language changed event
|
|
467
|
+
* @param {string} languageCode
|
|
468
|
+
* @returns {void}
|
|
469
|
+
*/
|
|
470
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onSpokenLanguageUpdate", function (languageCode) {
|
|
471
|
+
// @ts-ignore
|
|
472
|
+
_this.trigger(_constants.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {
|
|
473
|
+
languageCode: languageCode
|
|
405
474
|
});
|
|
475
|
+
_this.currentSpokenLanguage = languageCode;
|
|
406
476
|
});
|
|
407
477
|
/**
|
|
408
478
|
* get caption status
|
|
@@ -423,6 +493,8 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
423
493
|
_this.vmcDeviceId = undefined;
|
|
424
494
|
_this.announceStatus = _constants.ANNOUNCE_STATUS.IDLE;
|
|
425
495
|
_this.captionStatus = _constants.TURN_ON_CAPTION_STATUS.IDLE;
|
|
496
|
+
_this.toggleManualCaptionStatus = _constants.TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
497
|
+
_this.currentSpokenLanguage = _constants.DEFAULT_SPOKEN_LANGUAGE;
|
|
426
498
|
return _this;
|
|
427
499
|
}
|
|
428
500
|
(0, _createClass2.default)(VoiceaChannel, [{
|
|
@@ -454,6 +526,8 @@ var VoiceaChannel = exports.VoiceaChannel = /*#__PURE__*/function (_WebexPlugin)
|
|
|
454
526
|
this.hasSubscribedToEvents = false;
|
|
455
527
|
this.announceStatus = _constants.ANNOUNCE_STATUS.IDLE;
|
|
456
528
|
this.captionStatus = _constants.TURN_ON_CAPTION_STATUS.IDLE;
|
|
529
|
+
this.toggleManualCaptionStatus = _constants.TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
530
|
+
this.currentSpokenLanguage = undefined;
|
|
457
531
|
}
|
|
458
532
|
}]);
|
|
459
533
|
return VoiceaChannel;
|
package/dist/voicea.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_uuid","_interopRequireDefault","require","_webexCore","_constants","_utils","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","VoiceaChannel","exports","_WebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","VOICEA","seqNum","sequenceNumber","data","relayType","AIBRIDGE_RELAY_TYPES","ANNOUNCEMENT","vmcDeviceId","headers","from","announceStatus","ANNOUNCE_STATUS","JOINED","processAnnouncementMessage","voiceaPayload","TRANSLATION_RESPONSE","processCaptionLanguageResponse","TRANSCRIPTION","processTranscription","MANUAL","processManualTranscription","transcriptPayload","type","TRANSCRIPTION_TYPE","MANUAL_CAPTION_FINAL_RESULT","MANUAL_CAPTION_INTERIM_RESULTS","trigger","EVENT_TRIGGERS","NEW_MANUAL_CAPTION","isFinal","transcriptId","id","transcripts","TRANSCRIPT_INTERIM_RESULTS","NEW_CAPTION","transcript_id","TRANSCRIPT_FINAL_RESULT","map","transcript","timestamp","millisToMinutesAndSeconds","end_millis","HIGHLIGHT_CREATED","csis","highlight","highlightId","highlight_id","text","highlightLabel","highlight_label","highlightSource","highlight_source","EVA_THANKS","EVA_COMMAND","isListening","command_response","EVA_WAKE","EVA_CANCEL","statusCode","CAPTION_LANGUAGE_UPDATE","errorCode","errorMessage","message","_voiceaPayload$transl","_voiceaPayload$transl2","_voiceaPayload$transl3","_voiceaPayload$transl4","_voiceaPayload$ASR$sp","_voiceaPayload$ASR","voiceaLanguageOptions","captionLanguages","translation","allowed_languages","maxLanguages","max_languages","spokenLanguages","ASR","spoken_languages","VOICEA_ANNOUNCEMENT","JOINING","listenToEvents","webex","internal","llm","socket","send","recipients","route","getBinding","clientPayload","version","eventType","CLIENT_ANNOUNCEMENT","trackingId","config","trackingIdPrefix","uuid","v4","toString","languageCode","request","method","url","getLocusUrl","body","transcribe","spokenLanguage","then","SPOKEN_LANGUAGE_UPDATE","isConnected","to","translationLanguage","TRANSLATION_REQUEST","captionStatus","TURN_ON_CAPTION_STATUS","SENDING","caption","CAPTIONS_TURNED_ON","areCaptionsEnabled","ENABLED","announce","catch","IDLE","Error","includes","isAnnounceProcessing","sendAnnouncement","_ref","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","next","isCaptionProcessing","abrupt","undefined","requestTurnOnCaptions","stop","_x","activate","transcribing","turnOnCaptions","enable","manualCaption","_createClass2","key","value","hasSubscribedToEvents","on","eventProcessor","deregisterEvents","off","WebexPlugin","_default"],"sources":["voicea.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {WebexPlugin, config} from '@webex/webex-core';\n\nimport {\n EVENT_TRIGGERS,\n AIBRIDGE_RELAY_TYPES,\n TRANSCRIPTION_TYPE,\n VOICEA,\n ANNOUNCE_STATUS,\n TURN_ON_CAPTION_STATUS,\n} from './constants';\n// eslint-disable-next-line no-unused-vars\nimport {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n IVoiceaChannel,\n} from './voicea.types';\nimport {millisToMinutesAndSeconds} from './utils';\n\n/**\n * @description VoiceaChannel to hold single instance of LLM\n * @export\n * @class VoiceaChannel\n */\nexport class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {\n namespace = VOICEA;\n\n private seqNum: number;\n\n private areCaptionsEnabled: boolean;\n\n private hasSubscribedToEvents = false;\n\n private vmcDeviceId?: string;\n\n private announceStatus: string;\n\n private captionStatus: string;\n\n /**\n * @param {Object} e\n * @returns {undefined}\n */\n\n private eventProcessor = (e) => {\n this.seqNum = e.sequenceNumber + 1;\n switch (e.data.relayType) {\n case AIBRIDGE_RELAY_TYPES.VOICEA.ANNOUNCEMENT:\n this.vmcDeviceId = e.headers.from;\n this.announceStatus = ANNOUNCE_STATUS.JOINED;\n this.processAnnouncementMessage(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_RESPONSE:\n this.processCaptionLanguageResponse(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSCRIPTION:\n this.processTranscription(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:\n this.processManualTranscription(e.data.transcriptPayload);\n break;\n default:\n break;\n }\n };\n\n /**\n * Listen to websocket messages\n * @returns {undefined}\n */\n private listenToEvents() {\n if (!this.hasSubscribedToEvents) {\n // @ts-ignore\n this.webex.internal.llm.on('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = true;\n }\n }\n\n /**\n * Listen to websocket messages\n * @returns {void}\n */\n public deregisterEvents() {\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n // @ts-ignore\n this.webex.internal.llm.off('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = false;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n }\n\n /**\n * Initializes Voicea plugin\n * @param {any} args\n */\n constructor(...args) {\n super(...args);\n this.seqNum = 1;\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n }\n\n /**\n * Process manual Transcript and send alert\n * @param {TranscriptionResponse} transcriptPayload\n * @returns {void}\n */\n private processManualTranscription = (transcriptPayload: TranscriptionResponse): void => {\n switch (transcriptPayload.type) {\n case TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT:\n case TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULTS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, {\n isFinal: transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT,\n transcriptId: transcriptPayload.id,\n transcripts: transcriptPayload.transcripts,\n });\n break;\n\n default:\n break;\n }\n };\n\n /**\n * Process Transcript and send alert\n * @param {TranscriptionResponse} voiceaPayload\n * @returns {void}\n */\n private processTranscription = (voiceaPayload: TranscriptionResponse): void => {\n switch (voiceaPayload.type) {\n case TRANSCRIPTION_TYPE.TRANSCRIPT_INTERIM_RESULTS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: false,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts,\n });\n break;\n\n case TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: true,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts.map((transcript) => {\n transcript.timestamp = millisToMinutesAndSeconds(transcript.end_millis);\n\n return transcript;\n }),\n });\n break;\n\n case TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.HIGHLIGHT_CREATED, {\n csis: voiceaPayload.highlight.csis,\n highlightId: voiceaPayload.highlight.highlight_id,\n text: voiceaPayload.highlight.transcript,\n highlightLabel: voiceaPayload.highlight.highlight_label,\n highlightSource: voiceaPayload.highlight.highlight_source,\n timestamp: millisToMinutesAndSeconds(voiceaPayload.highlight.end_millis),\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_THANKS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.EVA_COMMAND, {\n isListening: false,\n text: voiceaPayload.command_response,\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_WAKE:\n case TRANSCRIPTION_TYPE.EVA_CANCEL:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.EVA_COMMAND, {\n isListening: voiceaPayload.type === TRANSCRIPTION_TYPE.EVA_WAKE,\n });\n break;\n\n default:\n break;\n }\n };\n\n /**\n * Processes Caption Language Response\n * @param {CaptionLanguageResponse} voiceaPayload\n * @returns {void}\n */\n private processCaptionLanguageResponse = (voiceaPayload: CaptionLanguageResponse): void => {\n if (voiceaPayload.statusCode === 200) {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {statusCode: 200});\n } else {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {\n statusCode: voiceaPayload.errorCode,\n errorMessage: voiceaPayload.message,\n });\n }\n };\n\n /**\n * processes voicea announcement response and triggers event\n * @param {Object} voiceaPayload\n * @returns {void}\n */\n private processAnnouncementMessage = (voiceaPayload: AnnouncementPayload): void => {\n const voiceaLanguageOptions = {\n captionLanguages: voiceaPayload?.translation?.allowed_languages ?? [],\n maxLanguages: voiceaPayload?.translation?.max_languages ?? 0,\n spokenLanguages: voiceaPayload?.ASR?.spoken_languages ?? [],\n };\n\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT, voiceaLanguageOptions);\n };\n\n /**\n * Sends Announcement to add voicea to the meeting\n * @returns {void}\n */\n private sendAnnouncement = (): void => {\n this.announceStatus = ANNOUNCE_STATUS.JOINING;\n this.listenToEvents();\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {},\n data: {\n clientPayload: {\n version: 'v2',\n },\n eventType: 'relay.event',\n relayType: AIBRIDGE_RELAY_TYPES.VOICEA.CLIENT_ANNOUNCEMENT,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * Set Spoken Language for the meeting\n * @param {string} languageCode\n * @returns {Promise}\n */\n public setSpokenLanguage = (languageCode: string): Promise<void> =>\n // @ts-ignore\n this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {\n spokenLanguage: languageCode,\n },\n },\n }).then(() => {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {languageCode});\n });\n\n /**\n * Request Language translation\n * @param {string} languageCode\n * @returns {void}\n */\n public requestLanguage = (languageCode: string): void => {\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) return;\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {\n to: this.vmcDeviceId,\n },\n data: {\n clientPayload: {\n translationLanguage: languageCode,\n id: uuid.v4(),\n },\n eventType: 'relay.event',\n relayType: AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_REQUEST,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * request turn on Captions\n * @param {string} [languageCode] - Optional Parameter for spoken language code. Defaults to English\n * @returns {Promise}\n */\n private requestTurnOnCaptions = (languageCode?): undefined | Promise<void> => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.SENDING;\n\n // only set the spoken language if it is provided\n const body = {\n transcribe: {caption: true},\n languageCode,\n };\n\n // @ts-ignore\n // eslint-disable-next-line newline-before-return\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body,\n })\n .then(() => {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTIONS_TURNED_ON);\n\n this.areCaptionsEnabled = true;\n this.captionStatus = TURN_ON_CAPTION_STATUS.ENABLED;\n this.announce();\n })\n .catch(() => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n throw new Error('turn on captions fail');\n });\n };\n\n /**\n * is announce processing\n * @returns {boolean}\n */\n private isAnnounceProcessing = () =>\n [ANNOUNCE_STATUS.JOINING, ANNOUNCE_STATUS.JOINED].includes(this.announceStatus);\n\n /**\n * announce to voicea data chanel\n * @returns {void}\n */\n public announce = () => {\n if (this.isAnnounceProcessing()) return;\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) {\n throw new Error('voicea can not announce before llm connected');\n }\n this.sendAnnouncement();\n };\n\n /**\n * is turn on caption processing\n * @returns {boolean}\n */\n private isCaptionProcessing = () =>\n [TURN_ON_CAPTION_STATUS.SENDING, TURN_ON_CAPTION_STATUS.ENABLED].includes(this.captionStatus);\n\n /**\n * Turn on Captions\n * @param {string} [spokenLanguage] - Optional Spoken language code\n * @returns {Promise}\n */\n public turnOnCaptions = async (spokenLanguage?): undefined | Promise<void> => {\n if (this.isCaptionProcessing()) return undefined;\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) {\n throw new Error('can not turn on captions before llm connected');\n }\n\n return this.requestTurnOnCaptions(spokenLanguage);\n };\n\n /**\n * Toggle transcribing for highlights\n * @param {bool} activate if true transcribing is turned on\n * @param {string} spokenLanguage language code for spoken language\n * @returns {Promise}\n */\n public toggleTranscribing = (\n activate: boolean,\n spokenLanguage?: string\n ): undefined | Promise<void> => {\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {\n transcribing: activate,\n },\n spokenLanguage,\n },\n }).then((): undefined | Promise<void> => {\n if (activate && !this.areCaptionsEnabled) {\n return this.turnOnCaptions(spokenLanguage);\n }\n\n return undefined;\n });\n };\n\n /**\n * Toggle turn on manual caption\n * @param {bool} enable if true manual caption is turned on\n * @returns {Promise}\n */\n public toggleManualCaption = (enable: boolean): undefined | Promise<void> => {\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n manualCaption: {\n enable,\n },\n },\n }).then((): undefined | Promise<void> => {\n return undefined;\n });\n };\n\n /**\n * get caption status\n * @returns {string}\n */\n public getCaptionStatus = () => this.captionStatus;\n\n /**\n * get announce status\n * @returns {string}\n */\n public getAnnounceStatus = () => this.announceStatus;\n}\n\nexport default VoiceaChannel;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_uuid","_interopRequireDefault","require","_webexCore","_constants","_utils","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","VoiceaChannel","exports","_WebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","args","Array","_key","concat","_assertThisInitialized2","VOICEA","_e$headers","seqNum","sequenceNumber","data","relayType","AIBRIDGE_RELAY_TYPES","ANNOUNCEMENT","vmcDeviceId","headers","from","announceStatus","ANNOUNCE_STATUS","JOINED","processAnnouncementMessage","voiceaPayload","TRANSLATION_RESPONSE","processCaptionLanguageResponse","TRANSCRIPTION","processTranscription","MANUAL","CAPTIONER","processManualTranscription","transcriptPayload","sender","data_source","type","TRANSCRIPTION_TYPE","MANUAL_CAPTION_FINAL_RESULT","MANUAL_CAPTION_INTERIM_RESULT","trigger","EVENT_TRIGGERS","NEW_MANUAL_CAPTION","isFinal","transcriptId","id","transcripts","source","TRANSCRIPT_INTERIM_RESULTS","NEW_CAPTION","transcript_id","TRANSCRIPT_FINAL_RESULT","map","transcript","timestamp","millisToMinutesAndSeconds","end_millis","HIGHLIGHT_CREATED","csis","highlight","highlightId","highlight_id","text","highlightLabel","highlight_label","highlightSource","highlight_source","EVA_THANKS","EVA_COMMAND","isListening","command_response","EVA_WAKE","EVA_CANCEL","statusCode","CAPTION_LANGUAGE_UPDATE","errorCode","errorMessage","message","_voiceaPayload$transl","_voiceaPayload$transl2","_voiceaPayload$transl3","_voiceaPayload$transl4","_voiceaPayload$ASR$sp","_voiceaPayload$ASR","voiceaLanguageOptions","captionLanguages","translation","allowed_languages","maxLanguages","max_languages","spokenLanguages","ASR","spoken_languages","currentSpokenLanguage","VOICEA_ANNOUNCEMENT","JOINING","listenToEvents","webex","internal","llm","socket","send","recipients","route","getBinding","clientPayload","version","eventType","CLIENT_ANNOUNCEMENT","trackingId","config","trackingIdPrefix","uuid","v4","toString","languageCode","request","method","url","getLocusUrl","body","transcribe","spokenLanguage","then","SPOKEN_LANGUAGE_UPDATE","isConnected","to","translationLanguage","TRANSLATION_REQUEST","timeStamp","start_millis","captionStatus","TURN_ON_CAPTION_STATUS","SENDING","caption","CAPTIONS_TURNED_ON","areCaptionsEnabled","ENABLED","announce","catch","IDLE","Error","includes","isAnnounceProcessing","sendAnnouncement","_ref","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","next","abrupt","undefined","requestTurnOnCaptions","stop","_x","activate","transcribing","turnOnCaptions","enable","toggleManualCaptionStatus","TOGGLE_MANUAL_CAPTION_STATUS","manualCaption","DEFAULT_SPOKEN_LANGUAGE","_createClass2","key","value","hasSubscribedToEvents","on","eventProcessor","deregisterEvents","off","WebexPlugin","_default"],"sources":["voicea.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {WebexPlugin, config} from '@webex/webex-core';\n\nimport {\n EVENT_TRIGGERS,\n AIBRIDGE_RELAY_TYPES,\n TRANSCRIPTION_TYPE,\n VOICEA,\n ANNOUNCE_STATUS,\n TURN_ON_CAPTION_STATUS,\n TOGGLE_MANUAL_CAPTION_STATUS,\n DEFAULT_SPOKEN_LANGUAGE,\n} from './constants';\n// eslint-disable-next-line no-unused-vars\nimport {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n IVoiceaChannel,\n} from './voicea.types';\nimport {millisToMinutesAndSeconds} from './utils';\n\n/**\n * @description VoiceaChannel to hold single instance of LLM\n * @export\n * @class VoiceaChannel\n */\nexport class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {\n namespace = VOICEA;\n\n private seqNum: number;\n\n private areCaptionsEnabled: boolean;\n\n private hasSubscribedToEvents = false;\n\n private vmcDeviceId?: string;\n\n private announceStatus: string;\n\n private captionStatus: string;\n\n private toggleManualCaptionStatus: string;\n\n private currentSpokenLanguage?: string;\n\n /**\n * @param {Object} e\n * @returns {undefined}\n */\n\n private eventProcessor = (e) => {\n this.seqNum = e.sequenceNumber + 1;\n switch (e.data.relayType) {\n case AIBRIDGE_RELAY_TYPES.VOICEA.ANNOUNCEMENT:\n this.vmcDeviceId = e.headers.from;\n this.announceStatus = ANNOUNCE_STATUS.JOINED;\n this.processAnnouncementMessage(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_RESPONSE:\n this.processCaptionLanguageResponse(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSCRIPTION:\n this.processTranscription(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:\n case AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER:\n this.processManualTranscription({\n ...e.data.transcriptPayload,\n sender: e.headers?.from,\n data_source: e.data.relayType,\n });\n break;\n default:\n break;\n }\n };\n\n /**\n * Listen to websocket messages\n * @returns {undefined}\n */\n private listenToEvents() {\n if (!this.hasSubscribedToEvents) {\n // @ts-ignore\n this.webex.internal.llm.on('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = true;\n }\n }\n\n /**\n * Listen to websocket messages\n * @returns {void}\n */\n public deregisterEvents() {\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n // @ts-ignore\n this.webex.internal.llm.off('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = false;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n this.currentSpokenLanguage = undefined;\n }\n\n /**\n * Initializes Voicea plugin\n * @param {any} args\n */\n constructor(...args) {\n super(...args);\n this.seqNum = 1;\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n this.currentSpokenLanguage = DEFAULT_SPOKEN_LANGUAGE;\n }\n\n /**\n * Process manual Transcript and send alert\n * @param {TranscriptionResponse} transcriptPayload\n * @returns {void}\n */\n private processManualTranscription = (transcriptPayload: TranscriptionResponse): void => {\n if (\n transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT ||\n transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT\n ) {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, {\n isFinal: transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT,\n transcriptId: transcriptPayload.id,\n transcripts: transcriptPayload.transcripts,\n sender: transcriptPayload.sender,\n source: transcriptPayload.data_source,\n });\n }\n };\n\n /**\n * Process Transcript and send alert\n * @param {TranscriptionResponse} voiceaPayload\n * @returns {void}\n */\n private processTranscription = (voiceaPayload: TranscriptionResponse): void => {\n switch (voiceaPayload.type) {\n case TRANSCRIPTION_TYPE.TRANSCRIPT_INTERIM_RESULTS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: false,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts,\n });\n break;\n\n case TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: true,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts.map((transcript) => {\n transcript.timestamp = millisToMinutesAndSeconds(transcript.end_millis);\n\n return transcript;\n }),\n });\n break;\n\n case TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.HIGHLIGHT_CREATED, {\n csis: voiceaPayload.highlight.csis,\n highlightId: voiceaPayload.highlight.highlight_id,\n text: voiceaPayload.highlight.transcript,\n highlightLabel: voiceaPayload.highlight.highlight_label,\n highlightSource: voiceaPayload.highlight.highlight_source,\n timestamp: millisToMinutesAndSeconds(voiceaPayload.highlight.end_millis),\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_THANKS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.EVA_COMMAND, {\n isListening: false,\n text: voiceaPayload.command_response,\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_WAKE:\n case TRANSCRIPTION_TYPE.EVA_CANCEL:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.EVA_COMMAND, {\n isListening: voiceaPayload.type === TRANSCRIPTION_TYPE.EVA_WAKE,\n });\n break;\n\n default:\n break;\n }\n };\n\n /**\n * Processes Caption Language Response\n * @param {CaptionLanguageResponse} voiceaPayload\n * @returns {void}\n */\n private processCaptionLanguageResponse = (voiceaPayload: CaptionLanguageResponse): void => {\n if (voiceaPayload.statusCode === 200) {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {statusCode: 200});\n } else {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {\n statusCode: voiceaPayload.errorCode,\n errorMessage: voiceaPayload.message,\n });\n }\n };\n\n /**\n * processes voicea announcement response and triggers event\n * @param {Object} voiceaPayload\n * @returns {void}\n */\n private processAnnouncementMessage = (voiceaPayload: AnnouncementPayload): void => {\n const voiceaLanguageOptions = {\n captionLanguages: voiceaPayload?.translation?.allowed_languages ?? [],\n maxLanguages: voiceaPayload?.translation?.max_languages ?? 0,\n spokenLanguages: voiceaPayload?.ASR?.spoken_languages ?? [],\n currentSpokenLanguage: this.currentSpokenLanguage,\n };\n\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT, voiceaLanguageOptions);\n };\n\n /**\n * Sends Announcement to add voicea to the meeting\n * @returns {void}\n */\n private sendAnnouncement = (): void => {\n this.announceStatus = ANNOUNCE_STATUS.JOINING;\n this.listenToEvents();\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {},\n data: {\n clientPayload: {\n version: 'v2',\n },\n eventType: 'relay.event',\n relayType: AIBRIDGE_RELAY_TYPES.VOICEA.CLIENT_ANNOUNCEMENT,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * Set Spoken Language for the meeting\n * @param {string} languageCode\n * @returns {Promise}\n */\n public setSpokenLanguage = (languageCode: string): Promise<void> =>\n // @ts-ignore\n this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {\n spokenLanguage: languageCode,\n },\n },\n }).then(() => {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {languageCode});\n });\n\n /**\n * Request Language translation\n * @param {string} languageCode\n * @returns {void}\n */\n public requestLanguage = (languageCode: string): void => {\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) return;\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {\n to: this.vmcDeviceId,\n },\n data: {\n clientPayload: {\n translationLanguage: languageCode,\n id: uuid.v4(),\n },\n eventType: 'relay.event',\n relayType: AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_REQUEST,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * Send manual closed captions to voicea service\n * @param {string} text\n * @param {number} timeStamp\n * @param {number[]} csis\n * @param {boolean} isFinal\n * @returns {void}\n */\n public sendManualClosedCaption = (\n text: string,\n timeStamp: number,\n csis: number[],\n isFinal: boolean\n ): void => {\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) return;\n\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {},\n data: {\n eventType: 'relay.event',\n relayType: AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER,\n transcriptPayload: {\n type: isFinal\n ? TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT\n : TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT,\n id: uuid.v4(),\n transcripts: [\n {\n text,\n start_millis: timeStamp,\n end_millis: timeStamp,\n csis,\n },\n ],\n },\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * request turn on Captions\n * @param {string} [languageCode] - Optional Parameter for spoken language code. Defaults to English\n * @returns {Promise}\n */\n private requestTurnOnCaptions = (languageCode?): undefined | Promise<void> => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.SENDING;\n\n // only set the spoken language if it is provided\n const body = {\n transcribe: {caption: true},\n languageCode,\n };\n\n // @ts-ignore\n // eslint-disable-next-line newline-before-return\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body,\n })\n .then(() => {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTIONS_TURNED_ON);\n\n this.areCaptionsEnabled = true;\n this.captionStatus = TURN_ON_CAPTION_STATUS.ENABLED;\n this.announce();\n })\n .catch(() => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n throw new Error('turn on captions fail');\n });\n };\n\n /**\n * is announce processing\n * @returns {boolean}\n */\n private isAnnounceProcessing = () =>\n [ANNOUNCE_STATUS.JOINING, ANNOUNCE_STATUS.JOINED].includes(this.announceStatus);\n\n /**\n * announce to voicea data chanel\n * @returns {void}\n */\n public announce = () => {\n if (this.isAnnounceProcessing()) return;\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) {\n throw new Error('voicea can not announce before llm connected');\n }\n this.sendAnnouncement();\n };\n\n /**\n * is turn on caption processing\n * @returns {boolean}\n */\n private isCaptionProcessing = () =>\n [TURN_ON_CAPTION_STATUS.SENDING, TURN_ON_CAPTION_STATUS.ENABLED].includes(this.captionStatus);\n\n /**\n * Turn on Captions\n * @param {string} [spokenLanguage] - Optional Spoken language code\n * @returns {Promise}\n */\n public turnOnCaptions = async (spokenLanguage?): undefined | Promise<void> => {\n if (this.captionStatus === TURN_ON_CAPTION_STATUS.SENDING) return undefined;\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) {\n throw new Error('can not turn on captions before llm connected');\n }\n\n return this.requestTurnOnCaptions(spokenLanguage);\n };\n\n /**\n * Toggle transcribing for highlights\n * @param {boolean} activate true means to turn on transcribing and false means to turn off\n * @param {string} spokenLanguage language code for spoken language\n * @returns {Promise}\n */\n public toggleTranscribing = (\n activate: boolean,\n spokenLanguage?: string\n ): undefined | Promise<void> => {\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {\n transcribing: activate,\n },\n spokenLanguage,\n },\n }).then((): undefined | Promise<void> => {\n if (activate && !this.areCaptionsEnabled) {\n return this.turnOnCaptions(spokenLanguage);\n }\n\n return undefined;\n });\n };\n\n /**\n * Toggle turn on manual caption\n * @param {boolean} enable true means to turn on manual caption, false means to turn off\n * @returns {Promise}\n */\n public toggleManualCaption = (enable: boolean): undefined | Promise<void> => {\n if (this.toggleManualCaptionStatus === TOGGLE_MANUAL_CAPTION_STATUS.SENDING) return undefined;\n\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.SENDING;\n\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n manualCaption: {\n enable,\n },\n },\n })\n .then((): undefined | Promise<void> => {\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n\n return undefined;\n })\n .catch(() => {\n this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;\n throw new Error('toggle manual captions fail');\n });\n };\n\n /**\n * In meeting Spoken Language changed event\n * @param {string} languageCode\n * @returns {void}\n */\n public onSpokenLanguageUpdate = (languageCode: string): void => {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {languageCode});\n this.currentSpokenLanguage = languageCode;\n };\n\n /**\n * get caption status\n * @returns {string}\n */\n public getCaptionStatus = () => this.captionStatus;\n\n /**\n * get announce status\n * @returns {string}\n */\n public getAnnounceStatus = () => this.announceStatus;\n}\n\nexport default VoiceaChannel;\n"],"mappings":"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"}
|
package/dist/voicea.types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["voicea.types.ts"],"sourcesContent":["/* eslint-disable camelcase */\n/* eslint-disable no-undef */\n\n/**\n * Type for payload\n */\ninterface AnnouncementPayload {\n translation: {\n max_languages: number;\n allowed_languages: string[];\n };\n\n ASR: {\n spoken_languages: string[];\n };\n}\n\n// eslint-disable-next-line no-undef\ntype TRANSCRIPTION_TYPES =\n | 'unknown'\n | 'eva_wake'\n | 'eva_thanks'\n | 'eva_cancel'\n | 'highlight_created'\n | 'transcript_interim_results'\n | 'transcript_final_result';\n\n/**\n * Class for an Transcription Object\n */\ninterface Transcription {\n start_millis: number;\n end_millis: number;\n text: string;\n transcript_language_code: string;\n translations: {[x: string]: string};\n csis: number[];\n last_packet_timestamp_ms: number;\n timestamp: string;\n}\n\n/**\n * Highlights\n */\ninterface Highlight {\n highlight_id: string;\n transcript: string;\n highlight_label: string;\n highlight_source: string;\n start_millis: number;\n end_millis: number;\n csis: number[];\n}\n/**\n * Type for Transcription message\n */\ninterface TranscriptionResponse {\n type: TRANSCRIPTION_TYPES;\n id: string;\n transcript_id: string;\n translations?: {[x: string]: string};\n transcripts?: Transcription[];\n transcript?: Transcription;\n highlight?: Highlight;\n csis: number[];\n data: string;\n command_response: string;\n}\n/**\n * Type for CaptionLanguageResponse\n */\ninterface CaptionLanguageResponse {\n requestId: string;\n statusCode: number;\n errorCode: number;\n message: string;\n}\n\ninterface IVoiceaChannel {\n setSpokenLanguage: (languageCode: string) => Promise<void>;\n requestLanguage: (languageCode: string) => void;\n turnOnCaptions: () => undefined | Promise<void>;\n toggleTranscribing: (activate: boolean, spokenLanguage: string) => undefined | Promise<void>;\n deregisterEvents: () => void;\n}\n\ntype MeetingTranscripts = {\n start_mills?: number;\n end_mills?: number;\n text: string;\n last_packet_timestamp_ms?: number;\n csis: Array<number>;\n transcript_language_code: string;\n translations?: {\n [key: string]: string;\n };\n timestamp?: string;\n};\n\ntype MeetingTranscriptPayload = {\n isFinal: boolean;\n transcriptId: string;\n transcripts: Array<MeetingTranscripts>;\n};\n\nexport type {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n Transcription,\n Highlight,\n IVoiceaChannel,\n MeetingTranscriptPayload,\n};\n"],"mappings":""}
|
|
1
|
+
{"version":3,"names":[],"sources":["voicea.types.ts"],"sourcesContent":["/* eslint-disable camelcase */\n/* eslint-disable no-undef */\n\n/**\n * Type for payload\n */\ninterface AnnouncementPayload {\n translation: {\n max_languages: number;\n allowed_languages: string[];\n };\n\n ASR: {\n spoken_languages: string[];\n };\n}\n\n// eslint-disable-next-line no-undef\ntype TRANSCRIPTION_TYPES =\n | 'unknown'\n | 'eva_wake'\n | 'eva_thanks'\n | 'eva_cancel'\n | 'highlight_created'\n | 'transcript_interim_results'\n | 'transcript_final_result'\n | 'manual_caption_interim_results'\n | 'manual_caption_interim_result'\n | 'manual_caption_final_result';\n\n/**\n * Class for an Transcription Object\n */\ninterface Transcription {\n start_millis: number;\n end_millis: number;\n text: string;\n transcript_language_code: string;\n translations: {[x: string]: string};\n csis: number[];\n last_packet_timestamp_ms: number;\n timestamp: string;\n}\n\n/**\n * Highlights\n */\ninterface Highlight {\n highlight_id: string;\n transcript: string;\n highlight_label: string;\n highlight_source: string;\n start_millis: number;\n end_millis: number;\n csis: number[];\n}\n/**\n * Type for Transcription message\n */\ninterface TranscriptionResponse {\n type: TRANSCRIPTION_TYPES;\n id: string;\n sender: string;\n data_source: string;\n transcript_id: string;\n translations?: {[x: string]: string};\n transcripts?: Transcription[];\n transcript?: Transcription;\n highlight?: Highlight;\n csis: number[];\n data: string;\n command_response: string;\n}\n/**\n * Type for CaptionLanguageResponse\n */\ninterface CaptionLanguageResponse {\n requestId: string;\n statusCode: number;\n errorCode: number;\n message: string;\n}\n\ninterface IVoiceaChannel {\n setSpokenLanguage: (languageCode: string) => Promise<void>;\n onSpokenLanguageUpdate: (languageCode: string) => void;\n requestLanguage: (languageCode: string) => void;\n turnOnCaptions: () => undefined | Promise<void>;\n toggleTranscribing: (activate: boolean, spokenLanguage: string) => undefined | Promise<void>;\n deregisterEvents: () => void;\n toggleManualCaption: (enable: boolean) => undefined | Promise<void>;\n sendManualClosedCaption: (\n text: string,\n timeStamp: number,\n csis: number[],\n isFinal: boolean\n ) => void;\n}\n\ntype MeetingTranscripts = {\n start_mills?: number;\n end_mills?: number;\n text: string;\n last_packet_timestamp_ms?: number;\n csis: Array<number>;\n transcript_language_code: string;\n translations?: {\n [key: string]: string;\n };\n timestamp?: string;\n};\n\ntype MeetingTranscriptPayload = {\n isFinal: boolean;\n transcriptId: string;\n transcripts: Array<MeetingTranscripts>;\n};\n\nexport type {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n Transcription,\n Highlight,\n IVoiceaChannel,\n MeetingTranscriptPayload,\n};\n"],"mappings":""}
|
package/package.json
CHANGED
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
"node": ">=16"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@webex/internal-plugin-llm": "3.8.
|
|
18
|
-
"@webex/internal-plugin-mercury": "3.8.
|
|
19
|
-
"@webex/plugin-meetings": "3.8.
|
|
20
|
-
"@webex/webex-core": "3.8.
|
|
17
|
+
"@webex/internal-plugin-llm": "3.8.1-next.5",
|
|
18
|
+
"@webex/internal-plugin-mercury": "3.8.1-next.5",
|
|
19
|
+
"@webex/plugin-meetings": "3.8.1-next.10",
|
|
20
|
+
"@webex/webex-core": "3.8.1-next.5",
|
|
21
21
|
"uuid": "^3.3.2"
|
|
22
22
|
},
|
|
23
23
|
"browserify": {
|
|
@@ -32,11 +32,11 @@
|
|
|
32
32
|
"@webex/eslint-config-legacy": "0.0.0",
|
|
33
33
|
"@webex/jest-config-legacy": "0.0.0",
|
|
34
34
|
"@webex/legacy-tools": "0.0.0",
|
|
35
|
-
"@webex/test-helper-chai": "3.8.
|
|
36
|
-
"@webex/test-helper-mocha": "3.8.
|
|
37
|
-
"@webex/test-helper-mock-web-socket": "3.8.
|
|
38
|
-
"@webex/test-helper-mock-webex": "3.8.
|
|
39
|
-
"@webex/test-helper-test-users": "3.8.
|
|
35
|
+
"@webex/test-helper-chai": "3.8.1-next.5",
|
|
36
|
+
"@webex/test-helper-mocha": "3.8.1-next.5",
|
|
37
|
+
"@webex/test-helper-mock-web-socket": "3.8.1-next.5",
|
|
38
|
+
"@webex/test-helper-mock-webex": "3.8.1-next.5",
|
|
39
|
+
"@webex/test-helper-test-users": "3.8.1-next.5",
|
|
40
40
|
"eslint": "^8.24.0",
|
|
41
41
|
"prettier": "^2.7.1",
|
|
42
42
|
"sinon": "^9.2.4"
|
|
@@ -50,5 +50,5 @@
|
|
|
50
50
|
"test:style": "eslint ./src/**/*.*",
|
|
51
51
|
"test:unit": "webex-legacy-tools test --unit --runner jest"
|
|
52
52
|
},
|
|
53
|
-
"version": "3.8.
|
|
53
|
+
"version": "3.8.1-next.10"
|
|
54
54
|
}
|
package/src/constants.ts
CHANGED
|
@@ -22,6 +22,7 @@ export const AIBRIDGE_RELAY_TYPES = {
|
|
|
22
22
|
},
|
|
23
23
|
MANUAL: {
|
|
24
24
|
TRANSCRIPTION: 'aibridge.manual_transcription',
|
|
25
|
+
CAPTIONER: 'client.manual_transcription',
|
|
25
26
|
},
|
|
26
27
|
};
|
|
27
28
|
|
|
@@ -34,10 +35,12 @@ export const TRANSCRIPTION_TYPE = {
|
|
|
34
35
|
TRANSCRIPT_INTERIM_RESULTS: 'transcript_interim_results',
|
|
35
36
|
TRANSCRIPT_FINAL_RESULT: 'transcript_final_result',
|
|
36
37
|
MANUAL_CAPTION_INTERIM_RESULTS: 'manual_caption_interim_results',
|
|
38
|
+
MANUAL_CAPTION_INTERIM_RESULT: 'manual_caption_interim_result',
|
|
37
39
|
MANUAL_CAPTION_FINAL_RESULT: 'manual_caption_final_result',
|
|
38
40
|
};
|
|
39
41
|
|
|
40
42
|
export const VOICEA = 'voicea';
|
|
43
|
+
export const DEFAULT_SPOKEN_LANGUAGE = 'en';
|
|
41
44
|
|
|
42
45
|
export const ANNOUNCE_STATUS = {
|
|
43
46
|
IDLE: 'idle',
|
|
@@ -50,3 +53,8 @@ export const TURN_ON_CAPTION_STATUS = {
|
|
|
50
53
|
ENABLED: 'enabled',
|
|
51
54
|
SENDING: 'sending',
|
|
52
55
|
};
|
|
56
|
+
|
|
57
|
+
export const TOGGLE_MANUAL_CAPTION_STATUS = {
|
|
58
|
+
IDLE: 'idle',
|
|
59
|
+
SENDING: 'sending',
|
|
60
|
+
};
|
package/src/voicea.ts
CHANGED
|
@@ -8,6 +8,8 @@ import {
|
|
|
8
8
|
VOICEA,
|
|
9
9
|
ANNOUNCE_STATUS,
|
|
10
10
|
TURN_ON_CAPTION_STATUS,
|
|
11
|
+
TOGGLE_MANUAL_CAPTION_STATUS,
|
|
12
|
+
DEFAULT_SPOKEN_LANGUAGE,
|
|
11
13
|
} from './constants';
|
|
12
14
|
// eslint-disable-next-line no-unused-vars
|
|
13
15
|
import {
|
|
@@ -38,6 +40,10 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
38
40
|
|
|
39
41
|
private captionStatus: string;
|
|
40
42
|
|
|
43
|
+
private toggleManualCaptionStatus: string;
|
|
44
|
+
|
|
45
|
+
private currentSpokenLanguage?: string;
|
|
46
|
+
|
|
41
47
|
/**
|
|
42
48
|
* @param {Object} e
|
|
43
49
|
* @returns {undefined}
|
|
@@ -58,7 +64,12 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
58
64
|
this.processTranscription(e.data.voiceaPayload);
|
|
59
65
|
break;
|
|
60
66
|
case AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:
|
|
61
|
-
|
|
67
|
+
case AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER:
|
|
68
|
+
this.processManualTranscription({
|
|
69
|
+
...e.data.transcriptPayload,
|
|
70
|
+
sender: e.headers?.from,
|
|
71
|
+
data_source: e.data.relayType,
|
|
72
|
+
});
|
|
62
73
|
break;
|
|
63
74
|
default:
|
|
64
75
|
break;
|
|
@@ -89,6 +100,8 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
89
100
|
this.hasSubscribedToEvents = false;
|
|
90
101
|
this.announceStatus = ANNOUNCE_STATUS.IDLE;
|
|
91
102
|
this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;
|
|
103
|
+
this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
104
|
+
this.currentSpokenLanguage = undefined;
|
|
92
105
|
}
|
|
93
106
|
|
|
94
107
|
/**
|
|
@@ -102,6 +115,8 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
102
115
|
this.vmcDeviceId = undefined;
|
|
103
116
|
this.announceStatus = ANNOUNCE_STATUS.IDLE;
|
|
104
117
|
this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;
|
|
118
|
+
this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
119
|
+
this.currentSpokenLanguage = DEFAULT_SPOKEN_LANGUAGE;
|
|
105
120
|
}
|
|
106
121
|
|
|
107
122
|
/**
|
|
@@ -110,19 +125,18 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
110
125
|
* @returns {void}
|
|
111
126
|
*/
|
|
112
127
|
private processManualTranscription = (transcriptPayload: TranscriptionResponse): void => {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
break;
|
|
128
|
+
if (
|
|
129
|
+
transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT ||
|
|
130
|
+
transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT
|
|
131
|
+
) {
|
|
132
|
+
// @ts-ignore
|
|
133
|
+
this.trigger(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, {
|
|
134
|
+
isFinal: transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT,
|
|
135
|
+
transcriptId: transcriptPayload.id,
|
|
136
|
+
transcripts: transcriptPayload.transcripts,
|
|
137
|
+
sender: transcriptPayload.sender,
|
|
138
|
+
source: transcriptPayload.data_source,
|
|
139
|
+
});
|
|
126
140
|
}
|
|
127
141
|
};
|
|
128
142
|
|
|
@@ -216,6 +230,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
216
230
|
captionLanguages: voiceaPayload?.translation?.allowed_languages ?? [],
|
|
217
231
|
maxLanguages: voiceaPayload?.translation?.max_languages ?? 0,
|
|
218
232
|
spokenLanguages: voiceaPayload?.ASR?.spoken_languages ?? [],
|
|
233
|
+
currentSpokenLanguage: this.currentSpokenLanguage,
|
|
219
234
|
};
|
|
220
235
|
|
|
221
236
|
// @ts-ignore
|
|
@@ -303,6 +318,55 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
303
318
|
this.seqNum += 1;
|
|
304
319
|
};
|
|
305
320
|
|
|
321
|
+
/**
|
|
322
|
+
* Send manual closed captions to voicea service
|
|
323
|
+
* @param {string} text
|
|
324
|
+
* @param {number} timeStamp
|
|
325
|
+
* @param {number[]} csis
|
|
326
|
+
* @param {boolean} isFinal
|
|
327
|
+
* @returns {void}
|
|
328
|
+
*/
|
|
329
|
+
public sendManualClosedCaption = (
|
|
330
|
+
text: string,
|
|
331
|
+
timeStamp: number,
|
|
332
|
+
csis: number[],
|
|
333
|
+
isFinal: boolean
|
|
334
|
+
): void => {
|
|
335
|
+
// @ts-ignore
|
|
336
|
+
if (!this.webex.internal.llm.isConnected()) return;
|
|
337
|
+
|
|
338
|
+
// @ts-ignore
|
|
339
|
+
this.webex.internal.llm.socket.send({
|
|
340
|
+
id: `${this.seqNum}`,
|
|
341
|
+
type: 'publishRequest',
|
|
342
|
+
recipients: {
|
|
343
|
+
// @ts-ignore
|
|
344
|
+
route: this.webex.internal.llm.getBinding(),
|
|
345
|
+
},
|
|
346
|
+
headers: {},
|
|
347
|
+
data: {
|
|
348
|
+
eventType: 'relay.event',
|
|
349
|
+
relayType: AIBRIDGE_RELAY_TYPES.MANUAL.CAPTIONER,
|
|
350
|
+
transcriptPayload: {
|
|
351
|
+
type: isFinal
|
|
352
|
+
? TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT
|
|
353
|
+
: TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULT,
|
|
354
|
+
id: uuid.v4(),
|
|
355
|
+
transcripts: [
|
|
356
|
+
{
|
|
357
|
+
text,
|
|
358
|
+
start_millis: timeStamp,
|
|
359
|
+
end_millis: timeStamp,
|
|
360
|
+
csis,
|
|
361
|
+
},
|
|
362
|
+
],
|
|
363
|
+
},
|
|
364
|
+
},
|
|
365
|
+
trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
|
|
366
|
+
});
|
|
367
|
+
this.seqNum += 1;
|
|
368
|
+
};
|
|
369
|
+
|
|
306
370
|
/**
|
|
307
371
|
* request turn on Captions
|
|
308
372
|
* @param {string} [languageCode] - Optional Parameter for spoken language code. Defaults to English
|
|
@@ -372,7 +436,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
372
436
|
* @returns {Promise}
|
|
373
437
|
*/
|
|
374
438
|
public turnOnCaptions = async (spokenLanguage?): undefined | Promise<void> => {
|
|
375
|
-
if (this.
|
|
439
|
+
if (this.captionStatus === TURN_ON_CAPTION_STATUS.SENDING) return undefined;
|
|
376
440
|
// @ts-ignore
|
|
377
441
|
if (!this.webex.internal.llm.isConnected()) {
|
|
378
442
|
throw new Error('can not turn on captions before llm connected');
|
|
@@ -383,7 +447,7 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
383
447
|
|
|
384
448
|
/**
|
|
385
449
|
* Toggle transcribing for highlights
|
|
386
|
-
* @param {
|
|
450
|
+
* @param {boolean} activate true means to turn on transcribing and false means to turn off
|
|
387
451
|
* @param {string} spokenLanguage language code for spoken language
|
|
388
452
|
* @returns {Promise}
|
|
389
453
|
*/
|
|
@@ -413,10 +477,14 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
413
477
|
|
|
414
478
|
/**
|
|
415
479
|
* Toggle turn on manual caption
|
|
416
|
-
* @param {
|
|
480
|
+
* @param {boolean} enable true means to turn on manual caption, false means to turn off
|
|
417
481
|
* @returns {Promise}
|
|
418
482
|
*/
|
|
419
483
|
public toggleManualCaption = (enable: boolean): undefined | Promise<void> => {
|
|
484
|
+
if (this.toggleManualCaptionStatus === TOGGLE_MANUAL_CAPTION_STATUS.SENDING) return undefined;
|
|
485
|
+
|
|
486
|
+
this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.SENDING;
|
|
487
|
+
|
|
420
488
|
// @ts-ignore
|
|
421
489
|
return this.request({
|
|
422
490
|
method: 'PUT',
|
|
@@ -427,9 +495,27 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
|
|
|
427
495
|
enable,
|
|
428
496
|
},
|
|
429
497
|
},
|
|
430
|
-
})
|
|
431
|
-
|
|
432
|
-
|
|
498
|
+
})
|
|
499
|
+
.then((): undefined | Promise<void> => {
|
|
500
|
+
this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
501
|
+
|
|
502
|
+
return undefined;
|
|
503
|
+
})
|
|
504
|
+
.catch(() => {
|
|
505
|
+
this.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
506
|
+
throw new Error('toggle manual captions fail');
|
|
507
|
+
});
|
|
508
|
+
};
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* In meeting Spoken Language changed event
|
|
512
|
+
* @param {string} languageCode
|
|
513
|
+
* @returns {void}
|
|
514
|
+
*/
|
|
515
|
+
public onSpokenLanguageUpdate = (languageCode: string): void => {
|
|
516
|
+
// @ts-ignore
|
|
517
|
+
this.trigger(EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {languageCode});
|
|
518
|
+
this.currentSpokenLanguage = languageCode;
|
|
433
519
|
};
|
|
434
520
|
|
|
435
521
|
/**
|
package/src/voicea.types.ts
CHANGED
|
@@ -23,7 +23,10 @@ type TRANSCRIPTION_TYPES =
|
|
|
23
23
|
| 'eva_cancel'
|
|
24
24
|
| 'highlight_created'
|
|
25
25
|
| 'transcript_interim_results'
|
|
26
|
-
| 'transcript_final_result'
|
|
26
|
+
| 'transcript_final_result'
|
|
27
|
+
| 'manual_caption_interim_results'
|
|
28
|
+
| 'manual_caption_interim_result'
|
|
29
|
+
| 'manual_caption_final_result';
|
|
27
30
|
|
|
28
31
|
/**
|
|
29
32
|
* Class for an Transcription Object
|
|
@@ -57,6 +60,8 @@ interface Highlight {
|
|
|
57
60
|
interface TranscriptionResponse {
|
|
58
61
|
type: TRANSCRIPTION_TYPES;
|
|
59
62
|
id: string;
|
|
63
|
+
sender: string;
|
|
64
|
+
data_source: string;
|
|
60
65
|
transcript_id: string;
|
|
61
66
|
translations?: {[x: string]: string};
|
|
62
67
|
transcripts?: Transcription[];
|
|
@@ -78,10 +83,18 @@ interface CaptionLanguageResponse {
|
|
|
78
83
|
|
|
79
84
|
interface IVoiceaChannel {
|
|
80
85
|
setSpokenLanguage: (languageCode: string) => Promise<void>;
|
|
86
|
+
onSpokenLanguageUpdate: (languageCode: string) => void;
|
|
81
87
|
requestLanguage: (languageCode: string) => void;
|
|
82
88
|
turnOnCaptions: () => undefined | Promise<void>;
|
|
83
89
|
toggleTranscribing: (activate: boolean, spokenLanguage: string) => undefined | Promise<void>;
|
|
84
90
|
deregisterEvents: () => void;
|
|
91
|
+
toggleManualCaption: (enable: boolean) => undefined | Promise<void>;
|
|
92
|
+
sendManualClosedCaption: (
|
|
93
|
+
text: string,
|
|
94
|
+
timeStamp: number,
|
|
95
|
+
csis: number[],
|
|
96
|
+
isFinal: boolean
|
|
97
|
+
) => void;
|
|
85
98
|
}
|
|
86
99
|
|
|
87
100
|
type MeetingTranscripts = {
|
package/test/unit/spec/voicea.js
CHANGED
|
@@ -7,7 +7,7 @@ import Mercury from '@webex/internal-plugin-mercury';
|
|
|
7
7
|
import LLMChannel from '@webex/internal-plugin-llm';
|
|
8
8
|
|
|
9
9
|
import VoiceaService from '../../../src/index';
|
|
10
|
-
import {EVENT_TRIGGERS} from '../../../src/constants';
|
|
10
|
+
import {EVENT_TRIGGERS, TOGGLE_MANUAL_CAPTION_STATUS} from '../../../src/constants';
|
|
11
11
|
|
|
12
12
|
describe('plugin-voicea', () => {
|
|
13
13
|
const locusUrl = 'locusUrl';
|
|
@@ -91,6 +91,103 @@ describe('plugin-voicea', () => {
|
|
|
91
91
|
});
|
|
92
92
|
});
|
|
93
93
|
|
|
94
|
+
describe('#sendManualClosedCaption', () => {
|
|
95
|
+
beforeEach(async () => {
|
|
96
|
+
const mockWebSocket = new MockWebSocket();
|
|
97
|
+
voiceaService.webex.internal.llm.socket = mockWebSocket;
|
|
98
|
+
voiceaService.seqNum = 1;
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it('sends interim manual closed caption when connected', () => {
|
|
102
|
+
const text = 'Test interim caption';
|
|
103
|
+
const timeStamp = 1234567890;
|
|
104
|
+
const csis = [123456];
|
|
105
|
+
const isFinal = false;
|
|
106
|
+
|
|
107
|
+
voiceaService.sendManualClosedCaption(text, timeStamp, csis, isFinal);
|
|
108
|
+
|
|
109
|
+
assert.calledOnceWithExactly(
|
|
110
|
+
voiceaService.webex.internal.llm.socket.send,
|
|
111
|
+
{
|
|
112
|
+
id: '1',
|
|
113
|
+
type: 'publishRequest',
|
|
114
|
+
recipients: {route: undefined},
|
|
115
|
+
headers: {},
|
|
116
|
+
data: {
|
|
117
|
+
eventType: 'relay.event',
|
|
118
|
+
relayType: 'client.manual_transcription',
|
|
119
|
+
transcriptPayload: {
|
|
120
|
+
type: 'manual_caption_interim_result',
|
|
121
|
+
id: sinon.match.string,
|
|
122
|
+
transcripts: [
|
|
123
|
+
{
|
|
124
|
+
text: 'Test interim caption',
|
|
125
|
+
start_millis: 1234567890,
|
|
126
|
+
end_millis: 1234567890,
|
|
127
|
+
csis: [123456],
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
trackingId: sinon.match.string,
|
|
133
|
+
}
|
|
134
|
+
);
|
|
135
|
+
// seqNum should increment
|
|
136
|
+
assert.equal(voiceaService.seqNum, 2);
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
it('sends final manual closed caption when connected', () => {
|
|
140
|
+
const text = 'Test final caption';
|
|
141
|
+
const timeStamp = 9876543210;
|
|
142
|
+
const csis = [654321];
|
|
143
|
+
const isFinal = true;
|
|
144
|
+
|
|
145
|
+
voiceaService.sendManualClosedCaption(text, timeStamp, csis, isFinal);
|
|
146
|
+
|
|
147
|
+
assert.calledOnceWithExactly(
|
|
148
|
+
voiceaService.webex.internal.llm.socket.send,
|
|
149
|
+
{
|
|
150
|
+
id: '1',
|
|
151
|
+
type: 'publishRequest',
|
|
152
|
+
recipients: {route: undefined},
|
|
153
|
+
headers: {},
|
|
154
|
+
data: {
|
|
155
|
+
eventType: 'relay.event',
|
|
156
|
+
relayType: 'client.manual_transcription',
|
|
157
|
+
transcriptPayload: {
|
|
158
|
+
type: 'manual_caption_final_result',
|
|
159
|
+
id: sinon.match.string,
|
|
160
|
+
transcripts: [
|
|
161
|
+
{
|
|
162
|
+
text: 'Test final caption',
|
|
163
|
+
start_millis: 9876543210,
|
|
164
|
+
end_millis: 9876543210,
|
|
165
|
+
csis: [654321],
|
|
166
|
+
},
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
trackingId: sinon.match.string,
|
|
171
|
+
}
|
|
172
|
+
);
|
|
173
|
+
// seqNum should increment
|
|
174
|
+
assert.equal(voiceaService.seqNum, 2);
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
it('does not send if not connected', () => {
|
|
178
|
+
voiceaService.webex.internal.llm.isConnected.returns(false);
|
|
179
|
+
|
|
180
|
+
const text = 'Should not send';
|
|
181
|
+
const timeStamp = 111;
|
|
182
|
+
const csis = [1];
|
|
183
|
+
const isFinal = true;
|
|
184
|
+
|
|
185
|
+
voiceaService.sendManualClosedCaption(text, timeStamp, csis, isFinal);
|
|
186
|
+
|
|
187
|
+
assert.notCalled(voiceaService.webex.internal.llm.socket.send);
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
|
|
94
191
|
describe('#deregisterEvents', () => {
|
|
95
192
|
beforeEach(async () => {
|
|
96
193
|
const mockWebSocket = new MockWebSocket();
|
|
@@ -141,6 +238,7 @@ describe('plugin-voicea', () => {
|
|
|
141
238
|
captionLanguages: ['af', 'am'],
|
|
142
239
|
spokenLanguages: ['en'],
|
|
143
240
|
maxLanguages: 5,
|
|
241
|
+
currentSpokenLanguage: 'en',
|
|
144
242
|
});
|
|
145
243
|
});
|
|
146
244
|
|
|
@@ -149,11 +247,13 @@ describe('plugin-voicea', () => {
|
|
|
149
247
|
|
|
150
248
|
voiceaService.on(EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT, spy);
|
|
151
249
|
voiceaService.listenToEvents();
|
|
250
|
+
voiceaService.onSpokenLanguageUpdate('fr-FR');
|
|
152
251
|
await voiceaService.processAnnouncementMessage({});
|
|
153
252
|
assert.calledOnceWithExactly(spy, {
|
|
154
253
|
captionLanguages: [],
|
|
155
254
|
spokenLanguages: [],
|
|
156
255
|
maxLanguages: 0,
|
|
256
|
+
currentSpokenLanguage: 'fr-FR',
|
|
157
257
|
});
|
|
158
258
|
});
|
|
159
259
|
});
|
|
@@ -331,34 +431,34 @@ describe('plugin-voicea', () => {
|
|
|
331
431
|
});
|
|
332
432
|
|
|
333
433
|
describe('#turnOnCaptions', () => {
|
|
334
|
-
let requestTurnOnCaptions
|
|
434
|
+
let requestTurnOnCaptions;
|
|
335
435
|
beforeEach(() => {
|
|
336
436
|
requestTurnOnCaptions = sinon.stub(voiceaService, 'requestTurnOnCaptions');
|
|
337
|
-
|
|
437
|
+
voiceaService.captionStatus = 'idle';
|
|
338
438
|
voiceaService.webex.internal.llm.isConnected.returns(true);
|
|
339
439
|
});
|
|
340
440
|
|
|
341
441
|
afterEach(() => {
|
|
342
442
|
requestTurnOnCaptions.restore();
|
|
343
|
-
|
|
443
|
+
voiceaService.captionStatus = 'idle';
|
|
344
444
|
voiceaService.webex.internal.llm.isConnected.returns(true);
|
|
345
445
|
});
|
|
346
446
|
|
|
347
447
|
it('call request turn on captions', () => {
|
|
348
|
-
|
|
448
|
+
voiceaService.captionStatus = 'idle';
|
|
349
449
|
voiceaService.turnOnCaptions();
|
|
350
450
|
assert.calledOnce(requestTurnOnCaptions);
|
|
351
451
|
});
|
|
352
452
|
|
|
353
453
|
it("turns on captions before llm connected", () => {
|
|
354
|
-
|
|
454
|
+
voiceaService.captionStatus = 'idle';
|
|
355
455
|
voiceaService.webex.internal.llm.isConnected.returns(true);
|
|
356
456
|
// assert.throws(() => voiceaService.turnOnCaptions(), "can not turn on captions before llm connected");
|
|
357
457
|
assert.notCalled(requestTurnOnCaptions);
|
|
358
458
|
});
|
|
359
459
|
|
|
360
460
|
it('should not turn on duplicate when processing', () => {
|
|
361
|
-
|
|
461
|
+
voiceaService.captionStatus = 'sending';
|
|
362
462
|
voiceaService.turnOnCaptions();
|
|
363
463
|
assert.notCalled(voiceaService.requestTurnOnCaptions);
|
|
364
464
|
});
|
|
@@ -441,20 +541,10 @@ describe('plugin-voicea', () => {
|
|
|
441
541
|
const mockWebSocket = new MockWebSocket();
|
|
442
542
|
|
|
443
543
|
voiceaService.webex.internal.llm.socket = mockWebSocket;
|
|
544
|
+
voiceaService.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.IDLE;
|
|
444
545
|
});
|
|
445
546
|
|
|
446
547
|
it('turns on manual caption', async () => {
|
|
447
|
-
// Turn on captions
|
|
448
|
-
await voiceaService.turnOnCaptions();
|
|
449
|
-
|
|
450
|
-
// eslint-disable-next-line no-underscore-dangle
|
|
451
|
-
voiceaService.webex.internal.llm._emit('event:relay.event', {
|
|
452
|
-
headers: {from: 'ws'},
|
|
453
|
-
data: {relayType: 'voicea.annc', voiceaPayload: {}},
|
|
454
|
-
});
|
|
455
|
-
|
|
456
|
-
voiceaService.listenToEvents();
|
|
457
|
-
|
|
458
548
|
await voiceaService.toggleManualCaption(true);
|
|
459
549
|
sinon.assert.calledWith(
|
|
460
550
|
voiceaService.request,
|
|
@@ -469,10 +559,6 @@ describe('plugin-voicea', () => {
|
|
|
469
559
|
|
|
470
560
|
|
|
471
561
|
it('turns off manual caption', async () => {
|
|
472
|
-
await voiceaService.toggleManualCaption(true);
|
|
473
|
-
|
|
474
|
-
voiceaService.listenToEvents();
|
|
475
|
-
|
|
476
562
|
await voiceaService.toggleManualCaption(false);
|
|
477
563
|
sinon.assert.calledWith(
|
|
478
564
|
voiceaService.request,
|
|
@@ -484,6 +570,14 @@ describe('plugin-voicea', () => {
|
|
|
484
570
|
);
|
|
485
571
|
|
|
486
572
|
});
|
|
573
|
+
|
|
574
|
+
it('ignore toggle manual caption', async () => {
|
|
575
|
+
voiceaService.toggleManualCaptionStatus = TOGGLE_MANUAL_CAPTION_STATUS.SENDING;
|
|
576
|
+
await voiceaService.toggleManualCaption(true);
|
|
577
|
+
|
|
578
|
+
sinon.assert.notCalled(voiceaService.request);
|
|
579
|
+
|
|
580
|
+
});
|
|
487
581
|
});
|
|
488
582
|
|
|
489
583
|
describe('#processCaptionLanguageResponse', () => {
|
|
@@ -795,16 +889,17 @@ describe('plugin-voicea', () => {
|
|
|
795
889
|
voiceaService.listenToEvents();
|
|
796
890
|
});
|
|
797
891
|
|
|
798
|
-
it('processes interim manual transcription', async () => {
|
|
892
|
+
it('processes interim manual transcription from aibridge', async () => {
|
|
799
893
|
voiceaService.on(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, triggerSpy);
|
|
894
|
+
|
|
800
895
|
const transcriptPayload = {
|
|
801
896
|
id: "747d711d-3414-fd69-7081-e842649f2d28",
|
|
802
897
|
transcripts: [
|
|
803
898
|
{
|
|
804
|
-
|
|
899
|
+
text: "Good",
|
|
805
900
|
}
|
|
806
901
|
],
|
|
807
|
-
type: "
|
|
902
|
+
type: "manual_caption_interim_result",
|
|
808
903
|
};
|
|
809
904
|
|
|
810
905
|
// eslint-disable-next-line no-underscore-dangle
|
|
@@ -813,15 +908,17 @@ describe('plugin-voicea', () => {
|
|
|
813
908
|
data: {relayType: 'aibridge.manual_transcription', transcriptPayload},
|
|
814
909
|
});
|
|
815
910
|
|
|
816
|
-
assert.calledOnceWithExactly(functionSpy, transcriptPayload);
|
|
911
|
+
assert.calledOnceWithExactly(functionSpy, {...transcriptPayload, sender: 'ws', data_source: 'aibridge.manual_transcription'});
|
|
817
912
|
assert.calledOnceWithExactly(triggerSpy, {
|
|
818
913
|
isFinal: false,
|
|
819
914
|
transcriptId: '747d711d-3414-fd69-7081-e842649f2d28',
|
|
820
915
|
transcripts: transcriptPayload.transcripts,
|
|
916
|
+
sender: 'ws',
|
|
917
|
+
source: 'aibridge.manual_transcription'
|
|
821
918
|
});
|
|
822
919
|
});
|
|
823
920
|
|
|
824
|
-
it('processes final manual transcription', async () => {
|
|
921
|
+
it('processes final manual transcription from aibridge', async () => {
|
|
825
922
|
voiceaService.on(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, triggerSpy);
|
|
826
923
|
|
|
827
924
|
const transcriptPayload = {
|
|
@@ -842,11 +939,73 @@ describe('plugin-voicea', () => {
|
|
|
842
939
|
data: {relayType: 'aibridge.manual_transcription', transcriptPayload},
|
|
843
940
|
});
|
|
844
941
|
|
|
845
|
-
assert.calledOnceWithExactly(functionSpy, transcriptPayload);
|
|
942
|
+
assert.calledOnceWithExactly(functionSpy, {...transcriptPayload, sender: 'ws', data_source: 'aibridge.manual_transcription'});
|
|
846
943
|
assert.calledOnceWithExactly(triggerSpy, {
|
|
847
944
|
isFinal: true,
|
|
848
945
|
transcriptId: '8d226d31-044a-8d11-cc39-cedbde183154',
|
|
849
946
|
transcripts: transcriptPayload.transcripts,
|
|
947
|
+
sender: 'ws',
|
|
948
|
+
source: 'aibridge.manual_transcription'
|
|
949
|
+
});
|
|
950
|
+
});
|
|
951
|
+
|
|
952
|
+
it('processes interim manual transcription from captioner', async () => {
|
|
953
|
+
voiceaService.on(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, triggerSpy);
|
|
954
|
+
|
|
955
|
+
const transcriptPayload = {
|
|
956
|
+
id: "747d711d-3414-fd69-7081-e842649f2d28",
|
|
957
|
+
transcripts: [
|
|
958
|
+
{
|
|
959
|
+
text: "Good",
|
|
960
|
+
}
|
|
961
|
+
],
|
|
962
|
+
type: "manual_caption_interim_result",
|
|
963
|
+
};
|
|
964
|
+
|
|
965
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
966
|
+
await voiceaService.webex.internal.llm._emit('event:relay.event', {
|
|
967
|
+
headers: {from: '654321'},
|
|
968
|
+
data: {relayType: 'client.manual_transcription', transcriptPayload},
|
|
969
|
+
});
|
|
970
|
+
|
|
971
|
+
assert.calledOnceWithExactly(functionSpy, {...transcriptPayload, sender: '654321', data_source: 'client.manual_transcription'});
|
|
972
|
+
assert.calledOnceWithExactly(triggerSpy, {
|
|
973
|
+
isFinal: false,
|
|
974
|
+
transcriptId: '747d711d-3414-fd69-7081-e842649f2d28',
|
|
975
|
+
transcripts: transcriptPayload.transcripts,
|
|
976
|
+
sender: '654321',
|
|
977
|
+
source: 'client.manual_transcription'
|
|
978
|
+
});
|
|
979
|
+
});
|
|
980
|
+
|
|
981
|
+
it('processes final manual transcription from captioner', async () => {
|
|
982
|
+
voiceaService.on(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, triggerSpy);
|
|
983
|
+
|
|
984
|
+
const transcriptPayload = {
|
|
985
|
+
id: "8d226d31-044a-8d11-cc39-cedbde183154",
|
|
986
|
+
transcripts: [
|
|
987
|
+
{
|
|
988
|
+
text: "Good Morning",
|
|
989
|
+
start_millis: 10420,
|
|
990
|
+
end_millis: 11380,
|
|
991
|
+
}
|
|
992
|
+
],
|
|
993
|
+
type: "manual_caption_final_result",
|
|
994
|
+
};
|
|
995
|
+
|
|
996
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
997
|
+
await voiceaService.webex.internal.llm._emit('event:relay.event', {
|
|
998
|
+
headers: {from: '654321'},
|
|
999
|
+
data: {relayType: 'client.manual_transcription', transcriptPayload},
|
|
1000
|
+
});
|
|
1001
|
+
|
|
1002
|
+
assert.calledOnceWithExactly(functionSpy, {...transcriptPayload, sender: '654321', data_source: 'client.manual_transcription'});
|
|
1003
|
+
assert.calledOnceWithExactly(triggerSpy, {
|
|
1004
|
+
isFinal: true,
|
|
1005
|
+
transcriptId: '8d226d31-044a-8d11-cc39-cedbde183154',
|
|
1006
|
+
transcripts: transcriptPayload.transcripts,
|
|
1007
|
+
sender: '654321',
|
|
1008
|
+
source: 'client.manual_transcription'
|
|
850
1009
|
});
|
|
851
1010
|
});
|
|
852
1011
|
});
|
|
@@ -864,5 +1023,17 @@ describe('plugin-voicea', () => {
|
|
|
864
1023
|
assert.equal(voiceaService.getAnnounceStatus(), "joined");
|
|
865
1024
|
});
|
|
866
1025
|
});
|
|
1026
|
+
|
|
1027
|
+
describe('#onSpokenLanguageUpdate', () => {
|
|
1028
|
+
it('should trigger SPOKEN_LANGUAGE_UPDATE event with correct languageCode', () => {
|
|
1029
|
+
const triggerSpy = sinon.spy();
|
|
1030
|
+
voiceaService.on(EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, triggerSpy);
|
|
1031
|
+
|
|
1032
|
+
const languageCode = 'fr-FR';
|
|
1033
|
+
voiceaService.onSpokenLanguageUpdate(languageCode);
|
|
1034
|
+
assert.equal(voiceaService.currentSpokenLanguage, languageCode);
|
|
1035
|
+
assert.calledOnceWithExactly(triggerSpy, {languageCode});
|
|
1036
|
+
});
|
|
1037
|
+
});
|
|
867
1038
|
});
|
|
868
1039
|
});
|