Документация
eSMDR - программа для мониторинга мини-АТС.Для современных станций поддерживается LAN SMDR - подключение по сети, без необходимости использовать дополнительный модемный кабель. Древние модели возможно подключить через COM-порт.
Работает в двух режимах - консольном, предназначенным для отладки, и как служба Windows.
Полученные данные сохраняет в локальных файлах, по сети или в базах данных - по технологии ODBC.
Так же позволяет передать данные на обработку другим программам-тарификаторам, причем их количество не ограничено.
eSMDR обнаруживает разного рода ошибки и проблемы с АТС, как то падение цифровых транков, разрывы CO линий, сбои электропитания и множество других. В случае возникновения может немедленно уведомить администратора по email или по СМС (через шлюз).
Особое внимание при написании программы было уделено надежности. Ряд уникальных механизмов позволяет избежать потери данных при сбоях локальной сети, накопителей, COM - порта.
Установка программы чрезвычайно проста. Скачиваем архив программы, распаковываем в любую папку на компьютере.
Все настройки находятся в единственном файле - esmdr.ini. В самом файле есть комментарии, но здесь я распишу более подробно.
Конфигурация
Секция PBX.
model - Тут нужно указать модель вашей АТС.Известные модели: TDA, TDE, NCP, LDK, iPECS. Для этих станций протестированы и работают функции разбора логов.
TDE, NCP, LDK, iPECS можно подключать по сети. Для древних станций нужно отдельное подключение через COM-порт.
method - тут как раз и указываем способ подключения. "TCP" или "COM".
countrycode - телефонный код страны, в которой стоит ваша АТС. К примеру 7 для России или 380 для Украины.
areacode - код города. Если в вашем городе несколько кодов (например 495 и 499) - выбирайте тот, к которому подключено большинство СО линий. Примеры: Москва - 495, Киев - 44.
international - код выхода на международную связь. В большинстве случаев 00, но в России все еще используется 810.
longdistance - код выхода на межгород. 8 для России, 0 - для Украины и других стран.
minlocal - минимальное количество цифр в городском номере. В крупных городах, обычно 7, как и максимальное. В Харькове - 6.
maxlocal - максимальное количество цифр в городском номере. Как правило, 7, в сельской местности может быть 6 и меньше.
addchar - символ, который добавляется между кодом города и коротким городским номером. Обычно - 2.
[PBX]
model="TDE"
method="TCP"
countrycode="7"
areacode="495"
international="810"
longdistance="8"
minlocal=7
maxlocal=7
addchar="2"
Секция COM
Если подключение через COM, нужно правильно указать настройки порта.port - порт на компьютере, к которому вы подключили АТС.
baudrate - скорость. Устанавливать такую же, как в настройках АТС. Для TDA настройки можно посмотреть в меню 11.1 консоли, вкладка RS232C.
bytesize - в консоли это параметр "Длина слова", может быть 8 или 7 бит.
parity - бит четности. 0 - нет (NOPARITY), 1 - нечетный (ODDPARITY), 2 - четный (EVENPARITY), 3 - метка (MARKPARITY), 4 - пробел (SPACEPARITY).
stopbits - стоповый бит. 0 - 1 бит, 1 - полтора бита, 2 - 2 бита.
control - допустимые значения "DTR", "RTS", "XONXOFF". Для TDA должно стоять "DTR". Для других станций значение придется подбирать.
[COM]
port="COM1"
baudrate=19200
bytesize=8
parity=0
stopbits=0
control="DTR"
Все гораздо проще, если у вас TDE/NCP или новая LG. Для этих станций достаточно заполнить секцию TCP.ip - такой же, как вы используете для подключения консоли. Еще его можно подсмотреть в "Свойства платы" SVM. Строка в таблице так и называется, "IP-адрес для платы SVM".
port и password - это порт и пароль, для Панасоников смотрим в меню 11.1 на вкладке "Опции SMDR". В станциях LG авторизация не поддерживается, необходимо задавать login="".
[TCP]
ip="192.168.1.200"
port=2300
login="SMDR"
password="PCCSMDR"
LOG - секции.
Их может быть много, главное, что бы первые три буквы в названии были LOG. Служат для вывода логов АТС в файлы. Это самый простой вывод, но, одновременно, и самый важный. Программа никак не форматирует информацию, записывая ее точно в том виде, как выдает АТС. Я рекомендую всегда настраивать одну из LOG секций для сохранения журнала на локальном жестком диске.Если используется сменный накопитель, или же сетевой путь, включается уникальный механизм - safeengine. В этом режиме программа сохраняет информацию, которую не удалось записать, в специальных буферах. Можно смело менять съемный накопитель или отключать компьютер от сети во время работы программы. Как только связь восстановится, лог будет сброшен в файлы.
enabled - включает или отключает вывод. 0 - отключить, 1 - включить.
filename - имя файла для записи логов. Если указан относительный путь, он будет начинаться с папки программы. Абсолютный путь так же можно указывать. В имени файла допускаются подстановки. %y - текущий год, %m - месяц, ;%d - день, %h - час, %w - день недели.
Программа не блокирует файл на чтение. Следовательно, вы всегда можете смотреть звонки в реальном времени. Например, по "F3" в FAR'е.
[LOG]
enabled=1
filename="log\smdr-%y-%m.log"
TCPOUT - секции.
Как и LOG, их может быть много. Служат для передачи данных по TCP. Нужны, если помимо еSMDR вы хотите использовать другие логеры или тарификаторы. До появления еSMDR не существовало удобного способа подключить по SMDR протоколу несколько программ. Теперь это очень просто, еSMDR способна сама имитировать мини-АТС. Настраиваем подключение еSMDR к АТС, а сторонние программы - на получение данных по TCP.enabled - 0 - запретить, 1 - разрешить передачу по TCP.
mode - режим. Поддерживается "client" или "server". В клиентском режиме программа будет пытаться подключиться к стороннему приложению, это режим по умолчанию. В режиме сервера, наоборот, ожидает подключения сторонней программы, этот режим наиболее точно имитирует работу мини-АТС.
ip - адрес компьютера, на котором запущена сторонняя программа. Если на том же, что и еSMDR - используйте "127.0.0.1".
В режиме сервера - адрес интерфейса, который будет прослушиваться. Можно задать "*", что бы eSMDR слушала на всех интефейсах.
port - номер порта, который слушает сторонняя программа, либо сама eSMDR в режиме сервера.
При выводе по TCP механизм safeengine включен всегда. Так что, каждая программа получит свою порцию данных, даже в случае проблем с сетью, или если она стартует позже, чем еSMDR.
[TCPOUT]
enabled=1
mode="client"
ip="127.0.0.1"
port=2301
LOG и TCPOUT - два типа секций с неформатированным выводом. Т.е. программа передает в файлы и по сети точно то, что и сама получает от АТС. Другие способы вывода требуют разбора лога.Секция SMDR
Описывает, каким образом разбирать логиdate - формат даты. Например, "DD/MM/YY" - это значение по умолчанию. Можно изменить разделитель, поменять местами дни и месяцы или год. Для TDA/TDE/NCP формат можно посмотреть в меню 11.1 консоли.
format - позволяет описать формат в котором станция выводит лог. Для всех трех типов, которые поддерживают новые Панасоники, есть вариант в конфиге. Просто посмотрите тип на вкладке 11.1 и раскомментируйте нужную строчку.
Если у вас другая станция, но лог тоже выводит в поля фиксированной длины, строку format можете написать самостоятельно. На тех позициях, где АТС выводит дату, ставьте D. Время - T, допускается и 24-х и 12-ти часовой формат.
E - внутренний номер, C - номер внешней линии, N - номер внешнего абонента, R - время до поднятия трубки, d - длительность разговора, A - номер счета, c - код состояния, S -стоимость.
Разбор логов с полями переменной длины пока не реализован.
incoming - символы по которым программа определяет, что вызов - входящий. Допускается использовать список значений через запятую.
did - символы, с которых начинается DID-номер
timesrc - способ определения времения звонка. "PBX" - значение по умолчанию, используется время АТС. Другое значение - "computer", будет взято время хоста, на котором запущена eSMDR.
[SMDR]
date="DD/MM/YY"
format="DDDDDDDD TTTTTTT EEEEE CC NNNNNNNNNNNNNNNNNNNNNNNNN RRRR dddddddd AAAAAAAAAA ccc"
incoming="<I>"
did=""
timesrc="PBX"
Вместе с программой поставляются форматные строки для станций Panasonic (тип A/B/C), LDK, iPECS и iPECS MG. Для АТС LG вам может понадобится внести изменения в соответствие с длиной EXT, наличия или отсутствия кода строки.Секция REPLACE
Позволяет подправить первые цифры найденных номеров.К примеру, строка 815="00" приведет к тому, что 815 в начале номера будет заменено на "00". Изменения не действуют на секции LOG и TCPOUT. Большинство подмен можно произвести путем тщательной настройки АТС, и сейчас секция REPLACE применяется достаточно редко.
[REPLACE]
815="00"
0000="00"
015="00"
0572=""
057=""
Самый простой способ вывода разобранного лога - запись в файл CSV. Секции CSV
Очень похожи на LOG, и их тоже может быть несколько.enabled - включает или выключает запись
decimal - десятичный разделитель. Английский excel понимает точку (.), русский - запятую (,). В большинстве случаев лучше закомментировать этот параметр и он будет определен в зависимости от настроек операционной системы.
separator - аналогичным образом задает разделитель списка. Стандарт - запятая (,) русская версия excel, однако, использует символ "точка с запятой" (;). Закомментируйте или удалите параметр, что бы программа определяла его автоматически.
excelformat. не смотря на все ухищрения, excel съедает лидирующие нули при открытии CSV файлов. Это неприемлимо для стран, где с нуля начинаются все междугородние вызовы. Задайте значение excelformat=1, и нули будут спасены. Правда, файл может оказаться несовместимым с другими программами.
filename - шаблон имени файла, описание аналогично секции LOG.
[CSV]
enabled=1
decimal="."
separator=","
excelformat = 0
filename = "log\smdr-%y-%m.csv"
Секции ODBC
После разбора лога можно, наконец, приступить к записи звонков в базы данных. В настоящее время поддерживается вывод по ODBC. Следовательно, первым делом нужно создать системный DSN для подключения к базе. Необходимый мастер находится через Панель управления - Администрирование - Источники данных.(Для 64-х битных систем используйте 32-х разрядную версию администратора %windir%\sysWOW64\odbcad32.exe)
Администратор источников данных ODBC
Переходите на вкладку "Системный DSN", жмете "Добавить" и следуете указаниям мастера.
DSN нужно создавать на компьютере, где стоит eSMDR, а вот сам сервер БД может располагаться где угодно в сети. Не беспокойтесь по поводу ошибок передачи - при подключении по ODBC механизм safeengine всегда на страже. Теперь объяснение параметров в конфиге eSMDR:
enabled - включает или отключает вывод. 0 - отключить, 1 - включить.
dsn - имя системного DSN, который мы только что создали
login, password - заполняется, если для авторизации используются средства БД. Для аутентификации Windows оставить пустыми. Я рекомендую использовать авторизацию SQL сервера для eSMDR.
table - таблица в базе, куда производится запись звонков.
fields - поля в этой таблице
values - значения, которые программа запишет в эти поля, и здесь допускаются следующие подстановки:
%Y -год, %M -месяц, %D - день, %h - час, %m - минуты, %s - секунды, %c - код статуса, %E - внутренний номер, %C - внешняя линия, %r продолжительность звонка до снятия трубки, %N - имя внешнего абонента, %n номер внешнего абонента, %T - имя DID, %t - номер DID, %d - (продолжительность звонка в секундах), %a номер счета, %i 0 для исходящих, любое другое значение - входящий вызов, %F - (стоимость - целая часть), %f стоимость - копейки. Значение нужно располагать в том же порядке, что и поля.
sql - тип сервера. Может быть "mssql2008", "mssql" (для версий, младше 2008), "mysql4" для MySQL 4 и новее. Указание типа поможет программе максимально эффективно работать с БД. Но тип можно и не указывать - в этом случае включается режим максимальной совместимости, позволяющий записывать данные почти в любую БД.
И, разумеется, секций ODBC может быть несколько, программа ищет их по первым четырем буквам.
[ODBC]
enabled=1
dsn="esmdr"
login=""
password=""
table="calls"
fields="pbxid, timeofcall, cd, ext, co, ring, dialnum, dialname, duration, accode, incoming, cost"
values="1, '%Y%M%D %h:%m:%s', '%c', '%E', '%C', %r, '%n', '%N', %d, '%a', %i, %F.%f"
sql="mssql2008"
Пример настройки для формата DBF смотрите здесь.Секция EMAIL.
Начиная с версии 0.5 eSMDR умеет отправлять уведомления по электронной почте. Но нужно настроить параметры:server - DNS имя вашего SMTP сервера
port - номер порта, 25 по умолчанию
from - от имени кого нужно посылать сообщения.
to - получатель по умолчанию. Можно написать несколько через запятую.
replyto - кому направлять ответы. Полезно заполнить, если вы уведомляете об ошибках своего провайдера или изготовителя АТС.
organization - название вашей организации
cc - адрес, по которому будут направляться копии всех сообщений. Тоже можно указать несколько, через запятую.
username, password - нужно заполнить, если ваш сервер требует авторизацию.
[EMAIL]
server="smtp.domain.tld"
port=25
from="\"eSMDR MAIL SERVICE\" "
to=""
replyto=""
organization=""
cc="superadmin@domain.tld"
username=""
password=""
Секция WATCHLOG
Позволяет настроить отправку ежедневной сводки. Получая такую сводку, вы будете знать, что все работает как надо, логи собираются и ошибки контролируются. Но если зависнет сервер, на котором вы установили eSMDR, сводка не придет. Что и послужит тревожным сигналом.enabled - 1 разрешает, 0 запрещает отправку сводки. time - время формирования сводки. to - позволяет переопределить получателя. Если не указывать, получатель будет взят из глобальных настроек e-mail.
[WATCHLOG]
enabled=1
time="03:30"
to=""
Секции ALARM
Теперь переходим к реакции программы на ошибки АТС. Возможность поддерживается только для АТС Panasonic KX-TDA, KX-TDE и KX-NCP. Первым делом, вывод ошибок по протоколу SMDR нужно включить. Делается это в п. 11.1 консоли:Включаем печать журнала ошибок и продолжаем настройку программы. Вот самый простой пример:
[ALARM]
email=1
-уведомления о всех ошибках будут отправляться с использованием настроек email по умолчанию.Но можно настраивать уведомления индивидуально, в зависимости от номера ошибки, слота и т.д. Вот полный список параметров:
email - 1 разрешает, 0 - запрещает отправку сообщения при возникновении ошибки
level - уровень. Может быть "MN" - незначительная или "MJ" - серьезная ошибка. Если не указывать, секция будет обрабатывать ошибки любого уровня.
errorcode - номер ошибки
shelftype - тип блока. " " (пробел) - означает физический блок, "*" - виртуальный. Если не указывать, тип проверяться не будет.
shelf - номер блока. Для TDE100-200 и NCP всегда 1, для шестисоток возможны варианты.
slot - номер слота
port - номер порта на плате
to - получатель сообщения. Если заполнить этот параметр, он переопределит глобальные значение, которое мы задали в секции email.
template - шаблон письма. Текстовый файл в кодировке UTF8. Первая строка файла пойдет в заголовок письма, остальные составят тело. В шаблоне допускаются следующие подстановки:
%M/%D/%Y %h:%m - месяц, день, год, часы и минуты возникновения ошибки.
%E - номер ошибки, %T - текстовое сообщение об ошибке, %L - уровень (MN или MJ), %V - тип блока, %B - номер блока, %S - слот, %P - порт.
command - запуск внешней команды при возникновении ошибки. Допускается использовать те же подстановки, что и в шаблоне письма. Если нужны возможности командного процессора, как то перенаправление ввода/вывода, указывайте cmd.exe /C в начале командной строки.
Вот пример с заполнением всех параметров:
[ALARM2]
email=1
level="MN"
errorcode=10
shelftype=" "
shelf=1
slot=0
port=0
to="power_supply@domain.tld,admin@domain.tld"
template="alarm.txt"
command="cmd.exe /C echo %M/%D/%Y %h:%m ALM #%E %T %L %V%B%S%P >>errorlog%Y.txt"
stop=0
Обрабатываются все ALARM'ы по очереди, так что одна ошибка легко может привести к отправке нескольких уведомлений.Это очень удобно, к примеру можно настроить систему так, что администратор будет получать сообщения о всех ошибках, главный энергетик - о проблемах с электропитанием, инженеры провайдеров - об обрывах на линиях, ну и сапорт Панасоника - о самых мажорных глюках.
Но если вам это не нужно, обработку ошибок можно прекратить после любой секции ALARM. Задав параметр stop=1.
Возможны уведомления и посредством SMS. Пример настройки.
Секция WEB
позволяет настроить web-интерфейс.enabled - 0 запрещает, 1 разрешает функцию.
ports - список портов, на котором будет работать WEB. Можно указать число, тогда порт будет прослушиваться на всех возможных интерфейсах. Допускается и нотация адрес:порт. (К примеру, если указать 127.0.0.1:8080, web интерфейс будет доступен только с локального компьютера). Можно указывать несколько значений через запятую.
maxcsvview - позволяет ограничить размер CSV файлов, загружаемых во встроенный табличный просмотрщик. 80 Кб - подходит для большинства случаев. Если у вас современный браузер и мощный компьютер - увеличьте это значение. Если тормозит поиск или таблица медленно загружается - уменьшайте.
adminpass - пароль пользователя admin. Этому пользователю разрешено менять почти все настройки сервиса, мониторить работу АТС в реальном времени и перезапускать службу.
userpass - пароль пользователя user. User может только просматривать настройки (кроме паролей) и мониторить АТС.
Эти два параметра нужны только для первого запуска вэб-интерфейса. Программа кэширует зашифрованные пароли, так что, после успешного запуска WEB-интерфейса, рекомендуется удалить строки adminpass и userpass из ini-файла.
[WEB]
enabled=1
ports="8080"
maxcsvview=80
adminpass="noadmin"
userpass="nouser"
Секция SERVICE.
В большинстве случаев, ничего менять там не надо.Разве что у нас несколько станций - тогда делаем несколько копий программы и в каждом файле smdr.ini меняем:
servicename - это имя сервиса, должно быть уникальным в пределах хоста.
servicedisplayname - на то имя, которое мы хотим видеть в диспетчере служб.
[SERVICE]
servicename="EsmdrService"
servicedisplayname="eSMDR READER"
С конфигурацией все, теперь запускаем программу.