Страница 1 из 1
Переменная DIALSTATUS выдает пустое значение
Добавлено: 31 авг 2022, 15:08
lamobot
Всем бобра!
Структура такая: goip4->asterisk->sip-телефон.
[ivr_menu]
exten => _123,1,Set(TIMEOUT(digit)=1)
exten => _123,n,NoOp(Dialstatus: ${DIALSTATUS})
exten => _123,n,Background(/music_for_ats/ivr/welcome2)
-- Executing [123@ivr_menu:2] NoOp("SIP/22222222-00000001", "Dialstatus: ") in new stack
qualify=yes у пиров в sip.conf стоит.
[22222222]
host=dynamic
type=peer
context=from-skp
disallow=all
allow=alaw
dtmfmode=rfc2833
username=22222222
secret=password
qualify=yes
nat=no
directmedia=no
insecure=port,invite
[general]
language=ru
context=public
allowoverlap=no
udpbindaddr=0.0.0.0
tcpenable=no
tcpbindaddr=0.0.0.0
transport=udp
srvlookup=yes
localnet=192.168.0.0/24
Почему может выдавать пустое значение переменной dialstatus?
П.С. Когда была старая версия астериска не то 1.6, не то 1.8 все работало, накатили на новый сервер астериск 16(накатывалось/обновлялось давно, раньше не работающий dialstatus был не критичен, сейчас надо починить), скопировали конфиги, настоили - все ок, кроме отслеживания статуса звонка.
Сейчас версия астериска 16.16.1.
Re: Переменная DIALSTATUS выдает пустое значение
Добавлено: 31 авг 2022, 16:25
Wapo
А разве данная переменная не устанавливается ПОСЛЕ завершения звонка, а не в процессе оного?
Re: Переменная DIALSTATUS выдает пустое значение
Добавлено: 31 авг 2022, 17:48
lamobot
На сколько я знаю, нет.
Но, даже решил проверить:
exten => h,1,NoOp(Dialstatus is: ${DIALSTATUS})
Лог:
-- Executing [h@from-skp:1] NoOp("SIP/2222222-0000000b", "Dialstatus is: ") in new stack
Re: Переменная DIALSTATUS выдает пустое значение
Добавлено: 01 сен 2022, 02:02
Zavr2008
а ${CDR(disposition)} и что показывает DumpChan()?
Re: Переменная DIALSTATUS выдает пустое значение
Добавлено: 01 сен 2022, 10:29
gosha
lamobot,
та переменная показывает статус последнего Dial из диалплана. У вас в примере нет Dial'а
Re: Переменная DIALSTATUS выдает пустое значение
Добавлено: 01 сен 2022, 15:14
dimondack
А разве данная переменная не устанавливается ПОСЛЕ завершения звонка, а не в процессе оного?
Действительно, откуда там взяться dialstatus-у, пока приветствие
Background(/music_for_ats/ivr/welcome2) не отработало
Попробовал у себя
Код: Выделить всё
[users]
exten => _17XX,1,Noop(*****START****)
exten => _17XX,n,Set(fname=${STRFTIME(${EPOCH},,%Y%m%d%H%M%S)}-${CALLERID(number)}-${EXTEN})
exten => _17XX,n,MixMonitor(/var/spool/asterisk/monitor/${fname}.wav)
exten => _17XX,n,Set(recfile=/var/spool/asterisk/monitor/${fname}.wav)
exten => _17XX,n,Set(CDR(recfile)=/var/spool/asterisk/monitor/${fname}.wav)
exten => _17XX,n,Dial(SIP/${EXTEN},12,Tt)
exten => _17XX,n,GotoIf($["${DIALSTATUS}" !="ANSWER"]?vm)
exten => _17XX,n(vm),Macro(svm,${EXTEN},v_mail)
exten => h,1,Noop(*****SEND to Telegram*************)
exten => h,2,Noop(***DIALSTATUS=${DIALSTATUS}*************)
exten => h,n,GotoIf($["${DIALSTATUS}" =="ANSWER"]?end)
exten => h,n,System(/usr/local/share/asterisk/agi-bin/scriptFINAL.sh ${recfile})
exten => h,n,Hangup()
exten => h,n(end),Hangup()
[macro-svm]
;exten => s,1,Answer()
exten => s,1,WaitExten(1)
exten => s,n,PlayBack(vm-nobodyavail)
exten => s,n,WaitExten(1)
exten => s,n,Voicemail(${ARG1}@${ARG2})
exten => s,n,WaitExten(2)
exten => s,n,HangUp()
- root@vv:/usr/local/etc/asterisk # asterisk -rvvvvvv
Asterisk 18.7.1, Copyright (C) 1999 - 2021, Sangoma Technologies Corporation and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Running as user 'asterisk'
Running under group 'asterisk'
Connected to Asterisk 18.7.1 currently running on vv (pid = 2379)
vv*CLI>
vv*CLI>
vv*CLI>
> 0x80906c000 -- Strict RTP learning after remote address set to: 192.168.88.246:5062
-- Executing [1746@users:1] NoOp("SIP/1701-00000000", "*****START****") in new stack
-- Executing [1746@users:2] Set("SIP/1701-00000000", "fname=20220901145545-1701-1746") in new stack
-- Executing [1746@users:3] MixMonitor("SIP/1701-00000000", "/var/spool/asterisk/monitor/20220901145545-1701-1746.wav") in new stack
-- Executing [1746@users:4] Set("SIP/1701-00000000", "recfile=/var/spool/asterisk/monitor/20220901145545-1701-1746.wav") in new stack
== Begin MixMonitor Recording SIP/1701-00000000
-- Executing [1746@users:5] Set("SIP/1701-00000000", "CDR(recfile)=/var/spool/asterisk/monitor/20220901145545-1701-1746.wav") in new stack
-- Executing [1746@users:6] Dial("SIP/1701-00000000", "SIP/1746,12,Tt") in new stack
-- Called SIP/1746
-- SIP/1746-00000001 is ringing
-- Nobody picked up in 12000 ms
-- Executing [1746@users:7] GotoIf("SIP/1701-00000000", "1?vm") in new stack
-- Goto (users,1746,8)
-- Executing [1746@users:8] Macro("SIP/1701-00000000", "svm,1746,v_mail") in new stack
[Sep 1 14:55:57] WARNING[100470][C-00000001]: app_macro.c:276 int _macro_exec(struct ast_channel *, const char *, int): Macro() is deprecated and will be removed from a future version of Asterisk.
[Sep 1 14:55:57] WARNING[100470][C-00000001]: app_macro.c:277 int _macro_exec(struct ast_channel *, const char *, int): Dialplan should be updated to use Gosub instead.
-- Executing [s@macro-svm:1] WaitExten("SIP/1701-00000000", "1") in new stack
-- Timeout on SIP/1701-00000000, continuing...
-- Executing [s@macro-svm:2] Playback("SIP/1701-00000000", "vm-nobodyavail") in new stack
-- <SIP/1701-00000000> Playing 'vm-nobodyavail.alaw' (language 'ru')
> 0x80906c000 -- Strict RTP switching to RTP target address 192.168.88.246:5062 as source
> 0x80906c000 -- Strict RTP learning complete - Locking on source address 192.168.88.246:5062
-- Executing [s@macro-svm:3] WaitExten("SIP/1701-00000000", "1") in new stack
-- Timeout on SIP/1701-00000000, continuing...
-- Executing [s@macro-svm:4] VoiceMail("SIP/1701-00000000", "1746@v_mail") in new stack
-- <SIP/1701-00000000> Playing 'vm-intro.alaw' (language 'ru')
-- <SIP/1701-00000000> Playing 'beep.alaw' (language 'ru')
-- Recording the message
-- x=0, open writing: /var/spool/asterisk/voicemail/v_mail/1746/tmp/mwY3HW format: wav49, 0x8091be1e0
-- x=1, open writing: /var/spool/asterisk/voicemail/v_mail/1746/tmp/mwY3HW format: gsm, 0x8091be3a0
-- x=2, open writing: /var/spool/asterisk/voicemail/v_mail/1746/tmp/mwY3HW format: wav, 0x809201020
-- User ended message by pressing #
-- <SIP/1701-00000000> Playing 'auth-thankyou.alaw' (language 'ru')
-- Executing [s@macro-svm:5] WaitExten("SIP/1701-00000000", "2") in new stack
-- Timeout on SIP/1701-00000000, continuing...
-- Executing [s@macro-svm:6] Hangup("SIP/1701-00000000", "") in new stack
== Spawn extension (macro-svm, s, 6) exited non-zero on 'SIP/1701-00000000' in macro 'svm'
== Spawn extension (users, 1746, 8) exited non-zero on 'SIP/1701-00000000'
-- Executing [h@users:1] NoOp("SIP/1701-00000000", "*****SEND to Telegram*************") in new stack
-- Executing [h@users:2] NoOp("SIP/1701-00000000", "***DIALSTATUS=NOANSWER*************") in new stack
-- Executing [h@users:3] GotoIf("SIP/1701-00000000", "0?end") in new stack
-- Executing [h@users:4] System("SIP/1701-00000000", "/usr/local/share/asterisk/agi-bin/scriptFINAL.sh /var/spool/asterisk/monitor/20220901145545-1701-1746.wav") in new stack
-- Executing [h@users:5] Hangup("SIP/1701-00000000", "") in new stack
== Spawn extension (users, h, 5) exited non-zero on 'SIP/1701-00000000'
== MixMonitor close filestream (mixed)
== End MixMonitor Recording SIP/1701-00000000
vv*CLI>
Re: Переменная DIALSTATUS выдает пустое значение
Добавлено: 01 сен 2022, 15:47
dimondack
dialstatus
Re: Переменная DIALSTATUS выдает пустое значение
Добавлено: 01 сен 2022, 16:40
lamobot
Всем спасибо! Да, действительно пока не было диал, диалстатус не работает.
Еще у меня как-то странно ведет себя переменная ${CDR(disposition)}.
А именно, к примеру, факта соединения не было, т.е. переменная "no answer", то если я в диалплане "h" к ней единожды обращусь, к примеру, выведу её значение в лог, то при следующем обращении, к примеру, операция выбора, она сама по себе меняется на answer.
exten => h,1,NoOp(${CDR(disposition)})
exten => h,2,GotoIf($[${CDR(disposition)}="NO ANSWER"]?no_answer,s,1)
Как показано в листинге, при условии "не поднятия трубки" или "брошенной трубки" во время проигрыша приветствия, если не убрать вывод "NoOp(${CDR(disposition)})" то на строке "h,2" переменная станет answer, без вариантов. Но, с "answer" на "no answer" не меняется, тоже проверил.
Я хз почему. Всё не заработало пока я не убрал NoOp. Бред скажите коллеги, да я с вами соглашусь, но я вчера просидел до 2х ночи пытаясь понять почему 100% рабочий диалплан не работает.
П.С. А какие еще есть переменные помимо cdr desposition и dialstatus для отслеживания не отвеченных звонков и брошенных трубок?
Re: Переменная DIALSTATUS выдает пустое значение
Добавлено: 01 сен 2022, 20:36
ded
Re: Переменная DIALSTATUS выдает пустое значение
Добавлено: 05 сен 2022, 15:21
lamobot
Благодарю, ded!
Как всегда краток и то, что нужно!