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

Оценка работы оператора

СообщениеДобавлено: 20 окт 2020, 21:36
skynetyar
Добрый день!
FreePBX 14
Прошу совета и помощи, настраивал все по мануалу.
Все вроде бы работает корректно ,но иногда видимо когда оператор состоит в нескольких очередях то во время "inuse" разговора ему приходит звонок, настройки очереди проверены :
Skip Busy Agents = Yes + (ringinuse=no)
Autofill = no
Агенты динамические досбавляються через CLI
Подскажите как поступить,может быть лучше отойти от
Local/111@customer-survey-ivr/n,0,111,hint:111@ext-local
И использовать в extensions_override_freepbx.conf [ext-queues] ?
Или все же в [customer-survey-ivr] делать проверку на INUSE и INCALL и делать Return() ?

Re: Оценка работы оператора

СообщениеДобавлено: 21 окт 2020, 16:39
Kroteg
А никакой CallWaiting не включен?
ну и покажи queue show <num> как отображаются операторы
и хинты нормально отрабатываются?

Re: Оценка работы оператора

СообщениеДобавлено: 22 окт 2020, 16:16
skynetyar
Спасибо за ответ!
Call Waiting на всех номерах отключены,глобально тоже отключил при создании новых.

[Показать] Спойлер: queue show
Local/756@from-queue/n (ringinuse disabled) (dynamic) (Not in use) has taken 19 calls (last was 79860 secs ago)
Local/748@from-queue/n (ringinuse disabled) (dynamic) (Not in use) has taken 55 calls (last was 9643 secs ago)
Local/746@from-queue/n (ringinuse disabled) (dynamic) (Not in use) has taken 27 calls (last was 80 secs ago)
Local/774@from-queue/n (ringinuse disabled) (dynamic) (Not in use) has taken no calls yet
Local/830@from-queue/n (ringinuse disabled) (dynamic) (In use) has taken 49 calls (last was 391 secs ago)
Local/739@from-queue/n (ringinuse disabled) (dynamic) (Not in use) has taken 32 calls (last was 3601 secs ago)
Local/827@from-queue/n (ringinuse disabled) (dynamic) (Not in use) has taken 39 calls (last was 291 secs ago)
Local/825@from-queue/n (ringinuse disabled) (dynamic) (Not in use) has taken no calls yet
Local/820@from-queue/n (ringinuse disabled) (dynamic) (Not in use) has taken 40 calls (last was 812 secs ago)
Local/819@from-queue/n (ringinuse disabled) (dynamic) (Not in use) has taken 62 calls (last was 26 secs ago)
Local/725@from-queue/n (ringinuse disabled) (dynamic) (Not in use) has taken 57 calls (last was 65071 secs ago)
Local/815@from-queue/n (ringinuse disabled) (dynamic) (Not in use) has taken 34 calls (last was 243 secs ago)
Local/814@from-queue/n (ringinuse disabled) (dynamic) (Not in use) has taken 20 calls (last was 2264 secs ago)


В extensions_override_freepbx.conf я переопределил
[from-queue]
exten => _X.,1,Goto(customer-survey-ivr,${EXTEN},1)

В extensions_custom.conf
[customer-survey-ivr]
[Показать] Спойлер:
exten => _X.,1,NoOp(---------- POST CALL SURVEY BEGINNING ---------------)
exten => _X.,n,NoOp(HINT STATUS - ${EXTENSION_STATE(${EXTEN})})
exten => _X.,n,NoOp(DND STATUS - ${DB(DND/${EXTEN})})
exten => _X.,n,GotoIf($["${DB(DND/${EXTEN})}" = "YES"]?busy)
exten => _X.,n,DIAL(PJSIP/${EXTEN},,trg)
exten => _X.,n,GotoIf($[${DIALSTATUS}=BUSY]?busy:answered)
exten => _X.,n(busy),Hangup()
exten => _X.,n(answered),Goto(assessment,${EXTEN},1)


[assessment]
[Показать] Спойлер:
exten => _X.,1,Answer
exten => _X.,n,Wait(1)
exten => _X.,n(skip),Set(IVR_MSG=en/beep)
exten => _X.,n(start),Set(TIMEOUT(digit)=1)
exten => _X.,n,Background(/var/lib/asterisk/sounds/ru/custom/ocenite-8khz,m)
exten => _X.,n,WaitExten(5,)

exten => 1,1,AGI(survey.php, ${CDR(src)}, ${DIALEDPEERNUMBER}, ${NODEST}, 1)
exten => 1,n,Playback(/var/lib/asterisk/sounds/ru/custom/bye-8khz,skip)

exten => 2,1,AGI(survey.php, ${CDR(src)}, ${DIALEDPEERNUMBER}, ${NODEST}, 2)
exten => 2,n,Playback(/var/lib/asterisk/sounds/ru/custom/bye-8khz,skip)

exten => 3,1,AGI(survey.php, ${CDR(src)}, ${DIALEDPEERNUMBER}, ${NODEST}, 3)
exten => 3,n,Playback(/var/lib/asterisk/sounds/ru/custom/bye-8khz,skip)

exten => 4,1,AGI(survey.php, ${CDR(src)}, ${DIALEDPEERNUMBER}, ${NODEST}, 4)
exten => 4,n,Playback(/var/lib/asterisk/sounds/ru/custom/bye-8khz,skip)

exten => 5,1,AGI(survey.php, ${CDR(src)}, ${DIALEDPEERNUMBER}, ${NODEST}, 5)
exten => 5,n,Playback(/var/lib/asterisk/sounds/ru/custom/bye-8khz,skip)

exten => t,1,Playback(/var/lib/asterisk/sounds/ru/custom/bye-8khz,skip)
exten => e,1,Playback(/var/lib/asterisk/sounds/ru/custom/bye-8khz,skip)


Тут я вывожу отладку
exten => _X.,n,NoOp(HINT STATUS - ${EXTENSION_STATE(${EXTEN})})

По логу получается так
[Показать] Спойлер:
-- Goto (customer-survey-ivr,725,1)
-- Executing [725@customer-survey-ivr:1] NoOp("Local/725@from-queue-0001a3ec;2", "---------- POST CALL SURVEY BEGINNING ---------------") in new stack
-- Executing [725@customer-survey-ivr:2] NoOp("Local/725@from-queue-0001a3ec;2", "HINT STATUS - UNAVAILABLE") in new stack
-- Executing [725@customer-survey-ivr:3] NoOp("Local/725@from-queue-0001a3ec;2", "DND STATUS - YES") in new stack
-- Executing [725@customer-survey-ivr:4] GotoIf("Local/725@from-queue-0001a3ec;2", "1?busy") in new stack
-- Goto (customer-survey-ivr,725,7)
-- Executing [725@customer-survey-ivr:7] Hangup("Local/725@from-queue-0001a3ec;2", "") in new stack
== Spawn extension (customer-survey-ivr, 725, 7) exited non-zero on 'Local/725@from-queue-0001a3ec;2'
-- Nobody picked up in 0 ms
-- Called Local/739@from-queue/n
-- Executing [739@from-queue:1] Goto("Local/739@from-queue-0001a3ed;2", "customer-survey-ivr,739,1") in new stack
-- Goto (customer-survey-ivr,739,1)
-- Executing [739@customer-survey-ivr:1] NoOp("Local/739@from-queue-0001a3ed;2", "---------- POST CALL SURVEY BEGINNING ---------------") in new stack
-- Executing [739@customer-survey-ivr:2] NoOp("Local/739@from-queue-0001a3ed;2", "HINT STATUS - INUSE") in new stack
-- Executing [739@customer-survey-ivr:3] NoOp("Local/739@from-queue-0001a3ed;2", "DND STATUS - ") in new stack
-- Executing [739@customer-survey-ivr:4] GotoIf("Local/739@from-queue-0001a3ed;2", "0?busy") in new stack
-- Executing [739@customer-survey-ivr:5] Dial("Local/739@from-queue-0001a3ed;2", "PJSIP/739,,trg") in new stack
-- Called PJSIP/739
-- Local/739@from-queue-0001a3ed;1 is ringing


По логу видно что оператор занят INUSE но Dial все равно происходит...
-- Executing [739@customer-survey-ivr:2] NoOp("Local/739@from-queue-0001a3ed;2", "HINT STATUS - INUSE") in new stack
-- Executing [739@customer-survey-ivr:5] Dial("Local/739@from-queue-0001a3ed;2", "PJSIP/739,,trg") in new stack
-- Called PJSIP/739
-- Local/739@from-queue-0001a3ed;1 is ringing

Несмотря на настройки очереди Skip Busy Agents = Yes + (ringinuse=no)

Re: Оценка работы оператора

СообщениеДобавлено: 22 окт 2020, 20:41
skynetyar
Добавил такую конструкцию в [customer-survey-ivr]
exten => _X.,n,ExecIf($["${EXTENSION_STATE(${EXTEN})}"="NOT_INUSE"]?DIAL(PJSIP/${EXTEN},,trg))

вместо
exten => _X.,n,DIAL(PJSIP/${EXTEN},,trg)

Прошу поправить если не так делаю..

Re: Оценка работы оператора

СообщениеДобавлено: 23 окт 2020, 03:27
ded
Ring Inuse

If you want the queue to avoid sending calls to members whose devices are known to be ‘in use’ (via the channel driver supporting that device state) uncomment this option. (Note only the SIP channel driver currently is able to report ‘in use’.)
; ringinuse = no
а у вас PJSIP
callcounters = yes ?

Re: Оценка работы оператора

СообщениеДобавлено: 27 окт 2020, 15:58
Kroteg
в случае с PJSIP может попробовать DEVICE_STATE(PJSIP/${EXTEN})
ну и естественно поизучать какие возможны ответы.
INUSE и тд...

Re: Оценка работы оператора

СообщениеДобавлено: 28 окт 2020, 14:38
skynetyar
ded писал(а):callcounters = yes

Ненашел данный параметр в FreePBX ,или его можно внести как дополнительный параметр?

Kroteg писал(а):DEVICE_STATE(PJSIP/${EXTEN})


${EXTENSION_STATE(${EXTEN})} тоже прекрасно работает..

Пока что проблему решил так как описал ниже, вроде все гладко...

Re: Оценка работы оператора

СообщениеДобавлено: 28 окт 2020, 17:55
ded
Искать так:
OK, Google => asterisk callcounters = yes

Re: Оценка работы оператора

СообщениеДобавлено: 14 дек 2020, 14:59
skynetyar
Подскажите пожалуйста, появляется ошибка

Код: выделить все
[2020-12-14 13:33:00] WARNING[9485][C-00004bab]: ast_expr2.fl:470 ast_yyerror: ast_yyerror():  syntax error: syntax error, unexpected '=', expecting $end; Input:
=BUSY
^


[Показать] Спойлер: "лог"
-- Called Local/809@from-queue/n
-- Executing [809@from-queue:1] Goto("Local/809@from-queue-00010f28;2", "customer-survey-ivr,809,1") in new stack
-- Goto (customer-survey-ivr,809,1)
-- Executing [809@customer-survey-ivr:1] NoOp("Local/809@from-queue-00010f28;2", "---------- POST CALL SURVEY BEGINNING ---------------") in new stack
-- Executing [809@customer-survey-ivr:2] NoOp("Local/809@from-queue-00010f28;2", "HINT STATUS - INUSE") in new stack
-- Executing [809@customer-survey-ivr:3] NoOp("Local/809@from-queue-00010f28;2", "DND STATUS - ") in new stack
-- Executing [809@customer-survey-ivr:4] NoOp("Local/809@from-queue-00010f28;2", "NUMBER - +78888888888") in new stack
-- Executing [809@customer-survey-ivr:5] NoOp("Local/809@from-queue-00010f28;2", "QUEUE - 210") in new stack
-- Executing [809@customer-survey-ivr:6] NoOp("Local/809@from-queue-00010f28;2", "EXTEN - 809") in new stack
-- Executing [809@customer-survey-ivr:7] NoOp("Local/809@from-queue-00010f28;2", "OPERATOR CDR - 809") in new stack
-- Executing [809@customer-survey-ivr:8] NoOp("Local/809@from-queue-00010f28;2", "DEVICE_STATE 809 - INUSE") in new stack
-- Executing [809@customer-survey-ivr:9] NoOp("Local/809@from-queue-00010f28;2", "---------- POST CALL SURVEY BEGINNING ---------------") in new stack
-- Executing [809@customer-survey-ivr:10] GotoIf("Local/809@from-queue-00010f28;2", "0?busy") in new stack
-- Executing [809@customer-survey-ivr:11] ExecIf("Local/809@from-queue-00010f28;2", "0?DIAL(PJSIP/809,,trg)") in new stack
[2020-12-14 13:33:00] WARNING[9485][C-00004bab]: ast_expr2.fl:470 ast_yyerror: ast_yyerror(): syntax error: syntax error, unexpected '=', expecting $end; Input:
=BUSY
^
[2020-12-14 13:33:00] WARNING[9485][C-00004bab]: ast_expr2.fl:474 ast_yyerror: If you have questions, please refer to https://wiki.asterisk.org/wiki/display/ ... +Variables
-- Executing [809@customer-survey-ivr:12] GotoIf("Local/809@from-queue-00010f28;2", "?busy:answered") in new stack
-- Goto (customer-survey-ivr,809,14)
-- Executing [809@customer-survey-ivr:14] Goto("Local/809@from-queue-00010f28;2", "assessment,809,1") in new stack
-- Goto (assessment,809,1)
-- Executing [809@assessment:1] Answer("Local/809@from-queue-00010f28;2", "") in new stack
-- Local/809@from-queue-00010f28;1 answered SIP/M9023306077-00002863
-- Stopped music on hold on SIP/M9023306077-00002863


По логу понятно что он ругается на это
exten => _X.,n,GotoIf($["${DB(DND/${EXTEN})}" = "YES"]?busy)
Потому как ${DB(DND/${EXTEN})} равен "" путоте, в этот момент и выводит ошибку
В некоторых случаях ${DB(DND/${EXTEN})}" = "YES" ну и ошибки нет соответственно

Еще такая проблема ,бывает звонок идет сразу на
exten => _X.,n(answered),Goto(assessment,${EXTEN},1)
Немогу отловить момент, видимо когда нет операторов в очереди такое происходит

[Показать] Спойлер: "extensions_custom.conf"
[customer-survey-ivr]
exten => _X.,1,NoOp(---------- POST CALL SURVEY BEGINNING ---------------)
exten => _X.,n,NoOp(HINT STATUS - ${EXTENSION_STATE(${EXTEN})})
exten => _X.,n,NoOp(DND STATUS - ${DB(DND/${EXTEN})})
exten => _X.,n,NoOp(NUMBER - ${CDR(src)})
exten => _X.,n,NoOp(QUEUE - ${NODEST})
exten => _X.,n,NoOp(EXTEN - ${EXTEN})
exten => _X.,n,NoOp(OPERATOR CDR - ${CDR(dst)})
exten => _X.,n,NoOp(DEVICE_STATE ${EXTEN} - ${DEVICE_STATE(PJSIP/${EXTEN})})
exten => _X.,n,NoOp(---------- POST CALL SURVEY BEGINNING ---------------)
exten => _X.,n,GotoIf($["${DB(DND/${EXTEN})}" = "YES"]?busy)
exten => _X.,n,ExecIf($["${EXTENSION_STATE(${EXTEN})}"="NOT_INUSE"]?DIAL(PJSIP/${EXTEN},,trg))
exten => _X.,n,GotoIf($[${DIALSTATUS}=BUSY]?busy:answered)
exten => _X.,n(busy),Hangup()
exten => _X.,n(answered),Goto(assessment,${EXTEN},1)

[assessment]
exten => _X.,1,Answer
exten => _X.,n,Wait(1)
exten => _X.,n(skip),Set(IVR_MSG=en/beep)
exten => _X.,n(start),Set(TIMEOUT(digit)=1)
exten => _X.,n,Background(/var/lib/asterisk/sounds/ru/custom/ocenite-8khz,m)
exten => _X.,n,NoOp(---------- LOG LOG LOG ---------------)
exten => _X.,n,NoOp(OPERATOR CDR - ${CDR(dst)})
exten => _X.,n,NoOp(---------- LOG LOG LOG ---------------)
exten => _X.,n,WaitExten(5,)

Re: Оценка работы оператора

СообщениеДобавлено: 15 дек 2020, 12:20
ded
У вас не ${DB(DND/${EXTEN})} равен "" путоте, а вообще ключа DND/${EXTEN} в базе astdb нетуб когда даёт ошибку.
Можете проверить
asterisk -rx 'database show" | grep DND