VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Переменная DIALSTATUS выдает пустое значение

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

Ответить
lamobot
Сообщения: 24
Зарегистрирован: 23 ноя 2016, 07:22
Откуда: Новосибсити

Переменная DIALSTATUS выдает пустое значение

Сообщение lamobot »

Всем бобра!

Структура такая: goip4->asterisk->sip-телефон.
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: Кусок extensions.conf
[ivr_menu]
exten => _123,1,Set(TIMEOUT(digit)=1)
exten => _123,n,NoOp(Dialstatus: ${DIALSTATUS})
exten => _123,n,Background(/music_for_ats/ivr/welcome2)
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: Из лога звонка
-- Executing [123@ivr_menu:2] NoOp("SIP/22222222-00000001", "Dialstatus: ") in new stack
qualify=yes у пиров в sip.conf стоит.
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: Кусок sip.conf - goip4
[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
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: Кусок sip.conf - general
[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.
Аватара пользователя
Wapo
Сообщения: 795
Зарегистрирован: 02 мар 2011, 17:53

Re: Переменная DIALSTATUS выдает пустое значение

Сообщение Wapo »

А разве данная переменная не устанавливается ПОСЛЕ завершения звонка, а не в процессе оного?
lamobot
Сообщения: 24
Зарегистрирован: 23 ноя 2016, 07:22
Откуда: Новосибсити

Re: Переменная DIALSTATUS выдает пустое значение

Сообщение lamobot »

На сколько я знаю, нет.

Но, даже решил проверить:
exten => h,1,NoOp(Dialstatus is: ${DIALSTATUS})

Лог:
-- Executing [h@from-skp:1] NoOp("SIP/2222222-0000000b", "Dialstatus is: ") in new stack
Аватара пользователя
Zavr2008
Сообщения: 2211
Зарегистрирован: 27 янв 2011, 00:35
Контактная информация:

Re: Переменная DIALSTATUS выдает пустое значение

Сообщение Zavr2008 »

а ${CDR(disposition)} и что показывает DumpChan()?
Российские E1 шлюзы Alvis. Модернизация УПАТС с E1,Подключение к ИС "Антифрод" E1 PRI/SS#7 УВР Телестор, Грифин и др..
gosha
Сообщения: 375
Зарегистрирован: 06 сен 2010, 17:41
Контактная информация:

Re: Переменная DIALSTATUS выдает пустое значение

Сообщение gosha »

lamobot,

та переменная показывает статус последнего Dial из диалплана. У вас в примере нет Dial'а
Аватара пользователя
dimondack
Сообщения: 62
Зарегистрирован: 16 сен 2019, 02:40

Re: Переменная DIALSTATUS выдает пустое значение

Сообщение 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>
Аватара пользователя
dimondack
Сообщения: 62
Зарегистрирован: 16 сен 2019, 02:40

Re: Переменная DIALSTATUS выдает пустое значение

Сообщение dimondack »

dialstatus
Вложения
dialstatus
dialstatus
lamobot
Сообщения: 24
Зарегистрирован: 23 ноя 2016, 07:22
Откуда: Новосибсити

Re: Переменная DIALSTATUS выдает пустое значение

Сообщение lamobot »

Всем спасибо! Да, действительно пока не было диал, диалстатус не работает.
Еще у меня как-то странно ведет себя переменная ${CDR(disposition)}.
А именно, к примеру, факта соединения не было, т.е. переменная "no answer", то если я в диалплане "h" к ней единожды обращусь, к примеру, выведу её значение в лог, то при следующем обращении, к примеру, операция выбора, она сама по себе меняется на answer.
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: Пример
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 для отслеживания не отвеченных звонков и брошенных трубок?
lamobot
Сообщения: 24
Зарегистрирован: 23 ноя 2016, 07:22
Откуда: Новосибсити

Re: Переменная DIALSTATUS выдает пустое значение

Сообщение lamobot »

Благодарю, ded!
Как всегда краток и то, что нужно!
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH