UNPKG

@azure/communication-call-automation

Version:
411 lines (410 loc) 18.6 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var callMedia_exports = {}; __export(callMedia_exports, { CallMedia: () => CallMedia }); module.exports = __toCommonJS(callMedia_exports); var import_src = require("./generated/src/index.js"); var import_src2 = require("./generated/src/index.js"); var import_operations = require("./generated/src/operations/index.js"); var import_communication_common = require("@azure/communication-common"); var import_core_util = require("@azure/core-util"); class CallMedia { callConnectionId; callMedia; callAutomationApiClient; constructor(callConnectionId, endpoint, credential, options) { this.callAutomationApiClient = new import_src.CallAutomationApiClient(endpoint, options); const authPolicy = (0, import_communication_common.createCommunicationAuthPolicy)(credential); this.callAutomationApiClient.pipeline.addPolicy(authPolicy); this.callConnectionId = callConnectionId; this.callMedia = new import_operations.CallMediaImpl(this.callAutomationApiClient); } createPlaySourceInternal(playSource) { if (playSource.kind === "fileSource") { const fileSource = { uri: playSource.url }; return { kind: import_src2.KnownPlaySourceType.File, file: fileSource, playSourceCacheId: playSource.playSourceCacheId ? playSource.playSourceCacheId : playSource.playsourcacheid }; } else if (playSource.kind === "textSource") { const textSource = { text: playSource.text, sourceLocale: playSource.sourceLocale, voiceKind: playSource.voiceKind, voiceName: playSource.voiceName, customVoiceEndpointId: playSource.customVoiceEndpointId }; return { kind: import_src2.KnownPlaySourceType.Text, text: textSource, playSourceCacheId: playSource.playSourceCacheId ? playSource.playSourceCacheId : playSource.playsourcacheid }; } else if (playSource.kind === "ssmlSource") { const ssmlSource = { ssmlText: playSource.ssmlText, customVoiceEndpointId: playSource.customVoiceEndpointId }; return { kind: import_src2.KnownPlaySourceType.Ssml, ssml: ssmlSource, playSourceCacheId: playSource.playSourceCacheId ? playSource.playSourceCacheId : playSource.playsourcacheid }; } throw new Error("Invalid play source"); } /** * Play audio to a specific participant. * * @param playSources - A PlaySource representing the sources to play. Currently only single play source per request is supported. * @param playTo - The targets to play to. * @param options - Additional attributes for play. */ async play(playSources, playTo, options = { loop: false }) { const playRequest = { playSources: playSources.map((source) => this.createPlaySourceInternal(source)), playTo: playTo.map((identifier) => (0, import_communication_common.serializeCommunicationIdentifier)(identifier)), playOptions: { loop: false }, operationContext: options.operationContext, operationCallbackUri: options.operationCallbackUrl }; if (options.loop !== void 0) { playRequest.playOptions = playRequest.playOptions || { loop: false }; playRequest.playOptions.loop = options.loop; } await this.callMedia.play(this.callConnectionId, playRequest, options); } /** * Play to all participants. * * @param playSources - A PlaySource representing the sources to play. Currently only single play source per request is supported. * @param options - Additional attributes for play. */ async playToAll(playSources, options = { loop: false }) { const playRequest = { playSources: playSources.map((source) => this.createPlaySourceInternal(source)), playTo: [], playOptions: { loop: false }, operationContext: options.operationContext ? options.operationContext : (0, import_core_util.randomUUID)(), operationCallbackUri: options.operationCallbackUrl }; if (options.loop !== void 0) { playRequest.playOptions = playRequest.playOptions || { loop: false }; playRequest.playOptions.loop = options.loop; } if (options.interruptCallMediaOperation !== void 0) { playRequest.playOptions = playRequest.playOptions || { loop: false }; playRequest.interruptCallMediaOperation = options.interruptCallMediaOperation; } await this.callMedia.play(this.callConnectionId, playRequest, options); } createRecognizeRequest(targetParticipant, recognizeOptions) { if (recognizeOptions.kind === "callMediaRecognizeDtmfOptions") { const dtmfOptionsInternal = { interToneTimeoutInSeconds: recognizeOptions.interToneTimeoutInSeconds ? recognizeOptions.interToneTimeoutInSeconds : 2, maxTonesToCollect: recognizeOptions.maxTonesToCollect, stopTones: recognizeOptions.stopDtmfTones }; const recognizeOptionsInternal = { interruptPrompt: recognizeOptions.interruptPrompt, initialSilenceTimeoutInSeconds: recognizeOptions.initialSilenceTimeoutInSeconds ? recognizeOptions.initialSilenceTimeoutInSeconds : 5, targetParticipant: (0, import_communication_common.serializeCommunicationIdentifier)(targetParticipant), dtmfOptions: dtmfOptionsInternal }; return { recognizeInputType: import_src2.KnownRecognizeInputType.Dtmf, playPrompt: recognizeOptions.playPrompt ? this.createPlaySourceInternal(recognizeOptions.playPrompt) : void 0, playPrompts: recognizeOptions.playPrompts !== void 0 ? recognizeOptions.playPrompts.map((source) => this.createPlaySourceInternal(source)) : void 0, interruptCallMediaOperation: recognizeOptions.interruptCallMediaOperation, recognizeOptions: recognizeOptionsInternal, operationContext: recognizeOptions.operationContext, operationCallbackUri: recognizeOptions.operationCallbackUrl }; } else if (recognizeOptions.kind === "callMediaRecognizeChoiceOptions") { const recognizeOptionsInternal = { interruptPrompt: recognizeOptions.interruptPrompt, initialSilenceTimeoutInSeconds: recognizeOptions.initialSilenceTimeoutInSeconds ? recognizeOptions.initialSilenceTimeoutInSeconds : 5, targetParticipant: (0, import_communication_common.serializeCommunicationIdentifier)(targetParticipant), speechLanguage: recognizeOptions.speechLanguage, speechRecognitionModelEndpointId: recognizeOptions.speechRecognitionModelEndpointId, choices: recognizeOptions.choices }; return { recognizeInputType: import_src2.KnownRecognizeInputType.Choices, playPrompt: recognizeOptions.playPrompt ? this.createPlaySourceInternal(recognizeOptions.playPrompt) : void 0, playPrompts: recognizeOptions.playPrompts !== void 0 ? recognizeOptions.playPrompts.map((source) => this.createPlaySourceInternal(source)) : void 0, interruptCallMediaOperation: recognizeOptions.interruptCallMediaOperation, recognizeOptions: recognizeOptionsInternal, operationContext: recognizeOptions.operationContext, operationCallbackUri: recognizeOptions.operationCallbackUrl }; } else if (recognizeOptions.kind === "callMediaRecognizeSpeechOptions") { const speechOptions = { endSilenceTimeoutInMs: recognizeOptions.endSilenceTimeoutInSeconds ? recognizeOptions.endSilenceTimeoutInSeconds * 1e3 : 2e3 }; const recognizeOptionsInternal = { interruptPrompt: recognizeOptions.interruptPrompt, initialSilenceTimeoutInSeconds: recognizeOptions.initialSilenceTimeoutInSeconds ? recognizeOptions.initialSilenceTimeoutInSeconds : 5, targetParticipant: (0, import_communication_common.serializeCommunicationIdentifier)(targetParticipant), speechOptions, speechLanguage: recognizeOptions.speechLanguage, speechRecognitionModelEndpointId: recognizeOptions.speechRecognitionModelEndpointId }; return { recognizeInputType: import_src2.KnownRecognizeInputType.Speech, playPrompt: recognizeOptions.playPrompt ? this.createPlaySourceInternal(recognizeOptions.playPrompt) : void 0, playPrompts: recognizeOptions.playPrompts !== void 0 ? recognizeOptions.playPrompts.map((source) => this.createPlaySourceInternal(source)) : void 0, interruptCallMediaOperation: recognizeOptions.interruptCallMediaOperation, recognizeOptions: recognizeOptionsInternal, operationContext: recognizeOptions.operationContext, operationCallbackUri: recognizeOptions.operationCallbackUrl }; } else if (recognizeOptions.kind === "callMediaRecognizeSpeechOrDtmfOptions") { const dtmfOptionsInternal = { interToneTimeoutInSeconds: recognizeOptions.interToneTimeoutInSeconds ? recognizeOptions.interToneTimeoutInSeconds : 2, maxTonesToCollect: recognizeOptions.maxTonesToCollect, stopTones: recognizeOptions.stopDtmfTones }; const speechOptions = { endSilenceTimeoutInMs: recognizeOptions.endSilenceTimeoutInSeconds ? recognizeOptions.endSilenceTimeoutInSeconds * 1e3 : 2e3 }; const recognizeOptionsInternal = { interruptPrompt: recognizeOptions.interruptPrompt, initialSilenceTimeoutInSeconds: recognizeOptions.initialSilenceTimeoutInSeconds ? recognizeOptions.initialSilenceTimeoutInSeconds : 5, targetParticipant: (0, import_communication_common.serializeCommunicationIdentifier)(targetParticipant), speechOptions, speechLanguage: recognizeOptions.speechLanguage, dtmfOptions: dtmfOptionsInternal, speechRecognitionModelEndpointId: recognizeOptions.speechRecognitionModelEndpointId }; return { recognizeInputType: import_src2.KnownRecognizeInputType.SpeechOrDtmf, playPrompt: recognizeOptions.playPrompt ? this.createPlaySourceInternal(recognizeOptions.playPrompt) : void 0, playPrompts: recognizeOptions.playPrompts !== void 0 ? recognizeOptions.playPrompts.map((source) => this.createPlaySourceInternal(source)) : void 0, interruptCallMediaOperation: recognizeOptions.interruptCallMediaOperation, recognizeOptions: recognizeOptionsInternal, operationContext: recognizeOptions.operationContext, operationCallbackUri: recognizeOptions.operationCallbackUrl }; } throw new Error("Invalid recognizeOptions"); } async startRecognizing(targetParticipant, maxTonesOrOptions, options) { if (typeof maxTonesOrOptions === "number" && options) { console.warn( "Deprecated function signature used. Please use the new signature with targetParticipant and options params instead, and set maxTonesToCollect in options." ); options.maxTonesToCollect = maxTonesOrOptions; return this.callMedia.recognize( this.callConnectionId, this.createRecognizeRequest(targetParticipant, options), {} ); } else if (typeof maxTonesOrOptions !== "number" && !options) { maxTonesOrOptions.operationContext = maxTonesOrOptions.operationContext ? maxTonesOrOptions.operationContext : (0, import_core_util.randomUUID)(); return this.callMedia.recognize( this.callConnectionId, this.createRecognizeRequest(targetParticipant, maxTonesOrOptions), {} ); } throw new Error("Invalid params"); } /** * Cancels all the queued media operations. */ async cancelAllOperations() { await this.callMedia.cancelAllMediaOperations(this.callConnectionId, {}); } /** * Start continuous Dtmf recognition by subscribing to tones. * @param targetParticipant - Target participant. * @param options - Additional attributes for continuous Dtmf recognition. * */ async startContinuousDtmfRecognition(targetParticipant, options = {}) { const continuousDtmfRecognitionRequest = { targetParticipant: (0, import_communication_common.serializeCommunicationIdentifier)(targetParticipant), operationContext: options.operationContext }; return this.callMedia.startContinuousDtmfRecognition( this.callConnectionId, continuousDtmfRecognitionRequest, {} ); } /** * Stop continuous Dtmf recognition by unsubscribing to tones. * @param targetParticipant - Target participant. * @param options - Additional attributes for continuous Dtmf recognition. * */ async stopContinuousDtmfRecognition(targetParticipant, options = {}) { const continuousDtmfRecognitionRequest = { targetParticipant: (0, import_communication_common.serializeCommunicationIdentifier)(targetParticipant), operationContext: options.operationContext, operationCallbackUri: options.operationCallbackUrl }; return this.callMedia.stopContinuousDtmfRecognition( this.callConnectionId, continuousDtmfRecognitionRequest, {} ); } /** * Send Dtmf tones. * @param tones - List of tones to be sent to target participant. * @param targetParticipant - Target participant. * @param options - Additional attributes for send Dtmf tones. * */ async sendDtmfTones(tones, targetParticipant, options = {}) { const sendDtmfTonesRequest = { tones, targetParticipant: (0, import_communication_common.serializeCommunicationIdentifier)(targetParticipant), operationContext: options.operationContext, operationCallbackUri: options.operationCallbackUrl }; const optionsInternal = { ...options, repeatabilityFirstSent: /* @__PURE__ */ new Date(), repeatabilityRequestID: (0, import_core_util.randomUUID)() }; const result = await this.callMedia.sendDtmfTones( this.callConnectionId, sendDtmfTonesRequest, optionsInternal ); const sendDtmfTonesResult = { ...result }; return sendDtmfTonesResult; } /** * Put participant on hold while playing audio. * * @param targetParticipant - The targets to play to. * @param options - Additional attributes for hold participant. */ async hold(targetParticipant, options = {}) { const holdRequest = { targetParticipant: (0, import_communication_common.serializeCommunicationIdentifier)(targetParticipant), playSourceInfo: options.playSource !== void 0 ? this.createPlaySourceInternal(options.playSource) : void 0, operationContext: options.operationContext !== void 0 ? options.operationContext : void 0, operationCallbackUri: options.operationCallbackUrl !== void 0 ? options.operationCallbackUrl : void 0 }; return this.callMedia.hold(this.callConnectionId, holdRequest); } /** * Remove participant from hold. * * @param targetParticipant - The targets to play to. * @param options - Additional attributes for unhold participant. */ async unhold(targetParticipant, options = {}) { const unholdRequest = { targetParticipant: (0, import_communication_common.serializeCommunicationIdentifier)(targetParticipant), operationContext: options.operationContext !== void 0 ? options.operationContext : void 0, operationCallbackUri: options.operationCallbackUrl !== void 0 ? options.operationCallbackUrl : void 0 }; return this.callMedia.unhold(this.callConnectionId, unholdRequest); } /** * Starts transcription in the call * @param options - Additional attributes for start transcription. */ async startTranscription(options = {}) { const startTranscriptionRequest = { locale: options.locale, operationContext: options.operationContext, speechModelEndpointId: options.speechRecognitionModelEndpointId, operationCallbackUri: options.operationCallbackUrl }; return this.callMedia.startTranscription(this.callConnectionId, startTranscriptionRequest, {}); } /** * Stops transcription in the call. * @param options - Additional attributes for stop transcription. */ async stopTranscription(options = {}) { const stopTranscriptionRequest = { operationContext: options.operationContext, operationCallbackUri: options.operationCallbackUrl }; return this.callMedia.stopTranscription(this.callConnectionId, stopTranscriptionRequest, {}); } /** * Update transcription language. * @param locale - Defines new locale for transcription. */ async updateTranscription(locale, options) { const updateTranscriptionRequest = { locale, speechModelEndpointId: options?.speechRecognitionModelEndpointId, operationContext: options?.operationContext, operationCallbackUri: options?.operationCallbackUrl }; return this.callMedia.updateTranscription( this.callConnectionId, updateTranscriptionRequest, {} ); } /** * Starts media streaming in the call. * @param options - Additional attributes for start media streaming. */ async startMediaStreaming(options = {}) { const startMediaStreamingRequest = { operationContext: options.operationContext, operationCallbackUri: options.operationCallbackUrl }; return this.callMedia.startMediaStreaming( this.callConnectionId, startMediaStreamingRequest, options ); } /** * Stops media streaming in the call. * @param options - Additional attributes for stop media streaming. */ async stopMediaStreaming(options = {}) { const stopMediaStreamingRequest = { operationCallbackUri: options.operationCallbackUrl, operationContext: options.operationContext }; return this.callMedia.stopMediaStreaming( this.callConnectionId, stopMediaStreamingRequest, options ); } } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { CallMedia }); //# sourceMappingURL=callMedia.js.map