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

Проблемы с записью в базу MySQL

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

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

Ответить
shumiloff
Сообщения: 60
Зарегистрирован: 18 ноя 2010, 19:04

Проблемы с записью в базу MySQL

Сообщение shumiloff »

В базу пишется UNIQUEID звонка. Звонок пишется через MixMonitor в файл с именем ${UNIQUEID}.wav

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

;internal numbers
exten => _1XXX,1,NoOp(${EXTEN})
exten => _1XXX,n,Set(fname=${UNIQUEID})
exten => _1XXX,n,MixMonitor(/home/audio/${fname}.wav)
exten => _1XXX,n,Dial(SIP/${EXTEN},,rT)
exten => _1XXX,n,Hangup
Проблема заключается в том, что при переадресации записывается новый файл с новым UNIQUEID, а в базе добавляется запись со старым UNIQUEID. Если же добавить строку

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

exten => _1XXX,n,Set(CDR(uniqueid)=${UNIQUEID})
то в логе получаем сообщение об ошибке:

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

    -- Executing [1038@office:4] Set("SIP/1020-00000378", "CDR(uniqueid)=1319008611.892") in new stack
[Oct 19 13:16:51] ERROR[57917]: cdr.c:311 ast_cdr_setvar: Attempt to set the 'uniqueid' read-only variable!.
В базе получаем две строки с одинаковыми uniqueid:
src dst uniqueid
777 1020 1319008597.890
777 1038 1319008597.890

В то время как при переадресации инициализируется новый вызов, у которого uniqueid = 1319008611.892.

Настройки mysql_cdr:

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

[root@ats01:/usr/local/etc/asterisk]# egrep -v "^;" cdr_mysql.conf
[global]
hostname=host
dbname=asterisk
table=cdr
password=password
user=username
port=3306

[columns]
alias start => calldate
alias callerid => clid
alias src => src
alias dst => dst
alias dcontext => dcontext
alias channel => channel
alias dstchannel => dstchannel
alias lastapp => lastapp
alias lastdata => lastdata
alias duration => duration
alias billsec => billsec
alias disposition => disposition
alias amaflags => amaflags
alias accountcode => accountcode
alias userfield => userfield
alias uniqueid => uniqueid
Есть ли возможность сделать так, чтобы в базу писались актуальные uniqueid при редиректе?

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

[root@ats01:/usr/local/etc/asterisk]# uname -a
FreeBSD youdontneedmyhosname 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Thu Feb 17 02:41:51 UTC 2011     root@mason.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  amd64
[root@ats01:/usr/local/etc/asterisk]# pkg_info | grep aster
asterisk16-1.6.2.17 An Open Source PBX and telephony toolkit
asterisk16-addons-1.6.2.3_1 GPL modules for the Asterisk Open Source PBX
Аватара пользователя
noize
Сообщения: 117
Зарегистрирован: 01 сен 2010, 11:29

Re: Проблемы с записью в базу MySQL

Сообщение noize »

воспользоваться ODBC
Аватара пользователя
zzuz
Сообщения: 1658
Зарегистрирован: 21 сен 2010, 13:33
Контактная информация:

Re: Проблемы с записью в базу MySQL

Сообщение zzuz »

Решение - писать в отдельную таблицу .
Вы же поняли о чем вам говорится "[Oct 19 13:16:51] ERROR[57917]: cdr.c:311 ast_cdr_setvar: Attempt to set the 'uniqueid' read-only variable!." ? Или решили проигнорировать?
Линия24 - Системы Массового Телефонного Обслуживания
Аватара пользователя
Obi Van
Сообщения: 340
Зарегистрирован: 03 сен 2010, 11:21

Re: Проблемы с записью в базу MySQL

Сообщение Obi Van »

noize писал(а):воспользоваться ODBC
Вот например у меня. Есть астериск 1.8.8, есть куча баз в мускуле. Всё пишется как надо и куда надо. Вопрос в том нужно ли мне использовать ODBC? :|
shumiloff
Сообщения: 60
Зарегистрирован: 18 ноя 2010, 19:04

Re: Проблемы с записью в базу MySQL

Сообщение shumiloff »

Кажется, я понял, в чём причина проблемы.

В описании экстенжна у меня есть старт микс монитора. Соответственно, если звонок пришёл например, на номер 1010, а абонент его переводит на номер 1020, то в экстенжене 1020 опять запускается MixMonitor, соответственно, создаётся новый файл с новым uniqueid в качестве имени. Если вместо редиректа я сделаю например, Goto на приоритет, который находится после вызова процедуры MixMonitor, то файл будет продолжать записываться старый, со старым id, который как раз и находится в базе. В принципе это устраивает. Теперь вопрос - как в выполняющемся экстенжне узнать - был ли он переадресован и откуда? Есть такая возможность?

Примерная логика: Если вызов инициирован абонентом, то Goto приоритет, в котором запускается MixMonitor, если же он был переадресован, то Goto на один приоритет дальше, чтобы не запускать MixMonitor.
Vlad1983
Сообщения: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: Проблемы с записью в базу MySQL

Сообщение Vlad1983 »

как в выполняющемся экстенжне узнать - был ли он переадресован и откуда?
проверка значений переменных ${BLINDTRANSFER} или ${TRANSFERERNAME} в зависимости от того какой вид транфера применен
ЛС: @rostel
shumiloff
Сообщения: 60
Зарегистрирован: 18 ноя 2010, 19:04

Re: Проблемы с записью в базу MySQL

Сообщение shumiloff »

О! Спасибо огромное! Попробую!
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH