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

Dial и переменные после Queue

Проблемы Asterisk без вэб-оболочек и их решения

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

Ответить
andy77
Сообщения: 4
Зарегистрирован: 28 апр 2011, 12:28

Dial и переменные после Queue

Сообщение andy77 »

Добрый день!
Возникла следующая проблема. Логика звонка следующая:
Клиент звонит на определенный номер, ему предлагают авторизоваться при помощи набора кода с клавиатуры. После ввода с клавиатуры пароля, в базе проверяется соответствие телефона клиента и пароля. База возвращает несколько переменных. Если клиент есть то возвращается его индетификатор (${ret_val}) и данные о том отплавляет он обычно факсы или нет (${fax_val}). В случае отсутствия клиента в базе рет_вал возвращается 0 или 3 если какая та ошибка и он пихается в очередь к операторам. Если факс_вал равен 1 то клиенту предлагается отправить факс. во всех других случаях в очередь. После отправки факса, записываем переменную в базу и тоже в очередь. После того как он отстоит в очереди и прежде чем вызвать оператора мы проверяем отправлял ли он факс. Если да, то резервируем оператора(ставим на паузу в очереди или вообще выводим из очереди, не важно), печатаем факс, говорим клиетну, что сейчас оператор обрабатывает его факс и паркуем клиента. Оператор в это время получает факс (печатает, электронка, тоже не важно), и снимает после того как готов говорить с клиентом его с парковки и начинает душевную беседу.
Если нет факса, то начинается беседа, но оператор может в любой момент переключить клиента на факс. При переключении оператор паркуется. Клиент отправив факс, забирает с парковки своего оператора, а сам слышит фразу о том что его факс обрабатывается оператором и ставиться на парковку. Оператор при готовности, снимает клиента с парковки.
По хенгапу оператор опять ставиться в очередь, и печатается факс, если он не был распечатан.
В принципе всё :-)
чуть короче диалплана получилось :-)
А вот собственно сам диалплан

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

;==========================================================================================================================================================
;
;                               Основной алгоритм
;
;==========================================================================================================================================================

exten => Remzova,1,NoOp(Звонок с номера 2697-550)
same => n,Set(_phone_num=${CALLERID(num)})
same => n,Set(__ret_val=0)
same => n,Set(__fax_val=0)
;same => n,Answer()
same => n,PlayBack(_116,noanswer)
same => n,Set(popytka=1)
same => n,Goto(read)
same => n(r0),Gotoif($[${popytka}>3]?rv1)
same => n,Read(pass_val,_18,5,,1,8)
same => n,Goto(set)
same => n(read),Read(pass_val,_17,5,,3,5)
same => n(set),Set(popytka=[${popytka}+1])
same => n(agi),AGI(agi://localhost/stored_procedure_call.agi,Asterisk_identification,${pass_val},${phone_num},out,ret_val,fax_val)
same => n,NoOp(${ret_val}, ${fax_val})
same => n,GotoIf($[${ret_val} = 0]?r0)
same => n,GotoIf($[${ret_val} = 3]?rv1)
same => n,Goto(fax)
same => n(rv1),Set(__ret_val=0000000003)
same => n(r1),PlayBack(_19)
same => n(q1),Set(CALLERID(name)=${ret_val}${fax_val})
same => n,Queue(Remzova,tTkK)
same => n,Goto(call_from_queue_remzova,,p0)
same => n,NoOp(выход из очереди Remzova)
same => n,HangUp()
same => n(fax),GotoIf($[${fax_val} = 1]?:q1)
same => n,Read(you_want_to_send_a_fax,_11,1,,1,10)
same => n,GotoIf($[${you_want_to_send_a_fax} = 1]?:q1)
same => n,Macro(fax_remzova,0)
same => n,PlayBack(_14)
same => n,Goto(r1)

;exten => h,1,NoOp(связь прекращена по какой либо причине)
;exten => h,n,System(/usr/bin/lp ${fax_remzova_name}.pdf)

;==========================================================================================================================================================
;
;                               Звонки из очереди Remzova
;
;==========================================================================================================================================================

[call_from_queue_remzova]
exten => _[1-9]XX,1,NoOp(Звонок из очереди Remzova)
same => n,NoOp(${CALLERID(name)})
same => n,Set(GOTO_ON_BLINDXFR=call_from_queue_remzova,${EXTEN},p0)
same => n,Set(__fax_val=${CALLERID(name):-1})
same => n,Set(__ret_val=${CALLERID(name):0:10})
same => n,Set(__TRANSFER_CONTEXT=fax_from_queue_remzova)
same => n,Set(__PARKINGEXTEN=9${EXTEN})
same => n,Set(__CALLINGPRES=${ret_val}${fax_val}${PARKINGEXTEN})
same => n,Set(__operator_line=Local/${EXTEN}@call_from_queue_remzova)
same => n,RemoveQueueMember(Remzova,${operator_line})
same => n,Macro(channel,${EXTEN})
same => n(echo),System(echo ${ret_val} > /home/Remzova/DAHDI_${EXTEN})
same => n,GotoIf($[${fax_val} = 2]?:agent)
same => n,Playback(_117)
same => n(p0),NoOp(${DIALSTATUS})
same => n,Set(__PARKINGEXTEN=9${EXTEN})
same => n,Park(36000000,,,,s)
same => n(s1),HangUp(телефон занят или не доступен)
same => n(agent),Dial(${channel},60,tTg)
;same => n,PauseQueueMember(Remzova,${operator_line})
same => n,Goto(p0)

;==========================================================================================================================================================
;
;                               Возможность оператору переключить на факс клиетна во время разговора
;
;==========================================================================================================================================================
[fax_from_queue_remzova]
exten => 0,1,NoOp(Переключение оператором на факс)
same => n,NoOp(${CALLINGPRES})
same => n,Set(__fax_val=${CALLINGPRES:10:1})
same => n,Set(__ret_val=${CALLINGPRES:0:10})
same => n,Set(__PARKINGEXTEN=${CALLINGPRES:-4})
same => n,Macro(fax_remzova,${ret_val})
same => n,System(/usr/bin/lp ${fax_remzova_name}.pdf)
same => n,Set(__print_fax = 1)
same => n,NoOp(${PARKINGEXTEN},${fax_val},${ret_val})
same => n,PlayBack(_117)
;same => n,NoOp(${channel})
;same => n,Dial(${channel},1)
;same => n,Park(120,,,,s)
;same => n(agent),Dial(${channel},60,tT)
same => n,ParkedCall(${PARKINGEXTEN})

exten => h,1,NoOp(проверка не забыли ли распечатать факс и снятие оператора с паузы в очереди)
exten => h,n,GotoIf($[${print_fax} = 1]?h1)
exten => h,n,System(/usr/bin/lp ${fax_remzova_name}.pdf)
exten => h,n(h1),NoOp(факса либо не было либо он напечатан)
exten => h,n,AddQueueMember(Remzova,${operator_line})
exten => h,n,NoOp(оператор снят с паузы)

;==========================================================================================================================================================
;
;                               Макрос оперделения линии DAHDI оператора по внутреннему номеру
;
;==========================================================================================================================================================


[macro-channel]
exten => s,1,NoOp(Макрос определение канала DAHDI по EXTEN)
same => n,GotoIf($[${ARG1} = 260]?D144)
same => n,GotoIf($[${ARG1} = 261]?D145)
same => n,GotoIf($[${ARG1} = 503]?D503)
same => n,GotoIf($[${ARG1} = 512]?D512)
same => n,HangUp(Какая та ошибка)
same => n(D144),Set(__channel=DAHDI/144)
same => n,MacroExit()
same => n(D145),Set(__channel=DAHDI/145)
same => n,MacroExit()
same => n(D503),Set(__channel=DAHDI/130)
same => n,MacroExit()
same => n(D512),Set(__channel=DAHDI/125)
same => n,MacroExit()

;==========================================================================================================================================================
;
;                               Макрос прием факса
;
;==========================================================================================================================================================

[macro-fax_remzova]
exten => s,1,NoOp(Макрос приема факса платного угла)
same => n,NoOp(${TRANSFER_CONTEXT},${PARKINGEXTEN},${channel},${fax_val},${ret_val},${CALLERID(name)})
same => n,Set(__fax_remzova_name=/home/FAX_Remzova/${STRFTIME(${EPOCH},,%Y)}/${STRFTIME(${EPOCH},,%m)}/${STRFTIME(${EPOCH},,%d)}/${ARG1})
same => n,ReceiveFAX(${filename}.tif)
same => n,System(/usr/bin/tiff2pdf ${filename}.tif -o ${filename}.pdf)
same => n,Set(__ret_fax_name=${ARG1}.pdf)
same => n,GotoIf($[${ARG1} =! 0 & ${ARG1} =! 3]?:f1)
same => n,AGI(agi://localhost/stored_procedure_call.agi,Asterisk_write_fax,${ARG1},${ret_fax_name},out,write_val)
same => n(f1),PlayBack(_13)
same => n,MacroExit()
А проблем собственно две.
1. Все переменные которые мы назначаем до постановки клиента в очередь, при постановки теряются. Это решилось передачей всех необходимых параметров через переменную ${CALLERID(name)}. Но после её переназначения при выходи из очереди она не изменяется почему та. То есть остается ровно такой какая была до очереди. Это не удобно.
2. При выполнение Dial как только оператор подымает трубку срабатывает экстеншен h. Собственно поэтому он и был убран в другой контекст. И после того как оператор переключает клиента на факс, сам он сбрасывается, хотя по идее должен парковаться. Уже неделю бьюсь над этим. Если кто может, подскажите пожалуйста, куда копать. Спасибо.

P.S. У меня есть другой контекст, где в принципе всё это реализовано и работает, но там нет Queue. Вот он.

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

;========================================================================================================================================================
;
;                                       Прозвон клиентов из формса
;
;=========================================================================================================================================================


exten => s,1,Set(_PARKINGEXTEN=${parkn})
;exten => s,2,Dial(SIP/now/${nomer_val},30,tT)
;same => n,Goto(asteroid,${nomer_val},1)
same => n,Set(CALLERID(all)=2697551)
same => n,Dial(DAHDI/g1/${nomer_val},30,tT)
same => n,NoOp(${DIALSTATUS})
same => n,GotoIf($[${DIALSTATUS} = ANSWER]?:s1)
same => n,Park(36000000,,,,s)
same => n(s1),HangUp(телефон занят или не доступен)


exten => 0,1,NoOp(${PARKINGEXTEN})
same => n,Set(popytka=0)
;same => n,Set(ret_val=5)
same => n,Goto(v1)
same => n(v0),Set(popytka=[${popytka}+1])
same => n,Gotoif($[${popytka}>3]?v3)
same => n(v1),Read(pass_val,_110,5,,3,5)
same => n,NoOp(${PARKINGEXTEN})
same => n,NoOp(${nomer_val})
same => n,NoOp(${pass_val})
same => n,AGI(agi://localhost/stored_procedure_call.agi,Asterisk_control_password,${pass_val},${nomer_val},out,ret_val)
same => n,NoOp(${nomer_val})
same => n,NoOp(${pass_val})
same => n,Gotoif($[${ret_val}=1]?v2)
same => n,PlayBack(_111)
same => n,Goto(v0)
same => n(v2),PlayBack(_112&_113)
same => n(v3),ParkedCall(${PARKINGEXTEN})
Аватара пользователя
zzuz
Сообщения: 1658
Зарегистрирован: 21 сен 2010, 13:33
Контактная информация:

Re: Dial и переменные после Queue

Сообщение zzuz »

1."через переменную ${CALLERID(name)}" - сильно конечно. Хотите сказать что
[call_from_queue_remzova]
same => n,NoOp(Noop ${fax_val} ${ret_val})

вернет пустые строки?

2.После ReceiveFAX(${filename}.tif) разве не Hangup
и что parkedcalls show говорит , когда "оператор должен парковаться"?
Линия24 - Системы Массового Телефонного Обслуживания
andy77
Сообщения: 4
Зарегистрирован: 28 апр 2011, 12:28

Re: Dial и переменные после Queue

Сообщение andy77 »

1. Да. Как не печально, но возвращает пустые.

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

[Apr 28 13:35:12] VERBOSE[686] pbx.c:     -- Executing [Remzova@platnye_in:1] NoOp("DAHDI/4-1", "Звонок с номера 2697-550") in new stack
[Apr 28 13:35:12] VERBOSE[686] pbx.c:     -- Executing [Remzova@platnye_in:2] Set("DAHDI/4-1", "_phone_num=4732697688") in new stack
[Apr 28 13:35:12] VERBOSE[686] pbx.c:     -- Executing [Remzova@platnye_in:3] Set("DAHDI/4-1", "__ret_val=0") in new stack
[Apr 28 13:35:12] VERBOSE[686] pbx.c:     -- Executing [Remzova@platnye_in:4] Set("DAHDI/4-1", "__fax_val=0") in new stack
[Apr 28 13:35:12] VERBOSE[686] pbx.c:     -- Executing [Remzova@platnye_in:5] Playback("DAHDI/4-1", "_116,noanswer") in new stack
[Apr 28 13:35:12] VERBOSE[686] file.c:     -- <DAHDI/4-1> Playing '_116.slin' (language 'ru')
[Apr 28 13:35:15] VERBOSE[686] pbx.c:     -- Executing [Remzova@platnye_in:6] Set("DAHDI/4-1", "popytka=1") in new stack
[Apr 28 13:35:15] VERBOSE[686] pbx.c:     -- Executing [Remzova@platnye_in:7] Goto("DAHDI/4-1", "read") in new stack
[Apr 28 13:35:15] VERBOSE[686] pbx.c:     -- Goto (platnye_in,Remzova,11)
[Apr 28 13:35:15] VERBOSE[686] pbx.c:     -- Executing [Remzova@platnye_in:11] Read("DAHDI/4-1", "pass_val,_17,5,,3,5") in new stack
[Apr 28 13:35:15] VERBOSE[686] app_read.c:     -- Accepting a maximum of 5 digits.
[Apr 28 13:35:15] VERBOSE[686] file.c:     -- <DAHDI/4-1> Playing '_17.slin' (language 'ru')
[Apr 28 13:35:15] VERBOSE[684] app_dial.c:     -- DAHDI/1-1 answered DAHDI/128-1
[Apr 28 13:35:22] VERBOSE[686] app_read.c:     -- User entered '12345'
[Apr 28 13:35:22] VERBOSE[686] pbx.c:     -- Executing [Remzova@platnye_in:12] Set("DAHDI/4-1", "popytka=[1+1]") in new stack
[Apr 28 13:35:22] VERBOSE[686] pbx.c:     -- Executing [Remzova@platnye_in:13] AGI("DAHDI/4-1", "agi://localhost/stored_procedure_call.agi,Asterisk_identifi$
[Apr 28 13:35:22] VERBOSE[686] res_agi.c:     -- agi://localhost/stored_procedure_call.agi,Asterisk_identification,12345,4732697688,out,ret_val,fax_val: [IN$
[Apr 28 13:35:22] VERBOSE[686] res_agi.c:     -- agi://localhost/stored_procedure_call.agi,Asterisk_identification,12345,4732697688,out,ret_val,fax_val: [IN$
[Apr 28 13:35:22] VERBOSE[686] res_agi.c:     -- agi://localhost/stored_procedure_call.agi,Asterisk_identification,12345,4732697688,out,ret_val,fax_val: [IN$
[Apr 28 13:35:22] VERBOSE[686] res_agi.c:     -- <DAHDI/4-1>AGI Script agi://localhost/stored_procedure_call.agi completed, returning 0
[Apr 28 13:35:22] VERBOSE[686] pbx.c:     -- Executing [Remzova@platnye_in:14] NoOp("DAHDI/4-1", "0000000012, 1") in new stack
[Apr 28 13:35:22] VERBOSE[686] pbx.c:     -- Executing [Remzova@platnye_in:15] GotoIf("DAHDI/4-1", "0?r0") in new stack
[Apr 28 13:35:22] VERBOSE[686] pbx.c:     -- Executing [Remzova@platnye_in:16] GotoIf("DAHDI/4-1", "0?rv1") in new stack
[Apr 28 13:35:22] VERBOSE[686] pbx.c:     -- Executing [Remzova@platnye_in:17] Goto("DAHDI/4-1", "fax") in new stack
[Apr 28 13:35:22] VERBOSE[686] pbx.c:     -- Goto (platnye_in,Remzova,25)
[Apr 28 13:35:22] VERBOSE[686] pbx.c:     -- Executing [Remzova@platnye_in:25] GotoIf("DAHDI/4-1", "1?:q1") in new stack
[Apr 28 13:35:22] VERBOSE[686] pbx.c:     -- Executing [Remzova@platnye_in:26] Read("DAHDI/4-1", "you_want_to_send_a_fax,_11,1,,1,10") in new stack
[Apr 28 13:35:22] VERBOSE[686] app_read.c:     -- Accepting a maximum of 1 digits.
[Apr 28 13:35:22] VERBOSE[686] file.c:     -- <DAHDI/4-1> Playing '_11.slin' (language 'ru')
[Apr 28 13:35:25] VERBOSE[686] pbx.c:     -- Executing [Remzova@platnye_in:27] GotoIf("DAHDI/4-1", "0?:q1") in new stack
[Apr 28 13:35:25] VERBOSE[686] pbx.c:     -- Goto (platnye_in,Remzova,20)
[Apr 28 13:35:25] VERBOSE[686] pbx.c:     -- Executing [Remzova@platnye_in:20] Set("DAHDI/4-1", "CALLERID(name)=00000000121") in new stack
[Apr 28 13:35:25] VERBOSE[686] pbx.c:     -- Executing [Remzova@platnye_in:21] Queue("DAHDI/4-1", "Remzova,tTkK") in new stack
[Apr 28 13:35:25] VERBOSE[686] res_musiconhold.c:     -- Started music on hold, class 'default', on DAHDI/4-1
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [512@call_from_queue_remzova:1] NoOp("Local/512@call_from_queue_remzova-2dad;2", "Звонок из очереди R$
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [512@call_from_queue_remzova:2] NoOp("Local/512@call_from_queue_remzova-2dad;2", "Noop  ") in new sta$
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [512@call_from_queue_remzova:3] NoOp("Local/512@call_from_queue_remzova-2dad;2", "00000000121") in ne$
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [512@call_from_queue_remzova:4] Set("Local/512@call_from_queue_remzova-2dad;2", "GOTO_ON_BLINDXFR=cal$
[Apr 28 13:35:25] WARNING[689] pbx.c: MSet: ignoring entry '512' with no '=' (in 512@call_from_queue_remzova:4
[Apr 28 13:35:25] WARNING[689] pbx.c: MSet: ignoring entry 'p0' with no '=' (in 512@call_from_queue_remzova:4
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [512@call_from_queue_remzova:5] Set("Local/512@call_from_queue_remzova-2dad;2", "__fax_val=1") in new$
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [512@call_from_queue_remzova:6] Set("Local/512@call_from_queue_remzova-2dad;2", "__ret_val=0000000012$
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [512@call_from_queue_remzova:7] Set("Local/512@call_from_queue_remzova-2dad;2", "__TRANSFER_CONTEXT=f$
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [512@call_from_queue_remzova:8] Set("Local/512@call_from_queue_remzova-2dad;2", "__PARKINGEXTEN=9512"$
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [512@call_from_queue_remzova:9] Set("Local/512@call_from_queue_remzova-2dad;2", "__CALLINGPRES=000000$
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [512@call_from_queue_remzova:10] Set("Local/512@call_from_queue_remzova-2dad;2", "__operator_line=Loc$
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [512@call_from_queue_remzova:11] RemoveQueueMember("Local/512@call_from_queue_remzova-2dad;2", "Remzo$
[Apr 28 13:35:25] NOTICE[689] app_queue.c: Removed interface 'Local/512@call_from_queue_remzova' from queue 'Remzova'
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [512@call_from_queue_remzova:12] Macro("Local/512@call_from_queue_remzova-2dad;2", "channel,512") in $
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [s@macro-channel:1] NoOp("Local/512@call_from_queue_remzova-2dad;2", "Макрос определение канала DAHDI$
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [s@macro-channel:2] GotoIf("Local/512@call_from_queue_remzova-2dad;2", "0?D144") in new stack
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [s@macro-channel:3] GotoIf("Local/512@call_from_queue_remzova-2dad;2", "0?D145") in new stack
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [s@macro-channel:4] GotoIf("Local/512@call_from_queue_remzova-2dad;2", "0?D503") in new stack
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [s@macro-channel:5] GotoIf("Local/512@call_from_queue_remzova-2dad;2", "1?D512") in new stack
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Goto (macro-channel,s,13)
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [s@macro-channel:13] Set("Local/512@call_from_queue_remzova-2dad;2", "__channel=DAHDI/125") in new st$
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [s@macro-channel:14] MacroExit("Local/512@call_from_queue_remzova-2dad;2", "") in new stack
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [512@call_from_queue_remzova:13] System("Local/512@call_from_queue_remzova-2dad;2", "echo 0000000012 $
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [512@call_from_queue_remzova:14] GotoIf("Local/512@call_from_queue_remzova-2dad;2", "0?:agent") in ne$
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Goto (call_from_queue_remzova,512,20)
[Apr 28 13:35:25] VERBOSE[689] pbx.c:     -- Executing [512@call_from_queue_remzova:20] Dial("Local/512@call_from_queue_remzova-2dad;2", "DAHDI/125,60,tTg")$
[Apr 28 13:35:25] VERBOSE[689] app_dial.c:     -- Called 125
[Apr 28 13:35:25] VERBOSE[689] app_dial.c:     -- DAHDI/125-1 is ringing
[Apr 28 13:35:25] VERBOSE[686] app_queue.c:     -- Local/512@call_from_queue_remzova-2dad;1 is ringing
[Apr 28 13:35:26] VERBOSE[689] app_dial.c:     -- DAHDI/125-1 is ringing
[Apr 28 13:35:28] VERBOSE[676] chan_dahdi.c:     -- Hungup 'DAHDI/34-1'
[Apr 28 13:35:28] VERBOSE[676] pbx.c:   == Spawn extension (asteroid, 89204085771, 3) exited non-zero on 'SIP/7006-000000d5'
[Apr 28 13:35:28] VERBOSE[677] app_mixmonitor.c:   == MixMonitor close filestream
[Apr 28 13:35:28] VERBOSE[677] app_mixmonitor.c:   == End MixMonitor Recording SIP/7006-000000d5
[Apr 28 13:35:29] VERBOSE[689] app_dial.c:     -- DAHDI/125-1 answered Local/512@call_from_queue_remzova-2dad;2
[Apr 28 13:35:29] VERBOSE[686] app_queue.c:     -- Local/512@call_from_queue_remzova-2dad;1 answered DAHDI/4-1
[Apr 28 13:35:29] VERBOSE[686] res_musiconhold.c:     -- Stopped music on hold on DAHDI/4-1
[Apr 28 13:35:29] VERBOSE[691] app_mixmonitor.c:   == Begin MixMonitor Recording DAHDI/4-1
[Apr 28 13:35:29] VERBOSE[689] pbx.c:   == Spawn extension (call_from_queue_remzova, 512, 20) exited non-zero on 'Local/512@call_from_queue_remzova-2dad;2'
[Apr 28 13:35:36] VERBOSE[686] res_musiconhold.c:     -- Started music on hold, class 'default', on DAHDI/4-1
[Apr 28 13:35:36] VERBOSE[686] file.c:     -- <DAHDI/125-1> Playing 'pbx-transfer.alaw' (language 'ru')
[Apr 28 13:35:40] VERBOSE[686] res_musiconhold.c:     -- Stopped music on hold on DAHDI/4-1
[Apr 28 13:35:40] DEBUG[686] features.c: transferer=DAHDI/125-1; transferee=DAHDI/4-1; lastapp=; lastdata=; chan=DAHDI/125-1; dstchan=
[Apr 28 13:35:40] DEBUG[686] features.c: TRANSFEREE; lastapp=Queue; lastdata=Remzova,tTkK, chan=DAHDI/4-1; dstchan=Local/512@call_from_queue_remzova-2dad;1
[Apr 28 13:35:40] DEBUG[686] features.c: transferer_real_context=fax_from_queue_remzova; xferto=0
[Apr 28 13:35:40] DEBUG[686] features.c: ABOUT TO AST_ASYNC_GOTO, have a pbx... set HANGUP_DONT on chan=DAHDI/4-1
[Apr 28 13:35:40] VERBOSE[686] chan_dahdi.c:     -- Hungup 'DAHDI/125-1'
[Apr 28 13:35:40] VERBOSE[686] pbx.c:     -- Executing [0@fax_from_queue_remzova:1] NoOp("DAHDI/4-1", "Переключение оператором на факс") in new stack
[Apr 28 13:35:40] VERBOSE[686] pbx.c:     -- Executing [0@fax_from_queue_remzova:2] NoOp("DAHDI/4-1", "3") in new stack
[Apr 28 13:35:40] VERBOSE[686] pbx.c:     -- Executing [0@fax_from_queue_remzova:3] Set("DAHDI/4-1", "__fax_val=") in new stack
[Apr 28 13:35:40] VERBOSE[686] pbx.c:     -- Executing [0@fax_from_queue_remzova:4] Set("DAHDI/4-1", "__ret_val=3") in new stack
[Apr 28 13:35:40] VERBOSE[686] pbx.c:     -- Executing [0@fax_from_queue_remzova:5] Set("DAHDI/4-1", "__PARKINGEXTEN=3") in new stack
[Apr 28 13:35:40] VERBOSE[686] pbx.c:     -- Executing [0@fax_from_queue_remzova:6] Macro("DAHDI/4-1", "fax_remzova,3") in new stack
[Apr 28 13:35:40] VERBOSE[686] pbx.c:     -- Executing [s@macro-fax_remzova:1] NoOp("DAHDI/4-1", "Макрос приема факса платного угла") in new stack
[Apr 28 13:35:40] VERBOSE[686] pbx.c:     -- Executing [s@macro-fax_remzova:2] NoOp("DAHDI/4-1", "from-internal-xfer,3,,,3,00000000121") in new stack
[Apr 28 13:35:40] VERBOSE[686] pbx.c:     -- Executing [s@macro-fax_remzova:3] Set("DAHDI/4-1", "__fax_remzova_name=/home/FAX_Remzova/2011/04/28/3") in new $
[Apr 28 13:35:40] VERBOSE[686] pbx.c:     -- Executing [s@macro-fax_remzova:4] ReceiveFAX("DAHDI/4-1", ".tif") in new stack
[Apr 28 13:35:40] VERBOSE[686] res_fax.c:     -- Channel 'DAHDI/4-1' receiving FAX '.tif'
[Apr 28 13:35:40] VERBOSE[686] res_fax_digium.c:     -- Channel 'DAHDI/4-1' FAX session '6' started
[Apr 28 13:35:49] VERBOSE[685] app_mixmonitor.c:   == MixMonitor close filestream
[Apr 28 13:35:49] VERBOSE[685] app_mixmonitor.c:   == End MixMonitor Recording DAHDI/128-1
[Apr 28 13:35:49] VERBOSE[29518] chan_dahdi.c:     -- Channel 0/4, span 1 got hangup request, cause 16
[Apr 28 13:35:49] NOTICE[686] res_fax.c: Channel 'DAHDI/4-1' did not return a frame; probably hung up.
[Apr 28 13:35:59] ERROR[686] res_fax.c: channel 'DAHDI/4-1' FAX session '6' failure, reason: 'fax session timed-out' (TIMEOUT)
[Apr 28 13:35:59] VERBOSE[686] app_macro.c:   == Spawn extension (macro-fax_remzova, s, 4) exited non-zero on 'DAHDI/4-1' in macro 'fax_remzova'
[Apr 28 13:35:59] VERBOSE[686] pbx.c:   == Spawn extension (fax_from_queue_remzova, 0, 6) exited non-zero on 'DAHDI/4-1'
[Apr 28 13:35:59] VERBOSE[686] pbx.c:     -- Executing [h@fax_from_queue_remzova:1] NoOp("DAHDI/4-1", "проверка не забыли ли распечатать факс и снятие опера$
[Apr 28 13:35:59] WARNING[686] ast_expr2.fl: ast_yyerror():  syntax error: syntax error, unexpected '=', expecting $end; Input:
 = 1
 ^
[Apr 28 13:35:59] WARNING[686] ast_expr2.fl: If you have questions, please refer to doc/tex/channelvariables.tex.
[Apr 28 13:35:59] VERBOSE[686] pbx.c:     -- Executing [h@fax_from_queue_remzova:2] GotoIf("DAHDI/4-1", "?h1") in new stack
[Apr 28 13:35:59] VERBOSE[686] pbx.c:     -- Executing [h@fax_from_queue_remzova:3] System("DAHDI/4-1", "/usr/bin/lp /home/FAX_Remzova/2011/04/28/3.pdf") in$
[Apr 28 13:35:59] VERBOSE[686] pbx.c:     -- Executing [h@fax_from_queue_remzova:4] NoOp("DAHDI/4-1", "факса либо не было либо он напечатан") in new stack
[Apr 28 13:35:59] VERBOSE[686] pbx.c:     -- Executing [h@fax_from_queue_remzova:5] AddQueueMember("DAHDI/4-1", "Remzova,") in new stack
[Apr 28 13:35:59] NOTICE[686] app_queue.c: Added interface 'DAHDI/4' to queue 'Remzova'
[Apr 28 13:35:59] VERBOSE[686] pbx.c:     -- Executing [h@fax_from_queue_remzova:6] NoOp("DAHDI/4-1", "оператор снят с паузы") in new stack
[Apr 28 13:35:59] VERBOSE[691] app_mixmonitor.c:   == MixMonitor close filestream
[Apr 28 13:35:59] VERBOSE[686] chan_dahdi.c:     -- Hungup 'DAHDI/4-1'
[Apr 28 13:35:59] VERBOSE[691] app_mixmonitor.c:   == End MixMonitor Recording DAHDI/4-1
2. Говорит

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

asterisk2*CLI> parkedcalls show
 Num                   Channel (Context         Extension    Pri ) Timeout 
*** Parking lot: default
---
0 parked calls in total.
ded
Сообщения: 15623
Зарегистрирован: 26 авг 2010, 19:00

Re: Dial и переменные после Queue

Сообщение ded »

Проблемы, собственно, не две, а одна - глобальная. (Опять!) попытка собрать велосипед из кусочков фанеры и пенопласта.
При переключении оператор паркуется. Клиент отправив факс, забирает с парковки своего оператора,
Я всегда думал, что оператор должен ставить на парковку и забирать. Но чтобы клиент...? Может вместо агентов в очереди использовать позвонивших клиентов? И очередь, и парковка, не хватает ещё ринг-группы+ callback.

1. Используйте макросы и AGI, сохраняйте значения в глобальных переменных, а не в локальных.
Аватара пользователя
zzuz
Сообщения: 1658
Зарегистрирован: 21 сен 2010, 13:33
Контактная информация:

Re: Dial и переменные после Queue

Сообщение zzuz »

кстати
Set(popytka=[${popytka}+1]) -> Set(popytka=$[${popytka}+1])

exten => h,n,GotoIf($[${print_fax} = 1]?h1) -> exten => h,n,GotoIf($["${print_fax}" = "1"]?h1)

А так , да. Слишком всё усложнено. Да и макросы уже не используются в 1.8, пора отвыкать.
Линия24 - Системы Массового Телефонного Обслуживания
andy77
Сообщения: 4
Зарегистрирован: 28 апр 2011, 12:28

Re: Dial и переменные после Queue

Сообщение andy77 »

2 ded
Оценил вашу начитанность и ценность предложений до цифры 1. Если так сложно адекватно ответить на вопрос, может стоит задуматься тогда о смысле такого ответа? Я вас конкретно не пытаюсь в чем то переубедить. Если вы думаете, что " что оператор должен ставить на парковку и забирать" это не значить, по крайней мере для меня, что так оно и должно быть. В чем собственно проблема? В момент когда происходит определение очередью какой оператор вызовется, данный оператор вообще выбрасывается из очереди, и вызов идет обычного абонента. Вопрос был собственно почему данная схема работает при отсутствие очереди в логике звонка, и не работает при её наличии. Почему после очереди, при выполнение Dial как только вызываемый абонент поднимает трубку происходит выполнение экстеншена h?
Теперь по вашему предложению
1. Используйте макросы и AGI, сохраняйте значения в глобальных переменных, а не в локальных.
Как можно заметить из приведенного мной конфига мы используем и то и другое. Писать все в базу и читать потом из неё конечно вариант, но это как то на наш взгляд не очень верно. Хотелось бы по крайней мере понять в чем проблема. Про глобальные переменные. Создать её не проблема, а вот есть ли возможность её удалить потом? Звонков достаточно много, и создавать порядка несколько тысяч переменных каждый день и не удалять их, боюсь через несколько недель наш сервер откажется вообще работать в такой каше. Это сугубо моё мнение. Если есть что возразить и тем более чему то научить, с радостью и благодарностью выслушаю.
andy77
Сообщения: 4
Зарегистрирован: 28 апр 2011, 12:28

Re: Dial и переменные после Queue

Сообщение andy77 »

zzuz писал(а):кстати
Set(popytka=[${popytka}+1]) -> Set(popytka=$[${popytka}+1])
Да. Косяк. Не доглядел. Спасибо
zzuz писал(а):exten => h,n,GotoIf($[${print_fax} = 1]?h1) -> exten => h,n,GotoIf($["${print_fax}" = "1"]?h1)
я так понимаю без экранирования если это числовое значение всё работае. Или не так?
zzuz писал(а):А так , да. Слишком всё усложнено. Да и макросы уже не используются в 1.8, пора отвыкать.
Ну что поделать? Такая задача :) А что используется вместо макросов в 1.8???
Аватара пользователя
zzuz
Сообщения: 1658
Зарегистрирован: 21 сен 2010, 13:33
Контактная информация:

Re: Dial и переменные после Queue

Сообщение zzuz »

Без экранирования , если числовое значение , должно работать. При Read и прочих установках переменных , кроме явного Set(val=int(key)), переменные рассматриваются как строки. $[] - для вычислений , "" - экранируем как строки.
Вместо макросов нынче GoSub и Return().
Линия24 - Системы Массового Телефонного Обслуживания
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH