Добрый день!
Развернули Oktell и столкнулись с проблемой преобразования телефонных номеров. Телефоны хранятся в базе в формате +7 (код города) городской номер>, в номерах есть дефисы и пробелы. Привести номер к пригодному для набора формату на JavaScript для меня не проблема, однако прежде, чем городить огород велосипедов, хочу спросить у тех, кто решал: как это сделать правильно? Как правильно сопоставить номер звонящего с номером в базе данных Terrasoft? Как правильно преобразовать номер в базе данных для совершения звонка?
Если решать в лоб, то для входящих и исходящих звонков имеем сквозной код на JavaScript и T-SQL: при звонках преобразуем номер с помощью скрипта в Terrasoft, при получении звонка дёргаем контакт из базы данных с помощью запроса, преобразующего номера в базе данных к некоторому промежуточному формату и сопоставляющего их с номером звонящего. А есть ли какое-то готовое решение? Или же всё это проще сделать с помощью служебного сценария Oktell?

Нравится

3 комментария

У средств связи контактов и контрагентов есть поле 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;
}
Показать все комментарии