Как я обновлял Asterisk
Проблемы переход с 1.2 на 1.4
Откуда: SPB
Сообщений: 61
|
Как я обновлял Asterisk
Приветствую, коллеги.
В эти выходные решил воспользоваться частыми советами обновить * и все таки сделать это.
Что из этого вышло или не вышло.
Имеем:
Slackware я ядром 2.4.33.3
Asterisk 1.2.16
Asterisk-Addons 1.2.5
libpri 1.2.4
Zaptel 1.2.14
Карта Tormenta, 2 E1 канала.
Решено было ставить 1.4.24.1 и соответсвующий dahdi 2.1.0.4
libpri стал.
Dahdi на моей системе компилиться отказался категорически. Возможно, причина в старом ядре..
Решил итоге поставить Zaptel 1.4.12.1 и Asterisk 1.4.12.1.
Все стало. На начальном этапе почти заработало со старыми конфигами, не считая некоторой заминки cdr-csv и старыми параметрами. В подробности вдаваться не буду.
Не понял с удаленными переменными описанными в readme: $(CALLERID), $(DNID), $(ACCOUNTCODE),...
Они продолжают успешно работать и никуда не удалились.
Главная проблема - получение переменных с помощью команд AGI.
По завершению вызова выполняю: exten => h,1,DeadAGI(aline_bill.agi)
aline_bill.agi:
#!/usr/bin/perl
use strict;
use Asterisk::AGI;
use DBI;
sub Debug (@);
$SIG{HUP} = "IGNORE";
my $gate = 1; # gateways.id
# Соединение с базой
my $host_name = "192.168.100.13";
my $db_name = "aster";
my $login = "vasya";
my $passw = "pupkin";
my $AGI = new Asterisk::AGI;
my %var = $AGI->ReadParse();
# Читаем нужные переменные
my $clid = $var{callerid};
my $user_id = $AGI->get_variable("user_id");
my $call_id = $AGI->get_variable("CDR(uniqueid)");
my $billsec = $AGI->get_variable("CDR(billsec)");
my $call_type = $AGI->get_variable("call_type");
my $call_num = $AGI->get_variable("call_num");
my $dial_status = $AGI->get_variable("DIALSTATUS");
my $hangup_cause = $AGI->get_variable("HANGUPCAUSE");
Debug "Line hang up, clid: $clid, user_id: $user_id, billsec: $billsec, call_id: $call_id";
Debug "DIALSTATUS: $dial_status, HANGUPCAUSE: $hangup_cause";
.............
.............
Так вот на этом этапе $AGI->get_variable("CDR(billsec)") выдает billsec = 0.
duration также равно 0. При этом в самом файле Master.csv они указываются правильно, все остальные переменные get_variable получает правильно.
agi debug ошибок не выдает и тоже пишет, что billsec=0
Попытки разобраться с cdr_csv.c, подсунуть эти модули от старой версии 1.2 и перекомпилить к результату не привели((.
Далее было решено вернуться к ветке 1.2. Были установлены Asterisk 1.2.32, Zaptel 1.2.24,...
Проблема не решилась. billsec=0.
+ в процессе выяснилось, что проблема на одном из каналов Е1. Каналы настроены одинаково. 1.4, хотя проблема была та же самая в логах ничего не писал, в 1.2.32:
Apr 11 20:39:33 NOTICE[7196] chan_zap.c: PRI got event: HDLC Abort (6) on Primary D-channel of span 2
Apr 11 20:39:49 WARNING[7196] chan_zap.c: No D-channels available! Using Primary channel 47 as D-channel anyway!
Время появления проблем с сигнализацией на D-канале в логах провайдера совпадает со временем установки 1.4.
При этом второй канал с такими же настройками работает нормально.
В итоге откатил все обратно к родной 1.2.16. Переменная получается, сигнализация работает.
Итак, вопросы:
1) в чем может быть проблема с получением переменной? сталкивался ли кто-нибудь с аналогичной проблемой?
2) аналогичный вопрос по падению Е1. zapata.conf и zaptel.conf готов выложить.
ЗЫ: прошу прошения за свой несколько сумбурный поток сознания:)
|
Откуда: Москва
Сообщений: 398
|
Re: Как я обновлял Asterisk
и нафига, спрашивается обновлял?
Я наоброт, с недавних пор делаю даунгрейдинг с 1.4 на 1.2, ввиду того, что на последнем rxfax/txfax лучше работают.
Вы лучше Asterisk обновите до последней версии в ветке 1.2
|
Откуда: SPB
Сообщений: 61
|
Re: Как я обновлял Asterisk
banalno:
Далее было решено вернуться к ветке 1.2. Были установлены Asterisk 1.2.32, Zaptel 1.2.24,...
Проблема не решилась. billsec=0.
Ставил 1.2.32, т.к. все более старшие версии у меня компилиться отказались.
Кстати, описанная здесь проблема http://asterisk-support.ru/forum/topics/4367/
в 1.4 отсутствовала, а в 1.2.32 также имела место.
|
Сообщений: 866
|
Re: Как я обновлял Asterisk
я, конечно, в AGI не разбираюсь, ибо не использую, но разве get_variable вообще умеет CDR читать? это же не переменная а функция.
вот из этого http://www.voip-info.org/wiki/view/get+full+variable я бы предположил что должно быть еще get_full_variable и туда надо будет пихать "CDR(billsec)" или даже "${CDR(billsec)}"
|
Откуда: SPB
Сообщений: 61
|
Re: Как я обновлял Asterisk
в 1.2.16 читаются все значения описанные в cdr_csv.c.
в 1.4 и 1.2.32 все, кроме billsec и duration.
/*----------------------------------------------------
The values are as follows:
"accountcode", accountcode is the account name of detail records, Master.csv contains all records *
Detail records are configured on a channel basis, IAX and SIP are determined by user *
Zap is determined by channel in zaptel.conf
"source",
"destination",
"destination context",
"callerid",
"channel",
"destination channel", (if applicable)
"last application", Last application run on the channel
"last app argument", argument to the last channel
"start time",
"answer time",
"end time",
duration, Duration is the whole length that the entire call lasted. ie. call rx'd to hangup
"end time" minus "start time"
billable seconds, the duration that a call was up after other end answered which will be <= to duration
"end time" minus "answer time"
"disposition", ANSWERED, NO ANSWER, BUSY
"amaflags", DOCUMENTATION, BILL, IGNORE etc, specified on a per channel basis like accountcode.
"uniqueid", unique call identifier
"userfield" user field set via SetCDRUserField
----------------------------------------------------------*/
еще забыл вот эта конструкция в 1.4 тоже не работала.
# прописываем CDR
$AGI->set_variable('CDR(userfield)' => $fee);
$AGI->exec('NoOp', "OK $call_type:$call_num");
|
Сообщений: 866
|
Re: Как я обновлял Asterisk
ну повторюсь - не работал.
если бы мне нужно было такое победить - я бы сначала попробовал
noop(billsec ${CDR(billsec)})
перед вызовом AGI воткнуть и посмотреть что напишет. Чтобы понять что именно не так - нет CDR переменной или она не читается из AGI.
|
Сообщений: 866
|
Re: Как я обновлял Asterisk
|
Откуда: Киев
Сообщений: 749
|
Re: Как я обновлял Asterisk
get_varible не берет функции. используйте
get_full_variable
|
Откуда: Киев
Сообщений: 749
|
Re: Как я обновлял Asterisk
до окончания разговора исполщуйте стартайм - текушее время.
|
Сообщений: 1573
|
Re: Как я обновлял Asterisk
banalno, это должно вас спасти:
${DIALEDTIME}
${ANSWEREDTIME}
P.S. Данные для CDR берутся из этих переменных, но после полного завершения вызова ...
|
|