====== 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". Хіба що на перший час після ввімкнення цього функціоналу або для траблшутингу.