// ACD ( ) ASR ( ) require(Modules.ACD); require(Modules.ASR); var request, originalCall, callerid, statusInterval, asrTimeout, asr, queueName = 'MainQueue'; // VoxEngine.addEventListener(AppEvents.CallAlerting, handleInboundCall); // - function handleInboundCall(e) { originalCall = e.call; // callerid = e.callerid; // caller id // originalCall.addEventListener(CallEvents.Connected, handleCallConnected); originalCall.addEventListener(CallEvents.Failed, cleanup); originalCall.addEventListener(CallEvents.Disconnected, cleanup); // originalCall.answer(); } // function cleanup(e) { if (request) { // - request.cancel(); request = null; } // VoxEngine.terminate(); } // TTS function handlePlaybackFinished(e) { e.call.startPlayback("http://cdn.voximplant.com/newyear.mp3"); } // TTS function getNumEnding(iNumber, aEndings) { var sEnding, i; iNumber = iNumber % 100; if (iNumber >= 11 && iNumber <= 19) { sEnding = aEndings[2]; } else { i = iNumber % 10; switch (i) { case (1): sEnding = aEndings[0]; break; case (2): case (3): case (4): sEnding = aEndings[1]; break; default: sEnding = aEndings[2]; } } return sEnding; } // function handleCallConnected(e) { // e.call.say(" - !!! " + " ?", Language.RU_RUSSIAN_FEMALE); e.call.addEventListener(CallEvents.PlaybackFinished, handleIntroPlayed); } // function handleIntroPlayed(e) { e.call.removeEventListener(CallEvents.PlaybackFinished, handleIntroPlayed); // asr = VoxEngine.createASR(ASRLanguage.RUSSIAN_RU, [" ", "", "", " ", " ", " " ]); // asr.addEventListener(ASREvents.CaptureStarted, function (e) { clearTimeout(asrTimeout); }); // asr.addEventListener(ASREvents.Result, function (e) { // asr.stop(); // , SnegurQueue if ((e.text == ' ' || e.text == '' || e.text == '') && e.confidence >= 50) { originalCall.say("! .", Language.RU_RUSSIAN_FEMALE); queueName = 'SnegurQueue'; originalCall.addEventListener(CallEvents.PlaybackFinished, addToQueue); } else if ((e.text == ' ' || e.text == ' ' || e.text == ' ') && e.confidence >= 50) { // , - MorozQueue originalCall.say("! .", Language.RU_RUSSIAN_FEMALE); queueName = 'MorozQueue'; originalCall.addEventListener(CallEvents.PlaybackFinished, addToQueue); } else { // ( < 50%), - MainQueue originalCall.say(" .", Language.RU_RUSSIAN_FEMALE); originalCall.addEventListener(CallEvents.PlaybackFinished, addToQueue); } }); // ASR originalCall.sendMediaTo(asr); // 3 , asrTimeout = setTimeout(function () { asr.stop(); originalCall.say(" .", Language.RU_RUSSIAN_FEMALE); originalCall.addEventListener(CallEvents.PlaybackFinished, addToQueue); }, 3000); } // queueName function addToQueue(e) { Logger.write('Adding call to queue: '+queueName); originalCall.removeEventListener(CallEvents.PlaybackFinished, addToQueue); // TTS originalCall.addEventListener(CallEvents.PlaybackFinished, handlePlaybackFinished); // request = VoxEngine.enqueueACDRequest(queueName, callerid); // request.addEventListener(ACDEvents.Queued, function (acdevent) { request.getStatus(); }); // request.addEventListener(ACDEvents.Waiting, function (acdevent) { var minutesLeft = acdevent.ewt + 1, txt = ' '; if (queueName == 'SnegurQueue') txt = " "; else if (queueName == 'MorozQueue') txt = " "; originalCall.say(" " + acdevent.position + ". " + txt + " " + (acdevent.ewt + 1) + getNumEnding(minutesLeft, ['', '', '']), Language.RU_RUSSIAN_FEMALE); }); // - request.addEventListener(ACDEvents.OperatorReached, function (acdevent) { VoxEngine.sendMediaBetween(acdevent.operatorCall, originalCall); acdevent.operatorCall.sendMessage(JSON.stringify({ number: originalCall.callerid() })); acdevent.operatorCall.addEventListener(CallEvents.Disconnected, VoxEngine.terminate); clearInterval(statusInterval); }); // request.addEventListener(ACDEvents.Offline, function (acdevent) { clearInterval(statusInterval); // , if (queueName == 'SnegurQueue') { originalCall.say(" , . !", Language.RU_RUSSIAN_FEMALE); queueName = 'MainQueue'; originalCall.addEventListener(CallEvents.PlaybackFinished, addToQueue); } else if (queueName == 'MorozQueue') { originalCall.say(" , . !", Language.RU_RUSSIAN_FEMALE); queueName = 'MainQueue'; originalCall.addEventListener(CallEvents.PlaybackFinished, addToQueue); } else { // , originalCall.say(" , . " + " -! !", Language.RU_RUSSIAN_FEMALE); originalCall.addEventListener(CallEvents.PlaybackFinished, VoxEngine.Terminate); } }); // 30 statusInterval = setInterval(request.getStatus, 30000); }
vox.setOperatorACDStatus(VoxImplant.OperatorACDStatuses.Ready); // vox - VoxImplant.Client
Source: https://habr.com/ru/post/247345/
All Articles