Страница 1 из 1

CDR при первом звонке

Добавлено: 10 апр 2012, 12:45
slavaka_z
Здравствуйте!

Есть сервер, он же корпоративный портал. У каждого пользователя есть своя страничка. Рядом стоит сервер с Астериск. Астериск принимает звонки и логит их в mysql базу первого сервера. Первый сервер, по идее, должен видеть, что в базе появилась новая строчка и выдавать всем пользователям информацию о входящем звонке.

Но вот какая проблема - CDR заносит запись в базу только после окончания звонка. Как сделать так, чтобы строчка в базе появлялась сразу же при первом звонке? Порылся в конфигах, ничего подходящего не нашел.

Re: CDR при первом звонке

Добавлено: 10 апр 2012, 13:12
ys1797
>CDR заносит запись в базу только после окончания звонка
Что исходит из его названия.
Интересно, как же будет указана там продолжительность звонка, если он еще не кончился? :)

Use AMI

Re: CDR при первом звонке

Добавлено: 10 апр 2012, 15:24
slavaka_z
Что-то типа:

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

<?php
require "AsteriskManager.php";
$params = array('server' => '127.0.0.1', 'port' => '5038');
$ast = new Net_AsteriskManager($params);
try {
    $ast->connect();
} catch (PEAR_Exception $e) {
    echo $e;
}
try {
    $ast->login('admin', 'secret5');
} catch(PEAR_Exception $e) {
    echo $e;
}
try {
    $incall = $ast->getQueues();
} catch(PEAR_Exception $e) {
    echo $e;
}

echo $incall;
?>
И затем парсить $incall на предмет Event: NewCallerID ?

Re: CDR при первом звонке

Добавлено: 14 апр 2012, 14:34
slavaka_z
А можно вот так?

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

exten => s,n,System(mysql -uroot -p123 'INSERT INTO CDR `src`=${CALLERID(num)} and `remark`="Incoming Call")

Re: CDR при первом звонке

Добавлено: 14 апр 2012, 14:38
Vlad1983
можно
тока именно так работать не будет

Re: CDR при первом звонке

Добавлено: 14 апр 2012, 14:46
slavaka_z
Так?

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

exten => s,1,MYSQL(Connect connid localhost dbuser dbpass dbname)
exten => s,2,MYSQL(Query resultid ${connid} INSERT\ INTO\ CDR\ `src`=\${CALLERID(num)}\ and\ `remark`=\"Incoming Call"\)
exten => s,3,MYSQL(Disconnect ${connid})
Только в этом случае не будут ли большие задержи, чтобы каждый раз коннетиться и дисконектиться к базе, особенно если она на другом сервере?

Re: CDR при первом звонке

Добавлено: 14 апр 2012, 15:09
Vlad1983
изучите сначала синтаксис INSERT

Re: CDR при первом звонке

Добавлено: 14 апр 2012, 16:04
slavaka_z
боже! извините... исправил (не считая экранирования):

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

exten => s,1,MYSQL(Connect connid localhost dbuser dbpass dbname)
exten => s,2,MYSQL(Query resultid ${connid} INSERT INTO CDR (`src`,`remark`) VALUES (${CALLERID(num)}, "Incoming Call"))
exten => s,3,MYSQL(Disconnect ${connid})
Но тогда вопрос: Если в crd_mysql уже настроен и "cdr mysql status" показывает, что соединение есть, можно ли строчки номер 1 и 3 исключить из экстеншенов, чтобы не тратить на это время?

Re: CDR при первом звонке

Добавлено: 14 апр 2012, 16:15
Vlad1983
1. MYSQL никакого отношения к "cdr mysql status" не имеет
2. настроенный ровными руками mysql-сервер даже при удаленном коннекте привносит мизерную задержку (у вас же не сотни одновременно устанавливаемых соединений).

Re: CDR при первом звонке

Добавлено: 14 апр 2012, 17:14
Vlad1983
тоже рабочий вариант и не последний

вобщем, путей несколько
какой выбрать - дело ваше