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

Немогу понять...

Добавлено: 28 сен 2014, 04:39
beerko
Здравствуйте. Я новичок, 2й день бьюсь с астериском, прошу помощи
имею астриск 11 + gsm dongle
Задача, при звонке на 100, и если не берут трубку позвонить на 792111111111, ну и соответственно чтобы на всех этапах говорило занято, не отвечает, недоступен.
Для других XXX номеров должно все обрабатываться аналогично, кроме отсутствия дозвона через GSM.

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

[globals]
[general]
[internal]
include => test
exten => _7X.,1,Dial(Dongle/GSM1/holdother:+${FILTER(0-9,${EXTEN})})
exten => _+7X.,1,Dial(Dongle/GSM1/holdother:+${FILTER(0-9,${EXTEN})})
exten => _8X.,1,Dial(Dongle/GSM1/holdother:+7${FILTER(0-9,${EXTEN:1})})
;exten => _007X.,1,Dial(Dongle/GSM1/holdother:+7${FILTER(0-9,${EXTEN:3})})

exten => _XXX,1,Answer()
exten => _XXX,2,Wait(1)
exten => _XXX,3,Playback(confbridge-join)
exten => _XXX,4,Background(transfer)
exten => _XXX,5,Dial(SIP/${EXTEN},30,Ttrm(default))
exten => _XXX,6,Goto(${EXTEN}-${DIALSTATUS},1)

;если не ответил для узла 100, пробуем позвонить через GSM
exten => 100-NOANSWER,1,Playback(followme/status) ; альтернативные пути
exten => 100-NOANSWER,n,Dial(Dongle/GSM1/holdother:+792111111111,30,Ttrm(default))
exten => 100-NOANSWER,n,Goto(_XXX-NOANSWER,1)

;eсли ответи
exten => _XXX-ANSWER,1,Goto(_XXX,7)

;Если абонент не отвечает
exten => _XXX-NOANSWER,1,Playback(no-answer)
exten => _XXX-NOANSWER,n,Goto(_XXX,7)

;Если абонент занят
exten => _XXX-BUSY,1,Playback(vm-isonphone) ; занят
exten => _XXX-BUSY,n,Goto(_XXX,7)

;Если абонент недоступен (незарегистриорван на сервере)
exten => _XXX-CHANUNAVAIL,1, Playback(no-answer) ; абонент недоступен
exten => _XXX-CHANUNAVAIL,n,Goto(_XXX,7)

;exten => _XXX-CONGESTION,1, GoTo(_XXX-BUSY,1)

exten => _XXX,7,Playback(vm-goodbye) //До свидания
exten => _XXX,n,Wait(1)
exten => _XXX,n,Hangup()

при звонке на несуществующий номер 145, получаю ошибку. Наверное потому что exten => _XXX,6,Goto(${EXTEN}-${DIALSTATUS},1) не может перейти в exten => _XXX-CHANUNAVAIL,1, Playback(no-answer) ; абонент недоступен

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

-- Executing [145@internal:5] Dial("SIP/200-00000017", "SIP/145,30,Ttrm(default)") in new stack
[Sep 28 04:29:24] WARNING[10702][C-00000036]: chan_sip.c:6011 create_addr: Purely numeric hostname (145), and not a peer--rejecting!
[Sep 28 04:29:24] WARNING[10702][C-00000036]: app_dial.c:2437 dial_exec_full: Unable to create channel of type 'SIP' (cause 20 - Subscriber absent)
  == Everyone is busy/congested at this time (1:0/0/1)
    -- Executing [145@internal:6] Goto("SIP/200-00000017", "145-CHANUNAVAIL,1") in new stack
    -- Goto (internal,145-CHANUNAVAIL,1)
[Sep 28 04:29:24] WARNING[10702][C-00000036]: pbx.c:6646 __ast_pbx_run: Channel 'SIP/200-00000017' sent to invalid extension but no invalid handler: context,exten,priority=internal,145-CHANUNAVAIL,1
truebest*CLI>

Ок
Беру звоню на существующий номер 400 и не беру трубку, получаю ошибку, что логично

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

 Executing [400@internal:5] Dial("SIP/200-0000001c", "SIP/400,30,Ttrm(default)") in new stack
  == Using SIP RTP CoS mark 5
    -- Called SIP/400
    -- Started music on hold, class 'default', on channel 'SIP/200-0000001c'
    -- SIP/400-0000001d is ringing
    -- Nobody picked up in 30000 ms
    -- Stopped music on hold on SIP/200-0000001c
    -- Executing [400@internal:6] Goto("SIP/200-0000001c", "400-NOANSWER,1") in new stack
    -- Goto (internal,400-NOANSWER,1)
[Sep 28 04:35:47] WARNING[10829][C-0000003c]: pbx.c:6646 __ast_pbx_run: Channel 'SIP/200-0000001c' sent to invalid extension but no invalid handler: context,exten,priority=internal,400-NOANSWER,1
ок беру звоню и на 400 скидываю звонок и это обрабатывается

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

  -- Executing [400@internal:5] Dial("SIP/200-0000001e", "SIP/400,30,Ttrm(default)") in new stack
  == Using SIP RTP CoS mark 5
    -- Called SIP/400
    -- Started music on hold, class 'default', on channel 'SIP/200-0000001e'
    -- SIP/400-0000001f is ringing
    -- Got SIP response 603 "Decline" back from 176.53.244.82:1024
    -- SIP/400-0000001f is busy
  == Everyone is busy/congested at this time (1:1/0/0)
    -- Stopped music on hold on SIP/200-0000001e
    -- Executing [400@internal:6] Goto("SIP/200-0000001e", "400-BUSY,1") in new stack
    -- Goto (internal,400-BUSY,1)
    -- Executing [400-BUSY@internal:1] Playback("SIP/200-0000001e", "vm-isonphone") in new stack
    -- <SIP/200-0000001e> Playing 'vm-isonphone.ulaw' (language 'ru')
    -- Executing [400-BUSY@internal:2] Goto("SIP/200-0000001e", "_XXX,7") in new stack
    -- Goto (internal,_XXX,7)
    -- Executing [_XXX@internal:7] Playback("SIP/200-0000001e", "vm-goodbye") in new stack
    -- <SIP/200-0000001e> Playing 'vm-goodbye.ulaw' (language 'ru')
    -- Executing [_XXX@internal:8] Wait("SIP/200-0000001e", "1") in new stack
    -- Executing [_XXX@internal:9] Hangup("SIP/200-0000001e", "") in new stack
  == Spawn extension (internal, _XXX, 9) exited non-zero on 'SIP/200-0000001e'

Вопрос, почему последнее _XXX-BUSY обрабатывается?

Re: Немогу понять...

Добавлено: 28 сен 2014, 08:41
Vlad1983
потому что сказано
"-- Executing [400-BUSY@internal:2] Goto("SIP/200-0000001e", "_XXX,7") in new stack"
то оно и делает
"-- Executing [_XXX@internal:7] Playback("SIP/200-0000001e", "vm-goodbye") in new stack"

Re: Немогу понять...

Добавлено: 28 сен 2014, 15:40
beerko
Вы немного поспешили.
-- Executing [400@internal:6] Goto("SIP/200-0000001c", "400-NOANSWER,1") in new stack
-- Goto (internal,400-NOANSWER,1)
[Sep 28 04:35:47] WARNING[10829][C-0000003c]: pbx.c:6646 __ast_pbx_run: Channel 'SIP/200-0000001c' sent to invalid extension but no invalid handler: context,exten,priority=internal,400-NOANSWER,1
Executing [400@internal:6] Goto("SIP/200-0000001e", "400-BUSY,1") in new stack
-- Goto (internal,400-BUSY,1)
-- Executing [400-BUSY@internal:1] Playback("SIP/200-0000001e", "vm-isonphone") in new stack
почему одно работает а другое нет?

Re: Немогу понять...

Добавлено: 28 сен 2014, 16:11
Vlad1983

Re: Немогу понять...

Добавлено: 29 сен 2014, 00:40
ded
В контексте internal есть цепочка действий для exten => 400, но нет действий для exten => 400-NOANSWER, о чём и говорится:
Channel 'SIP/200-0000001c' sent to invalid extension but no invalid handler: context,exten,priority=internal,400-NOANSWER,1

Re: Немогу понять...

Добавлено: 29 сен 2014, 07:29
Vlad1983
я сразу тоже не заметил

показываю на пальцах
делаем Goto(100-NOANSWER,1) и Goto(200-NOANSWER,1)

в контексте:
exten => 100-NOANSWER,1,NoOp(NO Pattern) ; этот сработает при Goto(100-NOANSWER,1), т.к. нет знака что нужно искать по шаблону
exten => _XXX-NOANSWER,1,NoOp(Pattern) ; это не сработает никогда при любых Goto(...-NOANSWER,1),
т.к. _XXX-NOANSWER интерпретируется как _[0-9][0-9][0-9]-[2-9]OA[2-9]SWER, из-за того что N = [2-9]

Re: Немогу понять...

Добавлено: 29 сен 2014, 12:49
beerko
Все роде бы понятно, Но тогда почему это срабатывает в независимости от того какой абонент занят???

exten => _XXX,6,Goto(${EXTEN}-${DIALSTATUS},1)

;Если абонент занят
exten => _XXX-BUSY,1,Playback(vm-isonphone) ; занят
exten => _XXX-BUSY,n,Goto(_XXX,7)

Re: Немогу понять...

Добавлено: 29 сен 2014, 12:55
beerko
Понял.Простите за тупку)))