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

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

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

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

skynetyar
Сообщения: 439
Зарегистрирован: 18 авг 2016, 13:25

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

Сообщение 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() ?
Всё знают и всё понимают только дураки да шарлатаны.(с)А.П Чехов.
Аватара пользователя
Kroteg
Сообщения: 200
Зарегистрирован: 11 янв 2018, 13:51

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

Сообщение Kroteg »

А никакой CallWaiting не включен?
ну и покажи queue show <num> как отображаются операторы
и хинты нормально отрабатываются?
Изображение
skynetyar
Сообщения: 439
Зарегистрирован: 18 авг 2016, 13:25

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

Сообщение skynetyar »

Спасибо за ответ!
Call Waiting на всех номерах отключены,глобально тоже отключил при создании новых.
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: 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]
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
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]
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
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})})

По логу получается так
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
-- 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)
Всё знают и всё понимают только дураки да шарлатаны.(с)А.П Чехов.
skynetyar
Сообщения: 439
Зарегистрирован: 18 авг 2016, 13:25

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

Сообщение skynetyar »

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

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

Прошу поправить если не так делаю..
Всё знают и всё понимают только дураки да шарлатаны.(с)А.П Чехов.
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение 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 ?
Аватара пользователя
Kroteg
Сообщения: 200
Зарегистрирован: 11 янв 2018, 13:51

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

Сообщение Kroteg »

в случае с PJSIP может попробовать DEVICE_STATE(PJSIP/${EXTEN})
ну и естественно поизучать какие возможны ответы.
INUSE и тд...
Изображение
skynetyar
Сообщения: 439
Зарегистрирован: 18 авг 2016, 13:25

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

Сообщение skynetyar »

ded писал(а):callcounters = yes
Ненашел данный параметр в FreePBX ,или его можно внести как дополнительный параметр?
Kroteg писал(а):DEVICE_STATE(PJSIP/${EXTEN})
${EXTENSION_STATE(${EXTEN})} тоже прекрасно работает..

Пока что проблему решил так как описал ниже, вроде все гладко...
Всё знают и всё понимают только дураки да шарлатаны.(с)А.П Чехов.
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение ded »

Искать так:
OK, Google => asterisk callcounters = yes
skynetyar
Сообщения: 439
Зарегистрирован: 18 авг 2016, 13:25

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

Сообщение 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
^
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: лог
-- 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)
Немогу отловить момент, видимо когда нет операторов в очереди такое происходит
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: 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,)
Всё знают и всё понимают только дураки да шарлатаны.(с)А.П Чехов.
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение ded »

У вас не ${DB(DND/${EXTEN})} равен "" путоте, а вообще ключа DND/${EXTEN} в базе astdb нетуб когда даёт ошибку.
Можете проверить
asterisk -rx 'database show" | grep DND
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH