====== SMS-сповіщення OpenPayz ======
Починаючи з релізу 1.2.7 з'явилася можливість надсилання сповіщень про успішне поповнення рахунку абонентам, які здійснили оплату через [[openpayz|OpenPayz]] (термінали, банк-клієнти, etc). Так, на манер повідомлень від мобільних операторів про успішне поповнення балансу.
==== Включення та супутні опції ====
Власне - опції [[alteriniconf|alter.ini]]:
OP_SMS_NOTIFY_ENABLED=0
OP_SMS_NOTIFY_PAYMENTS_PULL_INTERVAL=5
OP_SMS_NOTIFY_USE_EXTMOBILES=0
OP_SMS_NOTIFY_FORCED_TRANSLIT=0
OP_SMS_NOTIFY_DEBUG_ON=0
OP_SMS_NOTIFY_TEXT="Vash rakhunok popovneno na {ROUNDPAYMENTAMOUNT} grn. Zalyshok na vashomu rahunku skladae {ROUNDBALANCE} grn. Dyakuemo za te, scho vy z namy."
OP_SMS_NOTIFY_RESPECT_REMINDER_TAGID=0
Оскільки переважна більшість із них цілком собі self-explanatory - звернемо увагу на нюанси:\\\
* Увімкнення, вже звично, здійснюється опцією **OP_SMS_NOTIFY_ENABLED**.
* Текст нотифікашок задається опцією **OP_SMS_NOTIFY_TEXT**. Тут варто відзначити підтримувані на даний момент макроси:
* **{LOGIN}** - логін абонента
* **{USERONLINELEFTDAY}** - кількість днів оплаченої послуги (0 у разі, якщо послугу відключено)
* **{USERONLINETODATE}** - дата, до якої оплачено послугу (поточна дата в разі, якщо послугу відключено)
* **{ROUNDBALANCE}** - округлений до копійок баланс абонента ПІСЛЯ поповнення
* **{ROUNDPAYMENTAMOUNT}** - округлена до копійок сума поповнення
* **OP_SMS_NOTIFY_PAYMENTS_PULL_INTERVAL** - мабуть єдина опція, на якій варто зробити акцент:
* по-перше - вона задає інтервал у **ХВИЛИНАХ**. не в секундах, не в мілісекундах, не в годинах, не в будь-чому ще. В__ Х В И Л И Н А Х.
* по-друге - цей інтервал (кількість цих самих хвилин) має бути більшим, ніж частота запуску виклику **opayzsmsnotify** з [[remoteapi|RemoteAPI]]. Так, хоча б на одиницю більше. Чому так - читаємо в секції нижче.
* **OP_SMS_NOTIFY_RESPECT_REMINDER_TAGID** - контролює наявність тега REMINDER_TAGID у юзера під час надсилання СМС-повідомлення. Якщо тега немає - наприклад, юзер відключив СМС-повідомлення в ЛК - ніяких сповіщень не відбувається.
==== Трохи механіки ====
Робота цього функціоналу доволі нехитра: дивимося в таблицю платежів, забираємо з неї OpenPayz платежі за останні **OP_SMS_NOTIFY_PAYMENTS_PULL_INTERVAL** хвилин, складаємо їх в окрему службову табличку (перед тим перевіривши існування в ній уже "пронотифікованих" із щойно обраних та виключивши їх), відправляємо сповіщення, проставляємо статус "надіслано" в службовій табличці. \\
Чому **важливо**, щоб **OP_SMS_NOTIFY_PAYMENTS_PULL_INTERVAL** був хоча б на **//одиницю//** більшим, ніж частота викликів **opayzsmsnotify** з [[remoteapi|RemoteAPI]]? - щоб уникнути "проігнорованих" платежів. Під час вибірки платежів для процесингу з таблиці платежів на **//поточну_дату_час//** сервіс спирається тільки на самому початку, у момент найпершого запуску, а весь інший час він бере **//дату_час// останнього обробленого(пронотифікованого) платежу**, і вже саме з цього таймстампа віднімає ті самі **OP_SMS_NOTIFY_PAYMENTS_PULL_INTERVAL** хвилини, отримуючи **//дату_час//**, починаючи з якої і забиратимуться платежі з таблиці платежів. Так, незважаючи на те, що "вжито всіх можливих заходів", існує ймовірність, що конкретно взятий OpenPayz платіж потрапить десь у "зазор" між запуском з крону та **OP_SMS_NOTIFY_PAYMENTS_PULL_INTERVAL** і буде просто проігнорований, тому що за своїм таймстампом не потрапить у вибірку. \\
Саме тому наполеглива рекомендація: якщо рядок у кронтабі у вас виглядає якось так:
*/2 * * * * /bin/ubapi "opayzsmsnotify"
то **OP_SMS_NOTIFY_PAYMENTS_PULL_INTERVAL** зробіть рівною **3**(а то й **4** - гірше від цього нікому особливо не стане). Ну і навпаки: встановивши OP_SMS_NOTIFY_PAYMENTS_PULL_INTERVAL у якесь значення, не забудьте дещо збільшити частоту викликів **opayzsmsnotify**, зменшивши інтервал викликів.
А - так - опцію **OP_SMS_NOTIFY_DEBUG_ON** у продакшені юзати **категорично не рекомендується** - вона вкрай "verbose". Хіба що на перший час після ввімкнення цього функціоналу або для траблшутингу.