Автоматическое начисление бонусов |
|
Задача: привязать стоимость мегабайта к потребленному объему информации. Решая эту задачу есть предложение производить ежемесячное начисление бонусов. Т.е. раз в месяц осуществлять начисление бонуса в зависимости от наработанного трафика.
Как автоматизировать данный процесс?
Решение:
Исправляем стандартный скрипт rstsess2.vbs:
Set Args = WScript.Arguments.Unnamed
If Args.Count <> 3 Then
WScript.Echo "??? usage: cscript.exe rstsess2.vbs APIPassword GroupID Cash /sn:ServerName"
WScript.Quit
End If
APIPass = Args(0)
Obj = Args(1)
Cash = Args(2)
If WScript.Arguments.Named.Exists("sn") Then
ServName = WScript.Arguments.Named.Item("sn")
Set Srv = CreateObject("TrafInsp.TrafInspAdmin",ServName)
Else
Set Srv = CreateObject("TrafInsp.TrafInspAdmin")
End If
Srv.APILogon(APIPass)
UserList = Srv.ApiGetBillProp(3, Obj)
' Получили список клиентов группы
' Проверяем, что это таблица - двухмерный массив
If Not IsArray(UserList) Or Not IsArray(UserList(0)) Then
WScript.Echo "Нет данных"
WScript.Quit
End If
For I = 0 To UBound(UserList, 1)
User = UserList(I)
' Получили строку - описание пользователя
UserID = User(1)
UserState = Srv.APIGetUserState(UserID)
' Считываем текущее состояние сессии
OldState = UserState(4)
OldBall = UserState(19)
' Вот тут вычисляем бонус! Вставьте свою формулу.
' Можно привязаться к принятому трафику (байты)
Bonus = UserState(20)*...
' Переводим пользователя в СТОП
Srv.APISetUserState UserID, -1, 0, "Script", "Очищаем сессию"
' Переводим сессию пользователя в состояние, которое было ранее.
' Если надо всех обязательно запустить, то поправьте OldState на '2'
Srv.APISetUserState UserID, Cash+OldBall, OldState, "Script", "Запускаем сессию"
Srv.APISetUserState UserID, Cash+OldBall+Bonus, -1, "Script", "Засчитываем бонус"
WScript.Echo "Клиент " & User(0) & " на счету " & Cash+OldBall+Bonus & ", в том числе бонус " & Bonus
Next
Этот скрипт надо запускать в начале каждого месяца. Значение параметра комментария при вызове функции APISetUserState отписывается в лог и его будет видно при просмотре отчета по биллингу. Для случая с градациями формула вычисления бонуса будет смотреться так:
If UserState(20) > ... then
Bonus = ...
ElseIf UserState(20) > ... then
Bonus = ...
End If
Вместо принятого трафика User(20) можно использовать начисленный трафик User(16) в мегабайтах.
Текущая страница справки: help.smart-soft.ru/index.html?apidemobonus.htm