Настройка интеграции Shelter2 с телефонным тарификатором PhoneTariff

 

Актуальную сборку можно скачать на FTP

 

 

Этапы тарификации звонков

 

Классическая схема подключения АТС через COM-порт. АСТ настроена на передачу данных по протоколу RS232, подключена нульмодемным кабелем в COM-порт.

 

1. RS232Reader слушает COM порт и формирует файлы в директории WorkDir. WorkDir это папка которая может находиться на любом компьютере в сети.

    Имя файла имеет вид типа 000012FA.$qi.

2. SPCServ забирает из WorkDir этот файл и анализирует парсером commonparser.dll (для настройки см. раздел Настройка Commonparser.ini), определяет

    время звонка, телефонный номер по которому был произведен звонок, продолжительность. При определённых настройках программы файл уже может

    содержать в себе стоимость и направление. В этом случае пункт 2.1 не выполняется, а в настройках SPCServ.ini за место PhoneCalc.dll

    прописываем "-" без ковычек.

2.1. Срабатывает PhoneCalc.dll (для настройки см. раздел Настройка PhoneCalc.ini и PhoneTariff.ini), которая из базы ShelterPhone.fdb определяет

направление звонка и стоимость. PhoneCalc.dll подключается к серверу блокировок v1.4. Backup базы ShelterPhone.fdb сделан под FireBird 1.5,

можно не переводить базу под FireBird 2.5.

2.2. Затем, SCNAS.dll (для настройки см. раздел Настройка SCNAS.ini) передает информацию о звонке в NAS базу (база данных всех телефонных

звонков – копия пустой empty базы Shelter.fdb, любой версии). В этой базе храниться информация обо всех исходящих звонках.

При необходимости по информации в этой базе можно строить отчёты с использование программы shphone.exe.

2.3. Срабатывает ShelterConnect.dll (для настройки см. раздел Настройка ShelterConnect.ini) и информация о звонке поступает в базу данных

программы Shelter.

 

 

Данная схема является классической. Если АТС работает по TCP/IP, то используется программа TelnetLogger.exe

 

 

Программа PhoneTariff.exe

 

Программа PhoneTariff предназначена для настройки тарифов телефонных звонков по всему миру в разное время суток.

После копирования программы на диск необходимо сделать restore базы ShelterPhone.fbk. В ней хранится все информация о тарифах, зонах,

телефонные коды регионов и городов, информация о праздничных и выходных днях. Данные в базу можно заносить при помощи программы Transfer.exe*.

Загрузка осуществляется из DBF файла, следущего формата:

 

формат DBF файла из которого происходит выгрузка данных в ShelterPhone.fdb (Рис. 1)

 

В файле PhoneTariff.ini(для настройки см. раздел Настройка PhoneCalc.ini и PhoneTariff.ini) необходимо прописать путь к базе ShelterPhone.fdb

и запустить программу phonetariff.exe.

 

Вид программы PhoneTariff.exe (Рис. 2)

 

На рисунке 2 в окне 1 отображаются зоны, например, SNG – СНГ, AFRICA – Африка. Можно создавать свои зоны. В окне 2 для каждой зоны

формируется тариф. Окно 3 предназначено для присваивания телефонным кодам определенной зоны. Можно присвоить всему континенту одну зону,

а можно для каждого города разные зоны.

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

или выходного дня, то они заполняются со стоимостью равной нулю.

Если в тарифе выходного дня нет ни одной записи, то тариф выходного дня заполняется всеми данными из тарифа рабочего дня. Если есть хотя бы одна

запись в в тарифе выходного дня, то стоимость не заполненных временных промежутков будет равна нулю.

Если существует необходимость звонки в определенные населенные пункты тарифицировать по особым ценам (например, они должны быть бесплатными),

то можно добавить зону, настроить её тарифный план и, затем, выбрать в карточке кода нужных населенных пунктов выбрать нужную зону.

У зоны есть два ключевых параметра: округление и чувствительность. Если продолжительность звонка меньше указанной чувствительности,

то данный звонок будет игнорироваться. (Например, звонки до 5 сек. бесплатно).

В России используется сокращенный набор телефонных номеров. Например, для звонка в московскую область можно использовать следующие варианты:

 

 

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

система телефонных префиксов. Настройка префиксов осуществляется на соответствующей закладке. Например телефонный тарификатор установлен 

в г.Кемерово, код города 3842, но при звонке по городу гости отеля из своего номера набирают просто шестизначный номер телефона, а для того чтобы

привести его к международной системе необходимо завести префикс «пусто» - подстановка «73842».

В программе PhoneTariff существует проверка расчета стоимости звонка. Для удобства можно ограничиться четырьмя зонами: 1 - по городу; 2 - по области;

3 - по стране; 4 - по остальному миру. 

Данные настройки всегда согласовываются с заказчиком.

 

 

 

Интерфейс работы Shelter со сторонним ПО

 

После каждого исходящего звонка сторонняя программа формирует в определенной папке (WORKDIR) текстовые файлы, например 000012FA.$qi, где:

  • название файла - номер формируемого файла по порядку в шестнадцатеричном формате, например 000012FA;
  • расширение файла - .$qi;

 

Каждый такой файл содержит следующие данные:

 

Название блока Символы Формат Пример
Дата начала соединения 1-10 любой

27042007

27/04/2007

2007-04-27

Время начала соединения 11-20 любой

13:29:56

13/29/56

132956

Продолжительность соединения 21-30 Hh:mm:ss 00:12:42
Набранный номер 31-70   83452288654
Признак исходящего звонка 71-75 символ

О

Внутренний номер телефона, с которого осуществлен звонок

76-79   1812
Символы окончания строки и возврата коретки 80-82 данное поле не обязательно 0D0A

 

 

 

Установка модулей "ShelterPhone и интерфейс Телефонный тарификатор

 

 

1. Скопировать на компьютер подключенный к АТС RS232Reader.exe и RS232Reader.ini;

2. Скопировать на любой компьютер находящийся в сети файлы SCPServ.exe, SCPServ.ini, ShelterConnect.ini, ShelterConnect.dll, SCNAS.ini, SCNAS.dll,

phonecalc.ini, phonecalc.dll, CommonParser.ini, CommonParser.dll, phonetariff.exe, phonetariff.ini, SHELTERPHONE.back;

3. Сделать Restore базы SHELTERPHONE.back и настроить файл phonetariff.ini;

4. В программе PhoneTariff настроить тарифы;

5. Настроить все оставшиеся ini файлы;

6. В настройках Shelter.exe в карточке номера комнаты указать внутренний телефонный номер;

7. После всех настроек на базе Shelter выполнить скрипт: execute procedure xx_fill_services (см. раздел Работа с IBExpert. Выполнение SQL скриптов).

 

 

Настройка CommonParser.ini

 

Файл CommonParser.ini служит для настройки параметров CommonParser.dll. Данная DLL отвечает за разбор строки лога звонка.

Настройку CommonParser.ini рекомендуются выполнять в текстовом редакторе, используя шрифты, у которых длина всех символов одинаковая

(например «Terminal»).

Для получения лога звонка необходимо настроить программу RS232Reader, совершить звонок, после которого в папке WorkDir 

(параметр из файла RS232Reader.ini) появится файл с расширением $qi. Содержимое этого файла переписываем в файл CommonParser.ini:

 

 

Затем нужно «наложить»на строку лога маску

 

 

Настройка преобразования даты звонка:

  • DateM0 = Dd/Mm/Yy - формат в котором дата идет в логе (26/ 07/ 06)
  • DateM1 = 20YyMmDd - нужно привести к формату YYYYMMDD

Соответственно DateAsDAte = 0 для того чтобы использовалось преобразование

 

Настройка преобразования времени звонка:

  • TimeM0 = Hh:Mm - формат в котором время записано в логе (09: 26)
  • TimeM1 = HhMm00 - нужно привести к формату HHMMSS

 

Продолжительность звонка:

  • DurationM0 = Hh:Mm'Ss  - формат в котором продолжительность соединения записана в лог файле (00:00’06)
  • DurationM1 = HhMmSs  - преобразовываем к формату HHMMSS

Т.к. продолжительность соединения задается в «явном» виде, а не в частях суток, то CoefDuration = 0

 

На данном этапе можно не тарифицировать часть звонков. При этом информация о данных звонках не попадет ни в одну базу.

FilterExtn = * ; маска для исходящего номера. Если «звездочка», то тарифицировать звонки со всех номером. Если, например, FilterExtn = 1* ,

то будут тарифицироваться звонки, начинающиеся с единицы.

FilterDial = * ; маска для набранных номеров. Если «звездочка», то тарифицировать звонки на все набранные номера.

OutGoingText = O ; признак тарифицируемого звонка. Часто в специалисты не могу настроить АТС и она вы дает и входящие звонки.

Тогда данный признак помещается специальным символом. В нашем примере признаком тарифицируемого звонка является буква «O».

В маске сказали, что в этом будет тип звонка (сиввол Y). OutGoingText = O если в этом месте не O, то этот звонок тарифицироваться не будет.

Если OutGoingText = * , то все звонки считать тарифицируемыми.

 

Если АТС (или сторонняя программа тарификации) выдает в лог информацию о цене звонка, то используются параметры:

  • PulseToCost = 1 - преобразовывать пульсы АТС в стоимость
  • BaseToRetail = 1 - использовать стоимость из лог файла, как базовую
  • AddFixedCost = 0 - к базовой стоимости добавить это значение.

 

Лог файл может формироваться с переменным числом пробелов перед первым символом, для работы с такими АТС используется параметр:

  • UseTrim=1 ; Использовать обрезание строки лога . 0 - не использовать.

 

Конечный вид CommonParser.ini будет следующий:

 

 

 

 

Настройка SCNAS.ini

 

Файл SCNAS.ini содержит внутри следующую информацию:

 

[Database]

DBname = <path do NAS database>

DBuser = UCS

DBpassword = oQKH8n0BFUE=

[ExternalClient]

ClientID = 1 ;

IdentPhysType = 100;

ConvertOperationNeed = 0;

ToOEM = 0;

[Log]

FileName = SCNAS.log

Level = 5

DebugLevel = 0

 

 

Где:

  • DBname =
    - полный путь до NAS базы. Например 127.0.0.1/3050:С:\Shelter\Phone\NAS.fdb, 127.0.0.1 - IP-адрес сервера на котором располагается база, а 3050 порт на котором работает FireBird. 
  • DBuser = UCS - не изменять
  • DBpassword = oQKH8n0BFUE= - не изменять
  • FileName = SCNAS.log - лог программы
  • Level = 5 - уровень детализации лога
  • DebugLevel = 0 - уровень отладочной информации добавляемой в лог

 

 

Настройка ShelterConnect.ini

 

Файл ShelterConnect.ini содержит внутри следующую информацию:

 

[Database]
  DBname     = <path to Shelter database>
  DBuser     = UCS      
  DBpassword = oQKH8n0BFUE=
 
[ExternalClient]
  ClientID      = 1
  IdentPhysType = 100
  ConvertOperationNeed = 1
  ToOEM = 0
 
[Log]
  FileName   = ShelterConnect.log
  Level      =  5
  DebugLevel =  0
 
[GarbageCollector]
  Enabled  = 0
  LifeTime = 120
 
[TranslateOperation]
  PHONE = <code>
 
[PARAMS]
  NoAutoDiscount = 1
  Section =0
  UseSection =1

 

Где:

 

  • DBname = 
    <path to Shelter database> - полный путь до рабочей базы. Например 127.0.0.1/3050:С:\Shelter\IBData\Shelter.fdb, 127.0.0.1 - IP-адрес сервера на котором располагается база, а 3050 порт на котором работает FireBird.
  • DBuser = UCS - не изменять
  • DBpassword = oQKH8n0BFUE= - не изменять.
  • ClientID = 1 - код ShelterConnect'a, если используются несколько ShelterConnect.dll
  • IdentPhysType = 200 - Тип устройства
  • ConvertOperationNeed = 1 -  (0- не использовать секцию [TranslateOperation], 1- использовать секцию)
  • ToOEM = 0 - (0 - не конвертирования, 1 - конвертирование текстов в/из OEM/Windows (Ошибки, комментарии, тексты...))
  • FileName = ShelterConnect.log - лог программы.
  • Level = 5 - уровень детализации лога.
  • DebugLevel = 0 - уровень отладочной информации добавляемой в лог файл.
  • PHONE = 201 - код услуги телефон из справочника услуг Shelter.
  • Section =0 - параметр отвечающий за секции: 0 - номер, 1- гость, 2 - питание.
  • UseSection =1 - использовать/не использовать параметр Section.

 

 

Настройка RS232Reader.ini

 

[Application]

  AutoStart = 1 - признак пуска при старте
  AutoHide = 1 - признак сворачивания при старте
  UseBeeper = 0 - использовать звук
 
[RS232]
  ComPortNum = 1 - номер COM-порта, куда подключена АТС
  ComPortStr =  baud=9600 parity=N data=8 stop=1 dtr=on rts=on - параметры связи
  TermChars = #13;#10;#0; - символ окончания строки
  IncludeTermChar = 0
  SuppressEmpty = 1
  ReadTimeOut = 5000
  TimeOutIsTerm = 1
  Request = 
  Acknowledge =
  PurgeCommFlags = 15
  ReopenTimeout = 1000
  ReopenTimeoutStep = 1000
  ReopenTimeoutMax = 30000
 
[Log]
  Name = RS232Reader.log - лог программы
  Level = 5 - уровень детализации лога
  DebugLevel = 0 - уровень отладочной информации добавляемой в лог
 
[Queue]
  WorkDir = D:\phone_tariff\WORK_DIR - полный путь до каталога, куда скидывается информация считанная с СОМ-порта
 
 
 
Настройка PhoneCalc.ini и PhoneTariff.ini
 
 
Файлы PhoneCalc.ini и PhoneTariff.ini идентичны и содержат внутри следующую информацию:
 
 
[General]
 
Program = UCS Shelter
 
[LOCK.SERVER]
 
TCPHost=127.0.0.1
TCPPort=1111
 
[Database]
 
dbname = 127.0.0.1/3050:C:\Shelter\ShelterPhone.fdb
dbuser = ucs
DBPassword = oQKH8n0BFUE=
 
 
 
Где:
 
 
  • TCPHost = 127.0.0.1 - IP-адрес компьютера, где физически установлен ключ защиты. Если он установлен на локальной рабочей станции, то можно использовать значение 127.0.0.1.
  • TCPPort = 1111 - номер порта на котором запущен сервер блокировок
  • dbname = 127.0.0.1/3050:C:\Shelter\ShelterPhone.fdb - полный путь до базы ShelterPhone.fdb, в которой храниться информация о тарифах. 127.0.0.1 - IP-адрес сервера на котором располагается база, а 3050 порт на котором работает FireBird.
  • DBuser = UCS - не изменять
  • DBpassword - oQKH8n0BFUE= - не изменять

 

 

Подключение АТС через TelnetLogger (вместо RS232Reader)

 

Данная утилита используется в случае, если АТС работает не через COM-порт, а TCP/IP соединение.

 

 

Настройка TelnetLogger.ini

 

[Net]

Host = 192.168.3.253 - адрес АТС

Port = 8800 - порт АТС

BoundPort = 0 - предпочитаемый порт, который выделит атс для соединения

ConnectionTimeout = 50 - Тайм аут подключения (сек.)
 

[Log]

WriteLog = 1

FileName = TelnetLogger.log
 

[Other]

PBXDir = c:\Temp

LastFileNumber =31

AutoStart = 1

AutoHide = 0

RestoreConnection = 1 - Автоматически пытаться востановить соединение

RestoreConnectionTimeOut = 5000 - Таймаут автоматического соединения (мск.)

FirstSymbolIsNum = 1 - Только строки, где первый символ число

AutoLogin=1 - автологин: 1 - передает логин/пароль из файла TelnetLogger.ini, 0 - будет ожидать ввода вручную

WordLogin=-    - слово "Логин" (т.е. строка, которая будет искаться в приглашении "логин")

WordPassword=Enter Password:   - слово "Password" (аналогично логину)

Login=smdr - логин АТС

Password=1234 - пароль АТС

 

Соответственно при варианте подключения АТС через TelnetLogger параметры запуска будут следующие: TelnetLogger.exe → SCPServ.exe

 

Смена статуса номера через телефонный тарификатор

 

1. Выполнить скрипт TR_AU_ROOM_STATE : 

CREATE TRIGGER TR_AU_ROOM_STATE FOR ROOMS
ACTIVE AFTER UPDATE POSITION 0
as
declare variable s varchar(1024);
declare variable s1 varchar(128);
begin
 s = '';
 if (old.state != new.state) then begin
  s1 = '';
  s1 = setnamedparam(s1,'old',old.state);
  s1 = setnamedparam(s1,'new',new.state);
  s = setnamedparam(s,'state',s1);
 end
  s = trim(s);
  if (s != '')  then
    execute procedure xx_sys_history_add('ROOMS',new.id,0,2,:s);
end
 

2. В ShelterConnect.ini добавить секцию : 
[TranslateRoomState]
999 = 1
888 = 0
Где 999 - номер телефона, который набирает горничная после уборки для смены статус номера на грязынй номер
888 - номер телефона, который набирает горничная после уборки номер для смены статуса номер на чистый номер
3. В CommonParser.ini добавить, в секцию [parser] добавить : 
ROOMSTATUS = 888,999 

ВНИМАНИЕ!!! В описанном случае, номера телефонов 888 и 999 являются примерами.