ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Оптимизация dialplan'а

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

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

Оптимизация dialplan'а

Сообщение diman321 » 28 май 2020, 13:19

Всем доброго дня!

Есть такая схема: АТС - е1 - cisco_voip - sip - asterisk. На атс некоторые номера заворачивают на е1, в циске прописан диал-пир который всё приходящее по е1 засылает на asterisk по сипу. Схема работает, всё нормально. Проблема в том, что нет никакого четкого плана нумерации и на астера могут зарулить любой номер (номера семизначные), абоненты при этом должны звонить другим абонентам как внутри астера, так и с астера на атс по полным семизначным номерам. Поэтому имею некую проблему с тем, что не могу нормально написать dialplan в extension.conf.

Сейчас реализовал это так:
Код: выделить все
[call-out]
exten => _72101,1,Dial(SIP/${EXTEN})
exten => _72136,1,Dial(SIP/${EXTEN})
exten => _72201,1,Dial(SIP/${EXTEN})
exten => _XXXXX,1,Dial(SIP/${EXTEN}@CISCO_GW)


Т.е. при заведении нового абонента приходится добавлять новую строчку в extension.conf. Можно ли как-то оптимизировать этот процесс указав, что если звонок идет с внутреннего номера астера на внутренний номер астера его не надо засылать на циску? Подскажите куда копать, что прочитать.
diman321
 
Сообщений: 8
Зарегистрирован: 28 май 2020, 13:01

Re: Оптимизация dialplan'а

Сообщение ded » 28 май 2020, 15:33

diman321 писал(а):на астера могут зарулить любой номер (номера семизначные),
Тут у вас вроде 5-ти значные?
Книга о будущем телефонии, Глава 6.
Код: выделить все
[call-out]
exten => _72XXX,1,Dial(SIP/${EXTEN},,t)
exten => _ZXXXX,1,Dial(SIP/CISCO_GW/${EXTEN},,t)


Не надо бы использовать формулу SIP URI
Dial(SIP/${EXTEN}@CISCO_GW)
лучше
Dial(SIP/CISCO_GW/${EXTEN})
ded
 
Сообщений: 15820
Зарегистрирован: 26 авг 2010, 19:00

Re: Оптимизация dialplan'а

Сообщение diman321 » 03 июн 2020, 11:10

Книга о будущем телефонии, Глава 6.
Код: выделить все
[call-out]
exten => _72XXX,1,Dial(SIP/${EXTEN},,t)
exten => _ZXXXX,1,Dial(SIP/CISCO_GW/${EXTEN},,t)


В этой главе написано, что правила отрабатываются по более полному совпадению. Если рассматривать конкретный пример, абонент с астера набирает номер 72555 который находится на АТС. Как в данном случае отработает алгоритм? Я думал, что оно пойдёт по первой строчке и до второй не дойдёт.
diman321
 
Сообщений: 8
Зарегистрирован: 28 май 2020, 13:01

Re: Оптимизация dialplan'а

Сообщение ded » 04 июн 2020, 15:16

Я думал - звучит хорошо! Cogito - ergo sum. Мыслю - следовательно существую. В этом случае действительно пойдёт по первой строчке Dial(SIP/${EXTEN},,t), но перескочит на вторую строчку, если в первой будет отлуп.

Надо проверять как это Астериск понимает, командой
CLI> dialplan show 72555@call-out
ded
 
Сообщений: 15820
Зарегистрирован: 26 авг 2010, 19:00

Re: Оптимизация dialplan'а

Сообщение diman321 » 07 июн 2020, 09:21

Чую делаю что-то не так, но не перескакивает...

asterisk -rx 'dialplan show'
[Показать] Спойлер:
Код: выделить все
[ Context '__func_periodic_hook_context__' created by 'func_periodic_hook' ]
  'beep' (CID match '') =>  1. Answer()                                   [func_periodic_hook]
                    2. Playback(beep)                             [func_periodic_hook]
  'hook' (CID match '') =>  1. Set(EncodedChannel=${CUT(HOOK_CHANNEL,-,1-2)}) [func_periodic_hook]
                    2. Set(GROUP_NAME=${EncodedChannel}${HOOK_ID}) [func_periodic_hook]
                    3. Set(GROUP(periodic-hook)=${GROUP_NAME})    [func_periodic_hook]
                    4. ExecIf($[${GROUP_COUNT(${GROUP_NAME}@periodic-hook)} > 1]?Hangup()) [func_periodic_hook]
                    5. Set(ChannelToSpy=${URIDECODE(${EncodedChannel})}) [func_periodic_hook]
                    6. ChanSpy(${ChannelToSpy},qEB)               [func_periodic_hook]

[ Context 'from-cisco' created by 'pbx_config' ]
  '_XXXXX' =>       1. Dial(SIP/${EXTEN})                         [extensions.conf:17]

[ Context 'call-out' created by 'pbx_config' ]
  '_72XXX' =>       1. Dial(SIP/${EXTEN},,t)                      [extensions.conf:11]
  '_ZXXXX' =>       1. Dial(SIP/CISCO_GW/${EXTEN},,t)             [extensions.conf:12]
  Include =>        'handup-sip'                                  [pbx_config]

[ Context 'handup-sip' created by 'pbx_config' ]
  '_X!' =>          1. HangUp()                                   [extensions.conf:8]

[ Context 'default' created by 'pbx_config' ]

-= 6 extensions (12 priorities) in 5 contexts. =-



asterisk -rx 'dialplan show 72555@call-out'
[Показать] Спойлер:
Код: выделить все
[ Context 'call-out' created by 'pbx_config' ]
  '_72XXX' =>       1. Dial(SIP/${EXTEN},,t)                      [extensions.conf:11]
  '_ZXXXX' =>       1. Dial(SIP/CISCO_GW/${EXTEN},,t)             [extensions.conf:12]
[ Included context 'handup-sip' created by 'pbx_config' ]
  '_X!' =>          1. HangUp()                                   [extensions.conf:8]


-= 3 extensions (3 priorities) in 2 contexts. =-


Проверял ещё так: когда звоню с абонента астера на 72555 слушаю tcpdump'ом интерфейс который идёт на циску, никакого трафика там не появляется. Когда звоню на номер который не попадает под маску _72XXX, например на 68192 - на интерфейсе появляется сип трафик в сторону циски. Из этого делаю вывод, что не перескакивает на _ZXXXX при отлупе на _72XXX. Клиент при звонке на 72555 говорит service unavailable. Чего я делаю не так?
diman321
 
Сообщений: 8
Зарегистрирован: 28 май 2020, 13:01

Re: Оптимизация dialplan'а

Сообщение ded » 08 июн 2020, 00:14

diman321 писал(а):Когда звоню на номер который не попадает под маску _72XXX, например на 68192 - на интерфейсе появляется сип трафик в сторону циски.
Но это и соответствует вашему условию
diman321 писал(а):если звонок идет с внутреннего номера астера на внутренний номер астера его не надо засылать на циску
Вы позвонили на 68192 - он пошёл по шаблону
'_ZXXXX' => 1. Dial(SIP/CISCO_GW/${EXTEN},,t) - появился сип трафик в сторону циски.
Позвонили на 72555 - пошёл на
'_72XXX' => 1. Dial(SIP/${EXTEN})
Что не так?
ded
 
Сообщений: 15820
Зарегистрирован: 26 авг 2010, 19:00

Re: Оптимизация dialplan'а

Сообщение diman321 » 08 июн 2020, 07:26

Всё так, кроме того, что 72555 не на астере, а на атс и судя по посту выше при звонке на него в строчке _72XXX' => 1. Dial(SIP/${EXTEN}) должен быть отлуп и переход на строчку ниже, а этого не происходит почему-то, ну или я не так понял. Я вот про это:

ded писал(а):Я думал - звучит хорошо! Cogito - ergo sum. Мыслю - следовательно существую. В этом случае действительно пойдёт по первой строчке Dial(SIP/${EXTEN},,t), но перескочит на вторую строчку, если в первой будет отлуп.
diman321
 
Сообщений: 8
Зарегистрирован: 28 май 2020, 13:01

Re: Оптимизация dialplan'а

Сообщение ded » 08 июн 2020, 11:50

Каждый понимает отлуп по своему. Я вот не знал, что 72555 не существует как пира SIP/72555.
Система отработает совершенно по разному если а) такой пир есть но он не доступен, и б) его нет в природе.
_72XXX' => 1. Dial(SIP/${EXTEN}) - здесь посмотрите по CLI что сообщает система при verbose 10. В вашем случае там будет выход как-бы вбок - Spawn extension (call-out, 72555, 1) exited non-zero, а не переход к следующему шаблону в контексте, и Hangup.

Варианты есть. Если должен быть отлуп и переход на другой шаблон, можно использовать обработку ответов и экстены
s-CONGESTION
s-NOANSWER
s-BUSY
или
application 'ChanIsAvail'
Код: выделить все
[Description]
This application will check to see if any of the specified channels are
available.
This application sets the following channel variables:
${AVAILCHAN}: The name of the available channel, if one exists
${AVAILORIGCHAN}: The canonical channel name that was used to create the
channel
${AVAILSTATUS}: The device state for the device
${AVAILCAUSECODE}: The cause code returned when requesting the channel
ded
 
Сообщений: 15820
Зарегистрирован: 26 авг 2010, 19:00

Re: Оптимизация dialplan'а

Сообщение diman321 » 08 июн 2020, 15:22

В случае с application 'ChanIsAvail' делаем так:

Код: выделить все
[call-out]
exten => _XXXXX,1,ChanIsAvail(SIP/${EXTEN}&SIP/CISCO_GW/${EXTEN})
exten => _XXXXX,2,Dial(${AVAILCHAN}),,t)


В правильном направлении мыслю?
diman321
 
Сообщений: 8
Зарегистрирован: 28 май 2020, 13:01

Re: Оптимизация dialplan'а

Сообщение ded » 08 июн 2020, 15:58

Иммануил Кант в своей работе "Критика чистого разума" разделил суждения на синтетические/аналитические и априорные/апостериорные.

* синтетические — суждения, несущие новое знание, отсутствующее в понятии, которое является их субъектом;
* аналитические — суждения, которые всего лишь раскрывают свойства, присущие понятию субъекта, содержащиеся в нём самом, и не несут нового знания;
* априорные суждения (лат. a priori, до опыта) не нуждаются в опытной проверке своей истинности,
* для апостериорных (лат. a posteriori, после опыта ) необходима эмпирическая верификация.

Исходя из этих определений посмотрите на то, как вы мыслите. Теорию (мануал) не читаете, примеры не смотрите, состояние переменных ${AVAILCHAN} ${AVAILSTATUS} в результате вызова через NoOp не проверяете.
Используется модель "волшебный порошок": вот так напишу диалплан - вдруг получится?
Или, " поможите, мы сами не местные, кто чем может - по строчке, а скопипастить я сумею, не сумлевайтесь!"

Что заставляет тут писать, вместо того, чтобы уже попробовать?
ded
 
Сообщений: 15820
Зарегистрирован: 26 авг 2010, 19:00

След.

Вернуться в Вопросы новичков

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 36

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH