Страница 1 из 2
Оптимизация dialplan'а
Добавлено: 28 май 2020, 12:19
diman321
Всем доброго дня!
Есть такая схема: АТС - е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. Можно ли как-то оптимизировать этот процесс указав, что если звонок идет с внутреннего номера астера на внутренний номер астера его не надо засылать на циску? Подскажите куда копать, что прочитать.
Re: Оптимизация dialplan'а
Добавлено: 28 май 2020, 14:33
ded
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})
Re: Оптимизация dialplan'а
Добавлено: 03 июн 2020, 10:10
diman321
Книга о будущем телефонии, Глава 6.
Код: Выделить всё
[call-out]
exten => _72XXX,1,Dial(SIP/${EXTEN},,t)
exten => _ZXXXX,1,Dial(SIP/CISCO_GW/${EXTEN},,t)
В этой главе написано, что правила отрабатываются по более полному совпадению. Если рассматривать конкретный пример, абонент с астера набирает номер 72555 который находится на АТС. Как в данном случае отработает алгоритм? Я думал, что оно пойдёт по первой строчке и до второй не дойдёт.
Re: Оптимизация dialplan'а
Добавлено: 04 июн 2020, 14:16
ded
Я думал - звучит хорошо! Cogito - ergo sum. Мыслю - следовательно существую. В этом случае действительно пойдёт по первой строчке Dial(SIP/${EXTEN},,t), но перескочит на вторую строчку, если в первой будет отлуп.
Надо проверять как это Астериск понимает, командой
CLI> dialplan show 72555@call-out
Re: Оптимизация dialplan'а
Добавлено: 07 июн 2020, 08:21
diman321
Чую делаю что-то не так, но не перескакивает...
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. Чего я делаю не так?
Re: Оптимизация dialplan'а
Добавлено: 07 июн 2020, 23:14
ded
diman321 писал(а):Когда звоню на номер который не попадает под маску _72XXX, например на 68192 - на интерфейсе появляется сип трафик в сторону циски.
Но это и соответствует вашему условию
diman321 писал(а):если звонок идет с внутреннего номера астера на внутренний номер астера его не надо засылать на циску
Вы позвонили на 68192 - он пошёл по шаблону
'_ZXXXX' => 1. Dial(SIP/CISCO_GW/${EXTEN},,t) - появился сип трафик в сторону циски.
Позвонили на 72555 - пошёл на
'_72XXX' => 1. Dial(SIP/${EXTEN})
Что не так?
Re: Оптимизация dialplan'а
Добавлено: 08 июн 2020, 06:26
diman321
Всё так, кроме того, что 72555 не на астере, а на атс и судя по посту выше при звонке на него в строчке _72XXX' => 1. Dial(SIP/${EXTEN}) должен быть отлуп и переход на строчку ниже, а этого не происходит почему-то, ну или я не так понял. Я вот про это:
ded писал(а):Я думал - звучит хорошо! Cogito - ergo sum. Мыслю - следовательно существую. В этом случае действительно пойдёт по первой строчке Dial(SIP/${EXTEN},,t), но перескочит на вторую строчку, если в первой будет отлуп.
Re: Оптимизация dialplan'а
Добавлено: 08 июн 2020, 10:50
ded
Каждый понимает отлуп по своему. Я вот не знал, что 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
Re: Оптимизация dialplan'а
Добавлено: 08 июн 2020, 14:22
diman321
В случае с application 'ChanIsAvail' делаем так:
Код: Выделить всё
[call-out]
exten => _XXXXX,1,ChanIsAvail(SIP/${EXTEN}&SIP/CISCO_GW/${EXTEN})
exten => _XXXXX,2,Dial(${AVAILCHAN}),,t)
В правильном направлении мыслю?
Re: Оптимизация dialplan'а
Добавлено: 08 июн 2020, 14:58
ded
Иммануил Кант в своей работе "Критика чистого разума" разделил суждения на синтетические/аналитические и априорные/апостериорные.
* синтетические — суждения, несущие новое знание, отсутствующее в понятии, которое является их субъектом;
* аналитические — суждения, которые всего лишь раскрывают свойства, присущие понятию субъекта, содержащиеся в нём самом, и не несут нового знания;
* априорные суждения (лат. a priori, до опыта) не нуждаются в опытной проверке своей истинности,
* для апостериорных (лат. a posteriori, после опыта ) необходима эмпирическая верификация.
Исходя из этих определений посмотрите на то, как вы мыслите. Теорию (мануал) не читаете, примеры не смотрите, состояние переменных ${AVAILCHAN} ${AVAILSTATUS} в результате вызова через NoOp не проверяете.
Используется модель "волшебный порошок": вот так напишу диалплан - вдруг получится?
Или, " поможите, мы сами не местные, кто чем может - по строчке, а скопипастить я сумею, не сумлевайтесь!"
Что заставляет тут писать, вместо того, чтобы уже попробовать?