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

Перевод подобранных звонков

Добавлено: 27 янв 2011, 11:07
shumiloff
Добрый день!

Подскажите пожалуйста, в чём может быть проблема.

1. Как надо:

Клиент звонит, попадает на менеджера. Менеджер в случае необходимости либо переводит вызов на другой телефон (внутренний или внешний - не важно), либо паркует его. Затем он может подобрать припаркованный вызов и продолжать разговор или перевести его снова на другой телефон.

2. Как есть:

Клиент совершает звонок, попадает на менеджера. Менеджер в случае необходимости переводит вызов на любой внутренний или внешний номер - работает.
Менеджер может припарковать вызов, а затем подобрать его через какое-то время и продолжать разговор - тоже работает.
Менеджер может перевести подобранный вызов на любой номер - не работает.

После того, как менеджер подобрал клиента, при нажатии # и затем последующем наборе номера, клиент и менеджер слышат тоновые DTFM сигналы, переадресации не происходит.

Для определённости положим, что нам приходит звонок только с сотового в контекст rtcom

Кусочек sip.conf:

Код: Выделить всё

[general]                                                                                                                                                                                                               
context=test                                                                                                                                                                       
bindaddr = 0.0.0.0                                                                                                                                                                 
srvlookup = yes                                                                                                                                                                    
allowguest=no                  ; Allow or reject guest calls (default is yes)                                                                                                      
allowoverlap=no                 ; Disable overlap dialing support. (Default is yes)                                                                                                
bindport=5060                   ; UDP Port to bind to (SIP standard port for unencrypted UDP                                                                                       
disallow=all                                ; Allow codecs in order of preference                                                                                                  
allow=g722                                                                                                                                                                         
allow=alaw                                                                                                                                                                         
allow=ulaw                                                                                                                                                                         
limitonpeers=yes                                               
language=en                    ; Default language setting for all users/peers                                                                                                      
dtmfmode = rfc2833             ; Set default dtmfmode for sending DTMF. Default: rfc2833  

[authentication]                                                                                                                                                                   
                                                                                                                                                                                   
[tn-rostelekom]                                                                                                                                                                    
type=friend                                                                                                                                                                        
nat=no                                                                                                                                                                             
host=********                                                                                                                                                                
disallow=all                                                                                                                                                                       
allow=alaw                                                                                                                                                                         
allow=ulaw                                                                                                                                                                         
context=rtcom

[sets](!)                                                                                                                                                                          
type=friend                                                                                                                                                                        
context=office                                                                                                                                                                     
host=dynamic                                                                                                                                                                       
allowtransfer=yes                                                                                                                                                                  
nat=yes
disallow=all                                                                                                                                                                       
allow=g722                                                                                                                                                                         
allow=alaw                                                                                                                                                                         
allow=ulaw 

[701](sets)                                                                                                                                                                        
username=701                                                                                                                                                                       
secret=passwordhere

queues.conf:

Код: Выделить всё

[general]                                                                                                                                                                          
persistentmembers = yes                                                                                                                                                            
keepstats = no                                                                                                                                                                     
autofill = yes                                                                                                                                                                     
monitor-type = MixMonitor                                                                                                           
                                                                                                                                                                                   
[cons]                                                                                                                                                                             
strategy=ringall                                                                                                                                                                                                      
member=SIP/701,1                                                                                                                                                                   
member=SIP/702,2                                                                                                                                                                   
member=SIP/703,3                                                                                                                                                                   
member=SIP/704,4                                                                                                                                                                   
;member=SIP/705,5
Кусочек extensions.conf:

Код: Выделить всё

[general]                                                                                                                                                                          
static=yes                                                                                                                                                                         
writeprotect=no                                                                                                                                                                    
clearglobalvars=no                                                                                                                                                                 
                                                                                                                                                                                   
[rtcom]                                                                                                                                                                            
exten => _ZXXXXXXXXXX,1,Set(fname=${STRFTIME(${EPOCH},,%Y.%m.%d-%H.%M.%S)}_${CALLERID(num)}-701.wav,,Tt)                                                                           
exten => _ZXXXXXXXXXX,n,noop("Start recording to "${fname})                                                                                                                        
exten => _ZXXXXXXXXXX,n,MixMonitor(/home/audio/${fname})                                                                                                                   
exten => _ZXXXXXXXXXX,n,Answer                                                                                                                                                     
exten => _ZXXXXXXXXXX,n,Wait(1)                                                                                                                                                    
exten => _ZXXXXXXXXXX,n,Queue(cons,t,,Tt)                                                                                                                                          
exten => _ZXXXXXXXXXX,n,Hangup

[office]                                                                                                                                                                           
                                                                                                                                                                                   
;Local                                                                                                                                                                             
exten => _7XX,1,NoOp(${EXTEN})                                                                                                                                                     
exten => _7XX,n,Set(fname=${STRFTIME(${EPOCH},,%Y-%m-%d_%H-%M-%S)}-${CALLERID(num)}-${EXTEN})                                                                                      
exten => _7XX,n,MixMonitor(/home/audio/${fname}.wav)                                                                                                                               
exten => _7XX,n,Dial(SIP/${EXTEN},,Tt)                                                                                                                                             
                                                                                                                                                                                   
;Parked                                                                                                                                                                            
                                                                                                                                                                                   
exten => _1XX,1,NoOp(${EXTEN})                                                                                                                                                     
exten => _1XX,n,Answer()                                                                                                                                                           
exten => _1XX,n,ParkedCall(${EXTEN},,Tt)                                                                                                                                           
                                                                                                                                                                                                                                                                                 
;Mobile                                                                                                                                                                            
exten => _89XXXXXXXXX,1,Set(fname=${STRFTIME(${EPOCH},,%Y-%m-%d_%H-%M-%S)}-${CALLERID(num)}-${EXTEN})                                                                              
exten => _89XXXXXXXXX,n,MixMonitor(/home/audio/${fname}.wav)                                                                                                                       
exten => _89XXXXXXXXX,n,Dial(SIP/tn-sipnet1/${EXTEN},120,Tt)                                                                                                                       
;exten => _89XXXXXXXXX,n,Dial(SIP/tn-sipnet2/${EXTEN},120,Tt)                                                                                                                      
exten => _89XXXXXXXXX,n,Hangup                                                                                                                                                     
exten => _79XXXXXXXXX,1,Set(fname=${STRFTIME(${EPOCH},,%Y-%m-%d_%H-%M-%S)}-${CALLERID(num)}-${EXTEN})                                                                              
exten => _79XXXXXXXXX,n,MixMonitor(/home/audio/${fname}.wav)                                                                                                                       
exten => _79XXXXXXXXX,n,Dial(SIP/tn-sipnet1/${EXTEN},120,Tt)                                                                                                                       
;exten => _79XXXXXXXXX,n,Dial(SIP/tn-sipnet2/${EXTEN},120,Tt)                                                                                                                      
exten => _79XXXXXXXXX,n,Hangup                                                                                                                                                     
exten => _+79XXXXXXXXX,1,Set(fname=${STRFTIME(${EPOCH},,%Y-%m-%d_%H-%M-%S)}-${CALLERID(num)}-${EXTEN})                                                                             
exten => _+79XXXXXXXXX,n,MixMonitor(/home/audio/${fname}.wav)                                                                                                                      
exten => _+79XXXXXXXXX,n,Dial(SIP/tn-sipnet1/${EXTEN},120,Tt)                                                                                                                      
;exten => _+79XXXXXXXXX,n,Dial(SIP/tn-sipnet2/${EXTEN},120,Tt)                                                                                                                     
exten => _+79XXXXXXXXX,n,Hangup                                
features.conf:

Код: Выделить всё

[general]                                                                                                                                                                          
parkext => 100                  ; What extension to dial to park                                                                                                                   
parkpos => 101-120              ; What extensions to park calls on. These needs to be                                                                                              
                                ; numeric, as Asterisk starts from the start position                                                                                              
                                ; and increments with one for the next parked call                                                                        
parkingtime => 180              ; Number of seconds a call can be parked for                                                                                                       
                                                                                                                                                                                   
context=parkedcalls                              
findslot => next
transferdigittimeout => 3
courtesytone = beep
xfersound = beep
xferfailsound = beeperr
pickupexten = *8
featuredigittimeout = 1000
atxfernoanswertimeout = 15

[featuremap]                                                                                                                                                                       
blindxfer => #          ; Blind transfer  (default is #) -- Make sure to set the T and/or t option in the Dial() or Queue() app call!                                              
disconnect => *0                ; Disconnect  (default is *) -- Make sure to set the H and/or h option in the Dial() or Queue() app call!                                          
automon => *1                   ; One Touch Record a.k.a. Touch Monitor -- Make sure to set the W and/or w option in the Dial() or Queue() app call!                               
atxfer => *2                    ; Attended transfer  -- Make sure to set the T and/or t option in the Dial() or Queue()  app call!                                                 
parkcall => #72

[parcedcalls]                                                                                                                                                                      
;context=> from                                                                                                                                                                    
parkpos=> 101-120                                                                                                                                                                  
findslot=> next 

Re: Перевод подобранных звонков

Добавлено: 27 янв 2011, 11:38
ded
Судя по конфигам, ваш звонок приходит с сотового в контекст rtcom в очередь. Пикапить из очереди - это ерунда какая-то, механизм queue как раз упрощает работу без пикапов. Есть специальные параметры сценариев очереди - кидать звонок наименее занятому например. Пикап всё нарушает в такой стратегии!
Если вам кажется лучше так работать, то проще изменить стратегию очереди, например ringall или прогрессивное серийное искание - первый гудок звонит 100,
второй - 100 и 101, третий - 100, 101 и 102.

Re: Перевод подобранных звонков

Добавлено: 27 янв 2011, 11:41
sorgchik
а не проще позвонить абоненту, которому необходимо перевести звонок и ему сказать, мол есть на парковке звонок для тебя, внутренний такой-то???
а еще проще в аську скинул и забыл :)

Re: Перевод подобранных звонков

Добавлено: 27 янв 2011, 11:55
shumiloff
ded писал(а):Судя по конфигам, ваш звонок приходит с сотового в контекст rtcom в очередь. Пикапить из очереди - это ерунда какая-то, механизм queue как раз упрощает работу без пикапов. Есть специальные параметры сценариев очереди - кидать звонок наименее занятому например. Пикап всё нарушает в такой стратегии!
Если вам кажется лучше так работать, то проще изменить стратегию очереди, например ringall или прогрессивное серийное искание - первый гудок звонит 100,
второй - 100 и 101, третий - 100, 101 и 102.
Да, звонок приходит в очередь. Но любой из очереди должен иметь возможность сказать звонящему клиенту "Подождите, я вас соединю с начальником Иван-Иванычем", затем позвонить Иван-Иванычу, спросить, будет ли он разговаривать с позвонившим и перевести на него. В принципе, это можно сделать трансфером самого Иван-Иваныча на запаркованный вызов, но это полумера. Трансферы должны работать всегда. ringall тут не подходит, потому что может возникнуть ситуация, когда нужно позвонившего абонента переадресовать на сотовый телефон или любой другой внешний.

Re: Перевод подобранных звонков

Добавлено: 27 янв 2011, 11:57
shumiloff
sorgchik писал(а):а не проще позвонить абоненту, которому необходимо перевести звонок и ему сказать, мол есть на парковке звонок для тебя, внутренний такой-то???
а еще проще в аську скинул и забыл :)
А если мне надо перевести запаркованный вызов на сотовый телефон? Вася, срочно вылетай из Германии, тут в оффисе для тебя припаркованный вызов, номер стопять. :D

Re: Перевод подобранных звонков

Добавлено: 27 янв 2011, 12:09
ded
Вопрос - зачем мой пост полностью процитирован?
shumiloff писал(а): Но любой из очереди должен иметь возможность сказать звонящему клиенту "Подождите, я вас соединю с начальником Иван-Иванычем", затем позвонить Иван-Иванычу, спросить, будет ли он разговаривать с позвонившим и перевести на него.
Для этого есть attended transfer (перевод с уведомлением). И если оператор очереди нормально принял звонок (без пикапа!) у него есть эта возможность.

Re: Перевод подобранных звонков

Добавлено: 27 янв 2011, 12:40
shumiloff
ded писал(а):Вопрос - зачем мой пост полностью процитирован?
Оверквочу. Исправлюсь.
если оператор очереди нормально принял звонок (без пикапа!) у него есть эта возможность.
Хорошо, приведу пример ситуации, когда необходимо переводить звонок, поднятый из холда.

//входящий звонок клиента
- Добрый день, меня зовут Василий Пупкин, мне нужен Иван Иваныч.
- Подождите минутку, я узнаю, свободен ли он.
//оператор переводит клиента в холд на номер скажем, 107
//пока клиент слушает имперский марш, оператор набирает номер Иван Иваныча
- Иван Иваныч, с вами хочет поговорить Василий Пупкин.
- Я занят, отправь его к лешему.
//оператор вешает трубку, связывается с Лешим
- Добрый день, с вами хочет поговорить Василий Пупкин.
- Хорошо, соедини.
//оператор вешает трубку, подбирает клиента из холда (107)
- Уважаемый Василий, спасибо за ожидание, Иван Иваныч к сожалению сейчас не сможет ответить, я могу перевести Вас на Лешего.
- Хорошо, будьте добры.
//оператор нажимает решёточку и отправляет звонок к лешему

Все счастливы, все танцуют и поют, занавес.

А в данный момент оператор не сможет отправить Васю к лешему, потому что после пикапа трансфер не работает. А аттендед трансфер, насколько я понимаю, не даст оператору возможности поставить Васю в известность, что вместо Иван Иваныча он сейчас будет говорить с лешим, а это как-то нехорошо. Именно поэтому хочется иметь возможность трансфера после пикапа. Если же Иван Иваныч сам согласился поговорить с Васей, то оператор просто переводит Иван Иваныча на номер 107.

Re: Перевод подобранных звонков

Добавлено: 27 янв 2011, 13:26
ded
shumiloff писал(а): потому что после пикапа трансфер не работает.
Пикап не нужен.
shumiloff писал(а): А аттендед трансфер, насколько я понимаю, не даст оператору возможности поставить Васю в известность, что вместо Иван Иваныча он сейчас будет говорить с лешим, а это как-то нехорошо.
Да ну? А если проверим?

Re: Перевод подобранных звонков

Добавлено: 01 фев 2011, 08:41
shumiloff
Каюсь, возможно плохо смотрел.