Есть задача, фиксировать время нахождения операторов в различных статусах (онлайн, обед и тд). Т.е. если сотрудник не может принимать звонки, он меняет статус, например на обед, и к нему звонки не идут. По сформировавшемуся в конце месяца отчету о времени нахождения в статусе "Онлайн", ему начисляется зп.
Смену статусов настроил, через специальные номера, сохраненные в адресную книгу:
| Код: |
| exten => 601,1,Answer() exten => 601,n,Wait(1) exten => 601,n,Set(CHAN=${CUT(CHANNEL,-,1)}) exten => 601,n,Set(DB(fop2state/${CHAN})=Online) exten => 601,n,Set(STAT=Online) exten => 601,n,UserEvent(FOP2ASTDB,Family: fop2state,Channel: ${CHAN},Value: Online) exten => 601,n,MYSQL(Connect connid localhost root pass asterisk) exten => 601,n,MYSQL(Query resultid ${connid} INSERT INTO `stats` SET `Date`='${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)}',`SIP`='${CHAN}',`Status`='${STAT}') exten => 601,n,MYSQL(Clear ${resultid}) exten => 601,n,MYSQL(Disconnect ${connid}) exten => 601,n,Playback(/var/lib/asterisk/sounds/1) exten => 601,n,HangUp() exten => 602,1,Answer() exten => 602,n,Wait(1) exten => 602,n,Set(CHAN=${CUT(CHANNEL,-,1)}) exten => 602,n,Set(DB(fop2state/${CHAN})=Personal Needs) exten => 602,n,Set(STAT=Personal Needs) exten => 602,n,UserEvent(FOP2ASTDB,Family: fop2state,Channel: ${CHAN},Value: Personal Needs) exten => 602,n,MYSQL(Connect connid localhost root pass asterisk) exten => 602,n,MYSQL(Query resultid ${connid} INSERT INTO `stats` SET `Date`='${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)}',`SIP`='${CHAN}',`Status`='${STAT}') exten => 602,n,MYSQL(Clear ${resultid}) exten => 602,n,MYSQL(Disconnect ${connid}) exten => 602,n,Playback(/var/lib/asterisk/sounds/2) exten => 602,n,HangUp() |
При входящем звонке в колл-центр, звонок направляется в очередь, в которой проверяется какой статус у оператора, и в зависимости от этого соединяется с ним или перекидывается на следующего в очереди
| Код: |
| [macro-fo] exten => s,1,Set(CHAN=${CUT(CHANNEL,-,1)}) exten => s,n,Set(STAT=${DB(fop2state/${CHAN})}) exten => s,n,GotoIf($[${STAT} = Online]?:s2,1) exten => s,n,GotoIf($[${LEN(${CDR(src)})} > 10]?:s1,1) exten => s,n,System(curl --connect-timeout 1 --retry 0 "http://192.168.1.70/Aster/FastOperator.asmx/MakeCall?User=${CALLERID(num)}&PhoneNumber=${CDR(src):2}") exten => s1,1,System(curl --connect-timeout 1 --retry 0 "http://192.168.1.70/Aster/FastOperator.asmx/MakeCall?User=${CALLERID(num)}&PhoneNumber=${CDR(src)}") exten => s2,1,HangUp() |
Но если оператор (используется софтфон Zoiper) снимает регистрацию, то звонок к нему не идет, оператор спокойно может покинуть рабочее место, не меняя статус.
Как можно сделать, чтоб при снятии регистрации менялся статус пользователя? Или как можно фиксировать снятие регистрации?
_________________
P4 3.0 + 1Gb CentOS 5.7 Aster 1.8.15.1
Не люблю gui-сборки: натуральный продукт вкуснее.
И еще: я ПРОФИ так как НЕ ЛЕНЮСЬ читать литературу.
Вот если бы при снятии регистрации выполнять RemoveQueueMember, но как?
| awsswa @ Вт Сен 11, 2012 17:31 писал(а): |
| не, надо при определенном колличестве неотвеченных выкидывать из очереди и ставить статус |
Так неотвеченных не будет, при снятой регистрации
_________________
P4 3.0 + 1Gb CentOS 5.7 Aster 1.8.15.1
Не люблю gui-сборки: натуральный продукт вкуснее.
И еще: я ПРОФИ так как НЕ ЛЕНЮСЬ читать литературу.
| Код: |
| exten => 601,1,Answer() exten => 601,n,Wait(1) exten => 601,n,Set(CHAN=${CUT(CHANNEL,-,1)}) exten => 601,n,Set(DB(fop2state/${CHAN})=Online) exten => 601,n,Set(STAT=Online) exten => 601,n,UserEvent(FOP2ASTDB,Family: fop2state,Channel: ${CHAN},Value: Online) exten => 601,n,AddQueueMember(cc) exten => 601,n,MYSQL(Connect connid localhost root pass asterisk) exten => 601,n,MYSQL(Query resultid ${connid} INSERT INTO `stats` SET `Date`='${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)}',`SIP`='${CHAN}',`Status`='${STAT}') exten => 601,n,MYSQL(Clear ${resultid}) exten => 601,n,MYSQL(Disconnect ${connid}) exten => 601,n,Playback(/var/lib/asterisk/sounds/1) exten => 601,n,HangUp() exten => 602,1,Answer() exten => 602,n,Wait(1) exten => 602,n,Set(CHAN=${CUT(CHANNEL,-,1)}) exten => 602,n,Set(DB(fop2state/${CHAN})=Personal Needs) exten => 602,n,Set(STAT=Personal Needs) exten => 602,n,UserEvent(FOP2ASTDB,Family: fop2state,Channel: ${CHAN},Value: Personal Needs) exten => 602,n,RemoveQueueMember(cc) exten => 602,n,MYSQL(Connect connid localhost root pass asterisk) exten => 602,n,MYSQL(Query resultid ${connid} INSERT INTO `stats` SET `Date`='${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)}',`SIP`='${CHAN}',`Status`='${STAT}') exten => 602,n,MYSQL(Clear ${resultid}) exten => 602,n,MYSQL(Disconnect ${connid}) exten => 602,n,Playback(/var/lib/asterisk/sounds/2) exten => 602,n,HangUp() |
Я хочу понять, как фиксировать снятие регистрации оператором, в тот момент когда оператор уже добавил себя в очередь
Честно говоря, не могу понять, как queue_log может мне в этом помощь?
Теперь понял. Негодяи остаются в очереди, но при этом отключают софтфоны? В данном случае, думаю, можно использовать локальные каналы и проверять ${DIALSTATUS}.
Added after 1 hours 23 minutes:
Подумал, не получится ${DIALSTATUS} напрямую из астериска проверять, придется скрипт ваять.
Одно радует знаю в какую сторону идти
Далее есть функции для проверки наличия дайлплана.
Если нужно конкретно обрабатывать событие сразу после регистрации или ее потери, тогда надо писать обработчик на астериск менеджер.