Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> программы —> ATSlog

Ведение статистики звонков с офисной мини-АТС.

Автор: BAV_Lug.


   Несколько лет назад, начальство поставило мне задачу собирать данные о звонках сотрудников фирмы. В то время в качестве сервера у меня была винда. Под нее существует куча программ (платных и бесплатных) для сбора статистики с офисных мини-АТС, одну из них я и использовал. Но, вот, около года назад, я решил перейти на FreeBSD. Первоначальные поиски аналогичных программ под фрю успехов не принесли :( И я использовал метод описанный в данной статье. Т.е. собирал данные в файл, а потом "скармливал" этот файл программе на винде. Через, некоторое время, я наткнулся на программу ATSlog. На сегодняшний день, она уже присутствует в портах.

  Итак, идем в порты и устанавливаем:

# cd /usr/ports/
# make search name="ATSlog"
Port:   atslog-2.1.1_1
Path:   /usr/ports/comms/atslog
Info:   Software for collecting and analyzing calls from different PBX models
Maint:  ports@logvinov.com
B-deps: mysql-client-5.0.37 p5-DBD-mysql-4.003 p5-DBI-1.54 p5-Storable-2.16
perl-5.8.8
R-deps: expat-2.0.0_1 fontconfig-2.4.2_1,1 freetype2-2.2.1_1 jpeg-6b_4 libdrm-2.0.2
libiconv-1.9.2_2 libxml2-2.6.27 mysql-client-5.0.37 p5-DBD-mysql-4.003 p5-DBI-1.54
p5-Storable-2.16 perl-5.8.8 php5-5.2.1_3 php5-gd-5.2.1_3 php5-mysql-5.2.1_3
php5-pcre-5.2.1_5 pkg-config-0.21 png-1.2.14 t1lib-5.1.1,1 xorg-libraries-6.9.0_1
WWW:    http://www.atslog.com/en/about/

# cd /usr/ports/comms/atslog
# make install clean

  Как видите зависимостей довольно много, так что с собой она может потянуть приличное число пакетов. Хотя у меня большинство уже стояли.
  Копируем дефаултный файл конфигурации (кстати есть вариант с коментами на русском):

# cp /usr/local/etc/atslog.conf.default.rus /usr/local/etc/atslog.conf

  Собственно менять в нем нужно не много - используемая БД и ее параметры, тип атс, настройки порта, ну, а остальное на ваш вкус.
  Вот как он выглядит у меня:

# ATSlog version 2.1.0 build 627 www.atslog.com
# Copyright (C) 2003 Denis CyxoB www.yamiyam.dp.ua
#
# Параметры ATSlog
#
# Не допускается использование пробелов между названием
# параметра и его значением (с обеих сторон от знака "=").
#

# Номер сборки ATSlog.
# Не изменяйте параметр.
#
build=627

#
# Пароль для пользователя $sqlmasteruser
# Серверные программы ATSlog от имени этого пользователя
# инициализируют все обращения к SQL серверу для внесения изменений в базы данных.
# Например:
# sqlmaspasswd=Edktxtybt
#
sqlmaspasswd=atslog

# Остальные параметры для соединения с SQL сервером
#
sqlhost=localhost
sqldatabase=atslog
sqlmasteruser=atslog

# Тип используемого SQL сервера.
# Сейчас поддерживается MySQL и PostgreSQL.
# Например:
# sqltype=MySQL
# sqltype=PostgreSQL
#
sqltype=MySQL

# НАСТРОЙКИ ПОРТА

# Порт для соединения с АТС.
# Можно использовать два вида соединения:
# 1. Через последовательный порт. В этом случае программа
#    будет обращаться к порту как к девайсу /dev/$port. В
#    конфигурационном файле префикс "/dev/" опускается.
#    Например:
# BSD
#    port=cuaa0
# Linux
#    port=ttyS0
# 2. Через TCP/IP порт. При этом демон откроет TCP сокет
#    и будет ожидать соединения по указанному номеру порта.
#    Обязательно нужно указать префикс tcp:номер_порта.
#    Например:
#    port=tcp:1234
#
# 3. Через TCP/IP порт. При этом демон откроет TCP соединение на удалённых
#    хост по указанному номеру порта.
#    Обязательно нужно указать префикс rtcp:хост:номер_порта.
#    Например:
#    port=rtcp:remote.com:1234

port=cuaa0

# Скорость последовательного порта $port сервера
# Скорость должна соответствовать настройкам скорости порта самой АТС.
# Допустимые значения:
# speed=2400
# speed=4800
# speed=9600
# speed=19200
# speed=38400
# speed=57600
# speed=115200
#
speed=9600

# Число  битов  данных при передаче через последовательный порт.
# Допустимые значения от 5 до 8.
#
charsize=8

# Проверка на четность при передаче через последовательный порт.
# Допустимые значения:
# parity=e  (even parity)
# parity=o  (odd parity)
# parity=n  (no parity)
#
parity=n

# Число  стоповых  битов при передаче через последовательный порт.
# Допустимое значения:
# stopbits=1
# stopbits=2
#
stopbits=1

# Директория с исполняемыми файлами программы
#
bindir=/usr/local/bin

# Директория с файлами библиотек (Perl модулей) поддержки
# различных моделей АТС.

libdir=/usr/local/libexec/atslog

# Директория с текстовыми лог-файлами
#
logdir=/var/log/atslog

# Директория с дополнительными файлами использующимися ATSlog.
#
sharedir=/usr/local/share/atslog

# Поддиректория с файлами сообщений на различных языках.
# Располагается в $sharedir
#
# Если у Вас появилось желание сделать новый перевод - добро
# пожаловать в участники проекта! :)
#
langdir=lang

# Программа считывающая данные из АТС
#
atslogd=atslogd
# Флаги запуска. Смотри man atslogd(8).
# Используйте -t при возникновении проблем с tcp режимом
atslogd_flags=


# Основной управляющий скрипт
#
masterscript=atslogmaster

# Скрипт запуска программы при старте системы
#
initscript=/usr/local/etc/rc.d/atslogdinit.sh

# Скрипт ежемесячного вызова ротации логов
#
monthlyscript=/usr/local/bin/atslogrotate

# Скрипт ежедневного вызова сбора информации из
# текстового лог-файла и записи её в базу SQL сервера.
# Скрипт активируется только если параметр $fastwrite=no

dailyscript=/usr/local/bin/atslogdaily

# Скрипт, передающий информацию о звонках SQL серверу
#
atslogdb=atslogdb.pl

# Скрипт, позволяющий очистить от данных таблицы SQL сервера. Скрипт не
# удаляет таблицы и базы данных, а только очищает от информации.
#
# Пример использования:
# [root@server /]$ atslogmaster cleardb
#
cleardb=atslogcleardb.pl

# Текстовый лог-файл в который скрипт записывает звонки из АТС за текущий
# месяц. По окончанию месяца файл будет сжат bzip2 и сохранён под
# именем $callslogfile.1.bz2 В следующий месяц будет произведена его
# ротация в соответствующем порядке.
callslogfile=calls.log

# Текстовый лог-файл текущих звонков.
# После того, как из этого файла данные будут записаны в базу SQL
# сервера его содержимое переносится в $callslogfile

curcallslogfile=currentcalls.log

# Файл со строками, информация из которых не была перенесена из текстового
# лог-файла в базу данных. Как правило, это строки содержащие
# информацию не касающуюся звонков. Например, заголовки столбцов
# пояснения при печати на принтер.
# Файл хранится в папке, описанной параметром $logdir и
# подчиняется правилам ротации. Для дополнительной информации
# смотрите описание параметров $howmonth и $debug.
#
notwritelog=notwrite.log

# Осуществлять ли запись лога $notwritelog или нет. Запись лога
# используется, в основном, для отладки. Удобно отслеживать те данные,
# которые не были обработаны модулем разбора строк.
# Ранее параметр $debug назывался $nowrlog. Был заменён для
# лучшего понимания значения.
#
# Возможные варианты:
# debug=yes
# debug=no
#
debug=no

# Лог работы всего пакета. В нём фиксируется останов, запуск, сообщения
# об ошибках и пр. Файл хранится в папке, описанной параметром $logdir и
# подчиняется правилам ротации.
#
startlogfile=atstart.log

# PID файл.
#
pidfile=/var/run/atslogd.pid

# Сколько месяцев хранить текстовые лог-файлы
# указанные параметрами $callslogfile, $notwritelog и $startlogfile.
# Минимум 1. Желательно 12.
# Лог файлы хранятся в сжатом виде (компрессор bzip2)
#
howmonth=12

# Модель АТС.
# На данный момент поддерживаются следующие:
# Panasonic KX-TA308RU
#           KX-TA308
#           KX-TA616RU
#           KX-TD1232
#           KX-TD1232-RU (русская прошивка)
#           KX-TD816RU
#           KX-TD500
#           KX-TEM824
#           KX-TES824
#           KX-TDA100
#           KX-TDA200
# Samsung   SKP-816
#           NX-820
#           OFFICESERV-7200
#           OFFICESERV-500
#           OFFICESERV-100
#           IDSC-500
# Hybrex    GD-320
# Siemens   HICOM-150
#           HICOM-350H
#           HICOM-250
#           HIPATH-3750 (3000/3750, сжатый формат лога)
# LG        GDK-100
#           GDK-162
#           GHX-46
#           LDK-300
#           LDK-100
# GoldStar  GPS-6A
# Alcatel   4200E
# NEC       NEAX2000 (формат - внутренний SMDR NEAX 2400 IMS)
#
# При указании параметра $model нужно задать только
# обозначение модели без названия производителя.
# Нужно точно указать маркировку модели, т.к. адаптированные под Россию
# АТС могут отличатся форматом даты; например для KX-TA616RU дата
# записывается в формате  DD/MM/YY, а не так, как в родном - MM/DD/YY для
# модели KX-TA616.
# Пример:
# model=KX-TA616RU
#
model=KX-TD1232

# Уровень для системного журнала syslogd
# syslogd используется для сообщения о критических ошибках.
# Для дополнительной информации читайте man logger(1), syslog.conf(5).
# Оставьте поле пустым для отключения записи в системный журнал.
#
syslogfacility=user.err

# Прямая запись с порта АТС в базу данных.
# При значении "no" запись состоявшихся звонков производится сначала в
# текстовый лог-файл ($curcallslogfile), а затем, один раз в сутки в БД SQL
# сервера.
# Присвоение этому параметру значения "yes" позволит синхронно записывать в БД
# информацию о звонках непосредственно в момент их поступления из АТС.
# Данные в текстовый лог-файл ($callslogfile) попадают в обеих случаях.
# Параметр "yes" предполагает демонизацию и постоянное задействование Perl
# скрипта, поэтому требует значительно бОльших ресурсов компьютера.
#
# Возможные варианты:
# fastwrite=no
# fastwrite=yes
#
fastwrite=yes

# End of configuration file...  Have a nice day!

  Теперь, нужно создать создать таблицы в БД (с помощью идущего в комплекте скрипта):

# /usr/local/share/atslog/sql/install-sql.pl /usr/local/etc/atslog.conf

  Добавить запуск ATSlog в rc.conf и попробовать стартануть:

# echo 'atslogd_enable="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/atslogd.sh start
ATSLog is started
# ps ax | grep atslog
78724  ??  Ss     0:00.01 /usr/bin/perl /usr/local/bin/atslogdb.pl --fastwrite
78725  ??  S      0:00.00 /usr/local/bin/atslogd -P /var/run/atslogd.pid -o -f

  Как видим сервис успешно стартанул. Если у вас это не так, то смотрите логи.
  Проверте наличие файла /var/log/atslog/calls.log и посмотрите записываются ли туда звонки.
 
  Теперь перейдем к настройке WEB-интерфейса. Добавим в конфиг апача следующее (должен быть настроен PHP):

Alias /ats/ "/usr/local/www/atslog/"
<Directory "/usr/local/www/atslog">
   Options Indexes
   AllowOverride All
   Allow from all
</Directory>

  Настройки WEB-интерфейса находятся в файле ../www/atslog/include/config.inc.php
В нем нужно указать теже параметры подключения к БД, которые указывали и в atslog.conf. Здесь же указываются коды мобильных операторов.
  Вот, что получилось у меня:

<?php
// error_reporting(E_ERROR);
 /*
   ATSlog web interface settings
 */
// hostname of the SQL server
$sqlhost='localhost';
// Atslog Database
$sqldatabase='atslog';
// atslog SQL user password
$sqlmaspasswd='atslog';
// atslog SQL user name
$sqlmasteruser='atslog';
// database type
$sqltype='mysql'; // PostgreSQL or MySQL
// PBX model
$model='';
// SQL cache directory.
$ADODB_CACHE_DIR = '/tmp/adodb';
$ADODB_CACHE_TTL = 60*60; // 1 hour. SQL query cache lifetime.
$debugMode=FALSE; // Debug mode.
$demoMode=FALSE; // Demo mode.

// Here you can define codes of your local mobile operators.
// here is example for the ukrainian mobile networks.
// Simply put your local operator codes to this array and uncomment this string
// $MobileCodes=array("050", "095", "066", "099", "067", "098", "068", "097",
 "096","039","063", "093", "094", "092");
?>

  После всего проделанного пробуем зайти http://вашсервер/ats/
  Должен появится запрос имени и пароля. Вводим atslog/atslog. Заходим в настройки абонентов. Создаем учетную запись администратора. И затем деактивируем пользователя atslog (либо меняем ему пароль).

  Все. Система готова к работе. Можно раздать сотрудникам пароли для просмотра своей статистики звонков (некоторым это очень помогает, например люди забывают номера телефонов по которым уже звонили), а начальникам давать права на просмотр всей статистики.

P.S. У автора программы, насколько я знаю, катастрофически не хватает времени на ее существенное развитие. А задумок много (например в БД есть список городов с их кодами). Если Вы что-либо допишите к программе (например какие-либо запросы к вэб-интерфейсу), то большая просьба отсылать свои наработки автору, что-бы он включил их в следующую версию программы.  



размещено: 2007-04-14,
последнее обновление: 2007-04-15,
автор: BAV_Lug


Максим, 2007-04-15 в 10:57:27

АТС типа KX-TDA30 будет работать с этой программкой?

BAV_Lug, 2007-04-15 в 12:16:06

Я так думаю, что формат логов у нее такой-же как и у TDA100. Так что выставляешь просто тип атс TDA100. Если это не так, то берешь лог своей АТС и отсылаешь автору. Он довольно оперативно вносит твой тип в программу.

fer@mon, 2007-04-15 в 21:18:35

Впринципе ничего программа, я нечто подобное сам написал, самый простой сборщик звонков под винду и php интерфейс для апача. Проработало год. Потом захотелось все из винды на фрибсд перетащить, пертащил, взял atslog, переписал скрипты сбора статистики и адаптировал к своей базе данных (там все скрипты на perl, решение мне понравилось - очень гибко), вышла конфетка в общем, но есть какой-то баг, время от времени atslogd падает, не часто, в стреднем раз в месяц или вроде того, пока причины не поймал, мож поймаю, а ща я автоподъем по крону поставил, как говорится админ спит, работа идет...

BAV_Lug, 2007-04-16 в 10:22:30

У меня тоже версия 2.1.0 падала. Там были какие-то проблемы с pid-ом. После общения с портмэйкером появилась версия 2.1.0_1 в которой уже этой проблемы не было. Так, что обновись.
А, вот, про php-интерфейс можно поподробнее? Может выложишь куда? Посмотреть охота.

urgor, 2007-04-17 в 16:07:34

Оно коды городов расписывает али нет?

RaDiST_1977, 2007-04-30 в 0:10:24

а к совковой атс "Квант" можно привернуть

walker, 2007-06-21 в 21:53:02

тоже сначала использовали, потом немного "подрезали", не помню почему. теперь php сразу из порта читает и в базу кладет :)

mesb, 2008-02-26 в 22:11:18

А как с транзитными звонками обходились?
Ониж заразы похоже в статистику не попадают.

Или такой проблемы у вас небыло ввиду отсуствия оных? :)

BAV_Lug, 2008-02-27 в 13:08:19

To mesb
Поподробнее про транзитные звонки можно? Что Вы имеете ввиду?

HunTeR, 2008-04-04 в 11:28:13

Интересненько: у меня одного в логах время по старому(не переведеному на час вперед) времени? Системное время в порядке, в вот статистика АТСки на час меньше отображает ))

HunTeR, 2008-04-04 в 11:43:02

Блин! Пойду покупать руковыпрямитель... Atslog помимо звонков с АТС снимает и время... Млин!

KaMa-CyTpA, 2008-07-30 в 18:29:10

Если выставляю TCP - не принимает от АТС вообще ничего
TDA200
Специальная сетевая установлена.
В манах написано что можно по порту 33333 снимать - но у меня подозрение что он не для снятия логов.
Можнт кто знает что?

Максим, 2009-03-20 в 12:52:09

KXTDA 100. Подключил Com порт к серверу и АТС. Но он не хочет видеть его. Возможно потому что я не перезагрузился? (Но перезагрузить данный сервер не могу, т.к. он очень востребован 24 часа в сутки).
Вообщем вот

Fri Mar 20 12:37:52 MSK 2009 atslogd[39254]: Starting
Fri Mar 20 12:37:52 MSK 2009 atslogd[39254]: open_tty on '/dev/cuaa0' failed: (2) No such file or directory
Fri Mar 20 12:37:52 MSK 2009 atslogd[39254]: Can't open serial device '/dev/cuaa0'
Fri Mar 20 12:37:52 MSK 2009 atslogd[39254]: Can't open '/dev/cuaa0', exiting

epo# cu -l /dev/cuaa0 -s9600
/dev/cuaa0: No such file or directory
link down


Что подскажите?


mazay, 2009-03-25 в 22:04:07

обратиться в форум
ls /dev/ | grep cua
cuad0
cuad0.init
cuad0.lock

fox, 2009-07-30 в 0:52:05

Ребята доброе время суток! А кто знает, какие пораметры в конфе надо пробить для вот такой модели АТС: LDK-100 ???
И нужно ли эту АТС как то актевировать командой с системного телефона?

salimk, 2010-03-09 в 9:58:07

Автору респект статья нужная и полезная.
Год тому назад поставил эту прогу на старенький комп Compaq Pentium 2, 96 метров озу, вообщем работала-работала считал себе, про него никто не знал, да я забыл про него, не заглядывал, а тут нам счет вкатили за телефоны, на круглую сумму, вот тогда я вспомнил про него, у народа жесткий шок был когда увидели подробную распечатку кто куда сколько звонил, вообщем вещь нужная и полезная если есть в офисе АТС и хотя бы какая нибудь железка ставьте не раздумывая, а то будете пол года бесплатно работать

yeaa, 2010-07-21 в 8:04:12

у меня есть модуль для avaya IPoffice. правда учитывает только исходящую связь, а для биллинга входящая нафиг и не нужна. бухгалтерия довольна.
avaya-ipo406R5.lib  я на их форуме выкладывал.
если знать формат SMDR лога, то в принципе можно легко своять модуль практически под любую атску.
плохо что прога utf не поддерживает, геморойно её на учить utf. да и не развивается уже давно.



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0489 секунд
Из них PHP: 40%; SQL: 60%; Число SQL-запросов: 77 шт.
Исходный размер: 51548; Сжатая: 13376