AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Ошибки в скрипте

Asterisk IP PBX 5 сообщений -
#1

Здравствуйте!
Коллеги, помогите найти ошибку в скрипте. Итак, по-порядку :
есть модуль CMonitor, взятый из пакета AMS, который записывает разговоры и пихает их в папки с названием год-месяц-день/час/имя_файла.WAV. Есть скрипт, к которому обращается модуль 1С, написанный компанией МИКО. Результатом выполнения этого скрипта является файл записи конкретного разговора. Ниже сам скрипт :

[mikoajamdll]
exten => 0000999,1,NoCDR()
exten => 0000999,n,Answer()
exten => 0000999,n,Wait(60)
exten => 0000999,n,Hangup()
exten => 0000777,1,NoCDR()
exten => 0000777,n,Answer()
exten => 0000777,n,Set(dbname=${AST_CONFIG(cdr_mysql.conf,global,dbname)})
exten => 0000777,n,Set(user=${AST_CONFIG(cdr_mysql.conf,global,user)})
exten => 0000777,n,Set(password=${AST_CONFIG(cdr_mysql.conf,global,password)})
exten => 0000777,n,Set(recpath=${SHELL( mysql -sse SEL ECT recordingpath FR OM cdr WHERE uniqueid Like ${QUOTE( ${uniqueid1c}%)} LIMIT 1 -u${user} -p${password} ${dbname} )})
exten => 0000777,n,Set(ASTSPOOLDIR=/var/spool/asterisk/monitor)
exten => 0000777,n,Set(monitor_path=${ASTSPOOLDIR}/${recpath}/)
exten => 0000777,n,Set(recordingfile=${SHELL( mysql -sse SEL ECT recordingfile FR OM cdr WHERE uniqueid Like ${ QUOTE(${uniqueid1c}%)} LIMIT 1 -u${user} -p${password} ${dbname} )})
exten => 0000777,n,Gotoif($[${LEN(${recordingfile})} > 4]?FindInFileSystem:FindInUserfield)
exten => 0000777,n(FindInUserfield),Set(recordingfile=${SHELL( mysql -sse SELECT userfield FR OM cdr WHERE uni queid Like ${QUOTE(${uniqueid1c}%)} LIMIT 1 -u${user} -p${password} ${dbname} )})
;exten => 0000777,n(FindInUserfield),Set(recordingpath=${SHELL( mysql -sse SELECT userfield FR OM cdr WH ERE un iqueid Like ${QUOTE(${uniqueid1c}%)} LIM IT 1 -u${user} -p${password} ${dbname} )})
exten => 0000777,n,ExecIf($[${LEN(${recordingfile})} < 4]?Hangup())
exten => 0000777,n(FindInFileSystem),Set(namedorashiren=$[${LEN(${recordingfile})}-4])
exten => 0000777,n,Set(recfile=${SHELL(find ${monitor_path} -name *${recordingfile:0:${namedorashiren}}*|head -n 1)})
exten => 0000777,n,ExecIf($[${LEN(${recfile})} > 4]?UserEvent(CallRecord,Channel: ${chan},FileName: ${recfile} ))
exten => 0000777,n,Hangup()

Но результат выдается с ошибкой, а именно не находится файл записи. Тормозится на выполнении этого шага - exten => 0000777,n(FindInFileSystem),Set(namedorashiren=$[${LEN(${recordingfile})}-4])
вываливается список всех файлов, которые он находит в конкретном пути, далее прерывается с выводом и выдает ошибку Can`t find trailing parenthesis for function 'LEN(/var/spool/asterisk/monitor.
Подскажите в каком месте ошибка. Заранее спасибо!

_________________
Asterisk 1.6.2 @ CentOS 5.6 final + Asteroid FXS + Quasar E1 + NEC NEAX 2000IPS
#2

exten => 0000777,n,NoOp(== ${LEN(${recordingfile}) ==)
exten => 0000777,n,ExecIf($[${LEN(${recordingfile})} < 4]?Hangup())
exten => 0000777,n(FindInFileSystem),Set(namedorashiren=$[${LEN(${recordingfile})}-4])
exten => 0000777,n,NoOp(== ${namedorashiren) ==)

и звонок покажите
#3


Executing [0000999@mikoajamdll:1] NoCDR("Local/0000999@mikoajamdll-73b1;2", "") in new stack
-- Executing [0000999@mikoajamdll:2] Answer("Local/0000999@mikoajamdll-73b1;2", "") in new stack
-- Executing [0000777@mikoajamdll:1] NoCDR("Local/0000999@mikoajamdll-73b1;1", "") in new stack
-- Executing [0000777@mikoajamdll:2] Answer("Local/0000999@mikoajamdll-73b1;1", "") in new stack
-- Executing [0000777@mikoajamdll:3] Set("Local/0000999@mikoajamdll-73b1;1", "dbname=asterisk") in new stack
-- Executing [0000777@mikoajamdll:4] Set("Local/0000999@mikoajamdll-73b1;1", "user=root") in new stack
-- Executing [0000777@mikoajamdll:5] Set("Local/0000999@mikoajamdll-73b1;1", "password=Pwd123") in new stack
-- Executing [0000777@mikoajamdll:6] Set("Local/0000999@mikoajamdll-73b1;1", "recpath=2013-03-27/14
") in new stack
-- Executing [0000777@mikoajamdll:7] Set("Local/0000999@mikoajamdll-73b1;1", "ASTSPOOLDIR=var/spool/asterisk/monitor") in new stack
-- Executing [0000777@mikoajamdll:8] Set("Local/0000999@mikoajamdll-73b1;1", "monitor_path=var/spool/asterisk/monitor/2013-03-27/14
") in new stack
-- Executing [0000999@mikoajamdll:3] Wait("Local/0000999@mikoajamdll-73b1;2", "60") in new stack
-- Executing [0000777@mikoajamdll:9] Set("Local/0000999@mikoajamdll-73b1;1", "recordingfile=2013-03-27-14:39:40-9645392366-6402428-i-1364380780.46889.WAV
") in new stack
-- Executing [0000777@mikoajamdll:10] NoOp("Local/0000999@mikoajamdll-73b1;1", "1?FindInFileSystem:FindInUserfield") in new stack
-- Executing [0000777@mikoajamdll:11] Set("Local/0000999@mikoajamdll-73b1;1", "recordingfile=
") in new stack
-- Executing [0000777@mikoajamdll:12] ExecIf("Local/0000999@mikoajamdll-73b1;1", "1?Hangup()") in new stack
== Spawn extension (mikoajamdll, 0000777, 12) exited non-zero on 'Local/0000999@mikoajamdll-73b1;1'
== Spawn extension (mikoajamdll, 0000999, 3) exited non-zero on 'Local/0000999@mikoajamdll-73b1;2'

_________________
Asterisk 1.6.2 @ CentOS 5.6 final + Asteroid FXS + Quasar E1 + NEC NEAX 2000IPS
#4

exten => 0000777,n(FindInUserfield),Set(recordingfile=${SHELL( mysql -sse SELECT userfield FR OM cdr WHERE uni queid Like ${QUOTE(${uniqueid1c}%)} LIMIT 1 -u${user} -p${password} ${dbname} )})
sql запрос не правильный


Вот то что не так
-- Executing [0000777@mikoajamdll:10] NoOp("Local/0000999@mikoajamdll-73b1;1", "1?FindInFileSystem:FindInUserfield") in new stack

и пришел ответ , пустой
-- Executing [0000777@mikoajamdll:11] Set("Local/0000999@mikoajamdll-73b1;1", "recordingfile=") in new stack
#5

awsswa @ Ср Мар 27, 2013 14:29 писал(а):
exten => 0000777,n(FindInUserfield),Set(recordingfile=${SHELL( mysql -sse SELECT userfield FR OM cdr WHERE uni queid Like ${QUOTE(${uniqueid1c}%)} LIMIT 1 -u${user} -p${password} ${dbname} )})
sql запрос не правильный

А в чем он не правильный? В каком месте? Если Вы про пробелы - то это на форуме так отобразилось. В реальности все без пробелов...

_________________
Asterisk 1.6.2 @ CentOS 5.6 final + Asteroid FXS + Quasar E1 + NEC NEAX 2000IPS