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

Прошу помощи в разборках с диалпланом.

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

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

Ответить
Аватара пользователя
SolarW
Сообщения: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

Прошу помощи в разборках с диалпланом.

Сообщение SolarW »

Здравствуйте коллеги.

Продолжаю разбираться со шлюзом Yeastar TG200
В некоторых местах шлюз работает не совсем так как мне надо, поэтому роюсь внутри диалплана его астериска чтобы понять что и как.
Поскольку в написании/интерпретации диалпланов не очень силен (в основном использую готовые сборки) - возникают проблемы с пониманием некоторых мест.

В этом топике попробую озвучивать максимально конкретно свои вопросы и если кого-нибудь не затруднит на них отвечать буду очень признателен.

Вопрос 1.
Что делает вот этот кусок диалплана

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

exten = s,3,Gotoif($[${LEN(${ARG$[${ARG1}+4]})}>0]?4:5)
при условии что ARG1 = 1?
В логе вижу что тут происходит переход по условию на 5-й шаг диалплана

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

-- Executing [s@macro-trunkdial-failover-0.4:3] GotoIf("YSGSM/1-1", "0?4:5") in new stack
-- Goto (macro-trunkdial-failover-0.4,s,5
но как именно формируется условие?
Vlad1983
Сообщения: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: Прошу помощи в разборках с диалпланом.

Сообщение Vlad1983 »

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

exten = s,3,Gotoif($[${LEN(${ARG$[${ARG1}+4]})}>0]?4:5)
if ARG1 = 1

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

exten = s,3,Gotoif($[${LEN(${ARG$[1+4]})}>0]?4:5)
==

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

exten = s,3,Gotoif($[${LEN(${ARG5})}>0]?4:5)
ЛС: @rostel
Аватара пользователя
SolarW
Сообщения: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

Re: Прошу помощи в разборках с диалпланом.

Сообщение SolarW »

Нет, я вижу что произошло по логу.
Не совсем понятно что происходит в куске

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

$[${LEN(${ARG$[${ARG1}+4]})}>0]
LEN - это же определение количества символов? Или нет? По смыслу вроде как значение.
Вроде к ARG1 прибавляем 4.
И, учитывая что ARG1 = 1 получаем 5 и в результате переход на 5-й а не 4-й шаг диалплана?
Vlad1983
Сообщения: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: Прошу помощи в разборках с диалпланом.

Сообщение Vlad1983 »

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

exten = s,3,Gotoif($[${LEN(${ARG5})}>0]?4:5)
если в ${ARG5} есть хотя бы один символ лезем на 4 приоритет, если нет на пятый
ЛС: @rostel
Аватара пользователя
SolarW
Сообщения: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

Re: Прошу помощи в разборках с диалпланом.

Сообщение SolarW »

Тогда не совсем понятно с ARG...
Вот как выглядит вхождение в логе этот кусок диалплана:

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

-- Executing [78201234567@Routeout_GSM_IP_MG01toPBX:4] Macro("YSGSM/1-1", "trunkdial-failover-0.4,1,,78201234567,trunk-MG01,") in new stack
Я предполагал что:
ARG1 - 1
ARG2 - пустой параметр
ARG3 - 78201234567 (номер сим-карты, он же номер настроенного hotline который при приходе звонка на АТС виден как DID, он же логин с которым транк регистрируется на IP-АТС)
ARG4 - trunk-MG01 (транк с именем MG01 настроенный в веб-интерфейсе)
Где тут ARG5?

Хотя... запятая после trunk-MG01 дает мне предположение что ARG5 есть и он пустой. Правильно думаю?
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

Re: Прошу помощи в разборках с диалпланом.

Сообщение ded »

SolarW, ты бы напихал через строчку везде проверки состояний аргументов, типа
exten = s,n,NoOp(ARG1 = ${ARG1}, ARG2 = ${ARG2}, ARG3 = ${ARG3}, ARG4 = ${ARG4}, ARG5 = ${ARG5})
exten = s,n,Gotoif($[${LEN(${ARG5})}>0]?4:5)
exten = s,n,NoOp(ARG1 = ${ARG1}, ARG2 = ${ARG2}, ARG3 = ${ARG3}, ARG4 = ${ARG4}, ARG5 = ${ARG5})

сделал dialplan reload и видел бы все нюансы.
Аватара пользователя
SolarW
Сообщения: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

Re: Прошу помощи в разборках с диалпланом.

Сообщение SolarW »

Там не совсем удобно это делать.
Система сама формирует диалплан исходя из настроек сделанных в веб-интерфейсе.

Хотя... Если не менять настройки и не перегружаться то можно и поменять.
Но я результаты что происходит и так вижу, в логе.
Небольшие непонятки с операторами только, типа как с ARG5 (спасибо Владу, направил мысль в нужном направлении, сам бы еще долго кругами ходил бы).
Аватара пользователя
SolarW
Сообщения: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

Re: Прошу помощи в разборках с диалпланом.

Сообщение SolarW »

Вопрос 2.
В начале выполнения диалплана есть вот такой кусок

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

exten = s,n,Set(OldCallerID=${CALLERID(num)})
exten = s,n,Set(OldCallerName=${CALLERID(name)})
Судя по логу отрабатывается нормально

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

-- Executing [s@macro-trunkdial-failover-0.4:11] Set("YSGSM/1-1", "OldCallerID=+74951234567") in new stack
-- Executing [s@macro-trunkdial-failover-0.4:12] Set("YSGSM/1-1", "OldCallerName=+74951234567") in new stack

А вот дальше есть кусок который перебивает правильные значения CallerID.

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

exten = 1-dial,30,Set(CALLERID(name)=${IF($[${LEN(${CID_${ARG${TCOUNT}}})} > 2]?${CID_${ARG${TCOUNT}}}:${CALLERID(name)})})
exten = 1-dial,n,Set(CALLERID(num)=${IF($[${LEN(${CID_${ARG${TCOUNT}}})} > 2]?${CID_${ARG${TCOUNT}}}:${CALLERID(num)})})
В приведенном куске на текущем этапе:
TCOUNT=4
Соответственно получаем
ARG4 = trunk-MG01
И имя искомой переменной выглядит как CID_trunk-MG01.
Совсем в начале диалплана есть
CID_trunk-MG01 = 78201234567

Дописано чуть позже.
Все, сообразил.
Не надо в настройках SIP-транка прописывать CallerID.
Иначе на АТС отправляется прописанное а не то, что определилось.
Если не прописывать - то переменная CID_trunk-MG01 будет пустая и тогда все происходит как надо.
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH