Просмотр Исходного

{toc:maxLevel=3}

h2. Как это работает?

При изменении состояний услуг абонента или изменении его данных ядро отправляет команды на оборудование доступа к услугам (NAS, BRAS) через механизм OSS системы.
OSS система вызывает функции скрипта управления оборудованием при тех или иных событиях: подключилась услуга, абонента заблокировало или разблокировало, изменились параметры его учетной записи и тд.
При вызове функций скрипта, в него передаются некие "переменные": данные конкретного абонента, услуги, его учетной записи, параметры NAS-сервера и тд - все что может быть важно для управления состоянием сервиса и удаленного управления.

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


h2. Команды скрипта событий, вызываемые биллингом при изменении состояния абонента

h3. Основные команды

|| OSS команда синхронизации || Для чего нужна команда || Что происходит в биллинге \\ || Состояние на оборудовании ||
| user_add | Добавить абонента на NAS | Учетная запись создана и ей назначен NAS или абонент восстановлен из корзины | Обычно используется для IP Static авторизации, если требуется создать на оборудовании какие-то постоянные: VLAN, ACL, static clips и т.п. |
| user_del | Полностью удалить абонента с NAS | Абонент удален в корзину, или изменён *ключевой параметр* учетной записи (например, изменили NAS) \\ {INFO}При изменении любых ключевых параметров учетной записи будет вызвано событие *user_del* 2 раза: Сначала со старыми данными учетной записи а после с измененными.{INFO} | На оборудовании нужно удалить все записи о пользователе, так как он болеене привязан к NAS. \\
Должна использоваться для ВСЕХ видов авторизации. Для RADIUS допустимо из этой функции просто вызывать user_disconnect. \\ |
| user_drop | Максимально ограничить доступ к сети | Все услуги интернет (типы "трафик", "пакет мегабайт", "турбокнопка", "форса") заблокированы администратором (кнопка "Отключить" в карточке абонента) или добровольной блокировкой. \\ | На оборудовании должна быть сессия(subscriber) пользователя. \\
Команда создаёт пользователю(subscriber) redirect на страницу блокировки администратором.  |
| user_accept | Разрешить доступ к сети | Абонент авторизовался по RADIUS и с его сессией нужно сделать что-то, что нельзя было отправить в Access-Accept, или ему назначили NAS (для IP Static) и у него есть хотя бы одна услуга трафика, активная и не заблокированная. Последний вариант - он вышел из блокировки, в таком случае это "обратная" команда для user_drop. | На оборудовании должна быть сессия(subscriber) пользователя. \\
Команда снимает redirect на страницу блокировки администратором. \\
Если оборудование без сессий, то добавлено правило в ACL. |
| user_redirect | Перенаправлять абонента на страницу блокировки | Деактивированы услуги трафика по причине блокировки по балансу. \\ | На оборудовании должна быть сессия(subscriber) пользователя. \\
Команда добавляет к сессии политику перенаправления на страницу отрицательного баланса. \\
Если оборудование без сессий, то удаляются блокировки по ACL. \\ |
| user_redirect_cancel | Отменить перенаправление на страницу блокировки \\ | Событие вызывается во всех случаях, когда абоненту нужно снять блокировку. Основное назначение - снять блокировку по балансу, то есть команда обратная user_redirect | На оборудовании должна быть сессия(subscriber) пользователя. \\
Команда убирает с сессии политику перенаправления на страницу отрицательного баланса. \\
Если оборудование без сессий, то удаляются блокировка по ACL. |
| user_disconnect | Сброс сессии на оборудовании | Используется в двух случаях:
* для сброса авторизации - кнопка "Отключить" в карточке абонента;
* чтобы убедиться, что сессия сброшена: когда RADIUS-сервер получил от NAS Accounting-Stop (это можно отключить, включив в настройках NAS опцию "Не посылать user_disconnect при получении Radius Stop") | Сессии нет на оборудовании и NAS отправил RADIUS-серверу информации о завершении сессии (Accounting-Stop), биллинг выполняет команду чтобы убедиться что сессия не зависла. \\
Может использоваться для ручного сброса сессии при необходимости, если сессия на оборудовани есть. \\ |

h3. Рекомендумые дополнительные команды

|| OSS команда синхронизации || Для чего нужна команда || Что происходит в биллинге \\ || Состояние на оборудовании ||
| user_info | Узнать состояние абонента на оборудовании | В учётной записи нажали соответствующую кнопку получения информации по сессии с оборудования. \\
Подробней можно узнать из статьи [Команды диагностики пользователей] | Команда служит для получения информации с оборудования: есть сесси, или нет, и возможную статистическую информацию. |
| user_test | Проверить наличие связи у абонента | В учётной записи нажали соответствующую кнопку тестирования абонентской сессии. \\
Подробней можно узнать из статьи [Команды диагностики пользователей] | Команда служит для проверки соеденияния с пользователем средствами, доступными на NAS или коммутаторе: командами ping, tracert или подобными. \\
Если NAS не предоставляет таких инструментов, лучше команду не использовать. |
| users_from_nas | Синхронизация состояний сессий на оборудовании | Служба синхроиназции в автоматическом режиме исправляет возможные проблемы в состоянии сессии - политики доступа и, в перспективе, скорость доступа. \\
Подробней этот механизм описан в статье [CarbonBilling:Синхронизация абонентов на оборудовании] | Сессии абонентов должны существовать. Механизм исправляет возможные ошибки - если не дошла команда по причине временного отсутствия связи или по другой причине |

h3. Дополнительные команды, для специфичных действий

|| OSS команда синхронизации || Для чего нужна команда || Что происходит в биллинге \\ || Состояние на оборудовании ||
| user_auth \\ | Авторизовать сессию в сети \\ | Пользователь HotSpot авторизован через радиус или веб-авторизацию \\ | Убирается правило редиректа noauth для схем HotSpot \\ |
| own_disabled | Применить правила добровольной блокировки \\ | Абонент активировал добровольную блокировку, вызывается при любом стостоянии авторизации и прочих блокировках | На оборудовании должна быть сессия(subscriber) пользователя. \\
Используйте это событие, если в Вашей схеме при добровольной бловкировке нужно выполнить какие-то особые действия и user_drop (тоже вызывается при добровольной блокировке) недостаточно. \\ |
| own_disabled_cancel | Снять ограничения добровольной блокировки \\ | Абонент снял добровольную блокировку, вызывается при любом стостоянии авторизации и прочих блокировках | На оборудовании должна быть сессия(subscriber) пользователя. \\
Отменяет действие own_disabled, используйте только если user_accept недостаточно. \\ |
| user_rate_set | Обновить параметры шейпера \\ | Изменилась скорость доступа к сети интернет: например, поменяли тариф или включили турбокнопку. \\
Команда так же вызывается при снятии любого вида блокировки. \\ | На оборудовании должна быть сессия(subscriber) пользователя. \\
Команда отправит нужную политику по скорости. \\
Если оборудование не использует политики. например Mikrotik с очередям Queue Simple, установленными не по RADIUS, то предварительное наличие сессии необязательно. \\ |
| usluga_activated | Изменить состояние сессии, вызванные активацией услуги \\ | Одна из [услуг подключенных абоненту|https://docs.carbonsoft.ru/pages/viewpage.action?pageId=49087043#Выбортарифногопланаиуслуг.Добавлениеуслугабоненту-Добавлениеуслуги] была активирована. \\
Если одновременно было активировано несколько услуг, по каждой будет создано отдельно событие. \\
Вызывается при снятии любой блокировки. \\ | На оборудовании должна быть сессия(subscriber) пользователя. \\
Используйте если нужно настроить сессию абонента в зависимости от параметров конкретной услуги. \\
Изначально событие содано для схем IPTV, поэтому дополнительные параметры нужно указывать в параметре "Дополнительная срока параметров активации" из настроек услуги (переменная activate_string) \\ |
| usluga_deactivated | Изменить состояние сессии, вызванные деактивацией услуги | Одна из [услуг подключенных абоненту|https://docs.carbonsoft.ru/pages/viewpage.action?pageId=49087043#Выбортарифногопланаиуслуг.Добавлениеуслугабоненту-Добавлениеуслуги] была деактивирована. \\
Если одновременно было деактивировано несколько услуг, по каждой будет создано отдельно событие \\
Вызывается при назначении любой блокировки. | На оборудовании должна быть сессия(subscriber) пользователя. \\
Используйте если нужно настроить сессию абонента в зависимости от параметров конкретной услуги. \\
Изначально событие содано для схем IPTV, поэтому дополнительные параметры нужно указывать в параметре Дополнительная срока параметров дективации" из настроек услуги (переменная deactivate_string) |
| b_negbal | Установка финансовой блокировки | Абонент был заблокирован по балансу. | На оборудовании должна быть сессия(subscriber) пользователя. \\
Используйте эту команду, если при финансовой блокировке требуется выполнить какие-то специфичные действия, недостаточные в общей команде user_redirect |
| u_b_negbal | Снятие финансовой блокировки | Абонент пополнил баланс, или у него был изменен порог отключения, или включена опция "Не отключать при превышении порога".| На оборудовании должна быть сессия(subscriber) пользователя. \\
Используйте эту команду, если при снятии финансовой блокировки требуется выполнить какие-то специфичные действия, недостаточные в общей команде user_redirect_cancel |
| b_admin | Установка блокировки администратором | Абонента заблокировлик кнопкой "Заблокировать" в интерфейсе администратора. | На оборудовании должна быть сессия(subscriber) пользователя. \\
Используйте эту команду, если при блокировке администратором требуется выполнить какие-то специфичные действия, недостаточные в общей команде user_drop |
| u_b_admin | Снятие блокировки администратором | Абоненту сняли блокировку кнопкой "Разблокировать" в интерфейсе администратора. | На оборудовании должна быть сессия(subscriber) пользователя. \\
Опишите действия обратные команде b_admin, если общей команды user_accept в Вашей схеме недостаточно. |
| b_sys | Установка бессрочной добровольной блокировки | Абонент включил в ЛК [бессрочную блокировку|https://docs.carbonsoft.ru/pages/viewpage.action?pageId=167575559#Какзаблокироватьилиразблокироватьабонента-Бессрочнаядобровольнаяблокировка] или по просьте абонента её установил администратор в интерфейсе, поле "Отключить начиная с даты" \\
\\ | На оборудовании должна быть сессия(subscriber) пользователя. \\
Используйте эту команду, если при такой блокировке требуется выполнить какие-то специфичные действия, недостаточные в общей команде user_drop |
| u_b_sys | Снятие бессрочной добровольной блокировки | Абонент отколчючил бессрочную блокировку в ЛК или администратор установил текущую дату в поле "Отключен до даты (отпуск)" карточки абонента. \\ | На оборудовании должна быть сессия(subscriber) пользователя. \\
Используйте чтобы отменить действия user_drop, в случае если в Вашей схеме недостаточно отпрпавить только user_accept |
| rad_acc_stop | Завершилась RADIUS-сессия \\ | RADIUS-сервер в составе биллинга получил от маршрутизатора RADIUS-пакет Accounting-Stop \\ | На оборудовании завершилась сессия(subscriber) пользователя. \\
Используйте в случае если на BRASмогут быть зависания сессий абонентов и нужно убедиться что они сброшены, или после завершения сессии необходимо произвести какие-то дополнительные действия. \\ |


h2. Список ключевых параметров учетной записи и оборудования выбранного в учётной записи

{info}Если поменять настройки оборудования, например IP коммутатора или его VLAN, или IP NAS-сервера - это повлияет на все учетные записи, в которых оно выбрано{info}

* ip - IPv4
* ipv6 - IPv6
* login - логин
* mac - MAC-адрес
* server - опция "У пользователя белый IP-адрес"
* snatip - SNAT IP
* deleted - служебное поле, по-умолчанию = 0, при удалении абонента в корзину = 1
* auth_type - Тип авторизации
* nas_ip - IP NAS-сервера
* opt82 - опция "по OPT82"
* switch_port - выбранный порт коммутатора
* user_vlan - VLAN
* switch_ip - IP коммутатора
* nas_id - ID NAS-сервера
* psw - Пароль
* gpon_modem_port - GPON-порт на приставке

h2. Какие команды будут отправлены в разных случаях

h3. Смена тарифа

h4. user_rate_set

При смене тарифа интернет отключается активная услуга интернет и подключается/активируется новая. При этом скорость доступа реально изменится только при поступлении в биллинг трафика по новой услуге или при переавторизации в сети (если используется подключение с использованием протокола RADIUS)

Таким образом, user_rate_set будет вызвана три раза:

* Первая отправка со _старой_ скоростью при _деактивации старой_ услуги
* Вторая отправка со _старой скоростью_ при _активации новой_ услуги
* Третья отправка с _новой скоростью_ при поступлении трафика

Здесь нужно обратить внимание еще на один момент: ID услуги будет передан только в первой и второй отправке. При третьей отправке переменная *usluga_id* будет пустой.

h3. Изменение учетной записи

h4. user_edit

При редактировании любых полей в учетной записи отправляется событие *user_edit*.

h4. user_del и user_add

В случае когда меняется IP либо NAS обязательно будет уходить *user_del* со старыми параметрами и *user_add* с новыми.

h3. Удаление абонента или учетной записи

При удалении в биллинге абонента или учетной записи на NAS передается команда *user_del*, описанная в файле _session_, который находится внутри управляющего каталога каждого NAS в биллинге, по адресу _chroot_ _/app/asr_billing /var/oss/core/__[Название NAS]__/bin(ubin)._
В команде перечислены действия, которые необходимо выполнить NAS с сессией абонента.
{code:title=Пример команды user_del из скрипта session схемы mikrotik-simple}
user_del(){
if [ "$auth_type" == "0" -o "$auth_type" == "6" ]; then
while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=[find address =${ip}]; do :; done
echo "User-Name=\"${login}\"" | radclient -x ${nas_ip}:${coa_port} disconnect "${radius_secret}"
else
while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_auth; do :; done
while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_negbal; do :; done
while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_blocked; do :; done
fi
while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /queue simple remove numbers=crb_${ip}; do :; done
}
{code}

Необходимо обязательно описать команду *user_del*,если самостоятельно внедряете пользовательскую схему, или, если используете подключения по *RADIUS* \- убедитесь, что оборудование отправляет биллингу *Accounting-Stop* пакеты. Удаление сессии с оборудования важно для правильной работы подсистем биллинга - это необходимо для того чтобы биллинг мог освободить занятый абонентом IP-адрес, а так же закрыть период, если абонент был удалён.

h3. Авторизация по RADIUS

Отправляется полный набор команд, отражающих состояние абонента + одна команда rad_acc_start

Если Вы не хотите выполнять какие-либо команды при авторизации, добавьте в session условие в каждую функцию, например:

{code}
user_rate_set(){
if [[ "$owner_script" != 'events.py' ]] && [[ "$owner_function" != 'check_services' ]]; then
...
...команды отправляемые на оборудование
...
fi
}
{code}


h4. rad_acc_start

Если точно, то это команда говорящая о том что с оборудование получе RADIUS-пакет Accounting-Start. Команду можно использовать если нужно выполнить какие-то действия только при авторизации.


h4. user_accept

Состояние абонента разрешающее доступ к сети.


h4. user_rate_set

Отправка скорости. Это используется во всех стандартных схемах Mikrotik.


h4. user_redirect_cancel или user_redirect

В зависимости от состояния абонента, может отправиться либо user_redirect_cancel, если у него нет ни каких блокировок (администратором, по-балансу или добровольной) или user_redirect - если блокировки есть.


h4. usluga_activated по каждой активной услуге интернет

Это используется в стандартной схеме Cisco-ISG-Noshape для отправки политики по каждой услууге трафика: ограничение шейпера на ресурсы интернет и отсутствие органичения на локальные ресурсы.