====== Автоматична розсилка користувацьких нагадувань ======
Для автоматичної розсилки нагадувань користувачам в Ubilling передбачена підсистема Reminder. Працює вона максимально просто і прямолінійно і складається з двох окремо конфігурованих частин. Власне самої підсистеми розсилки, що викликається за допомогою [[remoteapi|RemoteAPI]] і модуля [[userstats|кабінету користувача]], призначеного для ввімкнення/вимкнення послуги, а також опціонального управління мобільним номером абонента.
==== Починаючи з релізу 1.1.6: ====
Дещо змінилася логіка роботи опції увімкнення модуля **REMINDER_ENABLED**, а саме:
* 0 - нагадування вимкнено
* 1 - усі нагадування увімкнено
* 2 - нагадування за основною послугою вимкнено, всі інші нагадування - увімкнено
Так само цей модуль отримав можливість повідомляти користувачів про декілька нових видів прийдешніх подій:
* - закінчення терміну дії кредиту. **Варто зазначити**, що враховується тільки встановлена //дата закінчення// кредиту, //сума// кредиту ніяк не враховується.
* - настання відповідальності за тривалу неактивність, aka [[crimeandpunishment|Достоєвський]].
* - [[frozenchargedays|закінчення кількості днів призупинення]]. **Варто зазначити**, що [[alteriniconf|alter.ini]] опція **FREEZE_DAYS_CHARGE_ENABLED** має бути ввімкнена.
====== Налаштування alter.ini ======
REMINDER_ENABLED=1
REMINDER_TAGID=36
REMINDER_DAYS_THRESHOLD=2
REMINDER_PREFIX="+38"
REMINDER_TEMPLATE="Shanovnij abonent {REALNAME} stan vashogo rahunku {CASH} hrn {CURDATE}"
REMINDER_FORCE_TRANSLIT=1
==== Необов'язкові опції alter.ini ====
;REMINDER_USE_EXTMOBILES=0
;REMINDER_CONSIDER_CREDIT=0
;REMINDER_DAYS_THRESHOLD_CREDIT=2
;REMINDER_TEMPLATE_CREDIT="Shanovnij abonent {REALNAME} vash credyt {CREDIT} mayge vycherpano"
;REMINDER_CONSIDER_CAP=0
;REMINDER_DAYS_THRESHOLD_CAP=5
;REMINDER_TEMPLATE_CAP="Shanovnij abonent {REALNAME} popovnit rahunok dlya zapobigannya shtrafu za neaktyvnist"
;REMINDER_CONSIDER_FROZEN=0
;REMINDER_DAYS_THRESHOLD_FROZEN=15
;REMINDER_TEMPLATE_FROZEN="Shanovnij abonent {REALNAME}, zvernit uvagu, scho vashi dni zamorozky mayge vycherpano"
;REMINDER_DEBUG_ENABLED=0
Власне, це означає, що для всіх користувачів зі встановленим і заздалегідь створеним тегом з ID 36, буде здійснюватися надсилання SMS, у разі якщо до терміну закінчення їхньої оплаченої послуги залишилося 2 або менше днів. Опція REMINDER_TEMPLATE, приймає для шаблонізації стандартні макроси [[templating|загальних шаблонів]].
Надсилання не здійснюватиметься таким категоріям користувачів:
* До закінчення оплаченого періоду залишилося більше ніж REMINDER_DAYS_THRESHOLD днів (у них все добре).
* Боржникам (вони вже знають, що у них інтернет скінчився)
* Замороженим (вони у відпустку поїхали, нічого їм спамити)
SMS для відсилання складаються в загальну чергу, і власне вимагають увімкненої та налаштованої [[senddog|собаки-посилаки]]. Для виконання цієї механіки потрібен відповідний виклик у crontab:
30 9 * * * /bin/ubapi "reminder"
У разі, якщо потрібне примусове надсилання якоїсь кількості повідомлень, незалежно від терміну дії послуги, що залишився, можна зробити це за допомогою опціонального параметру force. Реалізується це таким чином:
30 9 25 * * /bin/ubapi "reminder¶m=force"
У такому разі, проігнорованими під час надсилання будуть тільки заморожені користувачі.
Тарифікація послуги здійснюється за допомогою штатної механіки віртуальних сервісів, навішаних на потрібний тег.
{{:reminder1.png?500|}}
{{:reminder2.png?500|}}
====== Налаштування userstats.ini ======
REMINDER_ENABLED=1
REMINDER_PRICE=1
REMINDER_TAGID=36
REMINDER_NUMBER_LENGTH=10
REMINDER_DAYS_THRESHOLD=2
REMINDER_PREFIX="+38"
REMINDER_CHANGE_NUMBER=0
REMINDER_FEE=1
REMINDER_CASHTYPEID=1
REMINDER_TURNOFF=1
==== Необов'язкові опції, які, тим не менш, повинні бути включені в userstats.ini, якщо такі ж опції включені в alter.ini ====
;REMINDER_CONSIDER_CREDIT=0
;REMINDER_DAYS_THRESHOLD_CREDIT=2
;REMINDER_CONSIDER_CAP=0
;REMINDER_DAYS_THRESHOLD_CAP=5
;REMINDER_CONSIDER_FROZEN=0
;REMINDER_DAYS_THRESHOLD_FROZEN=15
Тут усе теж доволі прозоро - користувачеві можна дозволити самостійно вмикати або вимикати послугу (так, просто вішається тег), примусово знімати під час її активації певну суму грошей з рахунку, а також давати змогу самостійно міняти номер мобільного телефону (експериментальна фіча - використовуйте тільки на свій страх і ризик).
====== PrivatBank Invoices ======
Починаючи з релізу 1.4.4 в Ubilling доступна інтеграція з сервісом "PrivatBank Invoices"(PBI) від ПриватБанку, яка дозволяє відправляти інвойси нашим користувачам і клієнтам ПриватБанку за сумісництвом. Цей сервіс вигідно відрізняється від СМС своєю **безкоштовністю**(принаймі, станом на 1й квартал 2024го). Варто зазначити, що відтепер Ubilling надає як мінімум 3 опції щодо відправлення нагадувань користувачам стосовно **низького балансу**(тобто - за основною послугою):
* тільки СМС
* тільки інвойс
* СМС + інвойс
Останні два варіанти реалізовуються за допомогою відповідних, дуже self-explanatory, опцій alter.ini **REMINDER_PBI_ONLY_TAG_ID** та **REMINDER_PBI_AND_SMS_TAG_ID**. \\
І тут все доволі просто:
* якщо користувачу не присвоєний жодний з двох тегів, регламентованих опціями **REMINDER_PBI_ONLY_TAG_ID** та **REMINDER_PBI_AND_SMS_TAG_ID** - йому буде відправлятися звичайне СМС
* якщо користувачу присвоєний тег **REMINDER_PBI_ONLY_TAG_ID** - йому буде відправлятися лише інвойс
* якщо користувачу присвоєний тег **REMINDER_PBI_AND_SMS_TAG_ID** - йому буде відправлятися як інвойс, так і СМС
===== alter.ini опції, що регулюють роботу PBI-інтеграції =====
; всі опції - НЕОБОВ'ЯЗКОВІ - тому не забуваємо їх розкоментувати
REMINDER_PRIVATBANK_INVOICE_PUSH=1
REMINDER_PBI_AUTH_LOGIN="your_auth_login_from_PB"
REMINDER_PBI_URL="https://irc.privatbank.ua/paygatews/invoice/process.ws"
REMINDER_PBI_DAY_TARIFF_MULTIPLIER=30
REMINDER_PBI_ONLY_TAG_ID=101
REMINDER_PBI_AND_SMS_TAG_ID=111
REMINDER_PBI_USER_FILTER_PAYSYS_LIST=""
Оскільки майже всі опції вище доволі self-explanatory - детально варто зупинитись, мабуть шо, тільки на останній з них. \\
Отож, опція REMINDER_PBI_USER_FILTER_PAYSYS_LIST задумувалась як така собі відповідь на питання: "А як зрозуміти, хто з наших користувачів є клієнтом ПриватБанку, а хто ні?", і якось нічого кращого не придумалось, як дивитись чи не приходили від конкретно взятого користувача оплати з певних платіжних систем. І, якщо приходили - вважати такого користувача "умовно підходящим" кандидатом на клієнти ПриватБанку. Чому умовно? - ну, тому що не обов'язково бути клієнтом ПриватБанку, або оплатити послугу через термінал ПриватБанку. Отака механіка. Користуватись нею чи ні - кожний вирішить для себе сам. \\
Єдине, що ще варто зазначити: ця опція має містити список платіжних **фронтендів**, які на зараз є активними у вашому біллінгу. Назви платіжних систем мають бути точно такі ж, як і в модулі "OpenPayz"(ага, як правило ще й КАПСОМ), мають розділятися комами і НЕ містити пробілів. \\
Якщо ж лишаємо цю опцію пустою - ніяких фільтрацій користувачів по платіжним системам відбуватись не буде.
===== ОБОВ'ЯЗКОВІ додаткові налаштування =====
Ще раз робимо акцент на тому, що PBI-інтеграція таки працює на базі модулю "Reminder" - тобто у вас, як мінімум має бути включеним і налаштованим функціонал нагадувань(просто читаємо цю статтю від початку до кінця). Так, як мінімум має буть **REMINDER_ENABLED=1**, а також вказаний **REMINDER_TAGID** та **REMINDER_DAYS_THRESHOLD**. \\
Далі слід зазначити, що сервіс PBI це така штука дуже схожа на платіжні системи і, відповідно, вона прив'язується до конкретного контрагента, а це значить - що? - правильно, те, що конкретно взятий користувач має належати до конкретно взятого контрагента, щоб мати змогу від лиця цього контрагента відправити йому інвойс. А ще це значить, що для додаткових налаштувань сервісу PBI ми використаємо модуль [[contragentextinfo|"Додаткова інформація про контрагента"]]. Отож, після ввімкнення опції **REMINDER_PRIVATBANK_INVOICE_PUSH=1** при спробі додати новий запис в модулі "Додаткова інфо про контрагента" у випадаючому списку "Ім`я платіжної системи" ми побачимо нову опцію **PRIVAT_INVOICE_PUSH**: \\
{{:reminder_pbi_1.png?500|}}
Далі вказуємо дані для статичних полів JSON: \\
{{:reminder_pbi_2.png?500|}}
JSON же в нас має отаку структуру і **саме на такій структурі JSON-документу ви маєте погодити власну інтеграцію**, коли будете узгоджувати все це з ПриватБанком:
{
"invoicetype": "S",
"comctype": "8",
"company": "СуперМегаТелеком",
"companyid": "4410221",
"servicecod": "202",
"serviceid": "4410222",
"invname": "СуперМегаТелеком",
"destname": "Призначення платежу",
"mfod": "87412",
"okpod": "369874155",
"amount": 150,
"clphone": "+380551234567",
"invclosingdate": "2024-02-28",
"extparams": {
"param": [
{
"name": "bill_identifier",
"value": "11223344"
}
]
}
}
\\
===== Зняття оплати за сервіс нагадувань при ввімкненому сервісі PBI =====
Якщо ми хочемо бути чесними зі своїми користувачами, то, оскільки PBI сервіс в нас на разі "free of charge" - ми не мали би знімати оплату з користувачів, яким шлемо тільки інвойси, тобто яким присвоєний тег **REMINDER_PBI_ONLY_TAG_ID**. Що, як би - логічно. Отож, якщо ми хочемо виключити таких користувачів з процесу обробки віртуальним сервісом, який у нас знімає оплату за нагадування - робимо наступне:
1. Йдемо у редагування віртуального сервісу, що відповідає за зняття оплати за нагадування
2. В поле "Користувачі зі вказаними тегами будуть виключені з обробки даним сервісом. ID тегів мають відокремлюватись комами." вписуємо ID нашого REMINDER_PBI_ONLY_TAG_ID
3. Зберігаємо зміни
4. PROFIT!1!!!11
Виглядає це якось так: \\
{{:reminder_pbi_3.png?500 }}
{{ :reminder_pbi_4.png?500 }}