Чатбот буде складатися з 3 частин:
1. Cron-ом кожні 5хв, циклом проходитися по користувачам які approved=1 та мають apiToken, викливати по апі дані та виконати перевірку баланса користувача по декільком параметрам
і якщо хоч 1 із 2 параметрів виявиться true (див. параметри для перевірки - a та b), то відправити нотифікацію користувачу (текст беремо з таблиці templates). Відправляти в групу groupId,
а якщо немає групи то в direct message по userId. Та додати історію баланса в таблицю balances для цих користувачів.
1.1 Інший крон запускаєтсья зранку (о 10 по Лондону) та перевіряє 1 параметр аналогічно (див. параметри для перевірки - c).
2. Користувач при натисканні /start, якщо він не approved і не rejected, то пропонувати подати заявку на approvement натисканням на /request_approvement.
Якщо /request_approvement запущено, то написати що заявка подата, а адмінам (admin=true) відправити запит на approvement.
3. Запит на approvement виглядає як - The client <FirstName+LastName>(<userId>) requests an access to this chatbot. Do you want to approve him/her? (Notice: you'll have to provide an api key for this user) та кнопочки Yes/Reject.
Якщо відправлено Reject - перепросити чи впевнений він що точно хоче заблокувати (approved=2) користувача і якщо Так - то установлюємо відповідне поле. Якщо хоче заапрувити користувача, то запитуємо apiToken і вносимо в таблицю clients для даного користувача.
Ці операції мають бути доступні тільки адмінам та при кожному запиті має бути перевірка чи це адмін. Та перевірка що користувачі які бути approved або rejected раніше, більше не змінюють значення поля approved адмінами.
Коли адмін approved або rejected, користувачу прилітає повідомлення ти був апрувнутий/реджекнутий.
БД таблиці:
clients(id:int, userId:string, groupId:string, approved:int(0-notapproved,1-approved,2-rejected), apiToken:string, admin:bool)
balances: (id:int, userId:string, balance:string)
templates (id:int, name:string, text:text)
Параметри для перевірки по апі (див пункт 1):
a) $prepaybalance змінився, відправити -> “Your recent top up posted successfully on your account, your new prepay balance is: “$prepaybalance”
b) $prepaybalance від'ємний, відправити -> "Your account is negative now, please top up your account today!" (відправляти один раз, слідуючий раз відправка коли баланс знову зміниться з позитивного на від'ємний)
c) Разраховуємо середні $avg витрати за день по рахунку за останні 7 днів (починаючи з позавчорашніх витрат). І якщо вчора витрати були менші 4*$avg то відправляємо
-> "Your daily spending goes below average. Please top up your account"
Потрібен розробник Laravel/Lumen або Python.
Поставити бот на Digital Ocean.