Добрый день. Может кто сталкивался с такой проблемой?
АТС-ка содержит имена пользователй в кодировке WINDOWS-1251. Астериск понимает UTF-8. Для перекодирования использую Set(CALLERID(name)=${ICONV(WINDOWS-1251,UTF-8,${CALLERID(name)})})
Кодируется нормально, но проблема в наложении прошлых записей, например: - Первым звонит Ивонов И.П. Executing [4001@from-internal:2] Set("SIP/utde-0000002b", "CALLERID(name)=Иванов И.П.") in new stack - Вторым звонит test Executing [4001@from-internal:2] Set("SIP/utde-0000002d", "CALLERID(name)=testванов И.П.") in new stack
Получается, что test налаживается на Иванов И.П.
Как убрать это наложение?
Есть идея обрезать значение переменной. Если в астериске способ как это сделать?
Первое, что приходит в голову - использовать переменные уровня канала с наследованием в дочерних каналах. Сделать макрос iconv_callerid, в котором проверять флаг сделанной ранее конверсии. Если пусто - преобразуем, и перебиваем callerid, если уже было - ничего не делаем. Переменные с наследованием делаются с помощью префикса _. Пример:
Set(_ICONV_DONE=1)
Задан: 2011-07-15 12:03:04 +0400
Просмотрен: 1,032 раз
Обновлен: Jul 18 '11
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.