Страница 2 из 2

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

Добавлено: 08 июн 2020, 17:28
diman321
Ну так не честно, хотелось ничего не делать и что бы всё само случилось, а тут Иммануил Кант внезапно :)

Разобрался как чего, работает. Остался один вопрос. Сейчас диалплан выглядит так:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

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

[ 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:21]

[ Context 'call-out' created by 'pbx_config' ]
  '_XXXXX' =>       1. ChanIsAvail(SIP/${EXTEN}&SIP/CISCO_GW/${EXTEN}) [extensions.conf:11]
                    2. NoOp(TEST: ${AVAILCHAN})                   [extensions.conf:12]
                    3. Set(theChannel=${CUT(AVAILCHAN,,1)})       [extensions.conf:14]
                    4. NoOp(TEST: ${theChannel})                  [extensions.conf:15]
                    5. Dial(${theChannel}/${EXTEN},,t)            [extensions.conf:16]
  Include =>        'handup-sip'                                  [pbx_config]

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

[ Context 'default' created by 'pbx_config' ]

-= 5 extensions (15 priorities) in 5 contexts. =-
Когда строкой Set(theChannel=${CUT(AVAILCHAN,,1)}) я убираю идентификатор сессии, то в случае с уходом на АТС я получаю SIP/CISCO_GW, а в случае с внутренним абонентом получаю SIP/НОМЕР. Первый случай в Dial выглядит правильно (SIP/CISCO_GW/НОМЕР), а второй не очень правильно (SIP/НОМЕР/НОМЕР), оно в принципе работает, звонок проходит. На сколько это критично?

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

Добавлено: 08 июн 2020, 19:59
ded
Не критично, но можно пригладить:
Dial(${theChannel:5}${EXTEN},,t)

Или для красоты можно бы использовать
ExecIf(${AVAILCHAN} = допишите сами)Dial(SIP/CISCO_GW/${EXTEN},,t)
ExecIf(${AVAILCHAN} != допишите сами)Dial(SIP/${EXTEN},,t)

и в конце
exten => h,1,Hangup()

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

Добавлено: 16 июн 2020, 14:16
diman321
Почитал на досуге документацию, нашел там про SIPPEER, переделал на него, получилось короче:

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

[ Context 'call-out' created by 'pbx_config' ]
   '_XXXXX' =>      1. NoOp(TEST: ${SIPPEER(${EXTEN},status)})    [extensions.conf:18]
                    2. ExecIf($["${SIPPEER(${EXTEN},status)}" = ""]?Dial(SIP/CISCO_GW/${EXTEN})) [extensions.conf:19]
                    3. ExecIf($["${SIPPEER(${EXTEN},status):0:2}" = "OK"]?Dial(SIP/${EXTEN})) [extensions.conf:20]
  Include =>        'handup-sip'                                  [pbx_config]

[ Context 'handup-sip' created by 'pbx_config' ]
  '_X!' =>          1. HangUp()                                   [extensions.conf:8]
Затея, такая: если пира нет (внешний абонент), то сиппир вернет пустоту, в этом случае звоним через циску, если сиппир возвращает ОК, то звоним через внутренний сип. Какие подводные камни у такого решения?

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

Добавлено: 16 июн 2020, 16:10
ded
Подводные камни - галька, надводные - ракушечник, кораллы тож.

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

Добавлено: 16 июн 2020, 18:20
diman321
ded писал(а):Подводные камни - галька, надводные - ракушечник, кораллы тож.
Не знал, что кораллы надводные, дела... :)

Буду считать, что всё норм. Спасибо за помощь!