@azure/communication-call-automation
Version:
Azure client library for Azure Communication Call Automation services
411 lines (410 loc) • 18.6 kB
JavaScript
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