Asterisk+cdr
У меня проблема следующего характера. Есть собранный, установленный и работающий астериск под системой FreeBSD 7.2 RELEASE Asterisk 1.6.0.21.
Астериск собранный с поддержкой postgresql и соответственно весь cdr звонков ложиться в базу. Вот в этом проблема, когда он пытается положить звонок в базу вылетает следующая ошибка
[Aug 30 12:11:55] ERROR[74649] cdr_pgsql.c: cdr_pgsql: Connection may have been lost... attempting to reconnect.
[Aug 30 12:11:55] ERROR[74649] cdr_pgsql.c: cdr_pgsql: Connection reestablished.
[Aug 30 12:11:55] ERROR[74649] cdr_pgsql.c: cdr_pgsql: HARD ERROR! Attempted reconnection failed. DROPPING CALL RECORD!
[Aug 30 12:11:55] ERROR[74649] cdr_pgsql.c: cdr_pgsql: Reason: ERROR: column "service_id" of relation "cdr" does not exist
LINE 1: ... ("calldate","clid","counteragent_id","src","dst","service_i...
Я понимаю что нужно поле service_id, но его в описание полей для таблице cdr'а нет. Так для чего астер пытается туда что-то положить ? В гугле ничего похожего не нашел.
With best, Rinat
http://forums.digium.com/viewtopic.php?f=1&t=6991
не важно о чем тема, главное там создается табличка с
service_id Int NOT NULL
Added after 12 minutes:
но вот откуда оно берется - большей вопрос.
не нашел нигде такое...
--------------------------
Now create a table in postgresql for your cdrs
*
CREATE TABLE cdr (
calldate time NOT NULL ,
clid varchar (80) NOT NULL ,
src varchar (80) NOT NULL ,
dst varchar (80) NOT NULL ,
dcontext varchar (80) NOT NULL ,
channel varchar (80) NOT NULL ,
dstchannel varchar (80) NOT NULL ,
lastapp varchar (80) NOT NULL ,
lastdata varchar (80) NOT NULL ,
duration int NOT NULL ,
billsec int NOT NULL ,
disposition varchar (45) NOT NULL ,
amaflags int NOT NULL ,
accountcode varchar (20) NOT NULL ,
uniqueid varchar (150) NOT NULL ,
userfield varchar (255) NOT NULL
);
Здесь я этого поля не вижу.
With best, Rinat.
не нравится решение - поищите ещё...
Added after 9 minutes:
у вас есть не стандартные поля в таблице, например "counteragent_id". потому нужно искать не стандартные решения.
что у вас в файле cdr.conf ?
В файле cdr.conf следующие позиции:
[general]
enable=yes
;unanswered = no
;batch=no
;size=100
;time=300
;scheduleronly=no
;safeshutdown=yes
;endbeforehexten=no
[pgsql]
usegmtime=yes
loguniqueid=yes
loguserfield=yes
[csv]
usegmtime=yes
loguniqueid=yes
loguserfield=yes
With best, Rinat.
и в запросе в него что то пишется, пусть даже нулевое значение.
1. добавьте требуемое поле в табличку и не будет ругаться.
2. проверьте, всегда ли ругается так, или только при определенном действие.
Спасибо за ответы.
With best, Rinat.
у вас что то было установлено, или даже сейчас так. и это что то добавило поле в базу. возможно было вручную удалено второе поле.
И еще можно один вопрос.
Астер постояно обращается к базе по полю из таблице users regseconds. Вот пример:
[Aug 30 14:33:56] DEBUG[25572] res_config_pgsql.c: Postgresql RealTime: Update SQL: UPDATE users SET ipaddr = 'xxx.xxx.xxx.xxx', port = '5060', regseconds = '1283164496', username = 'yyyyy', fullcontact = 'sip:yyyyy@xxx.xxx.xxx.xxx:5060' WHERE name = 'yyyyy'
Эти обращение уж сильно частые.
Можно как-нимбудь сократить постоянное обращение к базе. Скажем что бы раз в полчаса или хотя бы в минут 15. А не каждые 2-3 минуты.
With best, Rinat.
что бы не мешали эти записи - выключите дебаг, или потерпите пока дебажете другие проблемы.
With best, Rinat.
После установки модуля CDR, для логирования звонков в базу данных mysql, этот модуль по умолчанию пытается логировать ВСЕ звонки, которые обслуживает сервер астериск. Естественно, получается у него в базу занести те звонки, для которых в экстеншеннах прописаны правила вида: MYSQL(Connect connid localhost ххх ххх ххх). А для всех остальных звонков, выводится ошибка:
| Code: |
| [Aug 30 18:36:23] WARNING[452]: app_addon_sql_mysql.c:180 find_identifier: Identifier 0, identifier_type 1 not found in identifier list [Aug 30 18:36:23] WARNING[452]: app_addon_sql_mysql.c:437 aMYSQL_disconnect: Invalid connection identifier 0 passed in aMYSQL_disconnect |
Где настраиваются эти глобальные (или дефолтные) правила модуля cdr
прописываются конфиги в cdr_mysql.conf
что бы звонок не логировался нужно прописать экстеншену nocdr
| Code: |
| exten => 11003,1,NoCDR() exten => 11003,n,Dial(SIP/11003) exten => 11004,1,NoCDR() exten => 11004,n,Dial(SIP/11004) |
| Code: |
| -- Executing [11002@office:1] NoCDR("SIP/11004-00000004", "") in new stack -- Executing [11002@office:2] Dial("SIP/11004-00000004", "SIP/11002") in new stack -- Called 11002 -- SIP/11002-00000005 is ringing -- Saved useragent "sflphone/0.9.8~rc1" for peer 11004 == Spawn extension (office, 11002, 2) exited non-zero on 'SIP/11004-00000004' -- Executing [h@office:1] MYSQL("SIP/11004-00000004", "Disconnect ") in new stack [Aug 30 18:55:56] WARNING[782]: app_addon_sql_mysql.c:180 find_identifier: Identifier 0, identifier_type 1 not found in identifier list [Aug 30 18:55:56] WARNING[782]: app_addon_sql_mysql.c:437 aMYSQL_disconnect: Invalid connection identifier 0 passed in aMYSQL_disconnect |
а где записи в конфигурационном файле?
| adt2k wrote: |
| мде. прописываются конфиги в cdr_mysql.conf что бы звонок не логировался нужно прописать экстеншену nocdr |
ну как видно... cdr_mysql.conf
| Code: |
| [global] hostname=127.0.0.1 dbname=asterisk table=cdr password=1 user=asterisk port=3306 sock=/tmp/mysql.sock userfield=1 |
Если это так, тогда какой смысл от этой строки в extensions.conf
| Code: |
| exten => xxxxx,1,MYSQL(Connect connid localhost asterisk 1 asterisk) |
Спасибо за открытие возможности
Но это совсем не нужно!