UNPKG

ivr-tester

Version:

An automated testing framework for IVR call flows

71 lines (70 loc) 3.03 kB
"use strict"; 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;