LINUX.ORG.RU
ФорумAdmin

Asterisk: очередь иногда сбрасывает звонки


0

2

Есть сабж в форме Elastix, в нём очередь в которой сидит коллцентр.

Некоторые звонки (до 5%) почему-то отбрасываются когда оператор берёт трубку.

В логе:

...
[Nov 18 13:13:58] VERBOSE[2419][C-000004ef] netsock2.c:   == Using SIP RTP TOS bits 184
[Nov 18 13:13:58] VERBOSE[2419][C-000004ef] netsock2.c:   == Using SIP RTP CoS mark 5
[Nov 18 13:13:58] VERBOSE[2419][C-000004ef] app_dial.c:     -- Called SIP/1715
[Nov 18 13:13:58] VERBOSE[2366][C-000004ef] app_queue.c:     -- Local/1715@from-queue-000001c9;1 is ringing
[Nov 18 13:13:58] VERBOSE[2419][C-000004ef] app_dial.c:     -- SIP/1715-000006c6 is ringing
[Nov 18 13:13:58] VERBOSE[2366][C-000004ef] app_queue.c:     -- Local/1715@from-queue-000001c9;1 is ringing
[Nov 18 13:14:01] VERBOSE[2366][C-000004ef] res_musiconhold.c:     -- Stopped music on hold on OOH323/avaya-664
[Nov 18 13:14:01] VERBOSE[2419][C-000004ef] app_macro.c:   == Spawn extension (macro-dial-one, s, 37) exited non-zero on 'Local/1715@from-queue-000001c9;2' in macro 'dial-one'
[Nov 18 13:14:01] VERBOSE[2419][C-000004ef] app_macro.c:   == Spawn extension (macro-exten-vm, s, 9) exited non-zero on 'Local/1715@from-queue-000001c9;2' in macro 'exten-vm'
...
Т.е. в 58 секунд у оператора зазвонил аппарат, в 01 секунду он взял трубку и звонок сорвался. И похожая картина на нескольких звонках.

Есть какие-то идеи?

Диалплан в месте вызова макроса macro-dial-one и сам макрос показывай.
Неплохо было бы еще и очередь + её настройки показать.

zgen ★★★★★
()
Ответ на: комментарий от zgen

В диалпланы я могу слазить, но они стандартные из FreePBX. Я думал что проблема возможно какая-то известная, мало ли.

blind_oracle ★★★★★
() автор топика
Ответ на: комментарий от blind_oracle

Я думал что проблема возможно какая-то известная, мало ли.

Действительно. Вы же все номера версий указали и тут конечно все пользуются исключительно эластиксом чтобы быстро-быстро вам намекнуть про известную проблему.

Я понятия не имею, что там в эластике или freepbx и у меня нет никакого желания ставить и настраивать их ради того, чтобы ответить на ваш вопрос.

Но вот если бы вы все-таки прислушались к моей просьбе - я мог бы поискать логическую ошибку в вашем диалплане.

zgen ★★★★★
()
Ответ на: комментарий от zgen

Дык, искал ессесно. Не имею привычки задавать вопросы не излазив гугль.

Этот баг видел, но у меня чёткая корреляция с поднятием трубки - до этого события звонок спокойно висит в очереди и слушает музыку. Времени с начала звонка проходит сильно меньше минуты.

Обновил Asterisk c 11.11 до 11.13 и по части диалпланов FreePBX обновил, посмотрю как пойдёт.

Я понятия не имею, что там в эластике или freepbx и у меня нет никакого желания ставить и настраивать их ради того, чтобы ответить на ваш вопрос.

Ну, ваше право, я конкретно вас не звал срочно всё бросить :) Elastix/FreePBX довольно (если не самая) распространенная форма applicance на базе Asterisk, так что вопросы применимые конкретно к нему и его скриптам таки имеют право на жизнь.

blind_oracle ★★★★★
() автор топика

В консоли по этому поводу нифига?

Может быть проблема на стороне оператора (бажный клиент, например).

invokercd ★★★★
()
Ответ на: комментарий от blind_oracle

Любые вопросы имеют право на жизнь при условии, что они содержат информацию для анализа, а не как у вас - «у меня что-то не работает, скажите как это исправить».

zgen ★★★★★
()
Ответ на: комментарий от invokercd

В какой консоли? Кусок лога астериска я показал, больше там вроде ничего нет.

Может быть проблема на стороне оператора (бажный клиент, например).

Мэйби, ибо началось достаточно внезапно. В сторону оператора у меня H.323 транк по IP, при звонках через него наружу проблем не возникает.

Любые вопросы имеют право на жизнь при условии, что они содержат информацию для анализа, а не как у вас - «у меня что-то не работает, скажите как это исправить».

Какая конкретно инфа? Диалплан? Он огромен, генерируется через FreePBX. Конкретно макрос macro-dial-one вот, но не уверен что в отрыве от остального он сильно поможет. В порядковом номере 37 у него «exten => s,n,Dial(${DSTRING},${ARG1},${D_OPTIONS})», на котором он и валится.

[macro-dial-one]
include => macro-dial-one-custom
exten => s,1,Set(DEXTEN=${ARG3})
exten => s,n,Set(DIALSTATUS_CW=)
exten => s,n,GosubIf($["${FROM_DID}"!="" & "${SCREEN}"="" & "${DB(AMPUSER/${DEXTEN}/screen)}"!=""]?screen,1)
exten => s,n,GosubIf($["${DB(CF/${DEXTEN})}"!=""]?cf,1)
exten => s,n,GotoIf($["${DEXTEN:-1}"="#" | "${DB(DND/${DEXTEN})}"=""]?skip1)
exten => s,n,Set(DEXTEN=)
exten => s,n,Set(DIALSTATUS=BUSY)
exten => s,n(skip1),GotoIf($["${DEXTEN}"=""]?nodial)
exten => s,n,GotoIf($["${DEXTEN:-1}"="#"]?continue)
exten => s,n,Set(EXTHASCW=${IF($["${CWIGNORE}"!=""]?"":${DB(CW/${DEXTEN})})})
exten => s,n,GotoIf($["${EXTHASCW}"="" | "${DB(CFB/${DEXTEN})}"!="" | "${DB(CFU/${DEXTEN})}"!=""]?next1:cwinusebusy)
exten => s,n(next1),GotoIf($["${DB(CFU/${DEXTEN})}"!="" & ("${EXTENSION_STATE(${DEXTEN})}"="UNAVAILABLE" | "${EXTENSION_STATE(${DEXTEN})}"="UNKNOWN")]?docfu:skip3)
exten => s,n(docfu),Set(DEXTEN=)
exten => s,n,Set(DIALSTATUS=NOANSWER)
exten => s,n,Goto(nodial)
exten => s,n(skip3),GotoIf($["${EXTHASCW}"="" | "${DB(CFB/${DEXTEN})}"!=""]?next2:continue)
exten => s,n(next2),GotoIf($["${EXTENSION_STATE(${DEXTEN})}"="NOT_INUSE" | "${EXTENSION_STATE(${DEXTEN})}"="UNAVAILABLE" | "${EXTENSION_STATE(${DEXTEN})}"="UNKNOWN"]?continue)
exten => s,n,ExecIf($["${DB(CFB/${DEXTEN})}"!="" & "${CFIGNORE}"=""]?Set(DIALSTATUS=BUSY))
exten => s,n,GotoIf($["${EXTHASCW}"!="" | "${DEXTEN:-1}"="#"]?cwinusebusy)
exten => s,n,Set(DEXTEN=)
exten => s,n,Set(DIALSTATUS=BUSY)
exten => s,n,Goto(nodial)
exten => s,n(cwinusebusy),GotoIf($["${EXTHASCW}"!="" & "${CWINUSEBUSY}"!=""]?next3:continue)
exten => s,n(next3),ExecIf($["${EXTENSION_STATE(${DEXTEN})}"!="UNAVAILABLE" & "${EXTENSION_STATE(${DEXTEN})}"!="NOT_INUSE" & "${EXTENSION_STATE(${DEXTEN})}"!="UNKNOWN"]?Set(DIALSTATUS_CW=BUSY))
exten => s,n(continue),GotoIf($["${DEXTEN}"=""]?nodial)
exten => s,n,GosubIf($["${DEXTEN:-1}"!="#"]?dstring,1:dlocal,1)
exten => s,n,GotoIf($[${LEN(${DSTRING})}=0]?nodial)
exten => s,n,GotoIf($["${DEXTEN:-1}"="#"]?skiptrace)
exten => s,n,GosubIf($[${REGEX("^[\+]?[0-9]+$" ${CALLERID(number)})} = 1]?ctset,1:ctclear,1)
exten => s,n(skiptrace),Set(D_OPTIONS=${IF($["${NODEST}"!="" & ${REGEX("(M[(]auto-blkvm[)])" ${ARG2})} != 1]?${ARG2}M(auto-blkvm):${ARG2})})
exten => s,n,ExecIf($["${ALERT_INFO}"!=""]?SIPAddHeader(Alert-Info: ${ALERT_INFO}))
exten => s,n,ExecIf($["${SIPADDHEADER}"!=""]?SIPAddHeader(${SIPADDHEADER}))
exten => s,n,ExecIf($["${MOHCLASS}"!=""]?Set(CHANNEL(musicclass)=${MEETME_MUSIC}))
exten => s,n,GosubIf($["${QUEUEWAIT}"!=""]?qwait,1)
exten => s,n,Set(__CWIGNORE=${CWIGNORE})
exten => s,n,Set(__KEEPCID=TRUE)
exten => s,n,Dial(${DSTRING},${ARG1},${D_OPTIONS})
exten => s,n,ExecIf($["${DIALSTATUS_CW}"!=""]?Set(DIALSTATUS=${DIALSTATUS_CW}))
exten => s,n,GosubIf($["${SCREEN}"!=""|"${DIALSTATUS}"="ANSWER"]?s-${DIALSTATUS},1)
exten => s,n,MacroExit()
exten => s,n(nodial),ExecIf($["${DIALSTATUS}" = ""]?Set(DIALSTATUS=NOANSWER))
exten => s,n,Noop(Returned from dial-one with nothing to call and DIALSTATUS: ${DIALSTATUS})
exten => s,n,MacroExit()
exten => h,1,Macro(hangupcall,)
exten => screen,1,GotoIf($["${DB(AMPUSER/${DEXTEN}/screen)}"!="nomemory" | "${CALLERID(number)}"=""]?memory)
exten => screen,n,ExecIf($[${REGEX("^[0-9a-zA-Z ]+$" ${CALLERID(number)})} = 1]?System(rm -f ${ASTVARLIBDIR}/sounds/priv-callerintros/${CALLERID(number)}.*))
exten => screen,n(memory),Set(__SCREEN=${DB(AMPUSER/${DEXTEN}/screen)})
exten => screen,n,Set(__SCREEN_EXTEN=${DEXTEN})
exten => screen,n,Set(ARG2=${ARG2}p)
exten => screen,n,Return()
exten => cf,1,Set(CFAMPUSER=${IF($["${AMPUSER}"=""]?${CALLERID(number)}:${AMPUSER})})
exten => cf,n,ExecIf($["${DB(CF/${DEXTEN})}"="${CFAMPUSER}" | "${DB(CF/${DEXTEN})}"="${REALCALLERIDNUM}" | "${CUT(CUT(BLINDTRANSFER,-,1),/,1)}" = "${DB(CF/${DEXTEN})}" | "${DEXTEN}"="${DB(CF/${DEXTEN})}"]?Return())
exten => cf,n,Set(DEXTEN=${IF($["${CFIGNORE}"=""]?"${DB(CF/${DEXTEN})}#":"")})
exten => cf,n,ExecIf($["${DEXTEN}"!=""]?Return())
exten => cf,n,Set(DIALSTATUS=NOANSWER)
exten => cf,n,Return()
exten => qwait,1,ExecIf($["${SAVEDCIDNAME}" = ""]?Set(__SAVEDCIDNAME=${CALLERID(name)}))
exten => qwait,n,Set(ELAPSED=${MATH($[${EPOCH}+30-${QUEUEWAIT}]/60,int)})
exten => qwait,n,Set(CALLERID(name)=M${ELAPSED}:${SAVEDCIDNAME})
exten => qwait,n,Return()
exten => ctset,1,Set(DB(CALLTRACE/${DEXTEN})=${CALLERID(number)})
exten => ctset,n,Return()
exten => ctclear,1,Noop(Deleting: CALLTRACE/${DEXTEN} ${DB_DELETE(CALLTRACE/${DEXTEN})})
exten => ctclear,n,Return()
exten => dstring,1,Set(DSTRING=)
exten => dstring,n,Set(DEVICES=${DB(AMPUSER/${DEXTEN}/device)})
exten => dstring,n,ExecIf($["${DEVICES}"=""]?Return())
exten => dstring,n,ExecIf($["${DEVICES:0:1}"="&"]?Set(DEVICES=${DEVICES:1}))
exten => dstring,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)})
exten => dstring,n,Set(ITER=1)
exten => dstring,n(begin),Set(THISDIAL=${DB(DEVICE/${CUT(DEVICES,&,${ITER})}/dial)})
exten => dstring,n,GosubIf($["${ASTCHANDAHDI}" != ""]?zap2dahdi,1)
exten => dstring,n,Set(DSTRING=${DSTRING}${THISDIAL}&)
exten => dstring,n,Set(ITER=$[${ITER}+1])
exten => dstring,n,GotoIf($[${ITER}<=${LOOPCNT}]?begin)
exten => dstring,n,Set(DSTRING=${DSTRING:0:$[${LEN(${DSTRING})}-1]})
exten => dstring,n,Return()
exten => dlocal,1,Set(DSTRING=Local/${DEXTEN:0:${MATH(${LEN(${DEXTEN})}-1,int)}}@from-internal/n)
exten => dlocal,n,Return()
exten => zap2dahdi,1,ExecIf($["${THISDIAL}" = ""]?Return())
exten => zap2dahdi,n,Set(NEWDIAL=)
exten => zap2dahdi,n,Set(LOOPCNT2=${FIELDQTY(THISDIAL,&)})
exten => zap2dahdi,n,Set(ITER2=1)
exten => zap2dahdi,n(begin2),Set(THISPART2=${CUT(THISDIAL,&,${ITER2})})
exten => zap2dahdi,n,ExecIf($["${THISPART2:0:3}" = "ZAP"]?Set(THISPART2=DAHDI${THISPART2:3}))
exten => zap2dahdi,n,Set(NEWDIAL=${NEWDIAL}${THISPART2}&)
exten => zap2dahdi,n,Set(ITER2=$[${ITER2} + 1])
exten => zap2dahdi,n,GotoIf($[${ITER2} <= ${LOOPCNT2}]?begin2)
exten => zap2dahdi,n,Set(THISDIAL=${NEWDIAL:0:$[${LEN(${NEWDIAL})}-1]})
exten => zap2dahdi,n,Return()
exten => s-NOANSWER,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM})
exten => s-NOANSWER,n,ExecIf($["${IVR_RETVM}"!="RETURN" | "${IVR_CONTEXT}"=""]?Hangup())
exten => s-NOANSWER,n,Return()
exten => s-TORTURE,1,Goto(app-blackhole,musiconhold,1)
exten => s-TORTURE,n,Macro(hangupcall,)
exten => s-DONTCALL,1,Answer
exten => s-DONTCALL,n,Wait(1)
exten => s-DONTCALL,n,Zapateller()
exten => s-DONTCALL,n,Playback(ss-noservice)
exten => s-DONTCALL,n,Macro(hangupcall,)

; end of [macro-dial-one]

blind_oracle ★★★★★
() автор топика
Ответ на: комментарий от blind_oracle

Насколько я знаю у консоли и лога может быть разный уровень подробности. Хотя может в логе наиболее подробный выхлоп.

invokercd ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.