LINUX.ORG.RU
ФорумAdmin

QUEUESTATUS

 ,


1

2

Контекст обрботки части звонка

[menu_dept]
exten=> s,1,Answer
exten=> s,n,WaitExten(2)
exten=> 1,1(dial),Queue(depsales,tTh,,,30)
exten=> 1,n,Dial(SIP/101)
exten=> 2,1,Queue(depagency,tTh,,,30)
exten=> 2,n,Queue(depsales,tTh,,,30)
exten=> 2,n,Dial(SIP/101)
exten=> 3,1,Queue(depbuh,tTh,,,30)
exten=> 3,n,Dial(SIP/101)
exten=> h,1,Verbose(2, QUEUESTATUS ${QUEUESTATUS})
exten=> h,n,Verbose(2, DIALSTATUS ${DIALSTATUS})
exten=> h,n,DumpChan(19)

Конф. очередей

[queue-default]!
queue-callswaiting => queue-callswaiting
periodic-announce-frequency => 0
announce-frequency => 10
announce-holdtime => no
announce-position => no
strategy => ringall
timeout => 120
setinterfacevar=yes
setqueuevar=yes

[depbuh](queue-default)
member => Local/105@queue-local,1
member => Local/106@queue-local,2

Звоню в очередь depbuh и бросаю трубку после 3 гудка. В результата в h вижу:

   -- Executing [h@menu_dept:1] Verbose("SIP/22446688-00000000", "2, QUEUESTATUS ") in new stack
  ==  QUEUESTATUS 
    -- Executing [h@menu_dept:2] Verbose("SIP/22446688-00000000", "2, DIALSTATUS ") in new stack
  ==  DIALSTATUS 

А нужно если контекст [menu_dept] завершился неотвеченным создавать задачу в CRM перезвонить на номер. Причем контекст может завершится и на Queue и на Dial.

★★★★★

Сейчас проверить негде, но попробуйте ${BRIDGEPEER}

Если звонок не бы отвечен, то переменная будет пустой

paganmind ()
Ответ на: комментарий от paganmind

Тольк вот это есть в контексте h:

       > 
       > Variables:
       > QUEUEPOSITION=1
       > QUEUESRVLEVELPERF=0.0
       > QUEUESRVLEVEL=0
       > QUEUEABANDONED=1
       > QUEUECOMPLETED=0
       > QUEUETALKTIME=0
       > QUEUEHOLDTIME=0
       > QUEUECALLS=1
       > QUEUESTRATEGY=ringall
       > QUEUEMAX=0
       > QUEUENAME=depbuh
       > RTPAUDIOQOSRTT=minrtt=0.000000;maxrtt=0.000000;avgrtt=0.000000;stdevrtt=0.000000;
       > RTPAUDIOQOSLOSS=minrxlost=0.000000;maxrxlost=0.000000;avgrxlost=0.000000;stdevrxlost=0.000000;reported_minlost=0.000000;reported_maxlost=0.000000;reported_avglost=0.000000;reported_
stdevlost=0.000000;
       > RTPAUDIOQOSJITTER=minrxjitter=0.000000;maxrxjitter=0.000000;avgrxjitter=0.000000;stdevrxjitter=0.000000;reported_minjitter=0.000000;reported_maxjitter=0.000000;reported_avgjitter=0.
000000;reported_stdevjitter=0.000000;
       > RTPAUDIOQOS=ssrc=1988532262;themssrc=1207159621;lp=0;rxjitter=0.000000;rxcount=316;txjitter=0.007233;txcount=307;rlp=0;rtt=0.000000
       > BACKGROUNDSTATUS=SUCCESS
       > PHONE=22446688
       > MACRO_DEPTH=0
       > MIXMONITOR_FILENAME=/var/spool/asterisk/monitor/2017/05/16/in-2017-05-16-1457-199-277703-1494935860.0.wav
       > fname=2017/05/16/in-2017-05-16-1457-199-277703-1494935860.0.wav
       > SIPCALLID=48247640
       > SIPDOMAIN=pbx
       > SIPURI=sip:199@8.8.8.8

petav ★★★★★ ()
Последнее исправление: petav (всего исправлений: 1)
Ответ на: комментарий от paganmind

А у меня так, но я бросаю трубку.

exten=> h,n,NoOp(BRIDGEPEER=${BRIDGEPEER})
  -- Executing [h@menu_dept:3] NoOp("SIP/22446688-00000000", "BRIDGEPEER=") in new stack

petav ★★★★★ ()
Ответ на: комментарий от petav

Так в этом и суть:

А нужно если контекст [menu_dept] завершился неотвеченным создавать задачу в CRM перезвонить на номер.

Если звонок не бы отвечен, то переменная будет пустой

Переменная пустая - отправляем запрос в CRM

paganmind ()

как я понял покурив гугель, queuestatus выставляется не в hangup, а в продолжение цепочки, то есть например сразу после Queue(depsales,tTh,,,30). Пример

по поводу брошенных вызовов - опять же курил гугель, народ пишет что есть два варианта, RINGNOANSWER и ABANDONED. первый - это когда оператор тупо провафлил вызов (телефон звонит, оператор курит), второй - когда трубку положили не дождавшись очереди.

блин, выветривается уже все из головы, нихрена не помню

upcFrost ★★★★★ ()
Ответ на: комментарий от upcFrost

BRIDGEPEER - универсально. Независимо от аппликейшена видно или был канал с другим сбриджован или нет.

RINGNOANSWER и ABANDONED - это статусы уже внутренние аппликейшена Queue, они есть в queue_log, а не как переменные

paganmind ()
Ответ на: комментарий от paganmind

внешним парсером. добавить кастомное булевое поле с default = false и влепить крон раз в минуту сканить базу. если нашли abandoned/ringnoanswer с false - занести в crm. имхо проще будет, не думаю что ТСу прям писец как критично будет ли вызов занесен в систему через 5 секунд или через 65.

upcFrost ★★★★★ ()
Ответ на: комментарий от upcFrost

Приму к сведению. Тестер сказал что уже это:

exten=> h,n,GotoIf($["${BRIDGEPEER}" != ""]?end)
exten=> h,n,Macro(task2crm,PHONE_LOCAL=NULL&PHONE=${PHONE})
exten=> h,n(end),Hangup
Работает как надо

petav ★★★★★ ()
Ответ на: комментарий от upcFrost

есть разные задачи. именно эту можно решить может и скриптом на cron. но бывает, когда нужна реальная асинхронность при интеграции. поэтому лучше всё брать сразу с диалплана. если его на хватает, тогда переходить на lua

paganmind ()
Ответ на: комментарий от petav

AMI оперирует каналами. иногда сложно склеить их потом в 1 звонок, особенно когда есть трансферы и много каналов в одном.

я AMI только для статистики и монитонинга использовал. для остального хватало диалплана. в новых версиях Астериска есть ARI - вот он решает 100% проблем.

paganmind ()
12 октября 2017 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.