diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..4cd6402 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,15 @@ +name: Build and Publish + +on: + push: + branches: + - master + - develop + workflow_dispatch: + +jobs: + build: + uses: mikopbx/.github-workflows/.github/workflows/extension-publish.yml@master + with: + initial_version: "1.113" + secrets: inherit \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/App/Controllers/ModuleSmartIVRController.php b/App/Controllers/ModuleSmartIVRController.php index c86472c..78976a1 100644 --- a/App/Controllers/ModuleSmartIVRController.php +++ b/App/Controllers/ModuleSmartIVRController.php @@ -69,6 +69,11 @@ public function indexAction(): void ]; $this->view->moduleCTI2Installed = PbxExtensionModules::count($parameters)>0; + $parameters = [ + 'conditions'=>'uniqid="ModuleCTIClientV5" and disabled!="1"' + ]; + $this->view->moduleCTI5Installed = PbxExtensionModules::count($parameters)>0; + $options = [ 'extensions' => $forwardingExtensions ]; diff --git a/App/Forms/ModuleSmartIVRForm.php b/App/Forms/ModuleSmartIVRForm.php index e4ab257..3088650 100644 --- a/App/Forms/ModuleSmartIVRForm.php +++ b/App/Forms/ModuleSmartIVRForm.php @@ -1,11 +1,22 @@ . + */ namespace Modules\ModuleSmartIVR\App\Forms; use Phalcon\Forms\Element\Check; @@ -15,10 +26,8 @@ use Phalcon\Forms\Element\Text; use Phalcon\Forms\Form; - class ModuleSmartIVRForm extends Form { - public function initialize($entity = null, $options = null) { $this->add(new Text('server1chost')); @@ -28,29 +37,29 @@ public function initialize($entity = null, $options = null) $this->add(new Text('database')); $this->add( new Numeric( - 'number_of_repeat', [ + 'number_of_repeat', + [ 'maxlength' => 2, 'style' => 'width: 80px;', 'defaultValue' => 1, - ] + ] ) ); // UseSSL - $checkAr = ['value' => null]; - if ($entity->useSSL) { - $checkAr = ['checked' => 'checked', 'value' => null]; - } - $this->add(new Check('useSSL', $checkAr)); + $this->addCheckBox('useSSL', intval($entity->useSSL) === 1); // Library $arrLibraryType = [ '1.0' => $this->translation->_('module_smivr_LibraryVer1'), '2.0' => $this->translation->_('module_smivr_LibraryVer2'), + '5.0' => $this->translation->_('module_smivr_LibraryVer5'), ]; $library = new Select( - 'library_1c', $arrLibraryType, [ + 'library_1c', + $arrLibraryType, + [ 'using' => [ 'id', 'name', @@ -58,45 +67,61 @@ public function initialize($entity = null, $options = null) 'useEmpty' => false, 'value' => $entity->library_1c, 'class' => 'ui selection dropdown library-type-select', - ] + ] ); $this->add($library); // FailOver Extension $extension = new Select( - 'failover_extension', $options['extensions'], [ + 'failover_extension', + $options['extensions'], + [ 'using' => [ 'id', 'name', ], 'useEmpty' => false, 'class' => 'ui selection dropdown search forwarding-select', - ] + ] ); $this->add($extension); // Timeout Extension $extension = new Select( - 'timeout_extension', $options['extensions'], [ + 'timeout_extension', + $options['extensions'], + [ 'using' => [ 'id', 'name', ], 'useEmpty' => false, 'class' => 'ui selection dropdown search forwarding-select', - ] + ] ); $this->add($extension); - // debug_mode - $checkAr = ['value' => null]; - if ($entity->debug_mode) { - $checkAr = ['checked' => 'checked', 'value' => null]; - } - $this->add(new Check('debug_mode', $checkAr)); + $this->addCheckBox('debug_mode', intval($entity->debug_mode) === 1); $this->add(new Numeric('last_responsible_time')); $this->add(new Numeric('last_responsible_duration')); + } + /** + * Adds a checkbox to the form field with the given name. + * Can be deleted if the module depends on MikoPBX later than 2024.3.0 + * + * @param string $fieldName The name of the form field. + * @param bool $checked Indicates whether the checkbox is checked by default. + * @param string $checkedValue The value assigned to the checkbox when it is checked. + * @return void + */ + public function addCheckBox(string $fieldName, bool $checked, string $checkedValue = 'on'): void + { + $checkAr = ['value' => null]; + if ($checked) { + $checkAr = ['checked' => $checkedValue,'value' => $checkedValue]; + } + $this->add(new Check($fieldName, $checkAr)); } -} \ No newline at end of file +} diff --git a/App/Views/index.volt b/App/Views/index.volt index d9093d9..5034c64 100644 --- a/App/Views/index.volt +++ b/App/Views/index.volt @@ -12,6 +12,11 @@ {{ form.render('library_1c') }} + {% if moduleCTI5Installed %} +
{{ t._("module_smivr_WeGetSettingsFromCTIClientV5") }}
+ {% else %} +
{{ t._("module_smivr_LibraryVer5NotInstalled") }}
+ {% endif %} {% if moduleCTI2Installed %}
{{ t._("module_smivr_WeGetSettingsFromCTIClient") }}
{% else %} diff --git a/Lib/AGICallLogic.php b/Lib/AGICallLogic.php index 0f9140c..dd63598 100644 --- a/Lib/AGICallLogic.php +++ b/Lib/AGICallLogic.php @@ -32,6 +32,8 @@ class AGICallLogic extends PbxExtensionBase private string $contextInternal = 'internal'; private string $number; private array $messages = []; + private int $maxMessagesCount = 100; // Maximum number of messages to store + private int $maxMessageLength = 1024; // Maximum length of each message private WebService1C $web_service_1C; private $count_of_repeat_ivr; private $timeout_extension; @@ -271,12 +273,17 @@ private function text2speech($arr_text_to_speech): ?string 'logger' => $this->logger, ]; - switch ($ttsSettings->tts_service) { - case 'Yandex': + switch (strtoupper($ttsSettings->tts_service)) { + case 'YANDEX': { $tts = new YandexTTS($settings); break; } + case 'MIKO': + { + $tts = new MikoTTS($settings); + break; + } case 'CRT': { $tts = new SpeechProTTS($settings); @@ -306,9 +313,20 @@ private function text2speech($arr_text_to_speech): ?string */ public function Verbose($value): void { + // Truncate value if it's a string and too long + if (is_string($value) && strlen($value) > $this->maxMessageLength) { + $value = substr($value, 0, $this->maxMessageLength) . '... [truncated]'; + } + + // Add to messages array, keeping only the most recent ones $this->messages[] = $value; + if (count($this->messages) > $this->maxMessagesCount) { + array_shift($this->messages); + } + if ($this->agi !== null) { - $this->agi->verbose('SMART IVR VERBOSE: ' . escapeshellarg($value), 3); + $truncated_value = is_string($value) ? $value : json_encode($value); + $this->agi->verbose('SMART IVR VERBOSE: ' . escapeshellarg($truncated_value), 3); } } @@ -397,42 +415,44 @@ private function getIVRPhrase($phraseId, $extension = null): string } case 'ConnectionToExtension': { - $parameters = [ - 'models' => [ - 'Extensions' => Extensions::class, - ], - 'columns' => [ - 'username' => 'Users.username', - ], - 'conditions' => 'Extensions.number = :extension: AND Extensions.is_general_user_number=1', - 'bind' => [ - 'extension' => $extension, - ], - 'joins' => [ - 'Users' => [ - 0 => Users::class, - 1 => 'Users.id=Extensions.userid', - 2 => 'Users', - 3 => 'INNER', + $userName = $this->web_service_1C->getUserInfoV5($extension); + if($userName === null){ + $parameters = [ + 'models' => [ + 'Extensions' => Extensions::class, ], - ], - 'limit' => 1, - ]; - $query = $this->di->get('modelsManager')->createBuilder($parameters)->getQuery(); - $extensions = $query->execute(); - $extensionRecord = null; - foreach ($extensions as $record) { - $extensionRecord = $record; - break; - } - $abonentName = ''; - if ($extensionRecord) { - $abonentName = $extensionRecord->username; + 'columns' => [ + 'username' => 'Users.username', + ], + 'conditions' => 'Extensions.number = :extension: AND Extensions.is_general_user_number=1', + 'bind' => [ + 'extension' => $extension, + ], + 'joins' => [ + 'Users' => [ + 0 => Users::class, + 1 => 'Users.id=Extensions.userid', + 2 => 'Users', + 3 => 'INNER', + ], + ], + 'limit' => 1, + ]; + $query = $this->di->get('modelsManager')->createBuilder($parameters)->getQuery(); + $extensions = $query->execute(); + $extensionRecord = null; + foreach ($extensions as $record) { + $extensionRecord = $record; + break; + } + if ($extensionRecord) { + $userName = $extensionRecord->username; + } } - if (empty($abonentName)) { + if (empty($userName)) { $resultText = 'Соединяю с номером ' . $extension; } else { - $resultText = 'Соединяю с сотрудником ' . $abonentName; + $resultText = 'Соединяю с сотрудником ' . $userName; } break; } diff --git a/Lib/MikoPBXVersion.php b/Lib/MikoPBXVersion.php new file mode 100644 index 0000000..1d067c7 --- /dev/null +++ b/Lib/MikoPBXVersion.php @@ -0,0 +1,102 @@ +. + */ +namespace Modules\ModuleSmartIVR\Lib; + +use MikoPBX\Common\Models\PbxSettings; + +class MikoPBXVersion +{ + /** + * Return true if current version of PBX based on Phalcon 5+ + * @return bool + */ + public static function isPhalcon5Version(): bool + { + $pbxVersion = PbxSettings::getValueByKey('PBXVersion'); + return version_compare($pbxVersion, '2024.2.30', '>'); + } + + /** + * Return Di interface for the current version of PBX + * @return \Phalcon\Di\DiInterface|null + */ + public static function getDefaultDi() + { + if (self::isPhalcon5Version()) { + return \Phalcon\Di\Di::getDefault(); + } else { + return \Phalcon\Di::getDefault(); + } + } + + /** + * Return Validation class for the current version of PBX + * @return class-string<\Phalcon\Filter\Validation>|class-string<\Phalcon\Validation> + */ + public static function getValidationClass(): string + { + if (self::isPhalcon5Version()) { + return \Phalcon\Filter\Validation::class; + } else { + return \Phalcon\Validation::class; + } + } + + /** + * Return Uniqueness class for the current version of PBX + * @return class-string<\Phalcon\Filter\Validation\Validator\Uniqueness>|class-string<\Phalcon\Validation\Validator\Uniqueness> + */ + public static function getUniquenessClass(): string + { + if (self::isPhalcon5Version()) { + return \Phalcon\Filter\Validation\Validator\Uniqueness::class; + } else { + return \Phalcon\Validation\Validator\Uniqueness::class; + } + } + + /** + * Return Text class for the current version of PBX + * + * @return class-string<\MikoPBX\Common\Library\Text>|class-string<\Phalcon\Text> + */ + public static function getTextClass(): string + { + if (self::isPhalcon5Version()) { + return \MikoPBX\Common\Library\Text::class; + } else { + return \Phalcon\Text::class; + } + } + + /** + * Return Logger class for the current version of PBX + * + * @return class-string<\Phalcon\Logger\Logger>|class-string<\Phalcon\Logger> + */ + public static function getLoggerClass(): string + { + if (self::isPhalcon5Version()) { + return \Phalcon\Logger\Logger::class; + } else { + return \Phalcon\Logger::class; + } + } +} diff --git a/Lib/MikoTTS.php b/Lib/MikoTTS.php new file mode 100644 index 0000000..5e92078 --- /dev/null +++ b/Lib/MikoTTS.php @@ -0,0 +1,257 @@ +voices = [ + 'oksana', + 'jane', + 'omazh', + 'zahar', + 'ermil', + 'alena', + 'filipp', + 'marina', + ]; + + $this->messages = []; + + $this->ttsDir = $settings['ttsDir']; + $this->logger = $settings['logger']; + } + + /** + * Генерация звукового файла + * + * @param $text - текст для генерации + * @param $voice - Голос + * + * @return string|null - путь к файлу генерации без расширения + */ + public function Synthesize($text, $voice): ?string + { + if ( ! in_array($voice, $this->voices, true)) { + $this->logger->writeInfo("Voice $voice doesn't exist. We will use default jane."); + $voice = 'jane'; + } + + $this->logger->writeInfo('Start synthesis by MIKO TTS'); + $this->logger->writeInfo($text); + + if (is_array($text) && count($text) > 1) { + $result = $this->makeSpeechFromTextArray($text, $voice); + } elseif (is_array($text)) { + $text = implode($text); + $text = urldecode($text); + $result = $this->makeSpeechFromText($text, $voice); + } else { + $result = $this->makeSpeechFromText($text, $voice); + } + if ( ! empty($result)) { + $this->logger->writeInfo("Synthesis result file: $result"); + } else { + $this->logger->writeError('Synthesis failure'); + $this->messages[] = 'Synthesis by MIKO TTS failure'; + } + + return $result; + } + + /** + * Генерирует единый файл записи из массива текстовых фраз. + * + * @param $arr_text_to_speech - array of phrases + * @param $voice + * + * @return null|string + */ + private function makeSpeechFromTextArray($arr_text_to_speech, $voice): ?string + { + $this->messages[] = 'We got array of sentences'; + $trim = 0; + $ivr_extension = '.wav'; + $ivr_filename = md5(implode($arr_text_to_speech) . $voice); + $exception = false; + + // Проверим нет ли ранее сгенерированного полного файла записи. + $fullFileName = $this->ttsDir . $ivr_filename . $ivr_extension; + if (file_exists($fullFileName) && filesize($fullFileName) > 0) { + $this->logger->writeInfo( + 'TTS found in the cache for: ' . urldecode( + implode( + ' ', + $arr_text_to_speech + ) + ) . ' file: ' . $fullFileName + ); + + return $this->ttsDir . $ivr_filename; + } + + $i = 0; // Порядковый номер фразы в массиве. + $extension = 'raw'; + $soxarg = '-r 8000 -e signed-integer -b 16 -c 1 -t'; // Настройки для работы с raw файлами + + $resultExecArg = ''; // Строка с параметрами SOX для склеивания файла + $filesList = []; + foreach ($arr_text_to_speech as $text_to_speech) { // Обойдем все фразы в массиве текстов + $record_file = $this->makeSpeechFromText($text_to_speech, $voice); + if ($record_file === null) { // Ошибка генерации. используем запись по умолчанию + $exception = true; + break; + } + if (file_exists("{$record_file}.wav")) { + // Для нового варианта API будет этот формат. + $extension = 'wav'; + } + + if ($trim > 0) { + $command = "sox {$soxarg} {$extension} {$record_file}.{$extension} /tmp/" . basename( + $record_file + ) . ".{$extension}"; + // Нужно тримировать записи + if ($i > 0) { + $command .= " trim {$trim}"; + } + exec("$command 2>&1"); + $resultExecArg .= " {$soxarg} {$extension} /tmp/" . basename($record_file) . ".{$extension}"; + $filesList[] = '/tmp/' . basename($record_file) . ".{$extension}"; + $filesList[] = "{$record_file}.wav"; + } else { + $resultExecArg .= " $soxarg {$extension} {$record_file}.{$extension}"; + } + $i++; + } + + $result_file = null; + if ( ! $exception) { + $fullFileName = $this->ttsDir . $ivr_filename . $ivr_extension; + exec('sox ' . $resultExecArg . ' ' . $fullFileName . ' 2>&1'); + if (file_exists($fullFileName) && filesize($fullFileName) > 0) { + $result_file = $this->ttsDir . $ivr_filename; + } + } + if (count($filesList) > 0) { + $command = implode(' ', $filesList); + exec("rm -rf $command 2>&1"); + } + + return $result_file; + } + + /** + * Генерирует и скачивает в на внешний диск файл с речью. + * + * @param $text_to_speech - генерируемый текст + * @param $voice - голос + * + * @return null|string + * + */ + + private function makeSpeechFromText($text_to_speech, $voice): ?string + { + $speech_extension = '.mp3'; + $result_extension = '.wav'; + $speech_filename = md5($text_to_speech . $voice); + $fullFileName = $this->ttsDir . $speech_filename . $result_extension; + $fullFileNameFromService = $this->ttsDir . $speech_filename . $speech_extension; + + // Проверим вдург мы ранее уже генерировали такой файл. + if (file_exists($fullFileName) && filesize($fullFileName) > 0) { + $this->logger->writeInfo( + 'TTS found in the cache for: ' . urldecode($text_to_speech . $voice) . ' file: ' . $fullFileName + ); + + return $this->ttsDir . $speech_filename; + } + + // Файла нет в кеше, будем генерировать новый. + $post_vars = [ + 'lang' => 'ru-RU', + 'format' => 'mp3', + 'voice' => $voice, + 'text' => urldecode($text_to_speech), + ]; + + $fp = fopen($fullFileNameFromService, 'w'); + $curl = curl_init(); + + $headers = [ + "Authorization: Key ".PbxSettings::getValueByKey('PBXLicense'), + "Content-Type: application/json", + "X-Request-ID: ".time(), + ]; + curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); + curl_setopt($curl, CURLOPT_FILE, $fp); + curl_setopt($curl, CURLOPT_TIMEOUT, 10); + curl_setopt($curl, CURLOPT_POST, true); + curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($post_vars)); + curl_setopt($curl, CURLOPT_URL, 'https://speech.mikolab.ru/v1/tts/synthesize'); + curl_exec($curl); + $http_code = (int)curl_getinfo($curl, CURLINFO_HTTP_CODE); + curl_close($curl); + fclose($fp); + + if (200 === $http_code && file_exists($fullFileNameFromService) && filesize($fullFileNameFromService) > 0) { + $this->logger->writeInfo( + 'Successful generation into: ' . $fullFileNameFromService + . ' file size: ' . filesize($fullFileNameFromService) + ); + $soxPath = Util::which('sox'); + shell_exec("$soxPath -v 0.99 -G '$fullFileNameFromService' -c 1 -r 8000 -b 16 '$fullFileName'"); + + if (file_exists($fullFileName)) { + // Удалим raw файл. + @unlink($fullFileNameFromService); + + // Файл успешно сгененрирован + return $this->ttsDir . $speech_filename; + } + } else { + if (file_exists($fullFileNameFromService)) { + @unlink($fullFileNameFromService); + } + } + $errorDescription = "TTSConnectionError: when we are trying to get sound from + MIKO we got http-code: $http_code" . PHP_EOL ; + $this->messages[] = $errorDescription; + $this->logger->writeError($errorDescription); + + return null; + } + + /** + * Return error or verbose messages + * + * @return mixed + */ + public function getMessages(): array + { + return $this->messages; + } +} \ No newline at end of file diff --git a/Lib/SmartIVRConf.php b/Lib/SmartIVRConf.php index 2a4993b..8c173d0 100644 --- a/Lib/SmartIVRConf.php +++ b/Lib/SmartIVRConf.php @@ -10,7 +10,6 @@ use MikoPBX\Common\Models\Extensions; use MikoPBX\Common\Models\ModelsBase; -use MikoPBX\Core\System\Util; use MikoPBX\Modules\Config\ConfigClass; use MikoPBX\Core\System\PBX; use MikoPBX\PBXCoreREST\Lib\PBXApiResult; diff --git a/Lib/WebService1C.php b/Lib/WebService1C.php index c4dce08..3e13288 100644 --- a/Lib/WebService1C.php +++ b/Lib/WebService1C.php @@ -147,7 +147,7 @@ private function post1cSoapRequest($number, $wslink, $wsfunction, $wsuri, $relog $errorDescription = 'ConnectionToCRMError: No access to 1C:Enterprise.' . PHP_EOL . "We use the next params: server:{$this->server_1c_host}," . "port:{$this->server_1c_port}, login: {$this->login}, " . - "password: {$this->secret}, method: ${wsfunction}," . PHP_EOL . + "password: {$this->secret}, method: $wsfunction," . PHP_EOL . " url: $url" . PHP_EOL . 'We try POST xml: ' . $xmlDocument; $this->messages[] = $errorDescription; $this->logger->writeError($errorDescription); @@ -156,7 +156,7 @@ private function post1cSoapRequest($number, $wslink, $wsfunction, $wsuri, $relog return $this->post1cSoapRequest($number, $wslink, $wsfunction, $wsuri, true); } elseif (in_array($http_code, [401, 403], false)) { $errorDescription = "ConnectionToCRMError: HTTP code $http_code check username or password 1C:Enterprise. - Method: ${wsfunction}."; + Method: $wsfunction."; $this->messages[] = $errorDescription; $this->logger->writeError($errorDescription); $have_error = true; @@ -184,6 +184,132 @@ private function post1cSoapRequest($number, $wslink, $wsfunction, $wsuri, $relog return $result; } + /** + * Получение настроек IVR для версии 2.0 / 4.0. + * @param string $number + * @param int $timeout + * @return array|null + */ + private function getIvrDataV2(string $number, int $timeout):?array + { + $arr_textToSpeech = null; + $url = "http://127.0.0.1:8224/getivrtext?number={$number}"; + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + $input_json = curl_exec($ch); + $input_obj = json_decode($input_json, false); + curl_close($ch); + if ($input_json !== null + && json_last_error() === JSON_ERROR_NONE + && property_exists($input_obj,'result') + && $input_obj->result==='Success'){ + $this->tts_settings = $input_obj->data; + $this->tts_settings->auth = $this->fillTTSAuthSettings(); + $arr_textToSpeech = $input_obj->data->texttospeech; + } elseif($input_json !== null + && json_last_error() === JSON_ERROR_NONE + && property_exists($input_obj,'result') + && property_exists($input_obj,'cause') + && $input_obj->result==='Error') { + $errorDescription = 'CRM returns error: '.$input_obj->cause . PHP_EOL . + 'Call will be redirected to failover extension'; + $this->messages[] = $errorDescription; + $this->logger->writeError($errorDescription); + } else { + $errorDescription = 'ConnectionToCRMError: Error parse data from 1C:Enterprise.' . PHP_EOL . + 'Call will be redirected to failover extension'; + $this->messages[] = $errorDescription; + $this->logger->writeError($errorDescription); + } + return $arr_textToSpeech; + } + + /** + * Получение настроек IVR для версии 5.0. + * @param string $number + * @param int $timeout + * @return array|null + */ + private function getIvrDataV5(string $number, int $timeout):?array + { + $arr_textToSpeech = null; + $url = "http://127.0.0.1:9222/ivr/text?number=$number"; + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + $input_json = curl_exec($ch); + $input_obj = json_decode($input_json, false); + curl_close($ch); + if ($input_json !== null + && json_last_error() === JSON_ERROR_NONE + && property_exists($input_obj,'code') + && $input_obj->code===200){ + $this->tts_settings = $input_obj->result; + $this->tts_settings->auth = $this->fillTTSAuthSettings(); + $arr_textToSpeech = $input_obj->result->texttospeech; + } elseif($input_json !== null + && json_last_error() === JSON_ERROR_NONE + && property_exists($input_obj,'code') + && property_exists($input_obj,'ok') + && ($input_obj->ok!==true || $input_obj->code!==200) ) { + $errorDescription = 'CRM v5.0 returns error: '.$input_obj->code . PHP_EOL . + 'Call will be redirected to failover extension'; + $this->messages[] = $errorDescription; + $this->logger->writeError($errorDescription); + } else { + $errorDescription = 'ConnectionToCRMError: Error parse data from 1C:Enterprise API 5.0.' . PHP_EOL . + 'Call will be redirected to failover extension'; + $this->messages[] = $errorDescription; + $this->logger->writeError($errorDescription); + } + return $arr_textToSpeech; + } + + /** + * Возвращает имя сотрудника в именительном падеже + * @param string $number + * @param int $timeout + * @return void + */ + public function getUserInfoV5(string $number, int $timeout=2):?string + { + if ($this->library_1c !== '5.0') { + return null; + } + $userName = null; + $url = "http://127.0.0.1:9222/ivr/employee?number=$number"; + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + $input_json = curl_exec($ch); + $input_obj = json_decode($input_json, false); + curl_close($ch); + + if ($input_json !== null + && json_last_error() === JSON_ERROR_NONE + && property_exists($input_obj,'code') + && $input_obj->code===200){ + $userName = $input_obj->result->presence[0]??$input_obj->result->name; + } elseif($input_json !== null + && json_last_error() === JSON_ERROR_NONE + && property_exists($input_obj,'code') + && property_exists($input_obj,'ok') + && ($input_obj->ok!==true || $input_obj->code!==200) ) { + $errorDescription = 'CRM get username v5.0 returns error: '.$input_obj->code; + $this->messages[] = $errorDescription; + $this->logger->writeError($errorDescription); + } else { + $errorDescription = 'ConnectionToCRMError: Error parse data "get username" from 1C:Enterprise API 5.0.'; + $this->messages[] = $errorDescription; + $this->logger->writeError($errorDescription); + } + return $userName; + } + /** * Получаем из 1С IVR меню * @@ -197,35 +323,9 @@ public function getIvrMenuText(string $number, int $timeout=5): ?array $arr_textToSpeech = null; try { if ($this->library_1c === '2.0') { - $url = "http://127.0.0.1:8224/getivrtext?number={$number}"; - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - $input_json = curl_exec($ch); - $input_obj = json_decode($input_json, false); - curl_close($ch); - if ($input_json !== null - && json_last_error() === JSON_ERROR_NONE - && property_exists($input_obj,'result') - && $input_obj->result==='Success'){ - $this->tts_settings = $input_obj->data; - $this->tts_settings->auth = $this->fillTTSAuthSettings(); - $arr_textToSpeech = $input_obj->data->texttospeech; - } elseif($input_json !== null - && json_last_error() === JSON_ERROR_NONE - && property_exists($input_obj,'result') - && $input_obj->result==='Error') { - $errorDescription = 'ConnectionToCRMError: '.$input_obj->data . PHP_EOL . - 'Call will be redirected to failover extension'; - $this->messages[] = $errorDescription; - $this->logger->writeError($errorDescription); - } else { - $errorDescription = 'ConnectionToCRMError: Error parse data from 1C:Enterprise.' . PHP_EOL . - 'Call will be redirected to failover extension'; - $this->messages[] = $errorDescription; - $this->logger->writeError($errorDescription); - } + $arr_textToSpeech = $this->getIvrDataV2($number, $timeout); + } elseif ($this->library_1c === '5.0') { + $arr_textToSpeech = $this->getIvrDataV5($number, $timeout); } else { $endpoint = 'MIKO_IVRGenerator4SmartTransfer.1cws'; $ivrLink = "$this->database/ws/$endpoint"; @@ -255,10 +355,10 @@ public function getIvrMenuText(string $number, int $timeout=5): ?array */ private function fillTTSAuthSettings() { - $tts_service = $this->tts_settings->tts_service; + $tts_service = strtoupper($this->tts_settings->tts_service); $result = []; switch ($tts_service) { - case 'Yandex': + case 'YANDEX': { if (property_exists($this->tts_settings, 'api_key') && isset($this->tts_settings->api_key)) { @@ -266,6 +366,10 @@ private function fillTTSAuthSettings() } break; } + case 'MIKO':{ + $result = ''; + break; + } case 'CRT': { if (property_exists($this->tts_settings, 'auth') diff --git a/Messages/az.php b/Messages/az.php index fb942ae..36ad8d9 100644 --- a/Messages/az.php +++ b/Messages/az.php @@ -18,8 +18,8 @@ 'module_smivr_TimeoutExtForeignKey' => 'Ağıllı marşrutlaşdırma modulunda standart nömrə kimi istifadə olunur', 'module_smivr_FailoverExtForeign' => 'Ağıllı marşrutlaşdırma modulunda təcili yardım nömrəsi kimi istifadə olunur', 'module_smivr_lastResponsibleDuration' => 'Saniyələrin sayı, son məsul şəxsə nə qədər zəng etmək lazımdır', - 'module_smivr_LibraryVer2' => 'Versiya 2.0', - 'module_smivr_LibraryVer2NotInstalled' => '1C üçün telefon paneli 2.0 modulunu quraşdırın, onu işə salın və konfiqurasiya edin', + 'module_smivr_LibraryVer2' => 'Versiya 2.0/4.0', + 'module_smivr_LibraryVer2NotInstalled' => '1C üçün telefon paneli 4.0 modulunu quraşdırın, onu işə salın və konfiqurasiya edin', 'module_smivr_Library1CType' => '1C tərəfində inteqrasiya altsisteminin versiyası', 'module_smivr_Server1CHostPort' => 'Server ünvanı və port 1C', 'module_smivr_UseSSLConnection' => 'SSL istifadə edin', @@ -41,6 +41,6 @@ 'module_smivr_UpdateStatus' => 'Status yeniləməsi', 'module_smivr_UpdateRecord' => 'Modul statusu dəyişdikdə yenilənən obyektlər:
', 'module_smivr_ErrorOnMakeTestIVR' => 'Səs menyusunun sınaq yaradılması zamanı xəta', - 'module_smivr_WeGetSettingsFromCTIClient' => '“Telefoniya Paneli 2.0 1C üçün” modulundan rabitə kanalı istifadə olunacaq', + 'module_smivr_WeGetSettingsFromCTIClient' => '"Telefoniya Paneli 4.0 1C üçün" modulundan rabitə kanalı istifadə olunacaq', 'module_smivr_lastResponsibleTime' => 'Sahibi tapmaq üçün CDR-ni təhlil etmək üçün dəqiqələrin sayı', ]; diff --git a/Messages/cs.php b/Messages/cs.php index a4e141a..6223896 100644 --- a/Messages/cs.php +++ b/Messages/cs.php @@ -1,6 +1,6 @@ 'Bude použit komunikační kanál z modulu "Telephony Panel 2.0 for 1C".', + 'module_smivr_WeGetSettingsFromCTIClient' => 'Bude použit komunikační kanál z modulu "Telephony Panel 4.0 for 1C".', 'module_smivr_FailoverExtForeign' => 'Používá se jako nouzové číslo v modulu chytrého směrování', 'module_smivr_TimeoutExtForeignKey' => 'Používá se jako výchozí číslo v modulu chytrého směrování', 'module_smivr_ErrorOnMakeTestIVR' => 'Chyba při generování testovacího hlasového menu', @@ -28,9 +28,9 @@ 'module_smivr_Library1CType' => 'Verze integračního subsystému na straně 1C', 'module_smivr_lastResponsibleDuration' => 'Počet sekund, jak dlouho volat poslední zodpovědné osobě', 'module_smivr_lastResponsibleTime' => 'Počet minut, po které by měla být CDR analyzována, aby se našla odpovědná osoba', - 'module_smivr_LibraryVer2NotInstalled' => 'Nainstalujte modul telefonního panelu 2.0 pro 1C, povolte jej a nakonfigurujte', + 'module_smivr_LibraryVer2NotInstalled' => 'Nainstalujte modul telefonního panelu 4.0 pro 1C, povolte jej a nakonfigurujte', 'module_smivr_EnableDebugMode' => 'Povolit režim ladění modulu', - 'module_smivr_LibraryVer2' => 'Verze 2.0', + 'module_smivr_LibraryVer2' => 'Verze 2.0/4.0', 'module_smivr_LibraryVer1' => 'Verze 1.0', 'SubHeaderModuleSmartIVR' => 'Generování hlasového menu za chodu podle dat CRM systému', 'BreadcrumbModuleSmartIVR' => 'Modul pro inteligentní směrování hovorů (Smart IVR)', diff --git a/Messages/da.php b/Messages/da.php index 0608077..06d1fc3 100644 --- a/Messages/da.php +++ b/Messages/da.php @@ -1,6 +1,6 @@ 'Kommunikationskanalen fra modulet "Telefonipanel 2.0 for 1C" vil blive brugt', + 'module_smivr_WeGetSettingsFromCTIClient' => 'Kommunikationskanalen fra modulet "Telefonipanel 4.0 for 1C" vil blive brugt', 'module_smivr_FailoverExtForeign' => 'Anvendes som nødnummer i smart routing-modul', 'module_smivr_TimeoutExtForeignKey' => 'Bruges som standardnummer i smart routing-modul', 'module_smivr_ErrorOnMakeTestIVR' => 'Fejl under testgenerering af stemmemenuen', @@ -28,7 +28,7 @@ 'module_smivr_Library1CType' => 'Integrationsdelsystemversion på 1C-siden', 'module_smivr_lastResponsibleDuration' => 'Antal sekunder, hvor længe skal du ringe til den sidste ansvarlige', 'module_smivr_lastResponsibleTime' => 'Det antal minutter, som CDR\'en skal analyseres for for at finde den ansvarlige', - 'module_smivr_LibraryVer2NotInstalled' => 'Installer telefonipanel 2.0-modulet til 1C, aktiver og konfigurer det', + 'module_smivr_LibraryVer2NotInstalled' => 'Installer telefonipanel 4.0-modulet til 1C, aktiver og konfigurer det', 'module_smivr_EnableDebugMode' => 'Aktiver modulfejlfindingstilstand', 'module_smivr_LibraryVer1' => 'Version 1.0', 'SubHeaderModuleSmartIVR' => 'Generering af en stemmemenu på farten i henhold til CRM-systemdata', @@ -42,5 +42,5 @@ */ 'mo_ModuleSmartIVR' => 'Smart routing modul', 'module_smivr_Disconnected1C' => 'Forbindelsesfejl med 1C', - 'module_smivr_LibraryVer2' => 'Version 2.0', + 'module_smivr_LibraryVer2' => 'Version 2.0/4.0', ]; diff --git a/Messages/de.php b/Messages/de.php index fb89635..828e53b 100644 --- a/Messages/de.php +++ b/Messages/de.php @@ -1,6 +1,6 @@ 'Es wird der Kommunikationskanal aus dem Modul "Telephony Panel 2.0 for 1C" verwendet', + 'module_smivr_WeGetSettingsFromCTIClient' => 'Es wird der Kommunikationskanal aus dem Modul „Telephony Panel 4.0 für 1C“ verwendet', 'module_smivr_FailoverExtForeign' => 'Wird als Notrufnummer im Smart Routing Modul verwendet', 'module_smivr_TimeoutExtForeignKey' => 'Wird als Standardnummer im Smart-Routing-Modul verwendet', 'module_smivr_ErrorOnMakeTestIVR' => 'Fehler bei der Testgenerierung des Sprachmenüs', @@ -27,9 +27,9 @@ 'module_smivr_Library1CType' => 'Version des Integrationssubsystems auf der 1C-Seite', 'module_smivr_lastResponsibleDuration' => 'Anzahl der Sekunden, wie lange die letzte verantwortliche Person angerufen werden soll', 'module_smivr_lastResponsibleTime' => 'Die Anzahl der Minuten, für die das CDR analysiert werden sollte, um den Verantwortlichen zu finden', - 'module_smivr_LibraryVer2NotInstalled' => 'Installieren Sie das Telefonie-Panel 2.0-Modul für 1C, aktivieren und konfigurieren Sie es', + 'module_smivr_LibraryVer2NotInstalled' => 'Installieren Sie das Telefonie-Panel 4.0-Modul für 1C, aktivieren und konfigurieren Sie es', 'module_smivr_EnableDebugMode' => 'Modul Debug-Modus aktivieren', - 'module_smivr_LibraryVer2' => 'Version 2.0', + 'module_smivr_LibraryVer2' => 'Version 2.0/4.0', 'module_smivr_LibraryVer1' => 'Version 1.0', 'SubHeaderModuleSmartIVR' => 'Generierung eines Sprachmenüs on the fly gemäß CRM-Systemdaten', 'BreadcrumbModuleSmartIVR' => 'Smart Call Routing-Modul (Smart IVR)', diff --git a/Messages/el.php b/Messages/el.php index efa86ab..a714fe5 100644 --- a/Messages/el.php +++ b/Messages/el.php @@ -4,7 +4,7 @@ 'module_smivr_lastResponsibleTime' => 'Ο αριθμός των λεπτών για την ανάλυση του CDR για να βρεθεί ο ιδιοκτήτης', 'module_smivr_FailoverExtForeign' => 'Χρησιμοποιείται ως αριθμός έκτακτης ανάγκης στη μονάδα έξυπνης δρομολόγησης', 'module_smivr_TimeoutExtForeignKey' => 'Χρησιμοποιείται ως προεπιλεγμένος αριθμός στην έξυπνη μονάδα δρομολόγησης', - 'module_smivr_WeGetSettingsFromCTIClient' => 'Θα χρησιμοποιηθεί το κανάλι επικοινωνίας από τη μονάδα "Telephony Panel 2.0 for 1C"', + 'module_smivr_WeGetSettingsFromCTIClient' => 'Θα χρησιμοποιηθεί το κανάλι επικοινωνίας από τη μονάδα "Telephony Panel 4.0 for 1C".', 'module_smivr_ErrorOnMakeTestIVR' => 'Σφάλμα κατά τη δοκιμαστική δημιουργία του φωνητικού μενού', 'module_smivr_UpdateRecord' => 'Τα αντικείμενα ενημερώθηκαν όταν άλλαξε η κατάσταση της μονάδας:
', 'module_smivr_UpdateStatus' => 'Ενημέρωση κατάστασης', @@ -30,8 +30,8 @@ 'module_smivr_UseSSLConnection' => 'Χρησιμοποιήστε SSL', 'module_smivr_Server1CHostPort' => 'Διεύθυνση διακομιστή και θύρα 1C', 'module_smivr_Library1CType' => 'Έκδοση του υποσυστήματος ενσωμάτωσης στην πλευρά 1C', - 'module_smivr_LibraryVer2NotInstalled' => 'Εγκαταστήστε τη μονάδα τηλεφωνίας 2.0 για 1C, ενεργοποιήστε την και διαμορφώστε την', - 'module_smivr_LibraryVer2' => 'Έκδοση 2.0', + 'module_smivr_LibraryVer2NotInstalled' => 'Εγκαταστήστε τη μονάδα τηλεφωνίας 4.0 για 1C, ενεργοποιήστε την και διαμορφώστε την', + 'module_smivr_LibraryVer2' => 'Έκδοση 2.0/4.0', 'module_smivr_LibraryVer1' => 'Έκδοση 1.0', 'SubHeaderModuleSmartIVR' => 'Δημιουργία φωνητικών μενού on-the-fly σύμφωνα με τα δεδομένα του συστήματος CRM', 'BreadcrumbModuleSmartIVR' => 'Έξυπνη μονάδα δρομολόγησης κλήσεων (Smart IVR)', diff --git a/Messages/en.php b/Messages/en.php index 5eab59d..afb7c10 100644 --- a/Messages/en.php +++ b/Messages/en.php @@ -11,7 +11,7 @@ 'BreadcrumbModuleSmartIVR' => 'The Smart IVR module', 'SubHeaderModuleSmartIVR' => 'Generate a personal IVR menu for each customer on the fly. This module use 1C:Enterprise as CRM.', 'module_smivr_LibraryVer1' => 'Version 1.0', - 'module_smivr_LibraryVer2' => 'Version 2.0', + 'module_smivr_LibraryVer2' => 'Version 2.0/4.0', 'module_smivr_Library1CType' => '1C SmartIVR library', 'module_smivr_Server1CHostPort' => 'Server 1C:Enterprise host and port', 'module_smivr_UseSSLConnection' => 'Use SSL', @@ -34,13 +34,13 @@ 'module_smivr_Disconnected1C' => 'Error on connection to 1С', 'module_smivr_DisconnectedTTS' => 'Error on connection to TTS service', 'module_smivr_UpdateRecord' => 'On module state change we are changing records:', - 'module_smivr_WeGetSettingsFromCTIClient' => 'The communication channel from the module "Telephony Panel 2.0 for 1C" will be used', + 'module_smivr_WeGetSettingsFromCTIClient' => 'The communication channel from the module "Telephony Panel 4.0 for 1C" will be used', 'module_smivr_FailoverExtForeign' => 'Used as emergency number in smart routing module', 'module_smivr_TimeoutExtForeignKey' => 'Used as default number in smart routing module', 'module_smivr_ErrorOnMakeTestIVR' => 'Error during test generation of the voice menu', 'module_smivr_ValidateTimeOutExtensionNotEqualTo' => 'Default number is incorrect', 'module_smivr_ValidateFailOverExtensionNotEqualTo' => 'Incorrect emergency number', - 'module_smivr_LibraryVer2NotInstalled' => 'Install the telephony panel 2.0 module for 1C, enable and configure it', + 'module_smivr_LibraryVer2NotInstalled' => 'Install the telephony panel 4.0 module for 1C, enable and configure it', 'module_smivr_lastResponsibleDuration' => 'Number of seconds, how long to call the last person in charge', 'module_smivr_lastResponsibleTime' => 'The number of minutes for which the CDR should be analyzed to find the responsible', ]; diff --git a/Messages/es.php b/Messages/es.php index 2c4b14c..2fd0a9b 100644 --- a/Messages/es.php +++ b/Messages/es.php @@ -1,6 +1,6 @@ 'Se utilizará el canal de comunicación del módulo "Telephony Panel 2.0 for 1C"', + 'module_smivr_WeGetSettingsFromCTIClient' => 'Se utilizará el canal de comunicación del módulo "Panel de Telefonía 4.0 para 1C"', 'module_smivr_FailoverExtForeign' => 'Utilizado como número de emergencia en el módulo de enrutamiento inteligente', 'module_smivr_TimeoutExtForeignKey' => 'Utilizado como número predeterminado en el módulo de enrutamiento inteligente', 'module_smivr_ErrorOnMakeTestIVR' => 'Error durante la generación de prueba del menú de voz', @@ -28,9 +28,9 @@ 'module_smivr_Library1CType' => 'Versión del subsistema de integración en el lado 1C', 'module_smivr_lastResponsibleDuration' => 'Número de segundos, cuánto tiempo se debe llamar a la última persona a cargo.', 'module_smivr_lastResponsibleTime' => 'La cantidad de minutos por los que se debe analizar el CDR para encontrar al responsable', - 'module_smivr_LibraryVer2NotInstalled' => 'Instale el módulo del panel de telefonía 2.0 para 1C, enciéndalo y configúrelo', + 'module_smivr_LibraryVer2NotInstalled' => 'Instale el módulo del panel de telefonía 4.0 para 1C, habilítelo y configúrelo', 'module_smivr_EnableDebugMode' => 'Habilitar el modo de depuración del módulo', - 'module_smivr_LibraryVer2' => 'Versión 2.0', + 'module_smivr_LibraryVer2' => 'Versión 2.0/4.0', 'module_smivr_LibraryVer1' => 'Versión 1.0', 'SubHeaderModuleSmartIVR' => 'Generación de un menú de voz sobre la marcha según los datos del sistema CRM', 'BreadcrumbModuleSmartIVR' => 'Módulo de enrutamiento de llamadas inteligente (Smart IVR)', diff --git a/Messages/fa.php b/Messages/fa.php new file mode 100644 index 0000000..b3d9bbc --- /dev/null +++ b/Messages/fa.php @@ -0,0 +1 @@ + '1C-palvelimen osoitetta ei ole täytetty', + 'module_smivr_ValidateServer1CPortRange' => '1C-palvelimen portti on määritetty väärin', + 'module_smivr_ValidatePubName' => '1C-verkkopalvelun julkaisunimeä ei ole määritetty', + 'module_smivr_ValidateNumberOfRepeat' => 'IVR-valikon toistojen määrä on väärä', + 'module_smivr_ValidateTimeoutExtension' => 'Oletusnumeroa ei ole määritetty', + 'module_smivr_ValidateFailOverExtension' => 'Hätänumeroa ei ole määritetty', + 'module_smivr_ValidateFailOverExtensionNotEqualTo' => 'Väärä hätänumero', + 'module_smivr_ValidateTimeOutExtensionNotEqualTo' => 'Oletusnumero on väärä', + 'module_smivr_Connected' => 'Yhdistetty 1C- ja TTS-palveluun', + 'module_smivr_Disconnected' => 'Ei käytössä', + 'module_smivr_Disconnected1C' => 'Yhteysvirhe 1C:n kanssa', + 'module_smivr_DisconnectedTTS' => 'Virhe yhteyden muodostamisessa TTS-palveluun', + 'module_smivr_UpdateStatus' => 'Tilan päivitys', + 'module_smivr_UpdateRecord' => 'Kun moduulin tila muuttui, objektit päivitettiin:
', + 'module_smivr_ErrorOnMakeTestIVR' => 'Virhe äänivalikon testiluonnissa', + 'module_smivr_WeGetSettingsFromCTIClient' => 'Viestintäkanavaa moduulista "Telephony Panel 4.0 for 1C" käytetään', + 'module_smivr_TimeoutExtForeignKey' => 'Käytetään oletusnumerona älykkäässä reititysmoduulissa', + 'module_smivr_FailoverExtForeign' => 'Käytetään hätänumerona älykkäässä reititysmoduulissa', + 'module_smivr_lastResponsibleTime' => 'Minuuttimäärä, jonka CDR on analysoitava vastuullisen henkilön löytämiseksi', + 'module_smivr_lastResponsibleDuration' => 'Sekuntien määrä, kuinka kauan viimeiselle vastuuhenkilölle soitetaan', + /** + * Copyright © MIKO LLC - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Alexey Portnov, 2 2019 + */ + 'mo_ModuleSmartIVR' => 'Älykäs reititysmoduuli', + 'repModuleSmartIVR' => 'Älykäs reititysmoduuli - %represent%', + 'BreadcrumbModuleSmartIVR' => 'Älykäs puhelunreititysmoduuli (Smart IVR)', + 'SubHeaderModuleSmartIVR' => 'Äänivalikon luominen lennossa CRM-järjestelmän tietojen mukaan', + 'module_smivr_LibraryVer1' => 'Versio 1.0', + 'module_smivr_LibraryVer2' => 'Versio 2.0/4.0', + 'module_smivr_LibraryVer2NotInstalled' => 'Asenna puhelinpaneelin 4.0 moduuli 1C:lle, ota se käyttöön ja määritä se', + 'module_smivr_Library1CType' => 'Integrointialijärjestelmän versio 1C-puolella', + 'module_smivr_Server1CHostPort' => '1C-palvelimen osoite ja portti', + 'module_smivr_UseSSLConnection' => 'Käytä SSL:ää', + 'module_smivr_Login' => 'Kirjaudu verkkopalveluun 1C', + 'module_smivr_Password' => 'Salasana valtuutusta varten 1C:ssä', + 'module_smivr_PublicationName' => 'Julkaisun nimi', + 'module_smivr_NumberOfRepeat' => 'IVR-valikon toistojen määrä ennen puhelun siirtämistä oletusnumeroon', + 'module_smivr_TimeoutExtension' => 'Oletusnumero', + 'module_smivr_FailoverExtension' => 'Numero, johon soitamme 1C:n ja TTS:n tiedonsiirtohäiriöiden sattuessa. Esimerkiksi staattinen IVR-valikko.', + 'module_smivr_EnableDebugMode' => 'Ota moduulin virheenkorjaustila käyttöön', +]; diff --git a/Messages/fr.php b/Messages/fr.php index 9f5b9bc..c68270e 100644 --- a/Messages/fr.php +++ b/Messages/fr.php @@ -1,6 +1,6 @@ 'Le canal de communication du module "Telephony Panel 2.0 for 1C" sera utilisé', + 'module_smivr_WeGetSettingsFromCTIClient' => 'Le canal de communication du module "Telephony Panel 4.0 pour 1C" sera utilisé', 'module_smivr_FailoverExtForeign' => 'Utilisé comme numéro d\'urgence dans le module de routage intelligent', 'module_smivr_TimeoutExtForeignKey' => 'Utilisé comme numéro par défaut dans le module de routage intelligent', 'module_smivr_ErrorOnMakeTestIVR' => 'Erreur lors de la génération de test du menu vocal', @@ -26,11 +26,11 @@ 'module_smivr_UseSSLConnection' => 'Utiliser SSL', 'module_smivr_Server1CHostPort' => 'Adresse et port du serveur 1C', 'module_smivr_Library1CType' => 'Version du sous-système d\'intégration côté 1C', - 'module_smivr_LibraryVer2NotInstalled' => 'Installez le module de panneau de téléphonie 2.0 pour 1C, activez-le et configurez-le', + 'module_smivr_LibraryVer2NotInstalled' => 'Installez le module du panneau de téléphonie 4.0 pour 1C, activez-le et configurez-le', 'module_smivr_lastResponsibleDuration' => 'Nombre de secondes, combien de temps pour appeler le dernier responsable', 'module_smivr_lastResponsibleTime' => 'Le nombre de minutes pendant lesquelles le CDR doit être analysé pour trouver le responsable', 'module_smivr_EnableDebugMode' => 'Activer le mode de débogage du module', - 'module_smivr_LibraryVer2' => 'Version 2.0', + 'module_smivr_LibraryVer2' => 'Version 2.0/4.0', 'module_smivr_LibraryVer1' => 'Version 1.0', 'SubHeaderModuleSmartIVR' => 'Génération d\'un menu vocal à la volée en fonction des données du système CRM', 'BreadcrumbModuleSmartIVR' => 'Module de routage d\'appels intelligent (Smart IVR)', diff --git a/Messages/he.php b/Messages/he.php new file mode 100644 index 0000000..b3d9bbc --- /dev/null +++ b/Messages/he.php @@ -0,0 +1 @@ + 'Povezan na uslugu 1C i TTS', + 'module_smivr_FailoverExtForeign' => 'Koristi se kao broj za hitne slučajeve u modulu pametnog usmjeravanja', + 'module_smivr_lastResponsibleTime' => 'Broj minuta za koje CDR treba analizirati da bi se pronašla odgovorna osoba', + 'module_smivr_lastResponsibleDuration' => 'Broj sekundi koliko dugo treba nazvati posljednju zaduženu osobu', + /** + * Copyright © MIKO LLC - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Alexey Portnov, 2 2019 + */ + 'mo_ModuleSmartIVR' => 'Modul pametnog usmjeravanja', + 'repModuleSmartIVR' => 'Modul pametnog usmjeravanja - %represent%', + 'BreadcrumbModuleSmartIVR' => 'Modul za pametno usmjeravanje poziva (Smart IVR)', + 'SubHeaderModuleSmartIVR' => 'Generiranje glasovnog izbornika u hodu prema podacima CRM sustava', + 'module_smivr_LibraryVer1' => 'Verzija 1.0', + 'module_smivr_LibraryVer2' => 'Verzija 2.0/4.0', + 'module_smivr_LibraryVer2NotInstalled' => 'Instalirajte modul telefonske ploče 4.0 za 1C, omogućite ga i konfigurirajte', + 'module_smivr_Library1CType' => 'Verzija integracijskog podsustava na strani 1C', + 'module_smivr_Server1CHostPort' => 'Adresa i port 1C poslužitelja', + 'module_smivr_UseSSLConnection' => 'Koristite SSL', + 'module_smivr_Login' => 'Prijava za web uslugu 1C', + 'module_smivr_Password' => 'Lozinka za autorizaciju u 1C', + 'module_smivr_PublicationName' => 'Naziv publikacije', + 'module_smivr_NumberOfRepeat' => 'Broj ponavljanja IVR izbornika prije prijenosa poziva na zadani broj', + 'module_smivr_TimeoutExtension' => 'Zadani broj', + 'module_smivr_FailoverExtension' => 'Broj na koji ćemo poslati poziv u slučaju kvara komunikacije s 1C i TTS. Na primjer, statični IVR izbornik.', + 'module_smivr_EnableDebugMode' => 'Omogući način otklanjanja pogrešaka modula', + 'module_smivr_ValidateServer1CHostEmpty' => 'Adresa poslužitelja 1C nije popunjena', + 'module_smivr_ValidateServer1CPortRange' => 'Port poslužitelja 1C je pogrešno naveden', + 'module_smivr_ValidatePubName' => 'Naziv publikacije web usluge 1C nije naveden', + 'module_smivr_ValidateNumberOfRepeat' => 'Broj ponavljanja IVR izbornika nije točan', + 'module_smivr_ValidateTimeoutExtension' => 'Zadani broj nije naveden', + 'module_smivr_ValidateFailOverExtension' => 'Broj hitne službe nije naveden', + 'module_smivr_ValidateFailOverExtensionNotEqualTo' => 'Netočan broj za hitne slučajeve', + 'module_smivr_ValidateTimeOutExtensionNotEqualTo' => 'Zadani broj nije točan', + 'module_smivr_Disconnected' => 'Onesposobljeno', + 'module_smivr_Disconnected1C' => 'Pogreška veze s 1C', + 'module_smivr_DisconnectedTTS' => 'Pogreška pri povezivanju s TTS uslugom', + 'module_smivr_UpdateStatus' => 'Ažuriranje statusa', + 'module_smivr_UpdateRecord' => 'Kada se status modula promijenio, objekti su ažurirani:
', + 'module_smivr_ErrorOnMakeTestIVR' => 'Pogreška tijekom testnog generiranja glasovnog izbornika', + 'module_smivr_WeGetSettingsFromCTIClient' => 'Koristit će se komunikacijski kanal iz modula "Telephony Panel 4.0 for 1C".', + 'module_smivr_TimeoutExtForeignKey' => 'Koristi se kao zadani broj u modulu pametnog usmjeravanja', +]; diff --git a/Messages/hu.php b/Messages/hu.php new file mode 100644 index 0000000..16919c5 --- /dev/null +++ b/Messages/hu.php @@ -0,0 +1,46 @@ + 'Intelligens hívásirányító modul (Smart IVR)', + 'module_smivr_LibraryVer1' => '1.0 verzió', + 'module_smivr_LibraryVer2NotInstalled' => 'Telepítse a Telephony Panel 4.0 modult az 1C számára, engedélyezze és konfigurálja azt', + 'module_smivr_Library1CType' => 'Az integrációs alrendszer változata az 1C oldalon', + 'module_smivr_Password' => 'Jelszó az 1C-ben történő engedélyezéshez', + 'module_smivr_NumberOfRepeat' => 'Az IVR menü ismétléseinek száma a hívás alapértelmezett számra történő átirányítása előtt', + 'SubHeaderModuleSmartIVR' => 'On-the-fly hangmenü generálás a CRM rendszer adatai alapján', + 'module_smivr_LibraryVer2' => '2.0/4.0 verzió', + 'module_smivr_Server1CHostPort' => 'Az 1C szerver címe és portja', + 'module_smivr_UseSSLConnection' => 'SSL használata', + 'module_smivr_Login' => 'Bejelentkezés az 1C webes szolgáltatáshoz', + 'module_smivr_PublicationName' => 'A kiadvány neve', + /** + * Copyright © MIKO LLC - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Alexey Portnov, 2 2019 + */ + 'mo_ModuleSmartIVR' => 'Intelligens útválasztó modul', + 'repModuleSmartIVR' => 'Intelligens útválasztási modul – %represent%', + 'module_smivr_TimeoutExtension' => 'Alapértelmezett szám', + 'module_smivr_FailoverExtension' => 'Az a szám, amelyre 1C és TTS kommunikációs hiba esetén hívunk. Például egy statikus IVR menü.', + 'module_smivr_EnableDebugMode' => 'Modul hibakeresési mód engedélyezése', + 'module_smivr_ValidateServer1CHostEmpty' => 'Az 1C szerver címe nincs kitöltve', + 'module_smivr_ValidateServer1CPortRange' => 'Az 1C szerverport helytelenül van megadva', + 'module_smivr_ValidatePubName' => 'Az 1C webszolgáltatás közzétételi neve nincs megadva', + 'module_smivr_ValidateNumberOfRepeat' => 'Az IVR menü ismétlődéseinek száma nem megfelelő', + 'module_smivr_ValidateTimeoutExtension' => 'Az alapértelmezett szám nincs megadva', + 'module_smivr_ValidateFailOverExtension' => 'A segélyhívó szám nincs megadva', + 'module_smivr_ValidateFailOverExtensionNotEqualTo' => 'Helytelen segélyhívó szám', + 'module_smivr_ValidateTimeOutExtensionNotEqualTo' => 'Az alapértelmezett szám helytelen', + 'module_smivr_Connected' => 'Csatlakozva az 1C és a TTS szolgáltatáshoz', + 'module_smivr_Disconnected' => 'Tiltva', + 'module_smivr_Disconnected1C' => 'Csatlakozási hiba az 1C-vel', + 'module_smivr_DisconnectedTTS' => 'Hiba a TTS-szolgáltatáshoz való csatlakozáskor', + 'module_smivr_UpdateStatus' => 'Állapotfrissítés', + 'module_smivr_UpdateRecord' => 'Amikor a modul állapota megváltozott, az objektumok frissültek:
', + 'module_smivr_ErrorOnMakeTestIVR' => 'Hiba a hangmenü tesztgenerálása közben', + 'module_smivr_WeGetSettingsFromCTIClient' => 'A „Telephony Panel 4.0 for 1C” modul kommunikációs csatornája kerül felhasználásra', + 'module_smivr_TimeoutExtForeignKey' => 'Alapértelmezett számként használatos az intelligens útválasztási modulban', + 'module_smivr_FailoverExtForeign' => 'Segélyhívószámként használják az intelligens útválasztási modulban', + 'module_smivr_lastResponsibleTime' => 'Azon percek száma, ameddig a CDR-t elemezni kell a felelős személy megtalálásához', + 'module_smivr_lastResponsibleDuration' => 'A másodpercek száma, ameddig mennyi ideig kell hívni az utolsó felelőst', +]; diff --git a/Messages/it.php b/Messages/it.php index 86957f1..6c2e817 100644 --- a/Messages/it.php +++ b/Messages/it.php @@ -1,6 +1,6 @@ 'Verrà utilizzato il canale di comunicazione del modulo "Pannello di telefonia 2.0 per 1C"', + 'module_smivr_WeGetSettingsFromCTIClient' => 'Verrà utilizzato il canale di comunicazione del modulo "Panel Telefonia 4.0 per 1C".', 'module_smivr_FailoverExtForeign' => 'Utilizzato come numero di emergenza nel modulo di routing intelligente', 'module_smivr_TimeoutExtForeignKey' => 'Utilizzato come numero predefinito nel modulo di routing intelligente', 'module_smivr_ErrorOnMakeTestIVR' => 'Errore durante la generazione del test del menu vocale', @@ -28,9 +28,9 @@ 'module_smivr_Library1CType' => 'Versione del sottosistema di integrazione sul lato 1C', 'module_smivr_lastResponsibleDuration' => 'Numero di secondi, per quanto tempo chiamare l\'ultimo responsabile', 'module_smivr_lastResponsibleTime' => 'Il numero di minuti per i quali il CDR dovrebbe essere analizzato per trovare il responsabile', - 'module_smivr_LibraryVer2NotInstalled' => 'Installa il modulo della centrale di telefonia 2.0 per 1C, abilitalo e configuralo', + 'module_smivr_LibraryVer2NotInstalled' => 'Installare il modulo pannello telefonia 4.0 per 1C, abilitarlo e configurarlo', 'module_smivr_EnableDebugMode' => 'Abilita la modalità di debug del modulo', - 'module_smivr_LibraryVer2' => 'Versione 2.0', + 'module_smivr_LibraryVer2' => 'Versione 2.0/4.0', 'module_smivr_LibraryVer1' => 'Versione 1.0', 'SubHeaderModuleSmartIVR' => 'Generazione al volo di un menu vocale in base ai dati del sistema CRM', 'BreadcrumbModuleSmartIVR' => 'Modulo Smart Call Routing (Smart IVR)', diff --git a/Messages/ja.php b/Messages/ja.php index 89882a0..908d463 100644 --- a/Messages/ja.php +++ b/Messages/ja.php @@ -1,6 +1,6 @@ 'モジュール「TelephonyPanel2.0for1C」の通信チャネルを使用します', + 'module_smivr_WeGetSettingsFromCTIClient' => 'モジュール「テレフォニー パネル 4.0 for 1C」の通信チャネルが使用されます', 'module_smivr_FailoverExtForeign' => 'スマートルーティングモジュールで緊急番号として使用されます', 'module_smivr_TimeoutExtForeignKey' => 'スマートルーティングモジュールのデフォルト番号として使用', 'module_smivr_ErrorOnMakeTestIVR' => '音声メニューのテスト生成中にエラーが発生しました', @@ -26,10 +26,10 @@ 'module_smivr_UseSSLConnection' => 'SSLを使用する', 'module_smivr_Server1CHostPort' => '1Cサーバーのアドレスとポート', 'module_smivr_Library1CType' => '1C側の統合サブシステムバージョン', - 'module_smivr_LibraryVer2NotInstalled' => '1C用のテレフォニーパネル2.0モジュールをインストールし、有効にして構成します', + 'module_smivr_LibraryVer2NotInstalled' => '1C用のテレフォニーパネル4.0モジュールをインストールし、有効化して設定します', 'module_smivr_lastResponsibleDuration' => '秒数、最後の担当者に電話をかける時間', 'module_smivr_lastResponsibleTime' => '責任者を見つけるためにCDRを分析する必要がある分数', - 'module_smivr_LibraryVer2' => 'バージョン2.0', + 'module_smivr_LibraryVer2' => 'バージョン2.0/4.0', 'module_smivr_LibraryVer1' => 'バージョン1.0', 'SubHeaderModuleSmartIVR' => 'CRMシステムデータに基づくオンザフライでの音声メニューの生成', 'BreadcrumbModuleSmartIVR' => 'スマートコールルーティングモジュール(スマートIVR)', diff --git a/Messages/ka.php b/Messages/ka.php index 33c0554..3e0f53e 100644 --- a/Messages/ka.php +++ b/Messages/ka.php @@ -4,7 +4,7 @@ 'module_smivr_lastResponsibleTime' => 'წუთების რაოდენობა, რომლებზეც CDR უნდა გაანალიზდეს პასუხისმგებლის მოსაძებნად', 'module_smivr_FailoverExtForeign' => 'გამოიყენება როგორც სასწრაფო დახმარების ნომერი ჭკვიანი მარშრუტიზაციის მოდულში', 'module_smivr_TimeoutExtForeignKey' => 'გამოიყენება როგორც ნაგულისხმევი ნომერი ჭკვიანი მარშრუტიზაციის მოდულში', - 'module_smivr_WeGetSettingsFromCTIClient' => 'გამოყენებული იქნება საკომუნიკაციო არხი მოდულიდან "ტელეფონის პანელი 2.0 1C-ისთვის".', + 'module_smivr_WeGetSettingsFromCTIClient' => 'გამოყენებული იქნება საკომუნიკაციო არხი მოდულიდან "ტელეფონის პანელი 4.0 1C-ისთვის".', 'module_smivr_ErrorOnMakeTestIVR' => 'შეცდომა ხმოვანი მენიუს ტესტის შექმნისას', 'module_smivr_UpdateRecord' => 'როდესაც მოდულის სტატუსი შეიცვალა, ობიექტები განახლდა:
', 'module_smivr_UpdateStatus' => 'Სტატუსის განახლება', @@ -30,8 +30,8 @@ 'module_smivr_UseSSLConnection' => 'გამოიყენეთ SSL', 'module_smivr_Server1CHostPort' => '1C სერვერის მისამართი და პორტი', 'module_smivr_Library1CType' => 'ინტეგრაციის ქვესისტემის ვერსია 1C მხარეს', - 'module_smivr_LibraryVer2NotInstalled' => 'დააინსტალირეთ ტელეფონის პანელის 2.0 მოდული 1C-სთვის, ჩართეთ და დააკონფიგურირეთ იგი', - 'module_smivr_LibraryVer2' => 'ვერსია 2.0', + 'module_smivr_LibraryVer2NotInstalled' => 'დააინსტალირეთ ტელეფონის პანელის 4.0 მოდული 1C-სთვის, ჩართეთ და დააკონფიგურირეთ იგი', + 'module_smivr_LibraryVer2' => 'ვერსია 2.0/4.0', 'module_smivr_LibraryVer1' => 'ვერსია 1.0', 'SubHeaderModuleSmartIVR' => 'ხმოვანი მენიუს გენერაცია ფრენის დროს CRM სისტემის მონაცემების მიხედვით', 'BreadcrumbModuleSmartIVR' => 'ჭკვიანი ზარის მარშრუტიზაციის მოდული (Smart IVR)', diff --git a/Messages/languages.php b/Messages/languages.php new file mode 100644 index 0000000..b3d9bbc --- /dev/null +++ b/Messages/languages.php @@ -0,0 +1 @@ + 'Slimme routeringsmodule - %represent%', 'SubHeaderModuleSmartIVR' => 'On-the-fly generatie van spraakmenu\'s op basis van CRM-systeemgegevens', 'module_smivr_LibraryVer1' => 'Versie 1.0', - 'module_smivr_LibraryVer2' => 'Versie 2.0', - 'module_smivr_LibraryVer2NotInstalled' => 'Installeer de telefoniepaneel 2.0-module voor 1C, schakel deze in en configureer deze', + 'module_smivr_LibraryVer2' => 'Versie 2.0/4.0', + 'module_smivr_LibraryVer2NotInstalled' => 'Installeer de telefoniepaneel 4.0-module voor 1C, schakel deze in en configureer deze', 'module_smivr_Library1CType' => 'Versie van het integratiesubsysteem aan de 1C-zijde', 'module_smivr_Server1CHostPort' => 'Serveradres en poort 1C', 'module_smivr_UseSSLConnection' => 'Gebruik SSL', @@ -24,7 +24,7 @@ 'module_smivr_DisconnectedTTS' => 'Fout bij het verbinden met de TTS-service', 'module_smivr_UpdateStatus' => 'Status update', 'module_smivr_ErrorOnMakeTestIVR' => 'Fout tijdens het testen van het spraakmenu', - 'module_smivr_WeGetSettingsFromCTIClient' => 'Er wordt gebruik gemaakt van het communicatiekanaal van de module "Telefoniepaneel 2.0 voor 1C".', + 'module_smivr_WeGetSettingsFromCTIClient' => 'Er wordt gebruik gemaakt van het communicatiekanaal uit de module "Telefoniepaneel 4.0 voor 1C".', 'module_smivr_TimeoutExtForeignKey' => 'Gebruikt als standaardnummer in de slimme routeringsmodule', 'module_smivr_lastResponsibleTime' => 'Het aantal minuten dat de CDR moet worden geanalyseerd om de eigenaar te vinden', 'module_smivr_lastResponsibleDuration' => 'Aantal seconden, hoe lang het duurt om de laatste verantwoordelijke persoon te bellen', diff --git a/Messages/pl.php b/Messages/pl.php index cbcba38..7c5deb6 100644 --- a/Messages/pl.php +++ b/Messages/pl.php @@ -1,6 +1,6 @@ 'Wykorzystany zostanie kanał komunikacyjny z modułu „Panel telefoniczny 2.0 dla 1C”', + 'module_smivr_WeGetSettingsFromCTIClient' => 'Wykorzystany zostanie kanał komunikacyjny z modułu „Panel telefoniczny 4.0 dla 1C”.', 'module_smivr_FailoverExtForeign' => 'Używany jako numer alarmowy w module inteligentnego routingu', 'module_smivr_TimeoutExtForeignKey' => 'Używany jako numer domyślny w module inteligentnego routingu', 'module_smivr_ErrorOnMakeTestIVR' => 'Błąd podczas generowania testowego menu głosowego', @@ -26,10 +26,10 @@ 'module_smivr_Server1CHostPort' => 'Adres i port serwera 1C', 'module_smivr_Library1CType' => 'Wersja podsystemu integracji po stronie 1C', 'module_smivr_lastResponsibleDuration' => 'Liczba sekund, jak długo dzwonić do ostatniej osoby odpowiedzialnej', - 'module_smivr_LibraryVer2NotInstalled' => 'Zainstaluj moduł panelu telefonicznego 2.0 dla 1C, włącz go i skonfiguruj', + 'module_smivr_LibraryVer2NotInstalled' => 'Zainstaluj moduł panelu telefonicznego 4.0 dla 1C, włącz go i skonfiguruj', 'module_smivr_lastResponsibleTime' => 'Liczba minut, przez które należy przeanalizować CDR w celu znalezienia odpowiedzialnego', 'module_smivr_EnableDebugMode' => 'Włącz tryb debugowania modułu', - 'module_smivr_LibraryVer2' => 'Wersja 2.0', + 'module_smivr_LibraryVer2' => 'Wersja 2.0/4.0', 'module_smivr_LibraryVer1' => 'Wersja 1.0', 'SubHeaderModuleSmartIVR' => 'Generowanie menu głosowego w locie na podstawie danych z systemu CRM', 'BreadcrumbModuleSmartIVR' => 'Moduł inteligentnego routingu połączeń (Smart IVR)', diff --git a/Messages/pt.php b/Messages/pt.php index bdb2770..df74c01 100644 --- a/Messages/pt.php +++ b/Messages/pt.php @@ -1,6 +1,6 @@ 'Será utilizado o canal de comunicação do módulo "Painel de Telefonia 2.0 para 1C"', + 'module_smivr_WeGetSettingsFromCTIClient' => 'Será utilizado o canal de comunicação do módulo "Painel Telefônico 4.0 para 1C"', 'module_smivr_FailoverExtForeign' => 'Usado como número de emergência no módulo de roteamento inteligente', 'module_smivr_TimeoutExtForeignKey' => 'Usado como número padrão no módulo de roteamento inteligente', 'module_smivr_ErrorOnMakeTestIVR' => 'Erro durante a geração de teste do menu de voz', @@ -29,12 +29,12 @@ 'module_smivr_lastResponsibleDuration' => 'Número de segundos, quanto tempo para ligar para o último responsável', 'module_smivr_lastResponsibleTime' => 'O número de minutos pelos quais o CDR deve ser analisado para encontrar o responsável', 'module_smivr_EnableDebugMode' => 'Habilitar modo de depuração de módulo', - 'module_smivr_LibraryVer2' => 'Versão 2.0', + 'module_smivr_LibraryVer2' => 'Versão 2.0/4.0', 'module_smivr_LibraryVer1' => 'Versão 1.0', 'SubHeaderModuleSmartIVR' => 'Geração de um menu de voz em tempo real de acordo com os dados do sistema CRM', 'BreadcrumbModuleSmartIVR' => 'Módulo de roteamento de chamada inteligente (IVR inteligente)', 'repModuleSmartIVR' => 'Módulo de roteamento inteligente -% representa%', - 'module_smivr_LibraryVer2NotInstalled' => 'Instale o módulo do painel de telefonia 2.0 para 1C, habilite e configure-o', + 'module_smivr_LibraryVer2NotInstalled' => 'Instale o módulo do painel de telefonia 4.0 para 1C, habilite e configure-o', /** * Copyright © MIKO LLC - All Rights Reserved * Unauthorized copying of this file, via any medium is strictly prohibited diff --git a/Messages/pt_BR.php b/Messages/pt_BR.php index 4757eaf..09b0e2e 100644 --- a/Messages/pt_BR.php +++ b/Messages/pt_BR.php @@ -4,7 +4,7 @@ 'module_smivr_lastResponsibleTime' => 'O número de minutos pelos quais o CDR deve ser analisado para encontrar o responsável', 'module_smivr_FailoverExtForeign' => 'Usado como número de emergência no módulo de roteamento inteligente', 'module_smivr_TimeoutExtForeignKey' => 'Usado como número padrão no módulo de roteamento inteligente', - 'module_smivr_WeGetSettingsFromCTIClient' => 'Será utilizado o canal de comunicação do módulo "Painel de Telefonia 2.0 para 1C"', + 'module_smivr_WeGetSettingsFromCTIClient' => 'Será utilizado o canal de comunicação do módulo "Painel Telefônico 4.0 para 1C"', 'module_smivr_ErrorOnMakeTestIVR' => 'Erro durante a geração de teste do menu de voz', 'module_smivr_UpdateRecord' => 'Quando o status do módulo mudou, os objetos foram atualizados:
', 'module_smivr_UpdateStatus' => 'Atualização de status', @@ -30,8 +30,8 @@ 'module_smivr_UseSSLConnection' => 'Use SSL', 'module_smivr_Server1CHostPort' => 'Endereço e porta do servidor 1C', 'module_smivr_Library1CType' => 'Versão do subsistema de integração no lado 1C', - 'module_smivr_LibraryVer2NotInstalled' => 'Instale o módulo do painel de telefonia 2.0 para 1C, habilite e configure-o', - 'module_smivr_LibraryVer2' => 'Versão 2.0', + 'module_smivr_LibraryVer2NotInstalled' => 'Instale o módulo do painel de telefonia 4.0 para 1C, habilite e configure-o', + 'module_smivr_LibraryVer2' => 'Versão 2.0/4.0', 'module_smivr_LibraryVer1' => 'Versão 1.0', 'SubHeaderModuleSmartIVR' => 'Geração de um menu de voz em tempo real de acordo com os dados do sistema CRM', 'BreadcrumbModuleSmartIVR' => 'Módulo de roteamento de chamada inteligente (IVR inteligente)', diff --git a/Messages/ro.php b/Messages/ro.php index 1274799..b446bdf 100644 --- a/Messages/ro.php +++ b/Messages/ro.php @@ -17,8 +17,8 @@ 'module_smivr_Connected' => 'Conectat la serviciul 1C și TTS', 'module_smivr_Disconnected' => 'Dezactivat', 'module_smivr_UpdateStatus' => 'Actualizarea stării', - 'module_smivr_LibraryVer2' => 'Versiunea 2.0', - 'module_smivr_LibraryVer2NotInstalled' => 'Instalați modulul panoului de telefonie 2.0 pentru 1C, activați-l și configurați-l', + 'module_smivr_LibraryVer2' => 'Versiunea 2.0/4.0', + 'module_smivr_LibraryVer2NotInstalled' => 'Instalați modulul panoului de telefonie 4.0 pentru 1C, activați-l și configurați-l', 'module_smivr_Library1CType' => 'Versiunea subsistemului de integrare pe partea 1C', 'module_smivr_Server1CHostPort' => 'Adresa serverului și portul 1C', 'module_smivr_UseSSLConnection' => 'Utilizați SSL', @@ -38,7 +38,7 @@ 'module_smivr_DisconnectedTTS' => 'Eroare la conectarea la serviciul TTS', 'module_smivr_UpdateRecord' => 'Obiecte actualizate când starea modulului s-a schimbat:
', 'module_smivr_ErrorOnMakeTestIVR' => 'Eroare la generarea testului a meniului vocal', - 'module_smivr_WeGetSettingsFromCTIClient' => 'Se va utiliza canalul de comunicare din modulul „Telephony Panel 2.0 for 1C”.', + 'module_smivr_WeGetSettingsFromCTIClient' => 'Se va folosi canalul de comunicare din modulul „Telephony Panel 4.0 for 1C”.', 'module_smivr_TimeoutExtForeignKey' => 'Folosit ca număr implicit în modulul de rutare inteligentă', 'module_smivr_FailoverExtForeign' => 'Folosit ca număr de urgență în modulul de rutare inteligentă', 'module_smivr_lastResponsibleTime' => 'Numărul de minute pentru a analiza CDR-ul pentru a găsi proprietarul', diff --git a/Messages/ru.php b/Messages/ru.php index 5874c32..ed48ec6 100644 --- a/Messages/ru.php +++ b/Messages/ru.php @@ -13,8 +13,10 @@ 'SubHeaderModuleSmartIVR' => 'Генерация голосового меню на лету по данным CRM системы', 'module_smivr_LibraryVer1' => 'Версия 1.0', - 'module_smivr_LibraryVer2' => 'Версия 2.0', - 'module_smivr_LibraryVer2NotInstalled' => 'Установите модуль панель телефонии 2.0 для 1С, включите и настройте его', + 'module_smivr_LibraryVer2' => 'Версия 2.0/4.0', + 'module_smivr_LibraryVer5' => 'Версия 5.0', + 'module_smivr_LibraryVer2NotInstalled' => 'Установите модуль "Панель телефонии 4.0 для 1С", включите и настройте его', + 'module_smivr_LibraryVer5NotInstalled' => 'Установите модуль "Панель телефонии 5.0 для 1С", включите и настройте его', 'module_smivr_Library1CType' => 'Версия подсистемы интеграции на стороне 1С', 'module_smivr_Server1CHostPort' => 'Адрес и порт сервера 1С', @@ -46,7 +48,8 @@ 'module_smivr_UpdateRecord' => 'При изменении статуса модуля обновлены объекты:
', 'module_smivr_ErrorOnMakeTestIVR' => 'Ошибка при тестовой генерации голосового меню', - 'module_smivr_WeGetSettingsFromCTIClient'=>'Будет использоваться канал связи из модуля "Панель телефонии 2.0 для 1С"', + 'module_smivr_WeGetSettingsFromCTIClient'=>'Будет использоваться канал связи из модуля "Панель телефонии 4.0 для 1С"', + 'module_smivr_WeGetSettingsFromCTIClientV5'=>'Будет использоваться канал связи из модуля "Панель телефонии 5.0 для 1С"', 'module_smivr_TimeoutExtForeignKey'=>'Используется как номер по-умолчанию в модуле умной маршрутизации', 'module_smivr_FailoverExtForeign'=>'Используется как аварийный номер в модуле умной маршрутизации', diff --git a/Messages/sv.php b/Messages/sv.php index d6bb685..e72b6eb 100644 --- a/Messages/sv.php +++ b/Messages/sv.php @@ -1,6 +1,6 @@ 'Kommunikationskanalen från modulen "Telefonipanel 2.0 för 1C" kommer att användas', + 'module_smivr_WeGetSettingsFromCTIClient' => 'Kommunikationskanalen från modulen "Telefonipanel 4.0 för 1C" kommer att användas', 'module_smivr_FailoverExtForeign' => 'Används som nödnummer i smart routingmodul', 'module_smivr_TimeoutExtForeignKey' => 'Används som standardnummer i smart routingmodul', 'module_smivr_ErrorOnMakeTestIVR' => 'Fel under testgenerering av röstmenyn', @@ -24,11 +24,11 @@ 'module_smivr_UseSSLConnection' => 'Använd SSL', 'module_smivr_Server1CHostPort' => '1C-serveradress och port', 'module_smivr_Library1CType' => 'Integrationsdelsystemversion på 1C-sidan', - 'module_smivr_LibraryVer2NotInstalled' => 'Installera telefonipanel 2.0-modulen för 1C, slå på den och konfigurera den', + 'module_smivr_LibraryVer2NotInstalled' => 'Installera telefonipanel 4.0-modulen för 1C, aktivera och konfigurera den', 'module_smivr_lastResponsibleDuration' => 'Antal sekunder, hur länge ska man ringa den sista ansvarig', 'module_smivr_lastResponsibleTime' => 'Antalet minuter som CDR bör analyseras för att hitta den ansvarige', 'module_smivr_EnableDebugMode' => 'Aktivera modulfelsökningsläge', - 'module_smivr_LibraryVer2' => 'Version 2.0', + 'module_smivr_LibraryVer2' => 'Version 2.0/4.0', 'module_smivr_LibraryVer1' => 'Version 1.0', 'SubHeaderModuleSmartIVR' => 'Generering av en röstmeny i farten enligt CRM-systemdata', 'BreadcrumbModuleSmartIVR' => 'Smart Call Routing Module (Smart IVR)', diff --git a/Messages/th.php b/Messages/th.php new file mode 100644 index 0000000..2546dbf --- /dev/null +++ b/Messages/th.php @@ -0,0 +1,46 @@ + 'โมดูลการกำหนดเส้นทางอัจฉริยะ', + 'module_smivr_Disconnected' => 'พิการ', + 'module_smivr_lastResponsibleTime' => 'จำนวนนาทีที่ควรวิเคราะห์ CDR เพื่อค้นหาผู้รับผิดชอบ', + 'repModuleSmartIVR' => 'โมดูลการกำหนดเส้นทางอัจฉริยะ - % เป็นตัวแทน%', + 'BreadcrumbModuleSmartIVR' => 'โมดูลกำหนดเส้นทางการโทรอัจฉริยะ (Smart IVR)', + 'SubHeaderModuleSmartIVR' => 'การสร้างเมนูเสียงได้ทันทีตามข้อมูลระบบ CRM', + 'module_smivr_LibraryVer1' => 'เวอร์ชัน 1.0', + 'module_smivr_LibraryVer2' => 'เวอร์ชัน 2.0/4.0', + 'module_smivr_LibraryVer2NotInstalled' => 'ติดตั้งโมดูลแผงโทรศัพท์ 4.0 สำหรับ 1C เปิดใช้งานและกำหนดค่า', + 'module_smivr_Library1CType' => 'เวอร์ชันของระบบย่อยการรวมทางฝั่ง 1C', + 'module_smivr_Server1CHostPort' => 'ที่อยู่เซิร์ฟเวอร์ 1C และพอร์ต', + 'module_smivr_UseSSLConnection' => 'ใช้ SSL', + 'module_smivr_Login' => 'เข้าสู่ระบบบริการเว็บ 1C', + 'module_smivr_Password' => 'รหัสผ่านสำหรับการอนุญาตใน 1C', + 'module_smivr_PublicationName' => 'ชื่อสิ่งพิมพ์', + 'module_smivr_NumberOfRepeat' => 'จำนวนการซ้ำเมนู IVR ก่อนโอนสายไปยังหมายเลขเริ่มต้น', + 'module_smivr_TimeoutExtension' => 'หมายเลขเริ่มต้น', + 'module_smivr_FailoverExtension' => 'หมายเลขที่เราจะส่งสายในกรณีที่การสื่อสารล้มเหลวกับ 1C และ TTS เช่น เมนู IVR แบบคงที่', + 'module_smivr_EnableDebugMode' => 'เปิดใช้งานโหมดแก้ไขข้อบกพร่องของโมดูล', + 'module_smivr_ValidateServer1CHostEmpty' => 'ไม่ได้กรอกที่อยู่เซิร์ฟเวอร์ 1C', + 'module_smivr_ValidateServer1CPortRange' => 'ระบุพอร์ตเซิร์ฟเวอร์ 1C ไม่ถูกต้อง', + 'module_smivr_ValidatePubName' => 'ไม่ได้ระบุชื่อการเผยแพร่ของบริการเว็บ 1C', + 'module_smivr_ValidateNumberOfRepeat' => 'จำนวนการทำซ้ำเมนู IVR ไม่ถูกต้อง', + 'module_smivr_ValidateTimeoutExtension' => 'ไม่ได้ระบุหมายเลขเริ่มต้น', + 'module_smivr_ValidateFailOverExtension' => 'ไม่ได้ระบุหมายเลขฉุกเฉิน', + 'module_smivr_ValidateFailOverExtensionNotEqualTo' => 'หมายเลขฉุกเฉินไม่ถูกต้อง', + 'module_smivr_ValidateTimeOutExtensionNotEqualTo' => 'หมายเลขเริ่มต้นไม่ถูกต้อง', + 'module_smivr_Connected' => 'เชื่อมต่อกับบริการ 1C และ TTS', + 'module_smivr_Disconnected1C' => 'ข้อผิดพลาดในการเชื่อมต่อกับ 1C', + 'module_smivr_DisconnectedTTS' => 'เกิดข้อผิดพลาดในการเชื่อมต่อกับบริการ TTS', + 'module_smivr_UpdateStatus' => 'อัพเดทสถานะ', + 'module_smivr_UpdateRecord' => 'เมื่อสถานะของโมดูลเปลี่ยนไป ออบเจ็กต์ได้รับการอัปเดต:
', + 'module_smivr_ErrorOnMakeTestIVR' => 'เกิดข้อผิดพลาดระหว่างการทดสอบการสร้างเมนูเสียง', + 'module_smivr_WeGetSettingsFromCTIClient' => 'จะใช้ช่องทางการสื่อสารจากโมดูล "แผงโทรศัพท์ 4.0 สำหรับ 1C"', + 'module_smivr_TimeoutExtForeignKey' => 'ใช้เป็นหมายเลขเริ่มต้นในโมดูลเส้นทางอัจฉริยะ', + 'module_smivr_FailoverExtForeign' => 'ใช้เป็นหมายเลขฉุกเฉินในโมดูลเส้นทางอัจฉริยะ', + 'module_smivr_lastResponsibleDuration' => 'จำนวนวินาทีระยะเวลาในการโทรหาผู้รับผิดชอบคนสุดท้าย', +]; diff --git a/Messages/tr.php b/Messages/tr.php index ef92d78..74b1c47 100644 --- a/Messages/tr.php +++ b/Messages/tr.php @@ -1,6 +1,6 @@ '"Telephony Panel 2.0 for 1C" modülünden gelen iletişim kanalı kullanılacaktır.', + 'module_smivr_WeGetSettingsFromCTIClient' => '"1C için Telefon Paneli 4.0" modülündeki iletişim kanalı kullanılacaktır', 'module_smivr_FailoverExtForeign' => 'Akıllı yönlendirme modülünde acil durum numarası olarak kullanılır', 'module_smivr_TimeoutExtForeignKey' => 'Akıllı yönlendirme modülünde varsayılan numara olarak kullanılır', 'module_smivr_ErrorOnMakeTestIVR' => 'Ses menüsünün test üretimi sırasında hata', @@ -24,11 +24,11 @@ 'module_smivr_UseSSLConnection' => 'SSL kullan', 'module_smivr_Server1CHostPort' => '1C sunucu adresi ve bağlantı noktası', 'module_smivr_Library1CType' => '1C tarafında entegrasyon alt sistemi sürümü', - 'module_smivr_LibraryVer2NotInstalled' => '1C için telefon paneli 2.0 modülünü kurun, açın ve yapılandırın', + 'module_smivr_LibraryVer2NotInstalled' => '1C için telefon paneli 4.0 modülünü kurun, etkinleştirin ve yapılandırın', 'module_smivr_lastResponsibleDuration' => 'Saniye sayısı, en son sorumlu kişinin aranacağı süre', 'module_smivr_lastResponsibleTime' => 'Sorumluyu bulmak için CDR\'nin analiz edilmesi gereken dakika sayısı', 'module_smivr_EnableDebugMode' => 'Modül hata ayıklama modunu etkinleştir', - 'module_smivr_LibraryVer2' => 'Sürüm 2.0', + 'module_smivr_LibraryVer2' => 'Sürüm 2.0/4.0', 'module_smivr_LibraryVer1' => 'Sürüm 1.0', 'SubHeaderModuleSmartIVR' => 'CRM sistem verilerine göre anında sesli menü oluşturma', 'BreadcrumbModuleSmartIVR' => 'Akıllı Çağrı Yönlendirme Modülü (Akıllı IVR)', diff --git a/Messages/uk.php b/Messages/uk.php index 9f54455..00200dc 100644 --- a/Messages/uk.php +++ b/Messages/uk.php @@ -1,6 +1,6 @@ 'Використовуватиметься канал зв\'язку з модуля "Панель телефонії 2.0 для 1С"', + 'module_smivr_WeGetSettingsFromCTIClient' => 'Використовуватиметься канал зв\'язку з модуля "Панель телефонії 4.0 для 1С"', 'module_smivr_FailoverExtForeign' => 'Використовується як аварійний номер у модулі розумної маршрутизації', 'module_smivr_TimeoutExtForeignKey' => 'Використовується як номер за замовчуванням у модулі розумної маршрутизації', 'module_smivr_ErrorOnMakeTestIVR' => 'Помилка під час тестової генерації голосового меню', @@ -25,11 +25,11 @@ 'module_smivr_UseSSLConnection' => 'Використовувати SSL', 'module_smivr_Server1CHostPort' => 'Адреса та порт сервера 1С', 'module_smivr_Library1CType' => 'Версія підсистеми інтеграції на боці 1С', - 'module_smivr_LibraryVer2NotInstalled' => 'Встановіть модуль панель телефонії 2.0 для 1С, увімкніть та налаштуйте його', + 'module_smivr_LibraryVer2NotInstalled' => 'Встановіть модуль панелі телефонії 4.0 для 1С, увімкніть і налаштуйте його', 'module_smivr_lastResponsibleDuration' => 'Кількість секунд, як довго дзвонити останньому відповідальному', 'module_smivr_lastResponsibleTime' => 'Кількість хвилин, за яку слід аналізувати CDR для пошуку відповідального', 'module_smivr_EnableDebugMode' => 'Увімкнути режим налагодження модуля', - 'module_smivr_LibraryVer2' => 'Версія 2.0', + 'module_smivr_LibraryVer2' => 'Версія 2.0/4.0', 'module_smivr_LibraryVer1' => 'Версія 1.0', 'SubHeaderModuleSmartIVR' => 'Генерація голосового меню на льоту за даними CRM системи', 'module_smivr_ValidateTimeoutExtension' => 'Не вказано номер за замовчуванням', diff --git a/Messages/vi.php b/Messages/vi.php index cb394a9..e1fdd2a 100644 --- a/Messages/vi.php +++ b/Messages/vi.php @@ -1,6 +1,6 @@ 'Kênh giao tiếp từ mô-đun "Bảng điện thoại 2.0 cho 1C" sẽ được sử dụng', + 'module_smivr_WeGetSettingsFromCTIClient' => 'Kênh liên lạc từ module "Telephony Panel 4.0 for 1C" sẽ được sử dụng', 'module_smivr_FailoverExtForeign' => 'Được sử dụng làm số khẩn cấp trong mô-đun định tuyến thông minh', 'module_smivr_TimeoutExtForeignKey' => 'Được sử dụng làm số mặc định trong mô-đun định tuyến thông minh', 'module_smivr_ErrorOnMakeTestIVR' => 'Lỗi trong khi tạo thử nghiệm menu thoại', @@ -26,7 +26,7 @@ 'module_smivr_UseSSLConnection' => 'Sử dụng SSL', 'module_smivr_Server1CHostPort' => 'Địa chỉ máy chủ 1C và cổng', 'module_smivr_Library1CType' => 'Phiên bản hệ thống con tích hợp ở phía 1C', - 'module_smivr_LibraryVer2NotInstalled' => 'Cài đặt mô-đun bảng điện thoại 2.0 cho 1C, bật và cấu hình nó', + 'module_smivr_LibraryVer2NotInstalled' => 'Cài đặt mô-đun bảng điện thoại 4.0 cho 1C, kích hoạt và định cấu hình nó', 'module_smivr_lastResponsibleDuration' => 'Số giây, bao lâu để gọi cho người phụ trách cuối cùng', 'module_smivr_lastResponsibleTime' => 'Số phút CDR cần được phân tích để tìm ra người chịu trách nhiệm', 'module_smivr_EnableDebugMode' => 'Bật chế độ gỡ lỗi mô-đun', @@ -42,5 +42,5 @@ * Written by Alexey Portnov, 2 2019 */ 'mo_ModuleSmartIVR' => 'Mô-đun định tuyến thông minh', - 'module_smivr_LibraryVer2' => 'Phiên bản 2.0', + 'module_smivr_LibraryVer2' => 'Phiên bản 2.0/4.0', ]; diff --git a/Messages/zh_Hans.php b/Messages/zh_Hans.php index dfa6f85..3544ae2 100644 --- a/Messages/zh_Hans.php +++ b/Messages/zh_Hans.php @@ -1,6 +1,6 @@ '将使用模块“Telephony Panel 2.0 for 1C”的通信通道', + 'module_smivr_WeGetSettingsFromCTIClient' => '将使用模块“Telephony Panel 4.0 for 1C”的通信通道', 'module_smivr_FailoverExtForeign' => '在智能路由模块中用作紧急号码', 'module_smivr_TimeoutExtForeignKey' => '在智能路由模块中用作默认号码', 'module_smivr_ErrorOnMakeTestIVR' => '语音菜单的测试生成过程中出错', @@ -27,9 +27,9 @@ 'module_smivr_Library1CType' => '1C侧集成子系统版本', 'module_smivr_lastResponsibleDuration' => '秒数,呼叫最后一个负责人需要多长时间', 'module_smivr_lastResponsibleTime' => '应分析 CDR 以找到负责人的分钟数', - 'module_smivr_LibraryVer2NotInstalled' => '安装1C的电话面板2.0模块,启用并配置', + 'module_smivr_LibraryVer2NotInstalled' => '安装1C的电话面板4.0模块,启用并配置它', 'module_smivr_EnableDebugMode' => '启用模块调试模式', - 'module_smivr_LibraryVer2' => '2.0版', + 'module_smivr_LibraryVer2' => '2.0/4.0版本', 'SubHeaderModuleSmartIVR' => '根据 CRM 系统数据即时生成语音菜单', 'module_smivr_Disconnected1C' => '1C 连接错误', 'BreadcrumbModuleSmartIVR' => '智能呼叫路由模块(智能 IVR)', diff --git a/Setup/PbxExtensionSetup.php b/Setup/PbxExtensionSetup.php index d13d307..cb97801 100644 --- a/Setup/PbxExtensionSetup.php +++ b/Setup/PbxExtensionSetup.php @@ -9,10 +9,8 @@ namespace Modules\ModuleSmartIVR\Setup; use MikoPBX\Common\Models\Extensions; -use MikoPBX\Core\System\Util; -use Modules\ModuleSmartIVR\Models\{ModuleSmartIVR}; +use Modules\ModuleSmartIVR\Models\ModuleSmartIVR; use MikoPBX\Modules\Setup\PbxExtensionSetupBase; -use Throwable; class PbxExtensionSetup extends PbxExtensionSetupBase { diff --git a/composer.json b/composer.json index c59dc12..9970a76 100644 --- a/composer.json +++ b/composer.json @@ -2,6 +2,7 @@ "name": "mikopbx/modulesmartivr", "description": "ModuleSmartIVR", "require": { + "php": "^7.4 || ^8.0", "mikopbx/core": ">=2020.2.757" }, "autoload": { @@ -28,7 +29,7 @@ "wiki": "https://wiki.mikopbx.com", "issues": "https://github.com/mikopbx/Core/issues", "source": "https://github.com/mikopbx/Core", - "forum": "https://qa.askozia.ru", + "forum": "https://qa.mikopbx.ru", "chat": "https://t.me/mikopbx_dev" }, "authors": [ @@ -41,7 +42,7 @@ { "name": "Nikolay Beketov", "email": "nbek@miko.ru", - "homepage": "http://facebook.com/jorikfon", + "homepage": "https://www.linkedin.com/in/nikolay-beketov", "role": "Developer" } ], @@ -54,7 +55,7 @@ "config": { "sort-packages": true, "platform": { - "php": "7.4.6" + "php": "^7.4 || ^8.0" } } } diff --git a/module.json b/module.json index 299f72f..80aaf5e 100644 --- a/module.json +++ b/module.json @@ -3,5 +3,10 @@ "moduleUniqueID":"ModuleSmartIVR", "support_email": "help@miko.ru", "version": "%ModuleVersion%", - "min_pbx_version": "2020.2.757" + "min_pbx_version": "2020.2.757", + "release_settings": { + "publish_release": true, + "changelog_enabled": true, + "create_github_release": true + } } \ No newline at end of file diff --git a/public/assets/js/module-smartivr-index.js b/public/assets/js/module-smartivr-index.js index 0a51f00..08591d8 100644 --- a/public/assets/js/module-smartivr-index.js +++ b/public/assets/js/module-smartivr-index.js @@ -15,6 +15,7 @@ var moduleSmartIVR = { $LibrarySelect: $('#library_1c'), $onlyFirstGeneration: $('.only-first-generation'), $onlySecondGeneration: $('.only-second-generation'), + $onlyFiveGeneration: $('.only-five-generation'), $moduleStatus: $('#status'), $dirrtyField: null, $submitButton: $('#submitbutton'), @@ -72,257 +73,185 @@ var moduleSmartIVR = { }] } }, - initialize: function () { - function initialize() { - moduleSmartIVR.cbChangeLibraryType(); - moduleSmartIVR.checkStatusToggle(); - window.addEventListener('ModuleStatusChanged', moduleSmartIVR.checkStatusToggle); - moduleSmartIVR.$forwardingSelect.dropdown(Extensions.getDropdownSettingsWithoutEmpty()); - moduleSmartIVR.$LibrarySelect.dropdown({ - onChange: moduleSmartIVR.cbChangeLibraryType - }); - moduleSmartIVR.initializeForm(); - } - - return initialize; - }(), - + initialize: function initialize() { + moduleSmartIVR.cbChangeLibraryType(); + moduleSmartIVR.checkStatusToggle(); + window.addEventListener('ModuleStatusChanged', moduleSmartIVR.checkStatusToggle); + moduleSmartIVR.$forwardingSelect.dropdown(Extensions.getDropdownSettingsWithoutEmpty()); + moduleSmartIVR.$LibrarySelect.dropdown({ + onChange: moduleSmartIVR.cbChangeLibraryType + }); + moduleSmartIVR.initializeForm(); + }, /** * Изменение версии библиотеки */ - cbChangeLibraryType: function () { - function cbChangeLibraryType() { - if (moduleSmartIVR.$formObj.form('get value', 'library_1c') === '2.0') { - moduleSmartIVR.$onlyFirstGeneration.hide(); - moduleSmartIVR.$onlySecondGeneration.show(); - moduleSmartIVR.$formObj.form('set value', 'isPT1C', ''); - } else { - moduleSmartIVR.$onlySecondGeneration.hide(); - moduleSmartIVR.$onlyFirstGeneration.show(); - moduleSmartIVR.$formObj.form('set value', 'isPT1C', true); - } - - if (moduleSmartIVR.$dirrtyField === null) { - moduleSmartIVR.$dirrtyField = $('#dirrty'); - } else { - moduleSmartIVR.$dirrtyField.val(Math.random()); - moduleSmartIVR.$dirrtyField.trigger('change'); - } + cbChangeLibraryType: function cbChangeLibraryType() { + if (moduleSmartIVR.$formObj.form('get value', 'library_1c') === '1.0') { + moduleSmartIVR.$onlySecondGeneration.hide(); + moduleSmartIVR.$onlyFirstGeneration.show(); + moduleSmartIVR.$onlyFiveGeneration.hide(); + moduleSmartIVR.$formObj.form('set value', 'isPT1C', true); + } else if (moduleSmartIVR.$formObj.form('get value', 'library_1c') === '5.0') { + moduleSmartIVR.$onlySecondGeneration.hide(); + moduleSmartIVR.$onlyFirstGeneration.hide(); + moduleSmartIVR.$onlyFiveGeneration.show(); + moduleSmartIVR.$formObj.form('set value', 'isPT1C', ''); + } else { + moduleSmartIVR.$onlyFirstGeneration.hide(); + moduleSmartIVR.$onlySecondGeneration.show(); + moduleSmartIVR.$onlyFiveGeneration.hide(); + moduleSmartIVR.$formObj.form('set value', 'isPT1C', ''); } - - return cbChangeLibraryType; - }(), - + if (moduleSmartIVR.$dirrtyField === null) { + moduleSmartIVR.$dirrtyField = $('#dirrty'); + } else { + moduleSmartIVR.$dirrtyField.val(Math.random()); + moduleSmartIVR.$dirrtyField.trigger('change'); + } + }, /** * Изменение статуса кнопок при изменении статуса модуля */ - checkStatusToggle: function () { - function checkStatusToggle() { - if (moduleSmartIVR.$statusToggle.checkbox('is checked')) { - if (!moduleSmartIVR.$submitButton.hasClass('disabled')) { - moduleSmartIVR.$submitButton.click(); - } - - moduleSmartIVR.testConnection(); - } else { - moduleSmartIVR.changeStatus('Disconnected'); + checkStatusToggle: function checkStatusToggle() { + if (moduleSmartIVR.$statusToggle.checkbox('is checked')) { + if (!moduleSmartIVR.$submitButton.hasClass('disabled')) { + moduleSmartIVR.$submitButton.click(); } + moduleSmartIVR.testConnection(); + } else { + moduleSmartIVR.changeStatus('Disconnected'); } - - return checkStatusToggle; - }(), - + }, /** * Тестирование соединения с 1С */ - testConnection: function () { - function testConnection() { - if (!moduleSmartIVR.$formObj.form('is valid')) { - return; - } - - var formData = moduleSmartIVR.$formObj.form('get values'); - - if (formData.moduleCTI2Installed === '' && formData.isPT1C === 'false') { - return; - } - - moduleSmartIVR.changeStatus('Updating'); - $('.message.ajax.debug').remove(); - $.api({ - url: "".concat(Config.pbxUrl, "/pbxcore/api/modules/ModuleSmartIVR/check"), - on: 'now', - timeout: 15000, - successTest: function () { - function successTest(response) { - return response !== undefined && Object.keys(response).length > 0 && response.result !== undefined && response.result === true; - } - - return successTest; - }(), - onSuccess: function () { - function onSuccess() { - moduleSmartIVR.changeStatus('Connected'); - } - - return onSuccess; - }(), - onResponse: function () { - function onResponse(response) { - $('.message.ajax.debug').remove(); // Debug mode - - if (moduleSmartIVR.$debugToggle.checkbox('is checked') && moduleSmartIVR.$submitButton.hasClass('disabled') && typeof response.messages !== 'undefined') { - var visualErrorString = JSON.stringify(response.messages, null, 2); - - if (typeof visualErrorString === 'string' && visualErrorString !== '[]') { - visualErrorString = visualErrorString.replace(/\\n/g, '
'); - - if (Object.keys(response).length > 0 && response.result === true) { - moduleSmartIVR.$formObj.after("
\t\t\n\t\t\t\t\t\t\t\t\t
".concat(visualErrorString, "
\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t
")); - } else { - moduleSmartIVR.$formObj.after("
\n\t\t\t\t\t\t\t\t\t
".concat(visualErrorString, "
\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t
")); - } - } - } - } - - return onResponse; - }(), - onFailure: function () { - function onFailure(response) { - if (response !== undefined && Object.keys(response).length > 0 && response.result !== undefined && response.result === false && typeof response.data !== 'undefined') { - var visualErrorString = ''; - - if (typeof response.messages === 'string') { - visualErrorString = response.messages; - } else if (Array.isArray(response.messages)) { - $.each(response.messages, function (index, value) { - visualErrorString += "".concat(value, "
"); - }); - } else { - visualErrorString = JSON.stringify(response.data, null, '\t'); - } - - if (visualErrorString.indexOf('TTSConnectionError') >= 0) { - moduleSmartIVR.changeStatus('DisconnectedTTS'); - } else if (visualErrorString.indexOf('ConnectionToCRMError') >= 0) { - moduleSmartIVR.changeStatus('Disconnected1C'); - } else { - moduleSmartIVR.changeStatus('Disconnected'); - } + testConnection: function testConnection() { + if (!moduleSmartIVR.$formObj.form('is valid')) { + return; + } + var formData = moduleSmartIVR.$formObj.form('get values'); + if (formData.moduleCTI2Installed === '' && formData.isPT1C === 'false') { + return; + } + moduleSmartIVR.changeStatus('Updating'); + $('.message.ajax.debug').remove(); + $.api({ + url: "".concat(Config.pbxUrl, "/pbxcore/api/modules/ModuleSmartIVR/check"), + on: 'now', + timeout: 15000, + successTest: function successTest(response) { + return response !== undefined && Object.keys(response).length > 0 && response.result !== undefined && response.result === true; + }, + onSuccess: function onSuccess() { + moduleSmartIVR.changeStatus('Connected'); + }, + onResponse: function onResponse(response) { + $('.message.ajax.debug').remove(); + // Debug mode + if (moduleSmartIVR.$debugToggle.checkbox('is checked') && moduleSmartIVR.$submitButton.hasClass('disabled') && typeof response.messages !== 'undefined') { + var visualErrorString = JSON.stringify(response.messages, null, 2); + if (typeof visualErrorString === 'string' && visualErrorString !== '[]') { + visualErrorString = visualErrorString.replace(/\\n/g, '
'); + if (Object.keys(response).length > 0 && response.result === true) { + moduleSmartIVR.$formObj.after("
\t\t\n\t\t\t\t\t\t\t\t\t
".concat(visualErrorString, "
\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t
")); } else { - moduleSmartIVR.changeStatus('Disconnected'); + moduleSmartIVR.$formObj.after("
\n\t\t\t\t\t\t\t\t\t
".concat(visualErrorString, "
\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t
")); } } - - return onFailure; - }() - }); - } - - return testConnection; - }(), - + } + }, + onFailure: function onFailure(response) { + if (response !== undefined && Object.keys(response).length > 0 && response.result !== undefined && response.result === false && typeof response.data !== 'undefined') { + var visualErrorString = ''; + if (typeof response.messages === 'string') { + visualErrorString = response.messages; + } else if (Array.isArray(response.messages)) { + $.each(response.messages, function (index, value) { + visualErrorString += "".concat(value, "
"); + }); + } else { + visualErrorString = JSON.stringify(response.data, null, '\t'); + } + if (visualErrorString.indexOf('TTSConnectionError') >= 0) { + moduleSmartIVR.changeStatus('DisconnectedTTS'); + } else if (visualErrorString.indexOf('ConnectionToCRMError') >= 0) { + moduleSmartIVR.changeStatus('Disconnected1C'); + } else { + moduleSmartIVR.changeStatus('Disconnected'); + } + } else { + moduleSmartIVR.changeStatus('Disconnected'); + } + } + }); + }, /** * Применение настроек модуля после изменения данных формы */ - applyConfigurationChanges: function () { - function applyConfigurationChanges() { - $.api({ - url: "".concat(Config.pbxUrl, "/pbxcore/api/modules/ModuleSmartIVR/reload"), - on: 'now', - successTest: function () { - function successTest(response) { - return response !== undefined && Object.keys(response).length > 0 && response.result !== undefined && response.result === true; - } - - return successTest; - }(), - onSuccess: function () { - function onSuccess() { - moduleSmartIVR.checkStatusToggle(); - } - - return onSuccess; - }() - }); - } - - return applyConfigurationChanges; - }(), - cbBeforeSendForm: function () { - function cbBeforeSendForm(settings) { - var result = settings; - result.data = moduleSmartIVR.$formObj.form('get values'); - return result; - } - - return cbBeforeSendForm; - }(), - cbAfterSendForm: function () { - function cbAfterSendForm() { - moduleSmartIVR.changeStatus('Disconnected'); - moduleSmartIVR.applyConfigurationChanges(); - } - - return cbAfterSendForm; - }(), - initializeForm: function () { - function initializeForm() { - Form.$formObj = moduleSmartIVR.$formObj; - Form.url = "".concat(globalRootUrl, "module-smart-i-v-r/save"); - Form.validateRules = moduleSmartIVR.validateRules; - Form.cbBeforeSendForm = moduleSmartIVR.cbBeforeSendForm; - Form.cbAfterSendForm = moduleSmartIVR.cbAfterSendForm; - Form.initialize(); - } - - return initializeForm; - }(), - + applyConfigurationChanges: function applyConfigurationChanges() { + $.api({ + url: "".concat(Config.pbxUrl, "/pbxcore/api/modules/ModuleSmartIVR/reload"), + on: 'now', + successTest: function successTest(response) { + return response !== undefined && Object.keys(response).length > 0 && response.result !== undefined && response.result === true; + }, + onSuccess: function onSuccess() { + moduleSmartIVR.checkStatusToggle(); + } + }); + }, + cbBeforeSendForm: function cbBeforeSendForm(settings) { + var result = settings; + result.data = moduleSmartIVR.$formObj.form('get values'); + return result; + }, + cbAfterSendForm: function cbAfterSendForm() { + moduleSmartIVR.changeStatus('Disconnected'); + moduleSmartIVR.applyConfigurationChanges(); + }, + initializeForm: function initializeForm() { + Form.$formObj = moduleSmartIVR.$formObj; + Form.url = "".concat(globalRootUrl, "module-smart-i-v-r/save"); + Form.validateRules = moduleSmartIVR.validateRules; + Form.cbBeforeSendForm = moduleSmartIVR.cbBeforeSendForm; + Form.cbAfterSendForm = moduleSmartIVR.cbAfterSendForm; + Form.initialize(); + }, /** * Обновление статуса модуля * @param status */ - changeStatus: function () { - function changeStatus(status) { - switch (status) { - case 'Connected': - moduleSmartIVR.$moduleStatus.removeClass('grey').removeClass('red').addClass('green'); - moduleSmartIVR.$moduleStatus.html(globalTranslate.module_smivr_Connected); - break; - - case 'Disconnected': - moduleSmartIVR.$moduleStatus.removeClass('green').removeClass('red').addClass('grey'); - moduleSmartIVR.$moduleStatus.html(globalTranslate.module_smivr_Disconnected); - break; - - case 'Disconnected1C': - moduleSmartIVR.$moduleStatus.removeClass('green').removeClass('grey').addClass('red'); - moduleSmartIVR.$moduleStatus.html(globalTranslate.module_smivr_Disconnected1C); - break; - - case 'DisconnectedTTS': - moduleSmartIVR.$moduleStatus.removeClass('green').removeClass('grey').addClass('red'); - moduleSmartIVR.$moduleStatus.html(globalTranslate.module_smivr_DisconnectedTTS); - break; - - case 'Updating': - moduleSmartIVR.$moduleStatus.removeClass('green').removeClass('red').addClass('grey'); - moduleSmartIVR.$moduleStatus.html("".concat(globalTranslate.module_smivr_UpdateStatus)); - break; - - default: - moduleSmartIVR.$moduleStatus.removeClass('green').removeClass('red').addClass('grey'); - moduleSmartIVR.$moduleStatus.html(globalTranslate.module_smivr_Disconnected); - break; - } + changeStatus: function changeStatus(status) { + switch (status) { + case 'Connected': + moduleSmartIVR.$moduleStatus.removeClass('grey').removeClass('red').addClass('green'); + moduleSmartIVR.$moduleStatus.html(globalTranslate.module_smivr_Connected); + break; + case 'Disconnected': + moduleSmartIVR.$moduleStatus.removeClass('green').removeClass('red').addClass('grey'); + moduleSmartIVR.$moduleStatus.html(globalTranslate.module_smivr_Disconnected); + break; + case 'Disconnected1C': + moduleSmartIVR.$moduleStatus.removeClass('green').removeClass('grey').addClass('red'); + moduleSmartIVR.$moduleStatus.html(globalTranslate.module_smivr_Disconnected1C); + break; + case 'DisconnectedTTS': + moduleSmartIVR.$moduleStatus.removeClass('green').removeClass('grey').addClass('red'); + moduleSmartIVR.$moduleStatus.html(globalTranslate.module_smivr_DisconnectedTTS); + break; + case 'Updating': + moduleSmartIVR.$moduleStatus.removeClass('green').removeClass('red').addClass('grey'); + moduleSmartIVR.$moduleStatus.html("".concat(globalTranslate.module_smivr_UpdateStatus)); + break; + default: + moduleSmartIVR.$moduleStatus.removeClass('green').removeClass('red').addClass('grey'); + moduleSmartIVR.$moduleStatus.html(globalTranslate.module_smivr_Disconnected); + break; } - - return changeStatus; - }() + } }; $(document).ready(function () { moduleSmartIVR.initialize(); }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2R1bGUtc21hcnRpdnItaW5kZXguanMiXSwibmFtZXMiOlsibW9kdWxlU21hcnRJVlIiLCIkZm9ybU9iaiIsIiQiLCIkc3RhdHVzVG9nZ2xlIiwiJGZvcndhcmRpbmdTZWxlY3QiLCIkTGlicmFyeVNlbGVjdCIsIiRvbmx5Rmlyc3RHZW5lcmF0aW9uIiwiJG9ubHlTZWNvbmRHZW5lcmF0aW9uIiwiJG1vZHVsZVN0YXR1cyIsIiRkaXJydHlGaWVsZCIsIiRzdWJtaXRCdXR0b24iLCIkZGVidWdUb2dnbGUiLCJ2YWxpZGF0ZVJ1bGVzIiwibnVtYmVyX29mX3JlcGVhdCIsImlkZW50aWZpZXIiLCJydWxlcyIsInR5cGUiLCJwcm9tcHQiLCJnbG9iYWxUcmFuc2xhdGUiLCJtb2R1bGVfc21pdnJfVmFsaWRhdGVOdW1iZXJPZlJlcGVhdCIsInRpbWVPdXRFeHRlbnNpb24iLCJtb2R1bGVfc21pdnJfVmFsaWRhdGVUaW1lb3V0RXh0ZW5zaW9uIiwibW9kdWxlX3NtaXZyX1ZhbGlkYXRlVGltZU91dEV4dGVuc2lvbk5vdEVxdWFsVG8iLCJmYWlsT3ZlckV4dGVuc2lvbiIsIm1vZHVsZV9zbWl2cl9WYWxpZGF0ZUZhaWxPdmVyRXh0ZW5zaW9uIiwibW9kdWxlX3NtaXZyX1ZhbGlkYXRlRmFpbE92ZXJFeHRlbnNpb25Ob3RFcXVhbFRvIiwic2VydmVyMWNob3N0IiwiZGVwZW5kcyIsIm1vZHVsZV9zbWl2cl9WYWxpZGF0ZVNlcnZlcjFDSG9zdEVtcHR5Iiwic2VydmVyMWNwb3J0IiwibW9kdWxlX3NtaXZyX1ZhbGlkYXRlU2VydmVyMUNQb3J0UmFuZ2UiLCJkYXRhYmFzZSIsIm1vZHVsZV9zbWl2cl9WYWxpZGF0ZVB1Yk5hbWUiLCJpbml0aWFsaXplIiwiY2JDaGFuZ2VMaWJyYXJ5VHlwZSIsImNoZWNrU3RhdHVzVG9nZ2xlIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImRyb3Bkb3duIiwiRXh0ZW5zaW9ucyIsImdldERyb3Bkb3duU2V0dGluZ3NXaXRob3V0RW1wdHkiLCJvbkNoYW5nZSIsImluaXRpYWxpemVGb3JtIiwiZm9ybSIsImhpZGUiLCJzaG93IiwidmFsIiwiTWF0aCIsInJhbmRvbSIsInRyaWdnZXIiLCJjaGVja2JveCIsImhhc0NsYXNzIiwiY2xpY2siLCJ0ZXN0Q29ubmVjdGlvbiIsImNoYW5nZVN0YXR1cyIsImZvcm1EYXRhIiwibW9kdWxlQ1RJMkluc3RhbGxlZCIsImlzUFQxQyIsInJlbW92ZSIsImFwaSIsInVybCIsIkNvbmZpZyIsInBieFVybCIsIm9uIiwidGltZW91dCIsInN1Y2Nlc3NUZXN0IiwicmVzcG9uc2UiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwicmVzdWx0Iiwib25TdWNjZXNzIiwib25SZXNwb25zZSIsIm1lc3NhZ2VzIiwidmlzdWFsRXJyb3JTdHJpbmciLCJKU09OIiwic3RyaW5naWZ5IiwicmVwbGFjZSIsImFmdGVyIiwib25GYWlsdXJlIiwiZGF0YSIsIkFycmF5IiwiaXNBcnJheSIsImVhY2giLCJpbmRleCIsInZhbHVlIiwiaW5kZXhPZiIsImFwcGx5Q29uZmlndXJhdGlvbkNoYW5nZXMiLCJjYkJlZm9yZVNlbmRGb3JtIiwic2V0dGluZ3MiLCJjYkFmdGVyU2VuZEZvcm0iLCJGb3JtIiwiZ2xvYmFsUm9vdFVybCIsInN0YXR1cyIsInJlbW92ZUNsYXNzIiwiYWRkQ2xhc3MiLCJodG1sIiwibW9kdWxlX3NtaXZyX0Nvbm5lY3RlZCIsIm1vZHVsZV9zbWl2cl9EaXNjb25uZWN0ZWQiLCJtb2R1bGVfc21pdnJfRGlzY29ubmVjdGVkMUMiLCJtb2R1bGVfc21pdnJfRGlzY29ubmVjdGVkVFRTIiwibW9kdWxlX3NtaXZyX1VwZGF0ZVN0YXR1cyIsImRvY3VtZW50IiwicmVhZHkiXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7Ozs7QUFPQTtBQUNBLElBQU1BLGNBQWMsR0FBRztBQUN0QkMsRUFBQUEsUUFBUSxFQUFFQyxDQUFDLENBQUMsd0JBQUQsQ0FEVztBQUV0QkMsRUFBQUEsYUFB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LFFBQUQsQ0FBRCxDQUFZQyxLQUFaLENBQWtCLFlBQU07QUFDdkJ4RyxFQUFBQSxjQUFjLENBQUNpQyxVQUFmO0FBQ0EsQ0FGRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgwqkgTUlLTyBMTEMgLSBBbGwgUmlnaHRzIFJlc2VydmVkXG4gKiBVbmF1dGhvcml6ZWQgY29weWluZyBvZiB0aGlzIGZpbGUsIHZpYSBhbnkgbWVkaXVtIGlzIHN0cmljdGx5IHByb2hpYml0ZWRcbiAqIFByb3ByaWV0YXJ5IGFuZCBjb25maWRlbnRpYWxcbiAqIFdyaXR0ZW4gYnkgQWxleGV5IFBvcnRub3YsIDIgMjAxOVxuICovXG5cbi8qIGdsb2JhbCBnbG9iYWxSb290VXJsLGdsb2JhbFRyYW5zbGF0ZSwgRXh0ZW5zaW9ucywgRm9ybSwgQ29uZmlnLCBVc2VyTWVzc2FnZSAqL1xuY29uc3QgbW9kdWxlU21hcnRJVlIgPSB7XG5cdCRmb3JtT2JqOiAkKCcjbW9kdWxlLXNtYXJ0LWl2ci1mb3JtJyksXG5cdCRzdGF0dXNUb2dnbGU6ICQoJyNtb2R1bGUtc3RhdHVzLXRvZ2dsZScpLFxuXHQkZm9yd2FyZGluZ1NlbGVjdDogJCgnLmZvcndhcmRpbmctc2VsZWN0JyksXG5cdCRMaWJyYXJ5U2VsZWN0OiAkKCcjbGlicmFyeV8xYycpLFxuXHQkb25seUZpcnN0R2VuZXJhdGlvbjogJCgnLm9ubHktZmlyc3QtZ2VuZXJhdGlvbicpLFxuXHQkb25seVNlY29uZEdlbmVyYXRpb246ICQoJy5vbmx5LXNlY29uZC1nZW5lcmF0aW9uJyksXG5cdCRtb2R1bGVTdGF0dXM6ICQoJyNzdGF0dXMnKSxcblx0JGRpcnJ0eUZpZWxkOiBudWxsLFxuXHQkc3VibWl0QnV0dG9uOiAkKCcjc3VibWl0YnV0dG9uJyksXG5cdCRkZWJ1Z1RvZ2dsZTogJCgnI2RlYnVnLW1vZGUtdG9nZ2xlJyksXG5cblx0dmFsaWRhdGVSdWxlczoge1xuXHRcdG51bWJlcl9vZl9yZXBlYXQ6IHtcblx0XHRcdGlkZW50aWZpZXI6ICdudW1iZXJfb2ZfcmVwZWF0Jyxcblx0XHRcdHJ1bGVzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAnaW50ZWdlclsxLi4xMF0nLFxuXHRcdFx0XHRcdHByb21wdDogZ2xvYmFsVHJhbnNsYXRlLm1vZHVsZV9zbWl2cl9WYWxpZGF0ZU51bWJlck9mUmVwZWF0LFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHRpbWVPdXRFeHRlbnNpb246IHtcblx0XHRcdGlkZW50aWZpZXI6ICd0aW1lb3V0X2V4dGVuc2lvbicsXG5cdFx0XHRydWxlczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogJ2VtcHR5Jyxcblx0XHRcdFx0XHRwcm9tcHQ6IGdsb2JhbFRyYW5zbGF0ZS5tb2R1bGVfc21pdnJfVmFsaWRhdGVUaW1lb3V0RXh0ZW5zaW9uLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogYGRpZmZlcmVudFtleHRlbnNpb25dYCxcblx0XHRcdFx0XHRwcm9tcHQ6IGdsb2JhbFRyYW5zbGF0ZS5tb2R1bGVfc21pdnJfVmFsaWRhdGVUaW1lT3V0RXh0ZW5zaW9uTm90RXF1YWxUbyxcblx0XHRcdFx0fVxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdGZhaWxPdmVyRXh0ZW5zaW9uOiB7XG5cdFx0XHRpZGVudGlmaWVyOiAnZmFpbG92ZXJfZXh0ZW5zaW9uJyxcblx0XHRcdHJ1bGVzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0eXBlOiAnZW1wdHknLFxuXHRcdFx0XHRcdHByb21wdDogZ2xvYmFsVHJhbnNsYXRlLm1vZHVsZV9zbWl2cl9WYWxpZGF0ZUZhaWxPdmVyRXh0ZW5zaW9uLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogYGRpZmZlcmVudFtleHRlbnNpb25dYCxcblx0XHRcdFx0XHRwcm9tcHQ6IGdsb2JhbFRyYW5zbGF0ZS5tb2R1bGVfc21pdnJfVmFsaWRhdGVGYWlsT3ZlckV4dGVuc2lvbk5vdEVxdWFsVG8sXG5cdFx0XHRcdH1cblx0XHRcdF0sXG5cdFx0fSxcblx0XHRzZXJ2ZXIxY2hvc3Q6IHtcblx0XHRcdGlkZW50aWZpZXI6ICdzZXJ2ZXIxY2hvc3QnLFxuXHRcdFx0ZGVwZW5kczogJ2lzUFQxQycsXG5cdFx0XHRydWxlczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogJ2VtcHR5Jyxcblx0XHRcdFx0XHRwcm9tcHQ6IGdsb2JhbFRyYW5zbGF0ZS5tb2R1bGVfc21pdnJfVmFsaWRhdGVTZXJ2ZXIxQ0hvc3RFbXB0eSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHRzZXJ2ZXIxY3BvcnQ6IHtcblx0XHRcdGlkZW50aWZpZXI6ICdzZXJ2ZXIxY3BvcnQnLFxuXHRcdFx0ZGVwZW5kczogJ2lzUFQxQycsXG5cdFx0XHRydWxlczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHlwZTogJ2ludGVnZXJbMC4uNjU1MzVdJyxcblx0XHRcdFx0XHRwcm9tcHQ6IGdsb2JhbFRyYW5zbGF0ZS5tb2R1bGVfc21pdnJfVmFsaWRhdGVTZXJ2ZXIxQ1BvcnRSYW5nZSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSxcblx0XHRkYXRhYmFzZToge1xuXHRcdFx0aWRlbnRpZmllcjogJ2RhdGFiYXNlJyxcblx0XHRcdGRlcGVuZHM6ICdpc1BUMUMnLFxuXHRcdFx0cnVsZXM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHR5cGU6ICdlbXB0eScsXG5cdFx0XHRcdFx0cHJvbXB0OiBnbG9iYWxUcmFuc2xhdGUubW9kdWxlX3NtaXZyX1ZhbGlkYXRlUHViTmFtZSxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fVxuXHR9LFxuXHRpbml0aWFsaXplKCkge1xuXHRcdG1vZHVsZVNtYXJ0SVZSLmNiQ2hhbmdlTGlicmFyeVR5cGUoKTtcblx0XHRtb2R1bGVTbWFydElWUi5jaGVja1N0YXR1c1RvZ2dsZSgpO1xuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdNb2R1bGVTdGF0dXNDaGFuZ2VkJywgbW9kdWxlU21hcnRJVlIuY2hlY2tTdGF0dXNUb2dnbGUpO1xuXHRcdG1vZHVsZVNtYXJ0SVZSLiRmb3J3YXJkaW5nU2VsZWN0LmRyb3Bkb3duKEV4dGVuc2lvbnMuZ2V0RHJvcGRvd25TZXR0aW5nc1dpdGhvdXRFbXB0eSgpKTtcblx0XHRtb2R1bGVTbWFydElWUi4kTGlicmFyeVNlbGVjdC5kcm9wZG93bih7b25DaGFuZ2U6IG1vZHVsZVNtYXJ0SVZSLmNiQ2hhbmdlTGlicmFyeVR5cGV9KTtcblx0XHRtb2R1bGVTbWFydElWUi5pbml0aWFsaXplRm9ybSgpO1xuXHR9LFxuXHQvKipcblx0ICog0JjQt9C80LXQvdC10L3QuNC1INCy0LXRgNGB0LjQuCDQsdC40LHQu9C40L7RgtC10LrQuFxuXHQgKi9cblx0Y2JDaGFuZ2VMaWJyYXJ5VHlwZSgpIHtcblx0XHRpZiAobW9kdWxlU21hcnRJVlIuJGZvcm1PYmouZm9ybSgnZ2V0IHZhbHVlJywgJ2xpYnJhcnlfMWMnKSA9PT0gJzIuMCcpIHtcblx0XHRcdG1vZHVsZVNtYXJ0SVZSLiRvbmx5Rmlyc3RHZW5lcmF0aW9uLmhpZGUoKTtcblx0XHRcdG1vZHVsZVNtYXJ0SVZSLiRvbmx5U2Vjb25kR2VuZXJhdGlvbi5zaG93KCk7XG5cdFx0XHRtb2R1bGVTbWFydElWUi4kZm9ybU9iai5mb3JtKCdzZXQgdmFsdWUnLCAnaXNQVDFDJywgJycpO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1vZHVsZVNtYXJ0SVZSLiRvbmx5U2Vjb25kR2VuZXJhdGlvbi5oaWRlKCk7XG5cdFx0XHRtb2R1bGVTbWFydElWUi4kb25seUZpcnN0R2VuZXJhdGlvbi5zaG93KCk7XG5cdFx0XHRtb2R1bGVTbWFydElWUi4kZm9ybU9iai5mb3JtKCdzZXQgdmFsdWUnLCAnaXNQVDFDJywgdHJ1ZSk7XG5cdFx0fVxuXHRcdGlmIChtb2R1bGVTbWFydElWUi4kZGlycnR5RmllbGQ9PT1udWxsKXtcblx0XHRcdG1vZHVsZVNtYXJ0SVZSLiRkaXJydHlGaWVsZD0kKCcjZGlycnR5Jyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1vZHVsZVNtYXJ0SVZSLiRkaXJydHlGaWVsZC52YWwoTWF0aC5yYW5kb20oKSk7XG5cdFx0XHRtb2R1bGVTbWFydElWUi4kZGlycnR5RmllbGQudHJpZ2dlcignY2hhbmdlJyk7XG5cdFx0fVxuXG5cdH1cblx0LFxuXHQvKipcblx0ICog0JjQt9C80LXQvdC10L3QuNC1INGB0YLQsNGC0YPRgdCwINC60L3QvtC/0L7QuiDQv9GA0Lgg0LjQt9C80LXQvdC10L3QuNC4INGB0YLQsNGC0YPRgdCwINC80L7QtNGD0LvRj1xuXHQgKi9cblx0Y2hlY2tTdGF0dXNUb2dnbGUoKSB7XG5cdFx0aWYgKG1vZHVsZVNtYXJ0SVZSLiRzdGF0dXNUb2dnbGUuY2hlY2tib3goJ2lzIGNoZWNrZWQnKSkge1xuXHRcdFx0aWYgKCFtb2R1bGVTbWFydElWUi4kc3VibWl0QnV0dG9uLmhhc0NsYXNzKCdkaXNhYmxlZCcpKSB7XG5cdFx0XHRcdG1vZHVsZVNtYXJ0SVZSLiRzdWJtaXRCdXR0b24uY2xpY2soKTtcblx0XHRcdH1cblx0XHRcdG1vZHVsZVNtYXJ0SVZSLnRlc3RDb25uZWN0aW9uKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1vZHVsZVNtYXJ0SVZSLmNoYW5nZVN0YXR1cygnRGlzY29ubmVjdGVkJyk7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICog0KLQtdGB0YLQuNGA0L7QstCw0L3QuNC1INGB0L7QtdC00LjQvdC10L3QuNGPINGBIDHQoVxuXHQgKi9cblx0dGVzdENvbm5lY3Rpb24oKSB7XG5cdFx0aWYgKCEobW9kdWxlU21hcnRJVlIuJGZvcm1PYmouZm9ybSgnaXMgdmFsaWQnKSkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgZm9ybURhdGEgPSBtb2R1bGVTbWFydElWUi4kZm9ybU9iai5mb3JtKCdnZXQgdmFsdWVzJyk7XG5cdFx0aWYgKGZvcm1EYXRhLm1vZHVsZUNUSTJJbnN0YWxsZWQ9PT0nJ1xuXHRcdFx0JiYgZm9ybURhdGEuaXNQVDFDPT09J2ZhbHNlJyl7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdG1vZHVsZVNtYXJ0SVZSLmNoYW5nZVN0YXR1cygnVXBkYXRpbmcnKTtcblx0XHQkKCcubWVzc2FnZS5hamF4LmRlYnVnJykucmVtb3ZlKCk7XG5cdFx0JC5hcGkoe1xuXHRcdFx0dXJsOiBgJHtDb25maWcucGJ4VXJsfS9wYnhjb3JlL2FwaS9tb2R1bGVzL01vZHVsZVNtYXJ0SVZSL2NoZWNrYCxcblx0XHRcdG9uOiAnbm93Jyxcblx0XHRcdHRpbWVvdXQ6IDE1MDAwLFxuXHRcdFx0c3VjY2Vzc1Rlc3QocmVzcG9uc2UpIHtcblx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHQmJiBPYmplY3Qua2V5cyhyZXNwb25zZSkubGVuZ3RoID4gMFxuXHRcdFx0XHRcdCYmIHJlc3BvbnNlLnJlc3VsdCAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0JiYgcmVzcG9uc2UucmVzdWx0ID09PSB0cnVlO1xuXHRcdFx0fSxcblx0XHRcdG9uU3VjY2VzcygpIHtcblx0XHRcdFx0bW9kdWxlU21hcnRJVlIuY2hhbmdlU3RhdHVzKCdDb25uZWN0ZWQnKTtcblx0XHRcdH0sXG5cdFx0XHRvblJlc3BvbnNlKHJlc3BvbnNlKSB7XG5cdFx0XHRcdCQoJy5tZXNzYWdlLmFqYXguZGVidWcnKS5yZW1vdmUoKTtcblx0XHRcdFx0Ly8gRGVidWcgbW9kZVxuXHRcdFx0XHRpZiAobW9kdWxlU21hcnRJVlIuJGRlYnVnVG9nZ2xlLmNoZWNrYm94KCdpcyBjaGVja2VkJylcblx0XHRcdFx0XHQmJiBtb2R1bGVTbWFydElWUi4kc3VibWl0QnV0dG9uLmhhc0NsYXNzKCdkaXNhYmxlZCcpXG5cdFx0XHRcdFx0JiYgdHlwZW9mIChyZXNwb25zZS5tZXNzYWdlcykgIT09ICd1bmRlZmluZWQnXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGxldCB2aXN1YWxFcnJvclN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLm1lc3NhZ2VzLCBudWxsLCAyKTtcblxuXHRcdFx0XHRcdGlmICh0eXBlb2YgdmlzdWFsRXJyb3JTdHJpbmcgPT09ICdzdHJpbmcnICYmIHZpc3VhbEVycm9yU3RyaW5nIT09J1tdJykge1xuXHRcdFx0XHRcdFx0dmlzdWFsRXJyb3JTdHJpbmcgPSB2aXN1YWxFcnJvclN0cmluZy5yZXBsYWNlKC9cXFxcbi9nLCAnPGJyLz4nKTtcblxuXHRcdFx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKHJlc3BvbnNlKS5sZW5ndGggPiAwICYmIHJlc3BvbnNlLnJlc3VsdCA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0XHRtb2R1bGVTbWFydElWUi4kZm9ybU9ialxuXHRcdFx0XHRcdFx0XHRcdC5hZnRlcihgPGRpdiBjbGFzcz1cInVpIHN1Y2Nlc3MgbWVzc2FnZSBhamF4IGRlYnVnXCI+XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0PHByZSBzdHlsZT0nd2hpdGUtc3BhY2U6IHByZS13cmFwJz4ke3Zpc3VhbEVycm9yU3RyaW5nfTwvcHJlPlx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdG1vZHVsZVNtYXJ0SVZSLiRmb3JtT2JqXG5cdFx0XHRcdFx0XHRcdFx0LmFmdGVyKGA8ZGl2IGNsYXNzPVwidWkgZXJyb3IgbWVzc2FnZSBhamF4IGRlYnVnXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8cHJlIHN0eWxlPSd3aGl0ZS1zcGFjZTogcHJlLXdyYXAnPiR7dmlzdWFsRXJyb3JTdHJpbmd9PC9wcmU+XHRcdFx0XHRcdFx0XHRcdFx0XHQgIFxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PmApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9uRmFpbHVyZShyZXNwb25zZSkge1xuXHRcdFx0XHRpZiAocmVzcG9uc2UgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdCYmIE9iamVjdC5rZXlzKHJlc3BvbnNlKS5sZW5ndGggPiAwXG5cdFx0XHRcdFx0JiYgcmVzcG9uc2UucmVzdWx0ICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHQmJiByZXNwb25zZS5yZXN1bHQgPT09IGZhbHNlXG5cdFx0XHRcdFx0JiYgdHlwZW9mIChyZXNwb25zZS5kYXRhKSAhPT0gJ3VuZGVmaW5lZCdcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0bGV0IHZpc3VhbEVycm9yU3RyaW5nID0gJyc7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiAocmVzcG9uc2UubWVzc2FnZXMpID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0dmlzdWFsRXJyb3JTdHJpbmcgPSByZXNwb25zZS5tZXNzYWdlcztcblx0XHRcdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzcG9uc2UubWVzc2FnZXMpKSB7XG5cdFx0XHRcdFx0XHQkLmVhY2gocmVzcG9uc2UubWVzc2FnZXMsIChpbmRleCwgdmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdFx0dmlzdWFsRXJyb3JTdHJpbmcgKz0gYCR7dmFsdWV9IDxicj5gO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHZpc3VhbEVycm9yU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSwgbnVsbCwgJ1xcdCcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodmlzdWFsRXJyb3JTdHJpbmcuaW5kZXhPZignVFRTQ29ubmVjdGlvbkVycm9yJykgPj0gMCkge1xuXHRcdFx0XHRcdFx0bW9kdWxlU21hcnRJVlIuY2hhbmdlU3RhdHVzKCdEaXNjb25uZWN0ZWRUVFMnKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHZpc3VhbEVycm9yU3RyaW5nLmluZGV4T2YoJ0Nvbm5lY3Rpb25Ub0NSTUVycm9yJykgPj0gMCkge1xuXHRcdFx0XHRcdFx0bW9kdWxlU21hcnRJVlIuY2hhbmdlU3RhdHVzKCdEaXNjb25uZWN0ZWQxQycpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRtb2R1bGVTbWFydElWUi5jaGFuZ2VTdGF0dXMoJ0Rpc2Nvbm5lY3RlZCcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtb2R1bGVTbWFydElWUi5jaGFuZ2VTdGF0dXMoJ0Rpc2Nvbm5lY3RlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9LFxuXHQvKipcblx0ICog0J/RgNC40LzQtdC90LXQvdC40LUg0L3QsNGB0YLRgNC+0LXQuiDQvNC+0LTRg9C70Y8g0L/QvtGB0LvQtSDQuNC30LzQtdC90LXQvdC40Y8g0LTQsNC90L3Ri9GFINGE0L7RgNC80Ytcblx0ICovXG5cdGFwcGx5Q29uZmlndXJhdGlvbkNoYW5nZXMoKSB7XG5cdFx0JC5hcGkoe1xuXHRcdFx0dXJsOiBgJHtDb25maWcucGJ4VXJsfS9wYnhjb3JlL2FwaS9tb2R1bGVzL01vZHVsZVNtYXJ0SVZSL3JlbG9hZGAsXG5cdFx0XHRvbjogJ25vdycsXG5cdFx0XHRzdWNjZXNzVGVzdChyZXNwb25zZSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdCYmIE9iamVjdC5rZXlzKHJlc3BvbnNlKS5sZW5ndGggPiAwXG5cdFx0XHRcdFx0JiYgcmVzcG9uc2UucmVzdWx0ICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHQmJiByZXNwb25zZS5yZXN1bHQgPT09IHRydWU7XG5cdFx0XHR9LFxuXHRcdFx0b25TdWNjZXNzKCkge1xuXHRcdFx0XHRtb2R1bGVTbWFydElWUi5jaGVja1N0YXR1c1RvZ2dsZSgpO1xuXHRcdFx0fSxcblx0XHR9KTtcblx0fSxcblx0Y2JCZWZvcmVTZW5kRm9ybShzZXR0aW5ncykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHNldHRpbmdzO1xuXHRcdHJlc3VsdC5kYXRhID0gbW9kdWxlU21hcnRJVlIuJGZvcm1PYmouZm9ybSgnZ2V0IHZhbHVlcycpO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cdGNiQWZ0ZXJTZW5kRm9ybSgpIHtcblx0XHRtb2R1bGVTbWFydElWUi5jaGFuZ2VTdGF0dXMoJ0Rpc2Nvbm5lY3RlZCcpO1xuXHRcdG1vZHVsZVNtYXJ0SVZSLmFwcGx5Q29uZmlndXJhdGlvbkNoYW5nZXMoKTtcblx0fSxcblx0aW5pdGlhbGl6ZUZvcm0oKSB7XG5cdFx0Rm9ybS4kZm9ybU9iaiA9IG1vZHVsZVNtYXJ0SVZSLiRmb3JtT2JqO1xuXHRcdEZvcm0udXJsID0gYCR7Z2xvYmFsUm9vdFVybH1tb2R1bGUtc21hcnQtaS12LXIvc2F2ZWA7XG5cdFx0Rm9ybS52YWxpZGF0ZVJ1bGVzID0gbW9kdWxlU21hcnRJVlIudmFsaWRhdGVSdWxlcztcblx0XHRGb3JtLmNiQmVmb3JlU2VuZEZvcm0gPSBtb2R1bGVTbWFydElWUi5jYkJlZm9yZVNlbmRGb3JtO1xuXHRcdEZvcm0uY2JBZnRlclNlbmRGb3JtID0gbW9kdWxlU21hcnRJVlIuY2JBZnRlclNlbmRGb3JtO1xuXHRcdEZvcm0uaW5pdGlhbGl6ZSgpO1xuXHR9LFxuXHQvKipcblx0ICog0J7QsdC90L7QstC70LXQvdC40LUg0YHRgtCw0YLRg9GB0LAg0LzQvtC00YPQu9GPXG5cdCAqIEBwYXJhbSBzdGF0dXNcblx0ICovXG5cdGNoYW5nZVN0YXR1cyhzdGF0dXMpIHtcblx0XHRzd2l0Y2ggKHN0YXR1cykge1xuXHRcdFx0Y2FzZSAnQ29ubmVjdGVkJzpcblx0XHRcdFx0bW9kdWxlU21hcnRJVlIuJG1vZHVsZVN0YXR1c1xuXHRcdFx0XHRcdC5yZW1vdmVDbGFzcygnZ3JleScpXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCdyZWQnKVxuXHRcdFx0XHRcdC5hZGRDbGFzcygnZ3JlZW4nKTtcblx0XHRcdFx0bW9kdWxlU21hcnRJVlIuJG1vZHVsZVN0YXR1cy5odG1sKGdsb2JhbFRyYW5zbGF0ZS5tb2R1bGVfc21pdnJfQ29ubmVjdGVkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdEaXNjb25uZWN0ZWQnOlxuXHRcdFx0XHRtb2R1bGVTbWFydElWUi4kbW9kdWxlU3RhdHVzXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCdncmVlbicpXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCdyZWQnKVxuXHRcdFx0XHRcdC5hZGRDbGFzcygnZ3JleScpO1xuXHRcdFx0XHRtb2R1bGVTbWFydElWUi4kbW9kdWxlU3RhdHVzLmh0bWwoZ2xvYmFsVHJhbnNsYXRlLm1vZHVsZV9zbWl2cl9EaXNjb25uZWN0ZWQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ0Rpc2Nvbm5lY3RlZDFDJzpcblx0XHRcdFx0bW9kdWxlU21hcnRJVlIuJG1vZHVsZVN0YXR1c1xuXHRcdFx0XHRcdC5yZW1vdmVDbGFzcygnZ3JlZW4nKVxuXHRcdFx0XHRcdC5yZW1vdmVDbGFzcygnZ3JleScpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCdyZWQnKTtcblx0XHRcdFx0bW9kdWxlU21hcnRJVlIuJG1vZHVsZVN0YXR1cy5odG1sKGdsb2JhbFRyYW5zbGF0ZS5tb2R1bGVfc21pdnJfRGlzY29ubmVjdGVkMUMpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ0Rpc2Nvbm5lY3RlZFRUUyc6XG5cdFx0XHRcdG1vZHVsZVNtYXJ0SVZSLiRtb2R1bGVTdGF0dXNcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ2dyZWVuJylcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ2dyZXknKVxuXHRcdFx0XHRcdC5hZGRDbGFzcygncmVkJyk7XG5cdFx0XHRcdG1vZHVsZVNtYXJ0SVZSLiRtb2R1bGVTdGF0dXMuaHRtbChnbG9iYWxUcmFuc2xhdGUubW9kdWxlX3NtaXZyX0Rpc2Nvbm5lY3RlZFRUUyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnVXBkYXRpbmcnOlxuXHRcdFx0XHRtb2R1bGVTbWFydElWUi4kbW9kdWxlU3RhdHVzXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCdncmVlbicpXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCdyZWQnKVxuXHRcdFx0XHRcdC5hZGRDbGFzcygnZ3JleScpO1xuXHRcdFx0XHRtb2R1bGVTbWFydElWUi4kbW9kdWxlU3RhdHVzLmh0bWwoYDxpIGNsYXNzPVwic3Bpbm5lciBsb2FkaW5nIGljb25cIj48L2k+JHtnbG9iYWxUcmFuc2xhdGUubW9kdWxlX3NtaXZyX1VwZGF0ZVN0YXR1c31gKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRtb2R1bGVTbWFydElWUi4kbW9kdWxlU3RhdHVzXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCdncmVlbicpXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCdyZWQnKVxuXHRcdFx0XHRcdC5hZGRDbGFzcygnZ3JleScpO1xuXHRcdFx0XHRtb2R1bGVTbWFydElWUi4kbW9kdWxlU3RhdHVzLmh0bWwoZ2xvYmFsVHJhbnNsYXRlLm1vZHVsZV9zbWl2cl9EaXNjb25uZWN0ZWQpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH0sXG59O1xuXG4kKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG5cdG1vZHVsZVNtYXJ0SVZSLmluaXRpYWxpemUoKTtcbn0pO1xuXG4iXX0= \ No newline at end of file +//# sourceMappingURL=module-smartivr-index.js.map \ No newline at end of file diff --git a/public/assets/js/module-smartivr-index.js.map b/public/assets/js/module-smartivr-index.js.map new file mode 100644 index 0000000..1cfe00d --- /dev/null +++ b/public/assets/js/module-smartivr-index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"module-smartivr-index.js","names":["moduleSmartIVR","$formObj","$","$statusToggle","$forwardingSelect","$LibrarySelect","$onlyFirstGeneration","$onlySecondGeneration","$onlyFiveGeneration","$moduleStatus","$dirrtyField","$submitButton","$debugToggle","validateRules","number_of_repeat","identifier","rules","type","prompt","globalTranslate","module_smivr_ValidateNumberOfRepeat","timeOutExtension","module_smivr_ValidateTimeoutExtension","module_smivr_ValidateTimeOutExtensionNotEqualTo","failOverExtension","module_smivr_ValidateFailOverExtension","module_smivr_ValidateFailOverExtensionNotEqualTo","server1chost","depends","module_smivr_ValidateServer1CHostEmpty","server1cport","module_smivr_ValidateServer1CPortRange","database","module_smivr_ValidatePubName","initialize","cbChangeLibraryType","checkStatusToggle","window","addEventListener","dropdown","Extensions","getDropdownSettingsWithoutEmpty","onChange","initializeForm","form","hide","show","val","Math","random","trigger","checkbox","hasClass","click","testConnection","changeStatus","formData","moduleCTI2Installed","isPT1C","remove","api","url","concat","Config","pbxUrl","on","timeout","successTest","response","undefined","Object","keys","length","result","onSuccess","onResponse","messages","visualErrorString","JSON","stringify","replace","after","onFailure","data","Array","isArray","each","index","value","indexOf","applyConfigurationChanges","cbBeforeSendForm","settings","cbAfterSendForm","Form","globalRootUrl","status","removeClass","addClass","html","module_smivr_Connected","module_smivr_Disconnected","module_smivr_Disconnected1C","module_smivr_DisconnectedTTS","module_smivr_UpdateStatus","document","ready"],"sources":["src/module-smartivr-index.js"],"sourcesContent":["/*\n * Copyright © MIKO LLC - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by Alexey Portnov, 2 2019\n */\n\n/* global globalRootUrl,globalTranslate, Extensions, Form, Config, UserMessage */\nconst moduleSmartIVR = {\n\t$formObj: $('#module-smart-ivr-form'),\n\t$statusToggle: $('#module-status-toggle'),\n\t$forwardingSelect: $('.forwarding-select'),\n\t$LibrarySelect: $('#library_1c'),\n\t$onlyFirstGeneration: $('.only-first-generation'),\n\t$onlySecondGeneration: $('.only-second-generation'),\n\t$onlyFiveGeneration: $('.only-five-generation'),\n\t$moduleStatus: $('#status'),\n\t$dirrtyField: null,\n\t$submitButton: $('#submitbutton'),\n\t$debugToggle: $('#debug-mode-toggle'),\n\n\tvalidateRules: {\n\t\tnumber_of_repeat: {\n\t\t\tidentifier: 'number_of_repeat',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'integer[1..10]',\n\t\t\t\t\tprompt: globalTranslate.module_smivr_ValidateNumberOfRepeat,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\ttimeOutExtension: {\n\t\t\tidentifier: 'timeout_extension',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'empty',\n\t\t\t\t\tprompt: globalTranslate.module_smivr_ValidateTimeoutExtension,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: `different[extension]`,\n\t\t\t\t\tprompt: globalTranslate.module_smivr_ValidateTimeOutExtensionNotEqualTo,\n\t\t\t\t}\n\t\t\t],\n\t\t},\n\t\tfailOverExtension: {\n\t\t\tidentifier: 'failover_extension',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'empty',\n\t\t\t\t\tprompt: globalTranslate.module_smivr_ValidateFailOverExtension,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: `different[extension]`,\n\t\t\t\t\tprompt: globalTranslate.module_smivr_ValidateFailOverExtensionNotEqualTo,\n\t\t\t\t}\n\t\t\t],\n\t\t},\n\t\tserver1chost: {\n\t\t\tidentifier: 'server1chost',\n\t\t\tdepends: 'isPT1C',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'empty',\n\t\t\t\t\tprompt: globalTranslate.module_smivr_ValidateServer1CHostEmpty,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tserver1cport: {\n\t\t\tidentifier: 'server1cport',\n\t\t\tdepends: 'isPT1C',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'integer[0..65535]',\n\t\t\t\t\tprompt: globalTranslate.module_smivr_ValidateServer1CPortRange,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tdatabase: {\n\t\t\tidentifier: 'database',\n\t\t\tdepends: 'isPT1C',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'empty',\n\t\t\t\t\tprompt: globalTranslate.module_smivr_ValidatePubName,\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t},\n\tinitialize() {\n\t\tmoduleSmartIVR.cbChangeLibraryType();\n\t\tmoduleSmartIVR.checkStatusToggle();\n\t\twindow.addEventListener('ModuleStatusChanged', moduleSmartIVR.checkStatusToggle);\n\t\tmoduleSmartIVR.$forwardingSelect.dropdown(Extensions.getDropdownSettingsWithoutEmpty());\n\t\tmoduleSmartIVR.$LibrarySelect.dropdown({onChange: moduleSmartIVR.cbChangeLibraryType});\n\t\tmoduleSmartIVR.initializeForm();\n\t},\n\t/**\n\t * Изменение версии библиотеки\n\t */\n\tcbChangeLibraryType() {\n\t\tif (moduleSmartIVR.$formObj.form('get value', 'library_1c') === '1.0') {\n\t\t\tmoduleSmartIVR.$onlySecondGeneration.hide();\n\t\t\tmoduleSmartIVR.$onlyFirstGeneration.show();\n\t\t\tmoduleSmartIVR.$onlyFiveGeneration.hide();\n\t\t\tmoduleSmartIVR.$formObj.form('set value', 'isPT1C', true);\n\t\t} else if(moduleSmartIVR.$formObj.form('get value', 'library_1c') === '5.0'){\n\t\t\tmoduleSmartIVR.$onlySecondGeneration.hide();\n\t\t\tmoduleSmartIVR.$onlyFirstGeneration.hide();\n\t\t\tmoduleSmartIVR.$onlyFiveGeneration.show();\n\t\t\tmoduleSmartIVR.$formObj.form('set value', 'isPT1C', '');\n\t\t} else {\n\t\t\tmoduleSmartIVR.$onlyFirstGeneration.hide();\n\t\t\tmoduleSmartIVR.$onlySecondGeneration.show();\n\t\t\tmoduleSmartIVR.$onlyFiveGeneration.hide();\n\t\t\tmoduleSmartIVR.$formObj.form('set value', 'isPT1C', '');\n\t\t}\n\t\tif (moduleSmartIVR.$dirrtyField===null){\n\t\t\tmoduleSmartIVR.$dirrtyField=$('#dirrty');\n\t\t} else {\n\t\t\tmoduleSmartIVR.$dirrtyField.val(Math.random());\n\t\t\tmoduleSmartIVR.$dirrtyField.trigger('change');\n\t\t}\n\t}\n\t,\n\t/**\n\t * Изменение статуса кнопок при изменении статуса модуля\n\t */\n\tcheckStatusToggle() {\n\t\tif (moduleSmartIVR.$statusToggle.checkbox('is checked')) {\n\t\t\tif (!moduleSmartIVR.$submitButton.hasClass('disabled')) {\n\t\t\t\tmoduleSmartIVR.$submitButton.click();\n\t\t\t}\n\t\t\tmoduleSmartIVR.testConnection();\n\t\t} else {\n\t\t\tmoduleSmartIVR.changeStatus('Disconnected');\n\t\t}\n\t},\n\t/**\n\t * Тестирование соединения с 1С\n\t */\n\ttestConnection() {\n\t\tif (!(moduleSmartIVR.$formObj.form('is valid'))) {\n\t\t\treturn;\n\t\t}\n\t\tconst formData = moduleSmartIVR.$formObj.form('get values');\n\t\tif (formData.moduleCTI2Installed===''\n\t\t\t&& formData.isPT1C==='false'){\n\t\t\treturn;\n\t\t}\n\t\tmoduleSmartIVR.changeStatus('Updating');\n\t\t$('.message.ajax.debug').remove();\n\t\t$.api({\n\t\t\turl: `${Config.pbxUrl}/pbxcore/api/modules/ModuleSmartIVR/check`,\n\t\t\ton: 'now',\n\t\t\ttimeout: 15000,\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined\n\t\t\t\t\t&& Object.keys(response).length > 0\n\t\t\t\t\t&& response.result !== undefined\n\t\t\t\t\t&& response.result === true;\n\t\t\t},\n\t\t\tonSuccess() {\n\t\t\t\tmoduleSmartIVR.changeStatus('Connected');\n\t\t\t},\n\t\t\tonResponse(response) {\n\t\t\t\t$('.message.ajax.debug').remove();\n\t\t\t\t// Debug mode\n\t\t\t\tif (moduleSmartIVR.$debugToggle.checkbox('is checked')\n\t\t\t\t\t&& moduleSmartIVR.$submitButton.hasClass('disabled')\n\t\t\t\t\t&& typeof (response.messages) !== 'undefined'\n\t\t\t\t) {\n\t\t\t\t\tlet visualErrorString = JSON.stringify(response.messages, null, 2);\n\n\t\t\t\t\tif (typeof visualErrorString === 'string' && visualErrorString!=='[]') {\n\t\t\t\t\t\tvisualErrorString = visualErrorString.replace(/\\\\n/g, '
');\n\n\t\t\t\t\t\tif (Object.keys(response).length > 0 && response.result === true) {\n\t\t\t\t\t\t\tmoduleSmartIVR.$formObj\n\t\t\t\t\t\t\t\t.after(`
\t\t\n\t\t\t\t\t\t\t\t\t
${visualErrorString}
\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t
`);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmoduleSmartIVR.$formObj\n\t\t\t\t\t\t\t\t.after(`
\n\t\t\t\t\t\t\t\t\t
${visualErrorString}
\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t
`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure(response) {\n\t\t\t\tif (response !== undefined\n\t\t\t\t\t&& Object.keys(response).length > 0\n\t\t\t\t\t&& response.result !== undefined\n\t\t\t\t\t&& response.result === false\n\t\t\t\t\t&& typeof (response.data) !== 'undefined'\n\t\t\t\t) {\n\t\t\t\t\tlet visualErrorString = '';\n\t\t\t\t\tif (typeof (response.messages) === 'string') {\n\t\t\t\t\t\tvisualErrorString = response.messages;\n\t\t\t\t\t} else if (Array.isArray(response.messages)) {\n\t\t\t\t\t\t$.each(response.messages, (index, value) => {\n\t\t\t\t\t\t\tvisualErrorString += `${value}
`;\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvisualErrorString = JSON.stringify(response.data, null, '\\t');\n\t\t\t\t\t}\n\t\t\t\t\tif (visualErrorString.indexOf('TTSConnectionError') >= 0) {\n\t\t\t\t\t\tmoduleSmartIVR.changeStatus('DisconnectedTTS');\n\t\t\t\t\t} else if (visualErrorString.indexOf('ConnectionToCRMError') >= 0) {\n\t\t\t\t\t\tmoduleSmartIVR.changeStatus('Disconnected1C');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmoduleSmartIVR.changeStatus('Disconnected');\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tmoduleSmartIVR.changeStatus('Disconnected');\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t},\n\t/**\n\t * Применение настроек модуля после изменения данных формы\n\t */\n\tapplyConfigurationChanges() {\n\t\t$.api({\n\t\t\turl: `${Config.pbxUrl}/pbxcore/api/modules/ModuleSmartIVR/reload`,\n\t\t\ton: 'now',\n\t\t\tsuccessTest(response) {\n\t\t\t\treturn response !== undefined\n\t\t\t\t\t&& Object.keys(response).length > 0\n\t\t\t\t\t&& response.result !== undefined\n\t\t\t\t\t&& response.result === true;\n\t\t\t},\n\t\t\tonSuccess() {\n\t\t\t\tmoduleSmartIVR.checkStatusToggle();\n\t\t\t},\n\t\t});\n\t},\n\tcbBeforeSendForm(settings) {\n\t\tconst result = settings;\n\t\tresult.data = moduleSmartIVR.$formObj.form('get values');\n\t\treturn result;\n\t},\n\tcbAfterSendForm() {\n\t\tmoduleSmartIVR.changeStatus('Disconnected');\n\t\tmoduleSmartIVR.applyConfigurationChanges();\n\t},\n\tinitializeForm() {\n\t\tForm.$formObj = moduleSmartIVR.$formObj;\n\t\tForm.url = `${globalRootUrl}module-smart-i-v-r/save`;\n\t\tForm.validateRules = moduleSmartIVR.validateRules;\n\t\tForm.cbBeforeSendForm = moduleSmartIVR.cbBeforeSendForm;\n\t\tForm.cbAfterSendForm = moduleSmartIVR.cbAfterSendForm;\n\t\tForm.initialize();\n\t},\n\t/**\n\t * Обновление статуса модуля\n\t * @param status\n\t */\n\tchangeStatus(status) {\n\t\tswitch (status) {\n\t\t\tcase 'Connected':\n\t\t\t\tmoduleSmartIVR.$moduleStatus\n\t\t\t\t\t.removeClass('grey')\n\t\t\t\t\t.removeClass('red')\n\t\t\t\t\t.addClass('green');\n\t\t\t\tmoduleSmartIVR.$moduleStatus.html(globalTranslate.module_smivr_Connected);\n\t\t\t\tbreak;\n\t\t\tcase 'Disconnected':\n\t\t\t\tmoduleSmartIVR.$moduleStatus\n\t\t\t\t\t.removeClass('green')\n\t\t\t\t\t.removeClass('red')\n\t\t\t\t\t.addClass('grey');\n\t\t\t\tmoduleSmartIVR.$moduleStatus.html(globalTranslate.module_smivr_Disconnected);\n\t\t\t\tbreak;\n\t\t\tcase 'Disconnected1C':\n\t\t\t\tmoduleSmartIVR.$moduleStatus\n\t\t\t\t\t.removeClass('green')\n\t\t\t\t\t.removeClass('grey')\n\t\t\t\t\t.addClass('red');\n\t\t\t\tmoduleSmartIVR.$moduleStatus.html(globalTranslate.module_smivr_Disconnected1C);\n\t\t\t\tbreak;\n\t\t\tcase 'DisconnectedTTS':\n\t\t\t\tmoduleSmartIVR.$moduleStatus\n\t\t\t\t\t.removeClass('green')\n\t\t\t\t\t.removeClass('grey')\n\t\t\t\t\t.addClass('red');\n\t\t\t\tmoduleSmartIVR.$moduleStatus.html(globalTranslate.module_smivr_DisconnectedTTS);\n\t\t\t\tbreak;\n\t\t\tcase 'Updating':\n\t\t\t\tmoduleSmartIVR.$moduleStatus\n\t\t\t\t\t.removeClass('green')\n\t\t\t\t\t.removeClass('red')\n\t\t\t\t\t.addClass('grey');\n\t\t\t\tmoduleSmartIVR.$moduleStatus.html(`${globalTranslate.module_smivr_UpdateStatus}`);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tmoduleSmartIVR.$moduleStatus\n\t\t\t\t\t.removeClass('green')\n\t\t\t\t\t.removeClass('red')\n\t\t\t\t\t.addClass('grey');\n\t\t\t\tmoduleSmartIVR.$moduleStatus.html(globalTranslate.module_smivr_Disconnected);\n\t\t\t\tbreak;\n\t\t}\n\t},\n};\n\n$(document).ready(() => {\n\tmoduleSmartIVR.initialize();\n});\n\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/public/assets/js/src/module-smartivr-index.js b/public/assets/js/src/module-smartivr-index.js index ca717b4..9eb2aeb 100644 --- a/public/assets/js/src/module-smartivr-index.js +++ b/public/assets/js/src/module-smartivr-index.js @@ -13,6 +13,7 @@ const moduleSmartIVR = { $LibrarySelect: $('#library_1c'), $onlyFirstGeneration: $('.only-first-generation'), $onlySecondGeneration: $('.only-second-generation'), + $onlyFiveGeneration: $('.only-five-generation'), $moduleStatus: $('#status'), $dirrtyField: null, $submitButton: $('#submitbutton'), @@ -97,15 +98,21 @@ const moduleSmartIVR = { * Изменение версии библиотеки */ cbChangeLibraryType() { - if (moduleSmartIVR.$formObj.form('get value', 'library_1c') === '2.0') { - moduleSmartIVR.$onlyFirstGeneration.hide(); - moduleSmartIVR.$onlySecondGeneration.show(); - moduleSmartIVR.$formObj.form('set value', 'isPT1C', ''); - - } else { + if (moduleSmartIVR.$formObj.form('get value', 'library_1c') === '1.0') { moduleSmartIVR.$onlySecondGeneration.hide(); moduleSmartIVR.$onlyFirstGeneration.show(); + moduleSmartIVR.$onlyFiveGeneration.hide(); moduleSmartIVR.$formObj.form('set value', 'isPT1C', true); + } else if(moduleSmartIVR.$formObj.form('get value', 'library_1c') === '5.0'){ + moduleSmartIVR.$onlySecondGeneration.hide(); + moduleSmartIVR.$onlyFirstGeneration.hide(); + moduleSmartIVR.$onlyFiveGeneration.show(); + moduleSmartIVR.$formObj.form('set value', 'isPT1C', ''); + } else { + moduleSmartIVR.$onlyFirstGeneration.hide(); + moduleSmartIVR.$onlySecondGeneration.show(); + moduleSmartIVR.$onlyFiveGeneration.hide(); + moduleSmartIVR.$formObj.form('set value', 'isPT1C', ''); } if (moduleSmartIVR.$dirrtyField===null){ moduleSmartIVR.$dirrtyField=$('#dirrty'); @@ -113,7 +120,6 @@ const moduleSmartIVR = { moduleSmartIVR.$dirrtyField.val(Math.random()); moduleSmartIVR.$dirrtyField.trigger('change'); } - } , /**