Итак отвечаю на собсвенный же вопрос! )))
Несколько дней экспериментов над Астериском дали результаты и некоторое понимание (или непонимание) его работы.
По поводу:
В Dial() указываю таймаут и тогда по истечении таймаута получаю dialstatus=noanswer, но так как требуется вызываеющей стороне сказать что "номер не отвечает", то после Playback в CDR записывается что вызов answered, что не есть гуд.
3 примера диалплана:
ПЕРВЫЙ:
exten => 7777,1,NoOp(EXT: test)
same => n,NoOp(${CDR(disposition)})
same => n,Playback(call-fwd-unconditional)
same => n,NoOp(${CDR(disposition)})
same => n,Hangup()
И результат выполнения:
-- Executing [7777@from-internal-adm:1] NoOp("SIP/161-0000004a", "EXT: test") in new stack
-- Executing [7777@from-internal-adm:2] NoOp("SIP/161-0000004a", "NO ANSWER") in new stack
-- Executing [7777@from-internal-adm:3] Playback("SIP/161-0000004a", "call-fwd-unconditional") in new stack
-- <sip 161-0000004a=""> Playing 'call-fwd-unconditional.gsm' (language 'ru')
-- Executing [7777@from-internal-adm:4] NoOp("SIP/161-0000004a", "ANSWERED") in new stack
-- Executing [7777@from-internal-adm:5] Hangup("SIP/161-0000004a", "") in new stack
Видно что disposition после Playback изменился... А мне оно не надо, вариант
ВТОРОЙ (добавим noawnswer для Playback):
exten => 7777,1,NoOp(EXT: test)
same => n,NoOp(${CDR(disposition)})
same => n,Playback(call-fwd-unconditional,noanswer)
same => n,NoOp(${CDR(disposition)})
same => n,Hangup()
-- Executing [7777@from-internal-adm:1] NoOp("SIP/161-00000053", "EXT: test") in new stack
-- Executing [7777@from-internal-adm:2] NoOp("SIP/161-00000053", "NO ANSWER") in new stack
-- Executing [7777@from-internal-adm:3] Playback("SIP/161-00000053", "call-fwd-unconditional,noanswer") in new stack
-- <sip 161-00000053=""> Playing 'call-fwd-unconditional.gsm' (language 'ru')
-- Executing [7777@from-internal-adm:4] NoOp("SIP/161-00000053", "NO ANSWER") in new stack
-- Executing [7777@from-internal-adm:5] Hangup("SIP/161-00000053", "") in new stack
Ага disposition какой мне и нужен, вот только в трубке я услышал тишину, вместо call-fwd-unconditional
И вот правильный, вариант
ТРЕТИЙ:
exten => 7777,1,NoOp(EXT: test)
same => n,Answer(,nocdr)
same => n,NoOp(${CDR(disposition)})
same => n,Playback(call-fwd-unconditional)
same => n,NoOp(${CDR(disposition)})
same => n,Hangup()
-- Executing [7777@from-internal-adm:1] NoOp("SIP/161-00000058", "EXT: test") in new stack
-- Executing [7777@from-internal-adm:2] Answer("SIP/161-00000058", ",nocdr") in new stack
-- Executing [7777@from-internal-adm:3] NoOp("SIP/161-00000058", "NO ANSWER") in new stack
-- Executing [7777@from-internal-adm:4] Playback("SIP/161-00000058", "call-fwd-unconditional") in new stack
-- <sip 161-00000058=""> Playing 'call-fwd-unconditional.gsm' (language 'ru')
-- SIP/155-00000057 answered SIP/360-00000056
-- Executing [7777@from-internal-adm:5] NoOp("SIP/161-00000058", "NO ANSWER") in new stack
-- Executing [7777@from-internal-adm:6] Hangup("SIP/161-00000058", "") in new stack
Вот теперь все работает, а всего-то надо было поднять трубку (Answer) и nocdr параметр дописать!!!
Ну и самое главное, по поводу продолжения диалплана!!!
Заранее приношу извинения по поводу эксеншена h. Ибо он работает!!! Вот только кто же знал что если его использовать внутри макроса то тогда он отрабатывает только если Dial был успешный. В общем это была последняя капля и теперь мой диалплан подностью переписан под использование GoSub!
Всем спасибо!!!
Мне кажется или заголовок вопроса противоположен заданному вопросу?
igorg ( 2012-04-04 11:39:38 +0400 )редактироватьПоправил заголовок ;)
muhlik ( 2012-04-04 12:22:51 +0400 )редактировать