Страница 1 из 2
Asterisk 1.8 и CALLERID
Добавлено: 16 ноя 2010, 09:19
Obi Van
Вчера, после подготовки, изменения всех конфигов построчно. решил таки перейти с 1.6.2.13 на 1.8.0. Всё установил, перезапустил. Всё нормально заработало, но возникла такая проблема. Вот подробности:
У меня в рингплане исходящие звонки на одного из операторов уходят, с подстановкой нужного мне CalleID, в зависимости от внутреннего номера сотрудника компании. Это делается следующим способом. Компания получает телефонные номера по потоку Е1 на АТС Samsung OS500. Все сотрудники конторы звонят с OS500, далее звонки идут на Астериск по SIP. АТСка отдаёт мне внутренний номер сотрудника, по которому астериск извлекает из mysql базы сопоставленный ему внешний номер и кидает звонок на оператора таким образом:
...
Код: Выделить всё
Set(CALLERID(num)=${CLI_out}); где ${CLI_out} - городской номер в формате Е.164 извлечённый из базы
далее
Код: Выделить всё
Set(CALLERID(name)=${CALLERID(num)}@ATS.company.ru)
Это всё я вижу в консоли и при звонке на оператора уходит звонок в поле From:
Код: Выделить всё
From: "7XXXXXXXXXX@ATS.company.ru" <sip:7XXXXXXXXXX@12.34.56.78>
; где 12.34.56.78 внешний адрес сервака.
Всё нормально и звонок при этом "приземляется" с одним из городских номеров конторы.
В Астериске 1.8 в консоли всё производится по тому же сценарию. Я ожидаю что звонок прилетит с нужным мне номером. Это не происходит. Почему говорит мне консоль. Вот так выглядит поле From:
Код: Выделить всё
From: "asterisk" <sip:asterisk@12.34.56.78>
Т.е уходит чёрти что! Для меня, к моему сожалению, остаётся загадкой почему при подмене переменной CALLERID(num) консоли не меняется поле From, а также откуда берётся имя "asterisk"?
PS.: Поле From я могу заменить в настойках пира на оператора установкой строки fromuser = 7XXXXXXXXXX, но это не то, что мне нужно, да и работало в 1.6.
Re: Asterisk 1.8 и CALLERID
Добавлено: 16 ноя 2010, 10:02
ded
Я думаю проблема скобок или кавычек. Чуть изменили синтаксис и всё.
После
Set(CALLERID(name)=${CALLERID(num)}@ATS.company.ru)
поставьте операторы NoOp чтобы тут же видеть что получилось, типа
NoOp(CALLERID(all)=${CALLERID(all)})
NoOp(CALLERID(num)=${CALLERID(num)})
NoOp(CALLERID(name)=${CALLERID(name)})
Re: Asterisk 1.8 и CALLERID
Добавлено: 16 ноя 2010, 10:40
Obi Van
Всюду у меня понатыкан долбаный NoOp, но решил ещё раз добавить в конце всех преобразований. Кусок ригплана для преобразования callerid такой:
Код: Выделить всё
;;блок установки нужного Caller-ID
exten => cid,1,Set(CID=${CALLERID(num)})
exten => cid,n,NoOp(${CID})
exten => cid,n,Set(CLI_out=${CALLERID(num)})
exten => cid,n,MYSQL(Connect connid localhost asterisk asterisk Caller-ID)
exten => cid,n,MYSQL(Query resultid ${connid} SELECT `CLI_operator` FROM `CID` WHERE `CLI_PBX`=${CID} LIMIT 1)
exten => cid,n,MYSQL(Fetch fetchid ${resultid} CLI_out)
exten => cid,n,MYSQL(Disconnect ${connid})
exten => cid,n,NoOp(For ${CID} Caller-ID is ${CLI_out})
exten => cid,n,ExecIf($[${CLI_out}!=${CALLERID(num)} & ${CLI_out}!=0]?Set(CALLERID(num)=${CLI_out})); установка CALLERID(name) по условию
exten => cid,n,Set(CALLERID(name)=${CALLERID(num)}@ATS.company.ru)
;свеженькие блоки
exten => cid,n,NoOp(CALLERID(all)=${CALLERID(all)});просмотр значения CALLERID(all)
exten => cid,n,NoOp(CALLERID(num)=${CALLERID(num)});просмотр значения CALLERID(num)
exten => cid,n,NoOp(CALLERID(name)=${CALLERID(name)});просмотр значения CALLERID(name)
exten => cid,n,Return
;
Итого имеем для версии 1.6.2.13 в консоли:
Код: Выделить всё
NoOp("SIP/SAMSUNG_PBX-000001c1", "CALLERID(all)="243@ATS.company.ru" <243>") in new stack
NoOp("SIP/SAMSUNG_PBX-000001c1", "CALLERID(num)=243") in new stack
NoOp("SIP/SAMSUNG_PBX-000001c1", "CALLERID(name)=243@ATS.company.ru")
Т.е всё хорошо. Далее смотрю SIP дебаг и вижу следующее:
Код: Выделить всё
From: "243@ATS.uss.ru" <sip:243@12.34.56.78>
Т.е тоже всё хорошо и эта конструкция валится на оператора. Сейчас буду смотреть на 1.8.
Тоже самое смотрю на 1.8 и что же я вижу? А вот что:
Код: Выделить всё
NoOp("SIP/SAMSUNG_PBX-00000007", "CALLERID(all)="297@ATS.company.ru" <297>") in new stack
NoOp("SIP/SAMSUNG_PBX-00000007", "CALLERID(num)=297") in new stack
NoOp("SIP/SAMSUNG_PBX-00000007", "CALLERID(name)=297@ATS.company.ru")
Т.е чуть более чем полностью похоже.
Что же вижу в поле From? Вот это:
Код: Выделить всё
From: "asterisk" <sip:asterisk@12.34.56.78>
Бред! При этом имеется заголовок: Remote-Party-ID: "297@ATS.company.ru" <sip:297@12.34.56.78>;party=calling
Вот так обстоят дела. Это баг или фича??
Re: Asterisk 1.8 и CALLERID
Добавлено: 16 ноя 2010, 11:03
ded
Думаю, что не баг и не фича, а RFC.
Переместили CLID из поля From: в поле Remote-Party-ID
Для транзитных SIP прокси (которым не является Астериск) так не делают, а для IP-PBX (или софтсвич 5 класса) наверное так правильно.
Надо читать RFC.
Re: Asterisk 1.8 и CALLERID
Добавлено: 16 ноя 2010, 11:15
Obi Van
Дед, беда в том, что оператор хочет получать CallerID из поля From:. Теперь у меня есть варианты (невзирая на чтение RFC):
1) Ставить нужное мне значение при помощи тулзы SIPAddHeader(). Таки сработает?
2) Поговорить с оператором по вопросу как дальше жить.
3) Почитать доки астериска до момента выпрямления рук.
При этом я имею возможность люто бешено зарядить нужное мне значение, тупо ставя в настройках транка на оператора в настройке fromuser=7XXXXXXXXXX , что невозбранно срабатывает.
Но как в таком случае мне средствами рингплана лепить сюда нужные цифири?
Re: Asterisk 1.8 и CALLERID
Добавлено: 16 ноя 2010, 11:47
ded
4) Откатиться на 1.6.Х.Х
Я бы посоветовал использовать freePBX, где эти параметры для каждого экстена легко и без забот (я уверен - без забот муравей живёт, вот я, вот я, превращаюсь - в муравья!) указывать в вэб интерфейсе и не писать такие берестяные грамоты диалплана самому.
Re: Asterisk 1.8 и CALLERID
Добавлено: 16 ноя 2010, 11:55
Obi Van
Чутьё меня таки не подвело!
Команда
даёт нужный эффект, то поле From становится таки каким надо.
Однако без ложки дёгтя отнюдь не обошлось. При заполнении CDR через mysql backend не заполняется поле "clid", хотя в других CDR отчётах онное заполняется.
Ложка дёгтя пропала после изменения в файле cdr_mysql.conf строчки:
alias callerid => clid
на
alias clid => clid
Ололо! Решение той проблемы как откат на 1.6 это для меня лично костыль.
Re: Asterisk 1.8 и CALLERID
Добавлено: 16 ноя 2010, 12:21
ded
То есть сам факт публикации проблемы привёл к её самостоятельном у решению. Как водится.
Даже не пришлось посылать в платный суппорт, что обычно пятикратно ускоряет процесс самопознания!
Re: Asterisk 1.8 и CALLERID
Добавлено: 16 ноя 2010, 12:44
Obi Van
"Баранкин будь человеком! "
То есть сам факт публикации проблемы привёл к её самостоятельном у решению.
Так часто и бывает. Если кому не интересно с чем то разбираться (что кстати довольно часто наблюдается на этом и не только форумах) то человек и не разберётся, даже если пережевать и на язык положить.
Re: Asterisk 1.8 и CALLERID
Добавлено: 05 июл 2012, 12:53
anmorgul
Obi Van писал(а):АТСка отдаёт мне внутренний номер сотрудника, по которому астериск ...
Подскажите, как заставить Самсунг отдавать внутренний номер астериску?