Зміст

Автоматична розсилка користувацьких нагадувань

Для автоматичної розсилки нагадувань користувачам в Ubilling передбачена підсистема Reminder. Працює вона максимально просто і прямолінійно і складається з двох окремо конфігурованих частин. Власне самої підсистеми розсилки, що викликається за допомогою RemoteAPI і модуля кабінету користувача, призначеного для ввімкнення/вимкнення послуги, а також опціонального управління мобільним номером абонента.

Починаючи з релізу 1.1.6:

Дещо змінилася логіка роботи опції увімкнення модуля REMINDER_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, приймає для шаблонізації стандартні макроси загальних шаблонів.

Надсилання не здійснюватиметься таким категоріям користувачів:

SMS для відсилання складаються в загальну чергу, і власне вимагають увімкненої та налаштованої собаки-посилаки. Для виконання цієї механіки потрібен відповідний виклик у crontab:

30 9 * * *      /bin/ubapi  "reminder"

У разі, якщо потрібне примусове надсилання якоїсь кількості повідомлень, незалежно від терміну дії послуги, що залишився, можна зробити це за допомогою опціонального параметру force. Реалізується це таким чином:

30 9 25 * *      /bin/ubapi  "reminder&param=force"

У такому разі, проігнорованими під час надсилання будуть тільки заморожені користувачі.

Тарифікація послуги здійснюється за допомогою штатної механіки віртуальних сервісів, навішаних на потрібний тег.

Налаштування 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.
І тут все доволі просто:

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 ми використаємо модуль "Додаткова інформація про контрагента". Отож, після ввімкнення опції REMINDER_PRIVATBANK_INVOICE_PUSH=1 при спробі додати новий запис в модулі “Додаткова інфо про контрагента” у випадаючому списку “Ім`я платіжної системи” ми побачимо нову опцію PRIVAT_INVOICE_PUSH:

Далі вказуємо дані для статичних полів JSON:

JSON же в нас має отаку структуру і саме на такій структурі JSON-документу ви маєте погодити власну інтеграцію, коли будете узгоджувати все це з ПриватБанком:

Invoice JSON

Hide

{
    "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

Виглядає це якось так: