Вход | Регистрация
Вы здесь: Главная / Форум / Главный форум по Asterisk / Конфигурация и настройка / Как я обновлял Asterisk

Как я обновлял Asterisk

Проблемы переход с 1.2 на 1.4
1 234>
Откуда: 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 готов выложить.

ЗЫ: прошу прошения за свой несколько сумбурный поток сознания:)
2009-04-13 14:07

Avatara of noize
Откуда: Москва
Сообщений: 398

Re: Как я обновлял Asterisk

и нафига, спрашивается обновлял?
Я наоброт, с недавних пор делаю даунгрейдинг с 1.4 на 1.2, ввиду того, что на последнем rxfax/txfax лучше работают.
Вы лучше Asterisk обновите до последней версии в ветке 1.2
2009-04-13 15:17

Откуда: 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 также имела место.
2009-04-13 15:44

Сообщений: 866

Re: Как я обновлял Asterisk

я, конечно, в AGI не разбираюсь, ибо не использую, но разве get_variable вообще умеет CDR читать? это же не переменная а функция.

вот из этого http://www.voip-info.org/wiki/view/get+full+variable я бы предположил что должно быть еще get_full_variable и туда надо будет пихать "CDR(billsec)" или даже "${CDR(billsec)}"
2009-04-13 17:49

Откуда: 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");
2009-04-13 18:06

Сообщений: 866

Re: Как я обновлял Asterisk

ну повторюсь - не работал.
если бы мне нужно было такое победить - я бы сначала попробовал
noop(billsec ${CDR(billsec)})

перед вызовом AGI воткнуть и посмотреть что напишет. Чтобы понять что именно не так - нет CDR переменной или она не читается из AGI.
2009-04-13 18:29

Сообщений: 866

Re: Как я обновлял Asterisk

хм... можно не делать, я сделал noop, там 0.

http://bugs.digium.com/view.php?id=8680
http://archives.free.net.ph/message/20081009.223506.6bad7cbe.nl.html

в общем я так понял до окончания разговора там только ноль и будет...
2009-04-13 18:46

Откуда: Киев
Сообщений: 749

Re: Как я обновлял Asterisk

get_varible не берет функции. используйте
get_full_variable
2009-04-13 21:59

Откуда: Киев
Сообщений: 749

Re: Как я обновлял Asterisk

до окончания разговора исполщуйте стартайм - текушее время.
2009-04-13 22:19

Сообщений: 1573

Re: Как я обновлял Asterisk

banalno, это должно вас спасти:

${DIALEDTIME}
${ANSWEREDTIME}

P.S. Данные для CDR берутся из этих переменных, но после полного завершения вызова ...
2009-04-14 02:31

1 234>
Добавить страницу в закладки:  Delicious Google Slashdot Yahoo Yandex.ru Reddit Digg Technorati Bobrdobr.ru Newsland.ru Smi2.ru Rumarkz.ru Vaau.ru Memori.ru Rucity.com Moemesto.ru News2.ru Mister-Wong.ru Myscoop.ru 100zakladok.ru