asterisk настройка cdr csv

База знаний

Asterisk call data records in comma-separated text files

По умолчанию, Asterisk генерирует CDR записи в точко разделенные тестовые файлы в директории /var/log/asterisk/cdr-csv. Файл Master.csv содержит все записи. Детализированные записи могут быть частично сконфигурированы на основе канала, и некоторые из данных для IAX и SIP могут быть определены на пользовательском уровне. Конфигурация Zap для CDR записей определяется каналом в zaptel.conf

Для того чтобы с этим работать, вам надо загрузить cdr_csv.so. Введите “ show modules” в CLI и вы увидите, загружен он или нет. Если нет: напечатайте “ load cdr_csv.so” в CLI. Вам также надо добавить эту команду в /etc/asterisk/modules.conf, если Астериск не автоматически включает этот модуль при запуске.

  1. accountcode: Какой учетный номер используется: account, (строка, 20 символов)
  2. src: Номер Caller*ID (строка, 80 символов)
  3. dst: Расширение направления (строка, 80 символов)
  4. dcontext: Контекст направления (строка, 80 символов)
  5. clid: Caller*ID с текстом (80 символов)
  6. channel: Используемый канал (80 символов)
  7. dstchannel: Канал направления, если подходит (80 символов)
  8. lastapp: Последнее приложение, если подходит (80 символов)
  9. lastdata: Дата последнего приложения (аргументы) (80 символов)
  10. start: Начало вызова (дата/время)
  11. answer: Ответ вызова (дата/время)
  12. end: Конец вызова (дата/время)
  13. duration: Полное время в системе, в секундах (целое), от набора номера до зависания
  14. billsec: Полное время вызова, в секундах (целое), от ответа до зависания
  15. disposition: Что случилось с вызовом: ANSWERED, NO ANSWER, BUSY, FAILED (на некоторых CDR выходных буферах, например ODBC, они могут быть целыми; заметьте, что более детальная инфа может быть найдена в переменной диалплана $HANGUPCAUSE)
  16. amaflags: Какой флаг используется: смотри amaflags: DOCUMENTATION, BILLING, IGNORE и т.д., указанного на базисе каждого канала подобно accountcode.

В некоторых случаях появляется uniqueid:

  • uniqueid: Уникальный Идентификатор Канала (32 символа)

Замечание: Вы можете редактировать файл источник cdr_csv.c для того, чтобы разрешить CSV_LOGUNIQUEID (она отключена по умолчанию)

источник

Asterisk CDR — Статистика звонков

Call Detail Records

CDR: Описание полей

Поле Значение/Пример Описание
accountcode 54321 Код аккаунта присвоенный абоненту, для биллинга например. По умолчанию не задан.
src 8129981138 Идентификатор вызывающего абонента(Caller ID). Источник вызова, сохраняется автоматически. R/O
dst 111 Пункт назначения вызова.Вызываемое расширение диалплана.
dcontext from-internal Контекст назначения обработки вызова. auto, R/O
clid «Olegus» Caller ID вызывающего абонента в полном формате — «name» . auto, R/O
channel SIP /0004F2040808-a1bc23ef Канал инициатор вызова. A-leg(side).auto, R/O
dstchannel SIP /0004F2046969-9786b0b0 Канал назначения вызова. B-Leg(side).auto, R/O
lastapp Dial Приложение обработки вызова выполненное последним в канале. auto, R/O
lastdata SIP /0004F2046969,30,tT Данные (например ‘Dial(данные)’) приложения выполненного последним.auto, R/O
start 2016-05-27 12:02:00 Время поступления вызова вызова. auto, R/O
answer 2016-05-27 12:02:15 Время ответа на вызов абонентом или ответ приложения. auto, R/O
end 2016-05-27 12:08:15 Время окончания соединения.Hangup. auto, R/O
duration 195 Общая продолжительность вызова в секундах.auto, R/O
billsec 180 Продолжительность соединения в секундах с момента ответа(снятия трубки или выполнения команды Answer в диалплане).auto, R/O
disposition ANSWERED Состояние обработки вызова. Может быть: NO ANSWER, FAILED, BUSY, ANSWERED или UNKNOWN.
amaflags DOCUMENTATION Automatic Message Accounting (AMA) flag. значения: OMIT, BILLING, DOCUMENTATION или Unknown.
userfield custom Пользовательское поле. Пусто по умолчанию, назначается в диалплане. set(CDR (userfield)= ). R/W
uniqueid 1288332400.1 Уникальный идентификатор канала. R/O

Примерная схема таблицы CDR

datetime zero ‘0000-00-00’ error (STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE)

datetime zero ‘0000-00-00’ true

Также можно добавить собственные поля:

Приложения и функции CDR

Команды и функции диалплана для работы с CDR .

cdr.conf

backends

Модули баз данных предоставляют различные бакенды для записи CDR . Все они требуют специфических настроек.

cdr_adaptive_odbc

Чтобы данные переменной useragent были занесены через cdr_adaptive_odbc, надо создать столбец useragent в БД.

В файле конфигурации cdr_adaptive_odbc можно создать множество таблиц. Имя секции может быть любым, модуль не использует его. Вот пример простой конфигурации таблицы:

Option Value/Example Notes
connection asterisk База данных. Параметры соединения настраиваются в Asterisk: res_odbc.conf. Обязательный параметр.
table asterisk_cdr Имя таблицы БД. Обязательное поле.
usegmtime no Использовать время GMT вместо локального времени. По умолчанию -‘no’.

В дополнение к вышеперечисленным опциям cdr_adaptive_odbc.conf, можно задать ещё несколько.

Также, можно отфильтровать определенное содержимое.

И наконец, можно добавить статические данные, дополнительно к поступающим из CDR .

cdr_csv

Для работы не требует конфигурации, тем не менее есть несколько параметров:

Option default Notes
usegmtime no Сохранять время GMT вместо локального. По умолчанию — no.
loguniqueid no Сохранять uniqueid переменную CDR . По умолчанию — no
loguserfield no Сохранять userfield CDR переменную . По умолчанию — ‘no’.
accountlogs yes Создавать отдельный csv файл для каждой переменной accountcode. По умолчанию — yes.
cdr_custom

Данный модуль используется для создания пользовательского (custom) CSV файла.
Конфигурационный файл модуля cdr_custom.conf.
Единственная секция [mappings] может быть использована в этом файле. Шаблон задается с помощью функций диалплана Asterisk.

В следующем примере cdr_custom создает файл /var/log/asterisk/cdr-custom/Master.csv. Шаблон использует функции function ‘CDR'() для извлечения значений и function ‘CSV_QUOTE'() обеспечивающую правильное форматирование CSV файла ($)>).

cdr_manager

Первая секция [general] содержит единственную опцию enabled, по умолчанию = no.

Следующая секция cdr_manager.conf это [mappings]. Здесь назначается пользовательская CDR переменная передаваемая менеджеру Asterisk.

В данной конфигурации заданные переменные появятся как события в интерфейсе менеджера.
Источником событий станет следующий диалплан:

Следующая команда инициирует вызов:

В итоге, следующее событие отобразится в Asterisk Call ManagerFinally:

источник

«Допиливаем» Asterisk CDR Viewer под себя

«Я профессионал, потому что не ленюсь искать информацию в google» — сказал мне однажды коллега.

А я поленился и начал «допиливать» CDR Viewer под себя, даже не посмотрев хотя бы вот это.
А может и не в лени дело, просто было интересно… в общем, что из этого вышло можно посмотреть под катом:)

Споры о том, что лучше использовать в качестве офисной АТС — asterisk (с веб-интерфейсом или без, хотя это отдельная тема для споров) или какую-то коробку типа Panasonic, которых на рынок выкинуто немеренное количество — не утихают до сих пор, но топик не об этом, лично для себя я уже давно определился. Хотелось бы поделиться с сообществом своим вариантом придания интерфейсу просмотра статистики дополнительного фунционала.

В качестве «подопытного» я использовал FreePBX Distro (FreePBX 2.11, Asterisk 11, CentOS 6.5), скачанный с официального сайта проекта. Выбор был продиктован тем, что разработчики FreePBX уже позаботились о прикручивании БД к Asterisk и структура хранения записей в общем-то меня устраивает. Хотя процедура «прикручивания» MySQL или какой-либо другой базы к Asterisk была описана ни раз и ни два, о чем можно почитать например здесь, все же в целях экономии времени я решил этого не делать.

За основу был взят Asterisk CDR Viewer (если не нужно каких-то сверхмудреных отчетов — то вполне себе пригодная и простенькая статистика), скачать можно тут.

Установка CDR Viewer не представляется какой-то нетривиальной задачей.

Переходим в нужную нам директорию, качаем архив, извлекаем файлы из архива:

Переносим файлик алиаса в папку с apache2:

Изменяем настройки подключения к БД для Asterisk-CDR-viewer

Нужно поменять параметры в соответствии с текущей конфигурацией вашей базы:

$db_user = ‘[MySQL пользователь]’;
$db_pass = ‘[MySQL пароль]’;
$db_name = ‘[Имя базы]’;

Делаем рестарт веб-сервера:

Теперь в браузере набирая [адрес asteridk-сервера]/acdr/ попадаем на страницу статистики.

Первое, что мне захотелось сделать — прикрутить авторизацию для просмотра этой самой статистики, для этого воспользуемся htpasswd.
Если не установлена —

Переходим в /etc/apache2 и созадем юзер/пароль для статистики:

Вводим пароль в диалоге, который предлагает htpasswd и получаем файл «passwordfile» с юзером «username» и сгенерированным зашифрованным паролем.

Далее в /etc/apache2/conf.d изменяем asterisk-cdr-viewer.conf, раскомментрировав строки авторизации, в результате получаем:

Alias /acdr/ «/var/www/asterisk-cdr-viewer/»

AuthName «Asterisk-CDR-Stat»
AuthType Basic
AuthUserFile /etc/apache2/passwordfile
AuthGroupFile /dev/null
require valid-user

Рестартуем apache2 и при входе на страницу видим окно авторизации:

Следующее, что был сделано — это прослушивание разговоров из веб-интерфейса.

1) Для прослушивания звонков добавляем две иконки в каталог /var/www/asterisk-cdr-viewer/templates/images (play и stop)

источник

База знаний

Здесь еще один написанный на PHP скрипт для импорта файлов cdr.csv в mysql
cdr базу данных. Полезен для перехода от текстовых cdr файлов к БД или даже для еженочных импортов.

Этот скрипт надежен для запуска многократное число раз лог файл, который хранит рост, потому что он, во-первых, проверяет таблицу БД для поиска старшей записи и только потом импортирует CDRs, которые НИКОГДА
This script is safe to run multiple times on a log file that keeps growing
because it first checks the database table to find the oldest record and
then only imports CDRs that are NEWER than the oldest database record.

Скопируйте и вставьте скрипт в текстовый файл, например, “importcdr.php” и затем используйте php в командной строке для выполнения следующего:
php importcdr.php Master.csv

Обновлено July 21, 2005: I fixed this code so it should copy and paste properly now. Wiki не нравятся квадратные скобки!

Замечание: Поля в файле Master.csv очень зависят от ваших настроек. Там есть комментарии о них.

Обновлено June 2, 2006: Этот скрипт теперь прекрасно работает с астериском 1.2.7.1.

\n»);
print(«Where filename is the path to the Asterisk csv file to import (Master.csv)\n»);
print(«This script is safe to run multiple times on a growing log file as it only imports records that are newer than the database\n»);
exit(0);
>

// соединение с бд
$linkmb = mysql_connect($locale_db_host, $locale_db_login, $locale_db_pass)
or die(«Could not connect : » . mysql_error());
//echo «Connected successfully\n»;
mysql_select_db($locale_db_name, $linkmb) or die(«Could not select database $locale_db_name»);

/** 1) Ищет последний элемент лога **/
// просматривает в cdr таблице, чтобы увидеть, когда последний элемент был создан.
// это устанавливает начальную точку для данных астариска.
$sql=»SELECT UNIX_TIMESTAMP(calldate) as calldate».
» FROM cdr».
» ORDER BY calldate DESC».
» LIMIT 1″;

if(!($result = mysql_query($sql, $linkmb))) <
print(«Invalid query: » . mysql_error().»\n»);
print(«SQL: $sql\n»);
die();
>
$result_array = mysql_fetch_array($result);
//$lasttimestamp = date(«Y-m-d H:i:s», $result_array[‘voip_stamp’]);
$lasttimestamp = $result_array[‘calldate’];

//** 2) ищет новые записи в лог файле астериска. **

$rows = 0;
$handle = fopen($logfile, «r»);
while (($data = fgetcsv($handle, 1000, «,»)) !== FALSE) <
// ЗАМЕЧАНИЕ: поля в Master.csv могут изменяться. Это должно работать по умолчанию на всех кстановках, но вы можете отредактировать следующую строку для сравнения вашей конфигурации
list($accountcode,$src, $dst, $dcontext, $clid, $channel, $dstchannel, $lastapp, $lastdata, $start, $answer, $end, $duration,
$billsec, $disposition, $amaflags ) = $data;

// 3) анализирует каждый ряд и добавляет к бд
if(strtotime($end) > $lasttimestamp) < // мы нашли новую запись, добавим ее к БД
$sql = «INSERT INTO cdr (calldate, clid, src, dst, dcontext, channel, dstchannel, lastapp, lastdata, duration, billsec, disposition, amaflags, accountcode)
VALUES(‘$end’, ‘».mysql_real_escape_string($clid).»‘, ‘$src’, ‘$dst’, ‘$dcontext’, ‘$channel’, ‘$dstchannel’, ‘$lastapp’, ‘$lastdata’, ‘$duration’, ‘$billsec’,
‘$disposition’, ‘$amaflags’, ‘$accountcode’)»;
if(!($result2 = mysql_query($sql, $linkmb))) <
print(«Invalid query: » . mysql_error().»\n»);
print(«SQL: $sql\n»);
die();
>
$rows++;
>
>
fclose($handle);

источник

Читайте также:  настройки pdf для autocad
Оцените статью
Adblock
detector