Пользовательские скрипты для URFA клиента
-
- Сообщения: 10
- Зарегистрирован: Вт янв 05, 2010 13:50
-
- Сообщения: 10
- Зарегистрирован: Вт янв 05, 2010 13:50
А вот еще вопрос по этой теме.
Скрипт add_service_to_user просит параметр slink_id. И вот туда нужно передать айди существующей сервисной связки, что бы так сказать редактировать ее. Но интерестнгость в том, что айди нужно передать со знаком "-". А на сколько я понял, в xml этот минус добавить к айди нельзя. И приходится разбивать на 2 скрипта. Perl'ом парсить, добавлять минус и вызывать add_service_to_user. Это можно как нить побкдить???
Скрипт add_service_to_user просит параметр slink_id. И вот туда нужно передать айди существующей сервисной связки, что бы так сказать редактировать ее. Но интерестнгость в том, что айди нужно передать со знаком "-". А на сколько я понял, в xml этот минус добавить к айди нельзя. И приходится разбивать на 2 скрипта. Perl'ом парсить, добавлять минус и вызывать add_service_to_user. Это можно как нить побкдить???
Смена следующего тарифного плана на следующий тарифный план.
Обычно требуется при массовом изменении тарифных планов.
Строка запуска:
/netup/utm5/bin/utm5_urfaclient -a mass_tariff_chande -old_tarrif "9" -new_tarrif "89"
Ищет всех абонентов у которых следующий тарифный план выставлен в, например, 9 и меняет его на, например 89.
Да, ошибки в написании слова tariff сделаны специально
Обычно требуется при массовом изменении тарифных планов.
Код: Выделить всё
<?xml version="1.0"?>
<urfa>
<parameter name="old_tarrif" value=""/>
<parameter name="new_tarrif" value=""/>
<parameter name="poles_count" value="0"/>
<parameter name="select_type" value="0"/>
<parameter name="patterns_count" value="1"/>
<parameter name="what_id" value="36"/>
<parameter name="criteria_id" value="3"/>
<set dst="pattern" src="old_tarrif"/>
<call function="rpcf_search_users_new"/>
<for name="i" from="0" count="user_data_size">
<set src="basic_account" src_index="i" dst="account_id"/>
<call function="rpcf_get_user_tariffs"/>
<for name="w" from="0" count="user_tariffs_size">
<set src="tariff_next_array" src_index="w" dst="tariff_next_array_tmp"/>
<set src="tariff_current_array" dst="tariff_current"/>
<set src="discount_period_id_array" dst="discount_period_id"/>
<if variable="tariff_next_array_tmp" value="old_tarrif" condition="eq">
<set src="tariff_link_id_array" src_index="w" dst="tariff_link_id"/>
<set src="new_tarrif" dst="tariff_next"/>
<call function="rpcf_link_user_tariff"/>
</if>
</for>
</for>
</urfa>
/netup/utm5/bin/utm5_urfaclient -a mass_tariff_chande -old_tarrif "9" -new_tarrif "89"
Ищет всех абонентов у которых следующий тарифный план выставлен в, например, 9 и меняет его на, например 89.
Да, ошибки в написании слова tariff сделаны специально

-
- Сообщения: 36
- Зарегистрирован: Ср фев 10, 2010 14:05
Удаление пользователя по аккаунт ид
Код: Выделить всё
<?xml version="1.0"?>
<urfa>
<parameter name="account_id"/>
<call function="rpcf_get_all_services_for_user"/>
<for name="i" from="0" count="size(slink_id_array)">
<set dst="slink_id" src="slink_id_array" src_index="i" />
<call function="rpcf_delete_slink"/>
</for>
<call function="rpcf_get_user_by_account"/>
<call function="rpcf_get_user_tariffs"/>
<for name="j" from="0" count="user_tariffs_size">
<set dst="tariff_link_id" src="tariff_link_id_array" src_index="j" />
<call function="rpcf_unlink_user_tariff" />
</for>
<call function="rpcf_remove_user"/>
</urfa>
Для связки ип трафика в тарифном плане, может кому ньть пригодиться:
при этом поля ip_address и mask - цифровые (long), value="65535" - 255.255.255.255
Код: Выделить всё
<set dst="service_id" value="13"/>
<parameter name="unabon" value="1"/>
<parameter name="unprepay" value="1"/>
<parameter name="ip_d" value="1"/>
<set dst="ip_address" dst_index="0" src="ip_d"/>
<set dst="mask" dst_index="0" value="65535"/>
<set dst="mac" dst_index="0" value=""/>
<set dst="ip_login" dst_index="0" value=""/>
<set dst="ip_password" dst_index="0" value=""/>
<set dst="allowed_cid" dst_index="0" value=""/>
<set dst="is_skip_radius" dst_index="0" value="0"/>
<set dst="is_skip_rfw" dst_index="0" value="0"/>
<set dst="router_id" dst_index="0" value="0"/>
<parameter name="quotas_count" value="0"/>
<call function="rpcf_add_ip_slink_ex" />
Уважаемые форумчане! Возможно среди вас есть, кто уже сумел красиво реализовать промо-тарифы. Идея следующая:
Для новых абонентов предоставляется промо-период три месяца (а вообще можно произвольный срок, кратный расчетному периоду), при этом месяц подключения считается по базовому тарифу, дабы размер скидки для всех был одинаковый. То есть промо-период начинается с наступления следующего полного расчетного периода после подключения абонента. Баловство с добавлением расчетных периодов длиной в три месяца сразу отметаем, про эти грабли на форуме уже много начитался.
Делаем так: добавляем для каждого из базовых тарифов их промо-близнецов на каждый месяц. Например для тарифа "СТАРТ" добавляем промо-тарифы "СТАРТ-ПРОМО 1й мес.", "СТАРТ-ПРОМО 2й мес." и "СТАРТ-ПРОМО 3й мес." с соответствующей стоимостью.
Далее используя рецепт Lord'a Kahe (спасибо коллега, низкий поклон тебе) каждый месяц первого числа, аккурат после списания абонплаты меняем абонентам следующий тариф: для абонентов на тарифе "СТАРТ-ПРОМО 1й мес." выставляем следующий тариф "СТАРТ-ПРОМО 2й мес.", для второго месяца выставляем третий, а для третьего выставляем следующий тариф уже базовый.
В данной схеме при добавлении нового абонента необходимо не забывать выставлять вручную следующий тариф "СТАРТ-ПРОМО 1й мес.", иначе никаких скидок абонент не получит.
Поэтому рассматривается способ как бы автоматически еще переключать абонентов, подключенных в текущем месяце с базового на промо-тариф перед наступлением следующего полного расчетного периода. Да и вообще интересно на сколько криво придумано, возможно есть способы попроще описанного здесь.
Для новых абонентов предоставляется промо-период три месяца (а вообще можно произвольный срок, кратный расчетному периоду), при этом месяц подключения считается по базовому тарифу, дабы размер скидки для всех был одинаковый. То есть промо-период начинается с наступления следующего полного расчетного периода после подключения абонента. Баловство с добавлением расчетных периодов длиной в три месяца сразу отметаем, про эти грабли на форуме уже много начитался.
Делаем так: добавляем для каждого из базовых тарифов их промо-близнецов на каждый месяц. Например для тарифа "СТАРТ" добавляем промо-тарифы "СТАРТ-ПРОМО 1й мес.", "СТАРТ-ПРОМО 2й мес." и "СТАРТ-ПРОМО 3й мес." с соответствующей стоимостью.
Далее используя рецепт Lord'a Kahe (спасибо коллега, низкий поклон тебе) каждый месяц первого числа, аккурат после списания абонплаты меняем абонентам следующий тариф: для абонентов на тарифе "СТАРТ-ПРОМО 1й мес." выставляем следующий тариф "СТАРТ-ПРОМО 2й мес.", для второго месяца выставляем третий, а для третьего выставляем следующий тариф уже базовый.
В данной схеме при добавлении нового абонента необходимо не забывать выставлять вручную следующий тариф "СТАРТ-ПРОМО 1й мес.", иначе никаких скидок абонент не получит.
Поэтому рассматривается способ как бы автоматически еще переключать абонентов, подключенных в текущем месяце с базового на промо-тариф перед наступлением следующего полного расчетного периода. Да и вообще интересно на сколько криво придумано, возможно есть способы попроще описанного здесь.
Последний раз редактировалось apog Вс июл 05, 2015 14:32, всего редактировалось 1 раз.
А чем не устраивает рецепт от Lord Kaho?apog писал(а):Уважаемые форумчане! Возможно среди вас есть, кто уже сумел красиво реализовать промо-тарифы. Идея следующая:
Для новых абонентов предоставляется промо-период три месяца (а вообще можно произвольный срок, кратный расчетному периоду), при этом месяц подключения считается по базовому тарифу, дабы размер скидки для всех был одинаковый. То есть промо-период начинается с наступления следующего полного расчетного периода после подключения абонента. Баловство с добавлением расчетных периодов длиной в три месяца сразу отметаем, про эти грабли на форуме уже много начитался.
Делаем так: добавляем для каждого из базовых тарифов их промо-близнецов на каждый месяц. Например для тарифа "СТАРТ" добавляем промо-тарифы "СТАРТ-ПРОМО 1й мес.", "СТАРТ-ПРОМО 2й мес." и "СТАРТ-ПРОМО 3й мес." с соответствующей стоимостью.
Далее используя рецепт Lord'a Kahe (спасибо коллега, низкий поклон тебе) каждый месяц первого числа, аккурат после списания абонплаты меняем абонентам следующий тариф: для абонентов на тарифе "СТАРТ-ПРОМО 1й мес." выставляем следующий тариф "СТАРТ-ПРОМО 2й мес.", для второго месяца выставляем третий, а для третьего выставляем следующий тариф уже базовый.
В данной схеме при добавлении нового абонента необходимо не забывать выставлять вручную следующий тариф "СТАРТ-ПРОМО 1й мес.", иначе никаких скидок абонент не получит.
Поэтому рассматривается способ как бы автоматически еще переключать абонентов, подключенных в текущем месяце с базового на промо-тариф перед наступлением следующего полного расчетного периода. Да и вообще интересно на сколько криво придумано, возможно есть способы попроще описанного здесь.
автоматизировать процесс можно скриптом, засунутым в крон, например на последнее число за, скажем час до наступления нового РП.....
итак дано:
тариф "СТАРТ" = ид1 (на него подключаем)
тариф "СТАРТ-ПРОМО 1й мес." = ид2
тариф "СТАРТ-ПРОМО 2й мес." = ид3
тариф "СТАРТ-ПРОМО 3й мес." = ид4
тариф "Базовый" = ид5
итак скрипт:
Код: Выделить всё
#!/bin/sh
/netup/utm5/bin/utm5_urfaclient -a mass_tariff_change -old_tarrif "1" -new_tarrif "2"
sleep 10
/netup/utm5/bin/utm5_urfaclient -a mass_tariff_change -old_tarrif "2" -new_tarrif "3"
sleep 10
/netup/utm5/bin/utm5_urfaclient -a mass_tariff_change -old_tarrif "3" -new_tarrif "4"
sleep 10
/netup/utm5/bin/utm5_urfaclient -a mass_tariff_change -old_tarrif "4" -new_tarrif "5"
как то так...
вижу в этой схеме только один подводный камень:
например на первом месяце промо(или сразу после подключения) клиент понял что хочет "жирный" тариф и заказывает переход в след РП на него, а ему - фиг, сиди на промо-тарифах....
тут тогда ещё манипуляции с группами нужны, в которых не будет функционала смены тарифа.
Переносим тарифные и сервисные связки (периодические, IP трафик и телефония) с присоединенными техпараметрами от одного пользователя к другому:
Код: Выделить всё
<?xml version="1.0"?>
<urfa>
<!-- ######################### USAGE: ##############################################
move_services_to_other_user -old_user_id XXXX -new_user_id XXXXXX
#################################################################################### -->
<parameter name="user_id"/>
<parameter name="old_user_id"/>
<parameter name="new_user_id"/>
<parameter name="account_id"/>
<parameter name="old_account_id"/>
<parameter name="new_account_id"/>
<parameter name="is_blocked"/>
<parameter name="group_id"/>
<parameter name="tariff_link_id"/>
<parameter name="tariff_next"/>
<parameter name="tariff_current"/>
<parameter name="change_now" value="1"/>
<parameter name="service_id" value=""/>
<parameter name="service_type" value=""/>
<parameter name="discount_period_id"/>
<parameter name="return_type" value="integer_return"/>
<parameter name="from_static_id" value="8"/>
<parameter name="start_date"/>
<parameter name="expire_date"/>
<!-- Poluchaem diskontniy period -->
<call function="rpcf_get_discount_periods" output="0"/>
<for name="i" from="0" count="discount_periods_count">
<set dst="static_id_tmp" src="static_id" src_index="i"/>
<if variable="from_static_id" value="static_id_tmp" condition="eq">
<set dst="find_discount_period_id" src="discount_period_id" src_index="i"/>
<break/>
</if>
</for>
<remove name="discount_period_id"/>
<set dst="discount_period_id" src="find_discount_period_id"/>
<set dst="start_date" value="now()"/>
<set dst="expire_date" value="max_time()"/>
<!-- Poluchaem informatciu o polzovateliax -->
<set dst="user_id" src="old_user_id"/>
<call function="rpcf_get_userinfo" output="0"/>
<set dst="old_account_id" src="basic_account"/>
<set dst="user_id" src="new_user_id"/>
<call function="rpcf_get_userinfo" output="0"/>
<set dst="new_account_id" src="basic_account"/>
<!-- Poluchaem spisok texparametrov u starogo usera -->
<set dst="user_id" src="old_user_id"/>
<set dst="account_id" src="old_account_id"/>
<call function="rpcf_get_tech_param_by_uid" output="0"/>
<for name="x" from="0" count="size_vec_ltp">
<set dst="techparam_type_id" dst_index="x" src="type_id" src_index="0,x"/>
</for>
<for name="x" from="0" count="size_vec_ltp">
<set dst="techparam_param" dst_index="x" src="param" src_index="0,x"/>
</for>
<for name="x" from="0" count="size_vec_ltp">
<set dst="techparam_reg_date" dst_index="x" src="reg_date" src_index="0,x"/>
</for>
<for name="x" from="0" count="size_vec_ltp">
<set dst="techparam_old_slink_id" dst_index="x" src="slink_id" src_index="0,x"/>
</for>
<for name="x" from="0" count="size_vec_ltp">
<set dst="techparam_passwd" dst_index="x" src="password" src_index="0,x"/>
</for>
<remove name="id"/>
<remove name="type_id"/>
<remove name="type_name"/>
<remove name="param"/>
<remove name="reg_date"/>
<remove name="slink_id"/>
<remove name="service_name"/>
<remove name="password"/>
<!-- Poluchaem spisok tarifov u starogo usera i sozdaem ix u novogo -->
<call function="rpcf_get_user_tariffs" output="0"/>
<for name="i" from="0" count="user_tariffs_size">
<set dst="user_id" src="new_user_id"/>
<set dst="account_id" src="new_account_id"/>
<set dst="tariff_current" src="tariff_current_array" src_index="i"/>
<set dst="tariff_next" src="tariff_next_array" src_index="i"/>
<set dst="tariff_link_id" value="0"/>
<call function="rpcf_link_user_tariff" output="0"/>
<set dst="new_tariff_link_id" dst_index="i" src="tariff_link_id" />
</for>
<!-- Poluchaem spisok uslug u starogo usera, ydaliaem u starogo i dobavliaem novomu -->
<set dst="user_id" src="old_user_id"/>
<set dst="account_id" src="old_account_id"/>
<call function="rpcf_get_all_services_for_user" output="0"/>
<for name="i" from="0" count="slink_id_count">
<set dst="service_id" src="service_id_array" src_index="i"/>
<set dst="service_type" src="service_type_array" src_index="i"/>
<set dst="slink_id" src="slink_id_array" src_index="i"/>
<set dst="tariff_link_id" value="0"/>
<set dst="tplink_id" value="0"/>
<if variable="service_type" value="2" condition="eq">
<call function="rpcf_get_periodic_service_link" output="0"/>
</if>
<if variable="service_type" value="3" condition="eq">
<call function="rpcf_get_iptraffic_service_link_ipv6" output="0"/>
</if>
<if variable="service_type" value="6" condition="eq">
<call function="rpcf_get_tel_service_link" output="0"/>
</if>
<if variable="tariff_link_id" value="0" condition="ne">
<for name="i" from="0" count="user_tariffs_size">
<set dst="tmp_tariff_link_id" src="tariff_link_id_array" src_index="i"/>
<if variable="tmp_tariff_link_id" value="tariff_link_id" condition="eq">
<set dst="tariff_link_id" src="new_tariff_link_id" src_index="i"/>
<set dst="tplink_id" src="new_tariff_link_id" src_index="i"/>
<break/>
</if>
</for>
</if>
<set dst="tmp_slink_id" src="slink_id"/>
<call function="rpcf_delete_slink" output="0"/>
<set dst="user_id" src="new_user_id"/>
<set dst="account_id" src="new_account_id"/>
<if variable="service_type" value="2" condition="eq">
<call function="rpcf_add_periodic_slink_ex" output="0"/>
</if>
<if variable="service_type" value="3" condition="eq">
<for name="x" from="0" count="ip_groups_count">
<set dst="ip" dst_index="x" src="ip_address" src_index="x"/>
</for>
<for name="x" from="0" count="ip_groups_count">
<set dst="login" dst_index="x" src="iptraffic_login" src_index="x"/>
</for>
<for name="x" from="0" count="ip_groups_count">
<set dst="password" dst_index="x" src="iptraffic_password" src_index="x"/>
</for>
<for name="x" from="0" count="ip_groups_count">
<set dst="allowed_cid" dst_index="x" src="iptraffic_allowed_cid" src_index="x"/>
</for>
<for name="x" from="0" count="ip_groups_count">
<set dst="is_skip_radius" dst_index="x" src="ip_not_vpn" src_index="x"/>
</for>
<for name="x" from="0" count="ip_groups_count">
<set dst="is_skip_rfw" dst_index="x" src="dont_use_fw" src_index="x"/>
</for>
<for name="x" from="0" count="ip_groups_count">
<set dst="is_skip_rfw" dst_index="x" src="dont_use_fw" src_index="x"/>
</for>
<for name="x" from="0" count="quotas_count">
<set dst="tc_id" dst_index="x" src="tclass_id" src_index="x"/>
</for>
<call function="rpcf_add_iptraffic_service_link_ipv6" output="0"/>
<remove name="ip_address"/>
<remove name="ip"/>
<remove name="mask"/>
<remove name="mac"/>
<remove name="iptraffic_login"/>
<remove name="login"/>
<remove name="iptraffic_password"/>
<remove name="password"/>
<remove name="iptraffic_allowed_cid"/>
<remove name="cid"/>
<remove name="ip_not_vpn"/>
<remove name="is_skip_radius"/>
<remove name="dont_use_fw"/>
<remove name="is_skip_rfw"/>
<remove name="router_id"/>
<remove name="tclass_id"/>
<remove name="tclass_name"/>
<remove name="quota"/>
<remove name="item_id"/>
<remove name="number"/>
<remove name="login"/>
<remove name="password"/>
<remove name="allowed_cid"/>
<remove name="tclass_id"/>
<remove name="tc_id"/>
<remove name="quota"/>
</if>
<if variable="service_type" value="6" condition="eq">
<call function="rpcf_add_tel_service_link" output="0"/>
<remove name="login"/>
<remove name="number"/>
<remove name="password"/>
<remove name="allowed_cid"/>
<remove name="incoming_trunk"/>
<remove name="outgoing_trunk"/>
<remove name="pbx_id"/>
</if>
<for name="x" from="0" count="size_vec_ltp">
<set dst="tmp_techparam_old_slink_id" src="techparam_old_slink_id" src_index="x"/>
<if variable="tmp_techparam_old_slink_id" value="tmp_slink_id" condition="eq">
<set dst="type_id" src="techparam_type_id" src_index="x"/>
<set dst="param" src="techparam_param" src_index="x"/>
<set dst="reg_date" src="techparam_reg_date" src_index="x"/>
<set dst="passwd" src="techparam_passwd" src_index="x"/>
<call function="rpcf_add_tech_param" output="0"/>
</if>
</for>
</for>
<!-- Poluchaem spisok tp u starogo usera ydalaem ix -->
<set dst="user_id" src="old_user_id"/>
<set dst="account_id" src="old_account_id"/>
<call function="rpcf_get_user_tariffs" output="0"/>
<for name="i" from="0" count="user_tariffs_size">
<set dst="tariff_link_id" src="tariff_link_id_array" src_index="i"/>
<call function="rpcf_unlink_user_tariff" output="0"/>
</for>
</urfa>
Добрый день товарищи форумчане. Кто нибудь делал, смену ип у пользователя выбирая из свободного пула адресов и меняя их все в связке иптрафика? Проблема такая что имея скрипт ниже меняется один случайный, может подскажет кто как сделать чтобы менялись все ипы, с нужными маками? я уже все голову сломал 
<?xml version="1.0"?>
<!-- ######## STROKA ZAPUSKA #######
-a change_ipaddress -account_id 117313 -->
<urfa>
<!-- Peredaem peremenie -->
<parameter name="house_id" value="1335"/>
<parameter name="account_id"/>
<!-- Poluchaem dop infu -->
<call function="rpcf_get_user_by_account"/>
<!-- Pulichaem spisok uslug -->
<call function="rpcf_get_all_services_for_user"/>
<for name="i" from="0" count="slink_id_count">
<set dst="service_type_tmp" src="service_type_array" src_index="i"/>
<!-- Proverjaem esli uslugi est' iptraffic -->
<if variable="service_type_tmp" value="3" condition="eq">
<set dst="service_type" src="service_type_array" src_index="i"/>
<set dst="slink_id" src="slink_id_array" src_index="i"/>
<call function="rpcf_get_iptraffic_service_link_ipv6"/>
<!--Zopominaem -->
<for name="j" from="0" count="ip_groups_count">
<set dst="mask_tmp" src="mask" src_index="j"/>
<set dst="mac_tmp" src="mac" src_index="j"/>
<!-- Opredelyaem svobodnie ip -->
<call function="rpcf_get_free_ips_for_house"/>
<set dst="ip_address" src="ips_ip"/>
<set dst="mac" value="mac_tmp"/>
<set dst="mask" value="mask_tmp"/>
<call function="rpcf_edit_iptraffic_service_link_ipv6"/>
</for>
</if>
</for>
</urfa>

<?xml version="1.0"?>
<!-- ######## STROKA ZAPUSKA #######
-a change_ipaddress -account_id 117313 -->
<urfa>
<!-- Peredaem peremenie -->
<parameter name="house_id" value="1335"/>
<parameter name="account_id"/>
<!-- Poluchaem dop infu -->
<call function="rpcf_get_user_by_account"/>
<!-- Pulichaem spisok uslug -->
<call function="rpcf_get_all_services_for_user"/>
<for name="i" from="0" count="slink_id_count">
<set dst="service_type_tmp" src="service_type_array" src_index="i"/>
<!-- Proverjaem esli uslugi est' iptraffic -->
<if variable="service_type_tmp" value="3" condition="eq">
<set dst="service_type" src="service_type_array" src_index="i"/>
<set dst="slink_id" src="slink_id_array" src_index="i"/>
<call function="rpcf_get_iptraffic_service_link_ipv6"/>
<!--Zopominaem -->
<for name="j" from="0" count="ip_groups_count">
<set dst="mask_tmp" src="mask" src_index="j"/>
<set dst="mac_tmp" src="mac" src_index="j"/>
<!-- Opredelyaem svobodnie ip -->
<call function="rpcf_get_free_ips_for_house"/>
<set dst="ip_address" src="ips_ip"/>
<set dst="mac" value="mac_tmp"/>
<set dst="mask" value="mask_tmp"/>
<call function="rpcf_edit_iptraffic_service_link_ipv6"/>
</for>
</if>
</for>
</urfa>