Пользовательские скрипты для URFA клиента

Форум для размещения материалов по реализации различных схем использования ПО, решению частых проблем и предупреждению частых ошибок
drugsmouse
Сообщения: 10
Зарегистрирован: Вт янв 05, 2010 13:50

Сообщение drugsmouse »

Большое спасибо. Все получилось.

drugsmouse
Сообщения: 10
Зарегистрирован: Вт янв 05, 2010 13:50

Сообщение drugsmouse »

А вот еще вопрос по этой теме.
Скрипт add_service_to_user просит параметр slink_id. И вот туда нужно передать айди существующей сервисной связки, что бы так сказать редактировать ее. Но интерестнгость в том, что айди нужно передать со знаком "-". А на сколько я понял, в xml этот минус добавить к айди нельзя. И приходится разбивать на 2 скрипта. Perl'ом парсить, добавлять минус и вызывать add_service_to_user. Это можно как нить побкдить???

Anton
Сообщения: 339
Зарегистрирован: Пт июл 01, 2005 10:57

Сообщение Anton »

как реализовать подключения услуги коммутируемый доступ в тарифе?

Lord Kaho
Сообщения: 22
Зарегистрирован: Чт май 21, 2009 12:41

Сообщение Lord Kaho »

Смена следующего тарифного плана на следующий тарифный план.

Обычно требуется при массовом изменении тарифных планов.

Код: Выделить всё

<?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 сделаны специально :)

solomon
Сообщения: 316
Зарегистрирован: Вт мар 16, 2010 08:39

Сообщение solomon »

по какому принципу запускаются скрипты объясните пожалуйста?
при каких условиях запускаются скрипты к чему и куда их привязывать?
можно ли при заведении пользователя с его логином и паролем сдлать чтоб запускался скрипт по заведению ему почтового ящика?

Cramac
Сообщения: 454
Зарегистрирован: Сб июл 01, 2006 17:59

Сообщение Cramac »

а есть у кого нить отчет о диалап сессиях?
и о переодических услугах (типо абон платы)
а то что то раньше была выбока из базы, но сейчас она оооочень долгая

andrew.rbe
Сообщения: 36
Зарегистрирован: Ср фев 10, 2010 14:05

Сообщение andrew.rbe »

Удаление пользователя по аккаунт ид

Код: Выделить всё

<?xml version="1.0"?>
<urfa>
    <parameter name="account_id"/>
    <call function="rpcf_get_all_services_for_user"/>
    <for name="i" from="0" count="size&#40;slink_id_array&#41;">
        <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>

Аватара пользователя
hellard
Сообщения: 52
Зарегистрирован: Вт апр 05, 2005 05:59
Откуда: Абакан
Контактная информация:

Сообщение hellard »

Подскажите, как с минимальными усилиями перелинковать текущий тарифный план на тарифный план следующего расчетного периода с новым расчетным периодом (ID периода известен, уже создан/существует). А так-же все периодические услуги привязанные к лицевому счету, тоже с новым расчетным периодом.

teo014
Сообщения: 1
Зарегистрирован: Ср ноя 20, 2013 13:06

Сообщение teo014 »

Для связки ип трафика в тарифном плане, может кому ньть пригодиться:

Код: Выделить всё

         <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" />
при этом поля ip_address и mask - цифровые (long), value="65535" - 255.255.255.255

apog
Сообщения: 8
Зарегистрирован: Пт май 06, 2011 18:19

Сообщение apog »

Уважаемые форумчане! Возможно среди вас есть, кто уже сумел красиво реализовать промо-тарифы. Идея следующая:
Для новых абонентов предоставляется промо-период три месяца (а вообще можно произвольный срок, кратный расчетному периоду), при этом месяц подключения считается по базовому тарифу, дабы размер скидки для всех был одинаковый. То есть промо-период начинается с наступления следующего полного расчетного периода после подключения абонента. Баловство с добавлением расчетных периодов длиной в три месяца сразу отметаем, про эти грабли на форуме уже много начитался.
Делаем так: добавляем для каждого из базовых тарифов их промо-близнецов на каждый месяц. Например для тарифа "СТАРТ" добавляем промо-тарифы "СТАРТ-ПРОМО 1й мес.", "СТАРТ-ПРОМО 2й мес." и "СТАРТ-ПРОМО 3й мес." с соответствующей стоимостью.
Далее используя рецепт Lord'a Kahe (спасибо коллега, низкий поклон тебе) каждый месяц первого числа, аккурат после списания абонплаты меняем абонентам следующий тариф: для абонентов на тарифе "СТАРТ-ПРОМО 1й мес." выставляем следующий тариф "СТАРТ-ПРОМО 2й мес.", для второго месяца выставляем третий, а для третьего выставляем следующий тариф уже базовый.
В данной схеме при добавлении нового абонента необходимо не забывать выставлять вручную следующий тариф "СТАРТ-ПРОМО 1й мес.", иначе никаких скидок абонент не получит.
Поэтому рассматривается способ как бы автоматически еще переключать абонентов, подключенных в текущем месяце с базового на промо-тариф перед наступлением следующего полного расчетного периода. Да и вообще интересно на сколько криво придумано, возможно есть способы попроще описанного здесь.
Последний раз редактировалось apog Вс июл 05, 2015 14:32, всего редактировалось 1 раз.

Shiva
Сообщения: 131
Зарегистрирован: Пт авг 28, 2009 12:39
Откуда: Россия, Тверь

Сообщение Shiva »

Есть поле дата подключения, всю математику на основе него сделать. Ищем всех у кого дата подключения более 2 месяцев и тариф промо, выставляем тариф базовый. Искать можно по базе, менять урфой. Наиболее безопасный вариант. Запускать в любой день расчётного периода.

maxxsoft
Сообщения: 125
Зарегистрирован: Пт янв 18, 2013 09:23

Сообщение maxxsoft »

apog писал(а):Уважаемые форумчане! Возможно среди вас есть, кто уже сумел красиво реализовать промо-тарифы. Идея следующая:
Для новых абонентов предоставляется промо-период три месяца (а вообще можно произвольный срок, кратный расчетному периоду), при этом месяц подключения считается по базовому тарифу, дабы размер скидки для всех был одинаковый. То есть промо-период начинается с наступления следующего полного расчетного периода после подключения абонента. Баловство с добавлением расчетных периодов длиной в три месяца сразу отметаем, про эти грабли на форуме уже много начитался.
Делаем так: добавляем для каждого из базовых тарифов их промо-близнецов на каждый месяц. Например для тарифа "СТАРТ" добавляем промо-тарифы "СТАРТ-ПРОМО 1й мес.", "СТАРТ-ПРОМО 2й мес." и "СТАРТ-ПРОМО 3й мес." с соответствующей стоимостью.
Далее используя рецепт Lord'a Kahe (спасибо коллега, низкий поклон тебе) каждый месяц первого числа, аккурат после списания абонплаты меняем абонентам следующий тариф: для абонентов на тарифе "СТАРТ-ПРОМО 1й мес." выставляем следующий тариф "СТАРТ-ПРОМО 2й мес.", для второго месяца выставляем третий, а для третьего выставляем следующий тариф уже базовый.
В данной схеме при добавлении нового абонента необходимо не забывать выставлять вручную следующий тариф "СТАРТ-ПРОМО 1й мес.", иначе никаких скидок абонент не получит.
Поэтому рассматривается способ как бы автоматически еще переключать абонентов, подключенных в текущем месяце с базового на промо-тариф перед наступлением следующего полного расчетного периода. Да и вообще интересно на сколько криво придумано, возможно есть способы попроще описанного здесь.
А чем не устраивает рецепт от Lord Kaho?
автоматизировать процесс можно скриптом, засунутым в крон, например на последнее число за, скажем час до наступления нового РП.....
итак дано:
тариф "СТАРТ" = ид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" 
есть конечно сложности с плавающей датой РП (разное кол-во дней в месяце), тогда конечно можно не городить лишний скрипт с проверкой даты, а насовать на весь год скриптов в крон (не забывая про високосные года)

как то так...

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

Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Сообщение Magnum72 »

Переносим тарифные и сервисные связки (периодические, IP трафик и телефония) с присоединенными техпараметрами от одного пользователя к другому:

Код: Выделить всё

<?xml version="1.0"?>
<urfa>
<!-- ######################### USAGE&#58; ##############################################

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&#40;&#41;"/>
  <set dst="expire_date" value="max_time&#40;&#41;"/>

<!-- 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>

Аватара пользователя
TiRider
Сообщения: 568
Зарегистрирован: Сб июн 07, 2008 12:43

Сообщение TiRider »

Magnum72, не делал случаем у себя перенос логинов и пароль из связки "коммутируемый доступ" в связку передача ip-трафика и удалением услуги "коммутируемый доступ" у всех абонентов?

alexkar
Сообщения: 2
Зарегистрирован: Вс фев 23, 2014 08:12
Откуда: Красноярск

Сообщение alexkar »

Добрый день товарищи форумчане. Кто нибудь делал, смену ип у пользователя выбирая из свободного пула адресов и меняя их все в связке иптрафика? Проблема такая что имея скрипт ниже меняется один случайный, может подскажет кто как сделать чтобы менялись все ипы, с нужными маками? я уже все голову сломал :(

<?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>

Ответить