ivr-tester
Version:
An automated testing framework for IVR call flows
71 lines (70 loc) • 3.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.inOrder = void 0;
const timers_1 = require("timers");
const PromptTranscriptionBuilder_1 = require("../../call/transcription/PromptTranscriptionBuilder");
const Emitter_1 = require("../../Emitter");
const PostSilencePrompt_1 = require("./PostSilencePrompt");
const defaultPromptFactory = (definition, call, matchedCallback, timeoutCallback) => new PostSilencePrompt_1.PostSilencePrompt(definition, call, matchedCallback, timeoutCallback, timers_1.setTimeout, clearTimeout);
class RunningOrderedCallFlowInstructions extends Emitter_1.TypedEmitter {
constructor(promptDefinitions, promptFactory, transcriber, call) {
super();
this.promptDefinitions = promptDefinitions;
this.promptFactory = promptFactory;
this.transcriber = transcriber;
this.call = call;
this.initialise();
}
// TODO Tidy this
initialise() {
const timedOutCallback = (prompt, transcript) => {
this.emit("timeoutWaitingForMatch", {
transcription: transcript,
promptDefinition: prompt.definition,
});
};
const matchedCallback = (prompt, transcriptMatched) => {
this.emit("promptMatched", {
transcription: transcriptMatched,
promptDefinition: prompt.definition,
});
};
const lastMatchedCallback = (prompt, transcriptMatched) => {
matchedCallback(prompt, transcriptMatched);
this.emit("allPromptsMatched", {});
};
const prompts = this.promptDefinitions.map((prompt, index) => {
const callback = this.promptDefinitions.length - 1 === index
? lastMatchedCallback
: matchedCallback;
return this.promptFactory(prompt, this.call, callback, timedOutCallback);
});
const firstPrompt = prompts.shift();
let chain = firstPrompt;
prompts.forEach((item) => {
chain = chain.setNext(item);
});
const promptTranscriptionBuilder = new PromptTranscriptionBuilder_1.PromptTranscriptionBuilder();
const onTranscription = (event) => {
if (this.promptDefinitions.length === 0) {
this.emit("allPromptsMatched", {});
return;
}
promptTranscriptionBuilder.add(event);
this.emit("progress", {
transcription: promptTranscriptionBuilder.merge(),
});
firstPrompt.transcriptUpdated(promptTranscriptionBuilder);
};
this.transcriber.on("transcription", onTranscription);
}
}
/**
* Creates an ordered prompt collection
*/
function inOrder(promptDefinitions, promptFactory = defaultPromptFactory) {
return {
runAgainstCallFlow: (transcriber, call) => new RunningOrderedCallFlowInstructions(promptDefinitions, promptFactory, transcriber, call),
};
}
exports.inOrder = inOrder;