UNPKG

@vonage/voice

Version:

The Voice API lets you create outbound calls, control in-progress calls and get information about historical calls.

235 lines 7.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Record = void 0; const enums_1 = require("../../enums"); /** * Represents a Record action in an NCCO. */ class Record { /** * The action type for the Record action. */ action = enums_1.NCCOActions.RECORD; /** * The recording format (e.g., "mp3", "wav"). */ format; /** * The split type for recording (always "conversation"). */ wrappedSplit; /** * The number of audio channels (1 to 32). */ wrappedChannels; /** * The duration of silence (in seconds) to end the recording (3 to 10 seconds). */ wrappedEndOnSilence; /** * The DTMF key that ends the recording (e.g., "0", "*", "#"). */ wrappedEndOnKey; /** * The maximum recording duration in seconds (3 to 7200 seconds). */ wrappedTimeOut; /** * Whether to play a beep before recording starts. */ beepStart; /** * The URL where recording events will be sent. */ eventUrl; /** * The HTTP method for sending recording events (e.g., "POST"). */ eventMethod; /** * Creates a new Record action. * * @param {RecordingFormat} format - The recording format (e.g., "mp3", "wav"). * @param {string} split - The split type for recording (should be "conversation"). * @param {number} channels - The number of audio channels (1 to 32). * @param {number} endOnSilence - The duration of silence (in seconds) to end the recording (3 to 10 seconds). * @param {string} endOnKey - The DTMF key that ends the recording (e.g., "0", "*", "#"). * @param {number} timeout - The maximum recording duration in seconds (3 to 7200 seconds). * @param {boolean} beepStart - Whether to play a beep before recording starts. * @param {string} eventUrl - The URL where recording events will be sent. * @param {string} eventMethod - The HTTP method for sending recording events (e.g., "POST"). */ constructor(format, split, channels, endOnSilence, endOnKey, timeout, beepStart, eventUrl, eventMethod) { if (format) { this.format = format; } if (split) { this.split = split; } if (channels) { this.channels = channels; } if (endOnSilence) { this.endOnSilence = endOnSilence; } if (endOnKey) { this.endOnKey = endOnKey; } if (timeout) { this.timeout = timeout; } if (beepStart) { this.beepStart = beepStart; } if (eventUrl) { this.eventUrl = [eventUrl]; } if (eventMethod) { this.eventMethod = eventMethod; } } /** * Getter for the number of audio channels. * * @return {number | undefined} - The current number of audio channels. */ get channels() { return this.wrappedChannels; } /** * Setter for the number of audio channels. * * @param {number} channels - The number of audio channels (1 to 32). * @throws {Error} - If the channel value is invalid or split is not set to "conversation." */ set channels(channels) { if (channels < 1 || channels > 32) { throw new Error('Channels must be between 1 and 32, inclusive'); } if (this.wrappedSplit !== 'conversation') { throw new Error('Channels must have split set to \'conversation\' before changing channel numbers'); } this.wrappedChannels = channels; } /** * Getter for the character that signals the end of recording. * * @return {string | undefined} - The character that signals the end of recording. */ get endOnKey() { return this.wrappedEndOnKey; } /** * Setter for the DTMF key that ends the recording. * * @param {string} character - The DTMF key that ends the recording (e.g., "0", "*", "#"). * @throws {Error} - If the character is not a valid DTMF key. */ set endOnKey(character) { const re = /^[0-9*#]$/; if (!re.test(character)) { throw new Error('Valid characters are 0-9, *, and # only'); } this.wrappedEndOnKey = character; } /** * Getter for the duration of silence (in seconds) that signals the end of recording. * * @return {number | undefined} - The duration of silence (in seconds) that signals the end of recording. */ get endOnSilence() { return this.wrappedEndOnSilence; } /** * Setter for the duration of silence to end the recording. * * @param {number} numSeconds - The duration of silence in seconds (3 to 10 seconds). * @throws {Error} - If the duration value is out of the valid range. */ set endOnSilence(numSeconds) { if (numSeconds < 3 || numSeconds > 10) { throw new Error('End on Silence must be between 3 and 10 seconds, inclusive'); } this.wrappedEndOnSilence = numSeconds; } /** * Getter for the recording split type. * * @return {string} - The recording split type, which is always 'conversation'. */ get split() { return 'conversation'; } /** * Setter for the recording split type. * * @param {string} splitType - The recording split type. Must be set to 'conversation'. * @throws {Error} - Throws an error if the splitType is not 'conversation'. */ set split(splitType) { if (splitType !== 'conversation') { throw new Error('Recording can only be split to \'conversation\''); } this.wrappedSplit = splitType; } /** * Getter for the recording timeout duration in seconds. * * @return {number | undefined } - The recording timeout duration in seconds. */ get timeout() { return this.wrappedTimeOut; } /** * Setter for the recording timeout. * * @param {number} seconds - The maximum recording duration in seconds (3 to 7200 seconds). * @throws {Error} - If the timeout value is out of the valid range. */ set timeout(seconds) { if (seconds < 3 || seconds > 7200) { throw new Error('Recording timeout must be between 3 and 7200 seconds, inclusive'); } this.wrappedTimeOut = seconds; } /** * Serializes the Record action to NCCO format. * * @return {RecordAction} - The serialized Record action. */ serializeToNCCO() { const data = { action: enums_1.NCCOActions.RECORD, }; if (this.format) { data.format = this.format; } if (this.wrappedSplit) { data.split = this.split; } if (this.wrappedChannels) { data.channels = this.wrappedChannels; } if (this.wrappedEndOnKey) { data.endOnKey = this.endOnKey; } if (this.wrappedEndOnSilence) { data.endOnSilence = this.endOnSilence; } if (this.wrappedTimeOut) { data.timeOut = this.wrappedTimeOut; } if (this.beepStart) { data.beepStart = this.beepStart; } if (this.eventUrl) { data.eventUrl = this.eventUrl; } if (this.eventMethod) { data.eventMethod = this.eventMethod; } return data; } } exports.Record = Record; //# sourceMappingURL=Record.js.map