Добрый день!
Развернули Oktell и столкнулись с проблемой преобразования телефонных номеров. Телефоны хранятся в базе в формате +7 (код города) городской номер>, в номерах есть дефисы и пробелы. Привести номер к пригодному для набора формату на JavaScript для меня не проблема, однако прежде, чем городить огород велосипедов, хочу спросить у тех, кто решал: как это сделать правильно? Как правильно сопоставить номер звонящего с номером в базе данных Terrasoft? Как правильно преобразовать номер в базе данных для совершения звонка?
Если решать в лоб, то для входящих и исходящих звонков имеем сквозной код на JavaScript и T-SQL: при звонках преобразуем номер с помощью скрипта в Terrasoft, при получении звонка дёргаем контакт из базы данных с помощью запроса, преобразующего номера в базе данных к некоторому промежуточному формату и сопоставляющего их с номером звонящего. А есть ли какое-то готовое решение? Или же всё это проще сделать с помощью служебного сценария Oktell?
Нравится
У средств связи контактов и контрагентов есть поле Digits, в котором содержится только номер для набора. По нему и идёт фильтрация входящих вызовов и исходящие звонки. Его и нужно заполнять. Поможет в этом хранимая функция fn_DigitsOnly. Проверено, что карточка нормально открывается несмотря на то, есть в номере дефисы, пробелы, скобочки и т.п. или нет.
А вот распознать направление звонка, отрезать код страны и города из номера (если нужно), это уже дело сценария автодозвона в Oktell.
Для выхода в город используйте сценарий вход в атс, в котором анализируем введенный номер. Отрезаем что не нужно, добавляем то что понимает ваша атс.
Этот сценарий есть в последних сборках октела , если нету напишите я скину.
Для того чтобы звонки пошли через этот сценарий он включается в настройках системы.
Соответственно всё что приходит из города преобразуем служебным сценарием. ТК большинство операторов номера в потоке даёт без 8 Ну что то типа 4957976880. Тоесть нужно прибавить 8.
Александр Ярмоленко
наш сайт lineservice.ru
Спасибо, сценарии oktell оказались излишними.
Решение: простое приложение на C#, перестраивающее уже забитые в базу номера для набора по исходным номерам с учётом специфики набора на оборудовании synway + допиливание тела DigitsFromString()
// ---------------------------------------------------------------------------- // scr_Utils // ---------------------------------------------------------------------------- function PrepareNumber(number) { var result = ''; var valid_chars = '+0123456789'; var number_length = number.length; for (var i = 0; i < number_length; i++) { var ch = number.charAt(i); var found = valid_chars.indexOf(ch) != -1; if (found) result += ch; } return result; } function Substring(str, index) { var length = str.length; var new_length = length - index; return str.substr(index, new_length); } function StartsWith(str, pattern) { var pattern_length = pattern.length; if (pattern_length > str.length) return false; var found = false; for (var i = 0; i < pattern_length; i++) { if (str.charAt(i) != pattern.charAt(i)) { found = true; break; } } return !found; } function DigitsFromString(number) { var prepared_number = PrepareNumber(number); var city_code = '+74212'; if (StartsWith(prepared_number, city_code)) return Substring(prepared_number, city_code.length); var country_code = '+7'; if (StartsWith(prepared_number, country_code)) return '8' + Substring(prepared_number, country_code.length); return prepared_number; }