====== 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.