====== API віддаленого виклику процедур ======
У Ubilling починаючи з релізу 0.3.1 підтримується виклик зовнішніми програмами певних внутрішніх процедур білінгу. \\
Для цього потрібна опція
REMOTEAPI_ENABLED=1
в конфігураційному файлі [[alteriniconf|alter.ini]]. Для авторизації використається серійний номер Ubilling.\\
Формат викликів за допомогою HTTP GET запитів:
http://billing.isp/?module=remoteapi&key=[ubserial]&action=[action][¶m=[parameter]]
На даний момент підтримуються наступні action:\\
* **reset + param [login]** - ресет користувача, логін – обов'язковий параметр.
* **handlersrebuild** - перебудова всіх мережних хендлерів та перезапуск dhcpd для відповідних підмереж
* **vserviceschargefee + param [nofrozen]** - зняття АП віртуальних сервісів. Необов'язковий параметр nofrozen - не знімати АП з відморозків.
* //**&period**// - дозволяє вказати період зняття оплати днями для фільтрації сервісів за цією ознакою. Тільки сервіси, що задовольняють умовам фільтра, будуть оброблені, що дозволяє, наприклад, зробити роздільну обробку сервісів з помісячним і поденним зняттям АП (так - таким чином можна робити кілька викликів vserviceschargefee з crontab): //&period=30// або //&period= 1//. \\ Також можна групувати періоди зняття оплат в одному виклику, розділяючи їх **підкресленням**: //&period=30_7_15//.
* **discountprocessing** - обробка знижок
* **backupdb** - резервування БД
* **autocleandb** - зачистка БД від старих логів та детальної статистики
* **swpoll** - опитування всіх пристроїв з довідника "Комутатори" за допомогою SNMP з метою заповнення кешу сирих даних
* **swping** - опитування всіх пристроїв з довідника "Комутатори" "на живість" за допомогою ICMP ping
* **fullhostscan + param [traffdiff] + nn** - опитування всіх клієнтів з підмереж вказаних у довіднику "Мережі та сервіси" за допомогою nmap а також за вказівкою параметра traffdiff намагається аналізувати активність зі змін вихідного трафіку. Також параметр nn (наприклад &nn=1) відключає використання nmap, що радикально підвищує швидкодію виклику fullhostscan (рекомендовано).
* **rebuilduserdatacache** - перебудовується кеш даних користувача в exports: cache_address, cache ips, cache mac
* **autofreeze + param [nocredit]** - запускає процедуру автозаморозки користувачів з балансом нижче alter.ini:AUTOFREEZE_CASH_LIMIT
* **autofreezemonth + param [nocredit]** - запускає процедуру автозаморозки користувачів з балансом нижче або рівним alter.ini:(AUTOFREEZE_CASH_LIMIT*вартість тарифу). Опційний параметр nocredit символізує своїм видом, виключення з автозаморозки користувачів, які скористалися функцією кредитування в кабінеті користувача в поточному місяці.
* **watchdog** - нацьковує собаку-спостерігаку на виконання її завдань
* **senddog** - [[senddog|собака-посилака]] пробігається по всіх чергах для відправлення та здійснює відправлення всіх повідомлень.
* **senddog + [param chkmsgstatuses]** - необхідно лише за включеної історії СМС повідомлень. Зобов'язує [[senddog|собаку-посилаку]] спробувати отримати статуси раніше відправлених СМС.
* **ukvfeeprocessing** - зняття АП користувачів [[ukv|УКВ]]
* **switchescoverage + param [1000x800]** - повертає карту покриття комутаторами, з розмірами вказаними у param у форматі XxY
* **rebuildglscache** - примусово перебудовується кеш глобального пошуку.
* **uhwbrutecleanup** - очищує реєстр спроб перебору паролів UHW
* **cudiscounts** - запускає механізм обробки [[cumulativediscounts|накопичувальних знижок]].
* **crimeandpunishment** - запускає механізм [[crimeandpunishment|обробки злочинів та кари]].
* **oltpoll** - запускає опит усіх OLT пристроїв.
* **reminder + [param force]** - запускає SMS нагадування. Черга SMS буде оброблена під час наступного запуску senddog. Необов'язковий param=force здійснює примусову посилку всім користувачам, крім заморожених, трансліт примусовий.
* **friendshipdaily** - здійснює внесення відсотків за всіма дружніми платежами, за попередню добу.
* **freezemonth + [param debug2ublog]** - здійснює списання коштів у заморожених користувачів рівним alter.ini:FREEZEMONTH_COST. Необов'язковий параметр //debug2ublog// включає дебаг-режим та запис того, що відбувається в веблог.
* **writevlanmachistory** - робить опитування по влан термінаторам і заносить маки абонентів до таблиці, записує тільки якщо у якогось конкретного абонента змінився мак (дані бере зі своєї таблиці, і не має нічого спільного з маком у nethosts), так само визначає сумарну кількість онлайн абонентів (вланів).
* **dealwithit** - виконує для користувачів завдання, за поточну (та попередні) доби з планувальника "живи з цим".
* **mgqueue** - Здійснює заплановані відписки від тарифів Megogo
* **mgprocessing** - Здійснює нарахування АП за тарифами Megogo
* **mgfreecleanup** - Здійснює ліквідацію тестових підписок Megogo із простроченим періодом.
* **exhorse + [&ebobo=true]** - Здійснює збір даних та запис у базу, необхідних для роботи екзистенційного коня.
* **policedog** - Запускає швидке сканування собакою-поліціякою. Раз на півгодини-годину буде цілком нормально.
* **whydoyoucall** - Отримує дані з Askozia PBX про пропущені дзвінки.
* **whydoyoucallstats** - Записує статистику пропущених дзвінків за день у БД.
* **nasmon** - здійснює опитування серверів NAS з довідника на тему їхньої живості.
* **mtsigmonpoll** - проводить опитування Mikrotik, UBNT та інших бездротових пристроїв, для отримання рівнів сигналу.
* **sormcast** - проводить вивантажування даних в ИС СОРМ Яхонт.
* **askozianum + [param mobilenumber]** - повертає стан користувача за номером його мобільного номера: 0 - не знайдено, 1 - знайдено і з ним все добре, 2 - боржник, 3 - відморозок.
* **freezedayscharge + [param debug2ublog]** - запускає процес обробки заморожених користувачів при увімкненому обмеженні кількості днів заморозки. Списує або нараховує доступні дні заморозки, а також відключає заморожування тим, хто вичерпав свої доступні дні заморозки. Необов'язковий параметр //debug2ublog// включає дебаг-режим та запис того, що відбувається в веблог. [[frozenchargedays|Докладніше]]
* **mikrotikdnshaper + [param downshift]** - запускає обробку правил динамічного шейпера для [[mikrotikapi|Mikrotik NAS]]. Опціональний параметр **downshift** вказує обробникові повернути користувачам швидкості відповідно до їх тарифних планів. [[dnswitchmtik|Докладніше]]
* **getagentdata + [param login]** - повертає JSON з даними про присвоєному користувачеві контрагента.
* **districtscache** - оновлює кеш присвоєних користувачам районів.
* **smszilla** + filterid + templateid + [translit] - здійснює розсилку з заздалегідь заданими фільтрами з певним шаблоном та опціональним примусовим транслітом за допомогою [[smszilla|SMSZilla]].
* **multigen** - проводить швидку регенерацію всіх сценаріїв та відпрацювання необхідних сервісів [[multigen|КупаГен]].
* **multigentotal** - очищає всі сценарії, потім здійснює регенерацію всіх сценаріїв та виконує необхідні сервіси (не рекомендується використовувати просто так)
* **multigentraff** - агрегує статистику сесій з таблички акаунтингу та оновлює трафік користувачів stargazer-а.
* **multigenpod + [param login]** - шле PoD на NAS користувача з логіном вказаним у параметрі param. Керується опцією MULTIGEN_POD_ON_MAC_CHANGE.
* **onepunch + [param alias]** - запускает выполнение существующего [[onepunch|One-Punch]] скрипта.
* **paycardsqueue** - обробляє чергу платіжних карток і позначає їх як повністю "використані".
* **salarytelegram** - розсилає співробітникам [[salary|закриті]] на них роботи за день.
* **warehousetelegram** - розсилає співробітникам [[warehouse|заброньовані]] на них ТМЦ.
* **ddt** - викликає періодичну обробку тарифів судного дня.
* **visorcharge** - здійснює нарахування коштів для камер у разі їх дефіциту, в останній день місяця з основного облікового запису.
* **fdbarchive** - производит сохранение текущего кэша FDB для архива. При необходимости производит ротацию.
* **remotedhcp** - повертає дані, необхідні для синхронізації [[remotedhcp|віддаленими DHCP серверами]].
* **stgfeecharge2mysql** - **DEPRECATED** створює кеш останніх списань коштів старгейзером з рахунку користувача для кожного логіну витягаючи це все з stargazer.log. Потрібно для коректної роботи функціонала, що включає опцію [[alteriniconf|alter.ini]] ONLINE_SHOW_LAST_FEECHARGE.
* **smartup** - виклик призначений для забезпечення базової інтеграції з сервісом [[smartup|SmartUP]].
* **envyarchive** - зберігає конфігурацію всіх активних заздрісних пристроїв у архіві.
* **autocredit** - викликає [[autocredit|автоматичне кредитування]] особливих користувачів в останній день місяця.
* **sc** +[login,cr,end,fee,ct] - викликає процедуру встановлення кредиту користувача.
* **pt** - викликає обробку [[pt|Могутніх тарифів]].
* **usercash** - Фінансові операції користувача. Приймає параметри login (логін), summ(сума грошей), ct(тип оплати), op (add/correct/set/mock), note(примітка). Приклад: usercash&login=sometestuser&summ=2&ct=1&op=correct¬e=test
* **ptvchargefee** - здійснює нарахування АП всім передплатникам [[prostotv|ProstoTV]].
* **karmaguard** - намагається автоматично ремонтувати карму користувачам, у яких вона з якоїсь причини встигла зіпсуватися.
* **callmeback + [param number]** - створює нову заявку для модуля [[callmeback|Передзвоніть мені будь ласка]].
* **olltvchargefee** - здійснює тарифікацію послуг [[olltv|OllTV]].
* **opayzsmsnotify** - запуск розсилки SMS сповіщень OpenPayz.
* **cachedog** - стежить за інвалідацією кешу повних даних користувача. У момент виклику перевіряється стан всіх користувачів і якщо він, не відповідає закешованому в ключі USER_ALL_DATA - останній просто прибивається.
* **telepony + number** - реагує на вхідний дзвінок [[telepony|TelePony]].
* **fastping** - опитує пристрої з довідника комутаторів на живість за допомогою [[fastping|FastPing]].
* **userbynum + number** - повертає [[userbynum|дані користувача за номером його стільникового]].
* **feesharvester** - реплікує дані про нарахування АП з логу Stargazer до БД. З додатковим параметром full - сканує весь лог за весь час, з параметром today - тільки за поточну добу, без параметрів - за поточний місяць.
* **btrxupd** - Пушить за наявності всі зміни в абонбазі для [[btrx24|CRM Bitrix24]]
* **btrxpolls** - пушить дані про всі наявні опитування та їх результати до [[btrx24|CRM Bitrix24]]
* **setculpa + [login,culpa]** - встановлює користувачу login кульпу вказану в culpa
* **pseudocrm + [param]** - виконує відповідний виклик функцій вказахнив в param з [[pseudocrm|PseudoCRM]].
* **stickynotify** - виконує розсилку в Telegram всім активним працівникам, з кількістю їх активних персональних нотаток та нагадувань "на сьогодні".
* **taskmannotify** - виконує розсилку в Telegram всім активним працівникам, з кількістю запланованих на них задач планувальника задач "на сьогодні".
* **ophanimtraff** - виконує синхронізацію локальної БД з даними джерел [[ophanimflow|OphanimFlow]].
* **callshistusrupd** - виконує оновлення бази невідомих дзвінків, телепатично вгадуючи для них користувачів якщо вони з'явились вже після приходу дзвінка.
* **goose** + [username|amount|stratid|runtime] - повертає дані необхідні для [[gooseresistance|Опору Гусака]].
У разі неправильних викликів Remote API повертатиме наступні помилки:
* ERROR:GET_NO_ACTION - не вказано процедуру, яку слід викликати
* ERROR:GET_WRONG_KEY - вказано невірний серійний номер Ubilling
* ERROR:NO_UBSERIAL_EXISTS - не згенеровано серійний номер Ubilling (можна дізнатися у модулі "Стан системи")
* ERROR:GET_NO_KEY - не вказано серійний номер Ubilling
* ERROR:API_DISABLED - Remote API вимкнено за допомогою параметру REMOTEAPI_ENABLED=0 в alter.ini
* ERROR:GET_NO_PARAM - не вказано обов'язковий параметр для виклику поточної процедури (наприклад, логін користувача)
Якщо потрібно звідкись ззовні викликати якісь процедури з API (а воно для цього і є), можна оформити це в такому вигляді:
/usr/local/bin/curl -o /dev/null "http://127.0.0.1/billing/?module=remoteapi&key=ваш_серійник&action=vserviceschargefee"
або так
/usr/local/bin/curl -o /dev/null "http://127.0.0.1/billing/?module=remoteapi&key=ваш_серійник&action=swping"
Думка сподіваємось зрозуміла\\
====== Страшні виклики навколо Asterisk ======
* **asterisk + [param login]** - дозволяє отримати логін клієнта за номером телефону
* **asterisk + [param realname]** - дозволяє отримати логін та ПІБ клієнта за номером телефону у вигляді **[login]-[ПІБ]**;
* **asterisk + [param swstatus]** - дозволяє отримати стан обладнання, до якого прив'язаний клієнт у білінгу за номером телефону (Відповідь буде: OK або DIE)
* **asterisk** - можливий наступний запит: **/?module=remoteapi&key=[ubserial]&action=asterisk&number=[mobile_number]¶m=[login|realname|swstatus|userstatus|setcredit|paycardpay|setpause|setunpause|getuserdatabylogin|getuserdatabymobile|getcontractsbymobile|addusermobile|getvservicescount|getonlinedaysleft|getcontragentdata|getuserspends]**
* //**¶m=userstatus**// - дозволяє використовувати два цілком собі "self explanationary" додаткові параметри: **&ignorecache**=true и **&getmoney**=true
* //**¶m=setcredit**// - **зобов'язує** використовувати додаткові параметри: **&login**=some_user_login, **&money**=123.45 и **&expiredays**=7.
* //**¶m=paycardpay**// - **зобов'язує** використовувати додаткові параметри: **&login**=some_user_login і **&paycardnum**=987654321. Параметр **&paycardcashtype**=24 - необов'язковий, має на увазі ID типу оплат і за замовчуванням рівний 1.
* //**¶m=setpause**// - **зобов'язує** використовувати додатковий параметр: **&login**=some_user_login.
* //**¶m=setunpause**// - **зобов'язує** використовувати додатковий параметр: **&login**=some_user_login. Наполегливо радимо використовувати цей функціонал дуже обережно, оскільки будь-яких спеціальних перевірок стану користувача перед розморожуванням не проводиться.
* //**¶m=getuserdatabylogin**// - **зобов'язує** використовувати додатковий параметр: **&login**=some_user_login. При використанні необов'язкового параметра **&userpass**=some_password буде проведена верифікація пари "логін + пароль" перед поверненням даних користувача.
* //**¶m=getuserdatabymobile|getcontractsbymobile**// - не мають на увазі використання будь-яких додаткових параметрів, крім **&number=[mobile_number]** та їх дії/повертані дані цілком відповідають їх найменуванням.
* //**¶m=addusermobile**// - окрім **&number=[mobile_number]** зобов'язує також використовувати параметр **&login**=some_user_login, що, як би, логічно. Необов'язковий параметр **&maxmobilesamnt**=4 показує максимальну кількість мобільних номерів однією користувача.
* //**getvservicescount**// - **має на увазі** можливість пошуку користувача за номером телефону **&number=[mobile_number]** або логіну. Повертає кількість віртуальних сервісів, прив'язаних до певного користувача.
* //**getonlinedaysleft**// - **має на увазі можливість пошуку користувача за номером телефону **&number=[mobile_number]** або логіну **&login**=some_user_login. Ви також можете використовувати параметр **includevsrvs=true**, щоб включити вартість віртуальних послуг у розрахунок днів, що залишилися в мережі. Повертає кількість днів, що «залишилися в мережі» для певного користувача.
* //**getcontragentdata**// - **має на увазі можливість пошуку користувача за номером телефону **&number=[mobile_number]** або логіну **&login**=some_user_login. Повертає дані пов'язаного контрагента для певного користувача.
* //**getuserspends**// - **має на увазі** можливість пошуку користувача за номером телефону **&number=[mobile_number]** або логіну **&login**=some_user_login. Ви також можете використовувати параметр **includevsrvs=true** для отримання всіх віртуальних послуг на додаток до основного тарифу. Повертає інформацію про тариф користувача та його вартість, а також, опціонально, аналогічну інформацію про віртуальні послуги користувача у форматі:
array(TarrifName => array('price' => TariffCost, 'daysperiod' => TariffChargePeriod),
Vservice1 => array('price' => Vservice1Cost, 'daysperiod' => Vservice1ChargePeriod),
Vservice2 => array('price' => Vservice2Cost, 'daysperiod' => Vservice2ChargePeriod),
VserviceN => array('price' => VserviceNCost, 'daysperiod' => VserviceChargePeriod)
)
//Примітка: "TarrifName => TariffCost" - завжди перший елемент масиву
*
* - ! -
* //* Варто зазначити, що **getuserdatabylogin|getuserdatabymobile|getcontractsbymobile|getcontragentdata|getuserspends** повертають дані у форматі JSON.//\\
* //* Всі значення додаткових параметрів, звичайно, вказані як приклад.//\\
====== Обгортка ======
Для зручності та красивості, можна скористатися ось таким скриптом **/bin/ubapi** (не забуваємо chmod a+x /bin/ubapi):
#!/bin/sh
#= Change this to your real Ubilling serial ==
UBSERIAL=UB000000000000000000000000000000000
#==============================================
if [ $# -ne 1 ]
then
echo "Usage: /bin/ubapi \"action\""
echo "Example: /bin/ubapi \"backupdb\" or /bin/ubapi \"swping\""
exit
fi
ACTION=$1
/usr/local/bin/curl -o /dev/null "http://127.0.0.1/billing/?module=remoteapi&key=${UBSERIAL}&action=${ACTION}"
Починаючи з релізу 0.8.0, одразу після встановлення, він вже лежить по потрібному шляху. Та в нього вже вписано серійник вашого Ubilling. Тобто просто можете користуватись.
====== А далі що? ======
І як тепер виглядатиме crontab -e у мінімальному джентльменському наборі? А от якось так:
40 1 1 * * /bin/ubapi "vserviceschargefee"
*/20 * * * * /bin/ubapi "swping"
*/10 * * * * /bin/ubapi "fastping"
5 * * * * /bin/ubapi "fullhostscan¶m=traffdiff&nn=1"
0 */1 * * * /bin/ubapi "swpoll"
*/10 * * * * /bin/ubapi "watchdog"
*/5 * * * * /bin/ubapi "senddog"
1 1 * * * /bin/ubapi "backupdb"
3 * * * * /bin/ubapi "rebuildglscache"
10 2 * * * /bin/ubapi "dealwithit"
50 23 * * * /bin/ubapi "exhorse"
*/10 * * * * /bin/ubapi "nasmon"
*/30 * * * * /bin/ubapi "mtsigmonpoll"
10 10 1 * * /bin/ubapi "autocleandb"
10 */1 * * * /bin/ubapi "fdbarchive"
*/10 * * * * /bin/ubapi "oltpoll"
*/20 * * * * /bin/ubapi "cachedog"
*/2 * * * * /bin/ubapi "multigen"
10 0 * * * /bin/ubapi "feesharvester"
Це необхідний мінімум(!) для забезпечення мінімально робочого стану Ubilling.