LINUX.ORG.RU
решено ФорумAdmin

Asterisk транслитерация CallerID

 ,


1

1

Здравия желаю.

С астериском на Вы, пытаюсь осваивать потихоньку. Интересует простая задача, которую нужно решить. Есть астериск с экстеншенами на русском, есть freepbx, есть пара телефонов которые не поддерживают utf-8(имеют cp-1252), ну и есть баш скрипт для транслитерации. Соответственно при звонке на внутренние телефоны которые не умеют utf-8 нужно транслитерировать CallerID(name).

Далее я так понял два пути:

1) Делать кастом экстеншены во freepbx и ручками в конфиге прописывать их(ext-local-сustom?), инфы по custom extension крайне мало(или я искать не умею), не до конца понимаю какие контексты я должен там перечислить, чтобы весь остальной функционал freepbx не отвалился на этом экстеншене.

2) Использовать модуль Set CallerID. Но тут проблема в том, что на него как то нужно смаршртизировать, внутренние же звонки на эти правила не попадают, или я не прав?

Прошу совета у знатоков.


экстеншенами на русском,

Не надо так делать. Если очень хочется - лучше в обратную сторону, или просто display name в конфиге телефона ставь.

upcFrost ★★★★★ ()

Но тут проблема в том, что на него как то нужно смаршртизировать, внутренние же звонки на эти правила не попадают, или я не прав

не прав. вернее, не совсем прав. если внутренний вызов идет через станцию, то разницы никакой нет, обработка контекста все равно подчиняется логике АТС. Просто тогда как ты справедливо заметил в пункте 1 надо ручками делать контекст ext-local-custom. На какой контекст попадает вызов можно посмотреть в настройках экстеншена, но думаю у тебя все по дефолту. по поводу начинки контекста смотри следующий абзац, по сути там у тебя 1-2 строки будут с собственно вызовом транслитерации

по поводу кастомных контекстов. Если ты глянешь свой конфиг, который тебе дал freepbx, то увидишь что кастомный контекст вызывается через include в самом начале обычного контекста, т.е. ext-local первым действием шлет include в ext-local-custom. Так что если ты не делаешь в кастоме ничего что ну совсем ппц как сломало бы логику станции, и никуда оттуда не пытаешься перенаправить вызов (короче если он доходит в итоге до основного контекста) - то все функции freepbx у тебя сохраняются

если же тебе нужен совсем упоротый кастомный контекст - там есть custom destinations/custom extensions, и чтоб не сломать всю логику систему лучше юзать их например перенаправляя через виртуальные экстеншены, а то получатся две головы которые будут тянуть в разные стороны (freepbx и кастом).

P.S. и да, ща сюда прибежит толпа ко-ко-ко с воплями «гуй-нинужен» и «freepbx-говно». не слушай их, для малого и среднего бизнеса, а также для любого бизнеса непрофильного в плане IT, freepbx решает 90% задач которые могут возникнуть, а остальные 10% спокойно лечатся кастомными вставками. тем более что по своему опыту скажу что в твоем коде никто копаться не захочет, и в итоге в случае прихода пушного лиса ты прямо в отпуске во вьетнаме с мобильника с узкоглазого WiFi с пингами до 1 секунды будет фиксить долбаную станцию через терминал на тачскрине

upcFrost ★★★★★ ()
Последнее исправление: upcFrost (всего исправлений: 6)
Ответ на: комментарий от upcFrost

Спасибо за оперативность. Про кастомы понял, инклуд увидел.

Последний вопрос, как мне вызвать баш скрипт правильно? CALLERID(name)=${/usr/local/bin/trans.sh ${CALLERID(name)}}

Сработает? Или вызовы только через SYSTEM и AGI?

llere ()
Ответ на: комментарий от llere

Все работает. Спасибо ещё раз.

нзч, рад помочь. не забываем ставить отметку о решении задачи в шапке («отметить как решенную»). не то чтоб мне с этого скор капал, просто в общем листе просматривать удобнее

upcFrost ★★★★★ ()
Ответ на: комментарий от upcFrost

У меня аналогичная ситуация тоже нужна транслитерация, но ничего не работает... Можете привести пример конфигов? Хотя бы схематичный...

etherform ()
Ответ на: комментарий от etherform

По ссылке выше есть пример как вызвать шелл скрипт через agi. Дальше первый аргумент это имя скрипта, а потом идут параметры. Скрипт должен в stdout (например через echo) выводить команды астера.

Так что скачиваем и ставим любой консольный транслитератор, пишем скрипт в 2 строки где первая берет первый аргумент и даёт транслитератор, а вторая пишет астеру куда этот результат всунуть (например cid). Затем ставим вызов в диалплан и передаем аргументом исходный cid какой пришёл. Все.

upcFrost ★★★★★ ()
Ответ на: комментарий от upcFrost

До вызова скрипта я даже не дохожу... Если я добавляю в ext-local-custom команды для существующих экстеншенов, то они игнорируются. А если я вручную пропишу новый экстеншн в ext-local-custom то как фрипбикс о нем узнает? У него же вроде все логины\пароли хранятся в бд и если авторизацию в конфиге прописывать это как то не совсем правильно?

etherform ()
Ответ на: комментарий от upcFrost

Да точно, все экстеншны делались через веб интерфейс, в конфиге они в ext-local. я даже когда делаю dialplan show xxx@from-internal он мне показывает то что я добавил в кастом, но не отрабатывает. Я пытался просто Verbose() ставить, но в логах не отписывает.

etherform ()
Ответ на: комментарий от upcFrost

Я поэтому и просил пример конфигов, потому что не могу въехать че к чему. Кстати судя по логам фрипбикс вызывает какой-то макрос вторым шагом где он и работает с коллерайди, тоесть все изменения которые я совершу перед этим будут затерты, и мне нужно именно мнять его после обработки макроса?

etherform ()
Ответ на: комментарий от etherform

у меня к сожалению астера нет под рукой чтоб самому пример написать.

по сути freepbx для ext-local вызывает десяток контекстов. и вариантов тогда два. первый - написать кастом, который будет ставить CID и потом делать goto на ext-local сразу после установки им CIDа. но это не айс имхо.

второй вариант - пройдись по verbose какие контексты вызываются и потом посмотри как они выглядят в extensions.conf. -custom скорее всего есть как минимум для половины. соответственно впихни свой код в нужный кастом идущий после установки CIDа. это куда более качественный вариант.

ну и третий разумеется просто переписать весь контекст. можно, но не очень весело.

в конфиге они в ext-local. я даже когда делаю dialplan show xxx@from-internal

погоди, так у тебя вызов через какой контекст проходит-то?

upcFrost ★★★★★ ()
Последнее исправление: upcFrost (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.