VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Asterisk 1.8 и CALLERID

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

Аватара пользователя
Obi Van
Сообщения: 340
Зарегистрирован: 03 сен 2010, 11:21

Asterisk 1.8 и CALLERID

Сообщение 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.
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: Asterisk 1.8 и CALLERID

Сообщение 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)})
Аватара пользователя
Obi Van
Сообщения: 340
Зарегистрирован: 03 сен 2010, 11:21

Re: Asterisk 1.8 и CALLERID

Сообщение 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. :evil:
Тоже самое смотрю на 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")
Т.е чуть более чем полностью похоже. :evil: Что же вижу в поле From? Вот это:

Код: Выделить всё

From: "asterisk" <sip:asterisk@12.34.56.78>
Бред! При этом имеется заголовок: Remote-Party-ID: "297@ATS.company.ru" <sip:297@12.34.56.78>;party=calling
Вот так обстоят дела. Это баг или фича?? :geek:
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: Asterisk 1.8 и CALLERID

Сообщение ded »

Думаю, что не баг и не фича, а RFC.
Переместили CLID из поля From: в поле Remote-Party-ID
Для транзитных SIP прокси (которым не является Астериск) так не делают, а для IP-PBX (или софтсвич 5 класса) наверное так правильно.
Надо читать RFC.
Аватара пользователя
Obi Van
Сообщения: 340
Зарегистрирован: 03 сен 2010, 11:21

Re: Asterisk 1.8 и CALLERID

Сообщение Obi Van »

Дед, беда в том, что оператор хочет получать CallerID из поля From:. Теперь у меня есть варианты (невзирая на чтение RFC):
1) Ставить нужное мне значение при помощи тулзы SIPAddHeader(). Таки сработает?
2) Поговорить с оператором по вопросу как дальше жить.
3) Почитать доки астериска до момента выпрямления рук. :lol:
При этом я имею возможность люто бешено зарядить нужное мне значение, тупо ставя в настройках транка на оператора в настройке fromuser=7XXXXXXXXXX , что невозбранно срабатывает. :oops: Но как в таком случае мне средствами рингплана лепить сюда нужные цифири?
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: Asterisk 1.8 и CALLERID

Сообщение ded »

4) Откатиться на 1.6.Х.Х

Я бы посоветовал использовать freePBX, где эти параметры для каждого экстена легко и без забот (я уверен - без забот муравей живёт, вот я, вот я, превращаюсь - в муравья!) указывать в вэб интерфейсе и не писать такие берестяные грамоты диалплана самому.
Аватара пользователя
Obi Van
Сообщения: 340
Зарегистрирован: 03 сен 2010, 11:21

Re: Asterisk 1.8 и CALLERID

Сообщение Obi Van »

Чутьё меня таки не подвело! :lol: Команда

Код: Выделить всё

SetCallerPres(allowed)
даёт нужный эффект, то поле From становится таки каким надо. :)
Однако без ложки дёгтя отнюдь не обошлось. При заполнении CDR через mysql backend не заполняется поле "clid", хотя в других CDR отчётах онное заполняется.
Ложка дёгтя пропала после изменения в файле cdr_mysql.conf строчки:
alias callerid => clid
на
alias clid => clid
Ололо! Решение той проблемы как откат на 1.6 это для меня лично костыль. :roll:
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: Asterisk 1.8 и CALLERID

Сообщение ded »

То есть сам факт публикации проблемы привёл к её самостоятельном у решению. Как водится.
Даже не пришлось посылать в платный суппорт, что обычно пятикратно ускоряет процесс самопознания! :)
Аватара пользователя
Obi Van
Сообщения: 340
Зарегистрирован: 03 сен 2010, 11:21

Re: Asterisk 1.8 и CALLERID

Сообщение Obi Van »

"Баранкин будь человеком! " :lol:
То есть сам факт публикации проблемы привёл к её самостоятельном у решению.
Так часто и бывает. Если кому не интересно с чем то разбираться (что кстати довольно часто наблюдается на этом и не только форумах) то человек и не разберётся, даже если пережевать и на язык положить. :mrgreen:
anmorgul
Сообщения: 2
Зарегистрирован: 05 июл 2012, 12:46

Re: Asterisk 1.8 и CALLERID

Сообщение anmorgul »

Obi Van писал(а):АТСка отдаёт мне внутренний номер сотрудника, по которому астериск ...
Подскажите, как заставить Самсунг отдавать внутренний номер астериску?
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH