Кастомная Форма запроса на ручной приём платежа
Вариант пополнения баланса через оператора с ручной проверкой поступления платежей. Не все платежи можно и нужно автоматизировать - например платежи по пластиковым картам или по отдельным региональным платёжным системам. Для таких случаев подойдёт вариант с ручным пополнением через оператора.
Данный руководство рассчитано на тех кто хорошо владеет конструктором и ищет варианты реализации более сложного функционала. Если вы не знаете что такое Переменные, Action-ы, не умеете работать с Формами и без понятия чем отличается "Невидимая Кнопка" от Админской - просто не читайте этот мануал и не задавайте по нему вопросов - он предназначен для тех кто действительно понимает что происходит, а не для того чтобы водить вас за ручку и объяснять как создавать кнопки.
Надо оговориться, что данный вариант подходит для проектов в которых присутствуют большое количество вариантов пополнения, а также если предполагается что они будут меняться время от времени. В форме использованы довольно варварские способы обращения с переменными и экшенами, потому форма вышла довольно дорогой, однако очень удобной для использования. Всё-таки форму вы создаёте один раз, а пользоваться ей будете постоянно. В любом случае вам не обязательно брать для себя функционал в полном виде - вы можете использовать в своём проекте отдельные элементы и подходы - в форме присутствует довольно много оригинальных идей.
Данная форма предназначена для того чтобы максимально облегчить процесс ручного пополнения баланса в боте для обоих контрагентов, а также максимально исключить возможные ошибки, неточности и бардак, в этом процессе. Особенностью использованного подхода является то что юзер не получает реквизитов до того момента пока оператор не будет готов принять его платёж. Такой подход требует немного больше внимания от оператора, однако но позволяет юзеру быть уверенным, что на другой стороне есть человек который занимается его вопросом и что его запрос и отправленные деньги будут обработаны, а не просто отправлены в пустоту.
❖ Приобретение функционала
Весь функционал приобретается В ВАШЕМ БОТЕ, для этого перейдите в свой бот:☞ 🔐Админ | 🧩Расширения
ВАЖНО: Приобретение функционала для бота доступно только Создателю (хозяину) бота. Админы покупать функционал - НЕ МОГУТ!
Вам понадобится:
1. Переменные - 7-8 штук☞ 🔐Админ | 🧩Расширения | 📂Переменные
2. Action-ы - 18 штук☞ 🔐Админ | 🧩Расширения | 📂Action-ы
3. Невидимые кнопки и сообщения☞ 🔐Админ | 🧩Расширения | 📂Кнопки
4. Условия для кнопок☞ 🔐Админ | 🧩Расширения | 📂Кнопки
5. Макросы и выражения для кнопок☞ 🔐Админ | 🧩Расширения | 📂Кнопки
6. Макросы пользователя☞ 🔐Админ | 🧩Расширения | 📂Макросы
❖ Создание формы
Как это работает
Суть способа состоит в том, что юзер, желающий пополнить баланс в боте, обращается напрямую к оператору указывая все необходимые данные, после чего оператор одним нажатием Триггер-Команды отправляет ему реквизиты для перевода. Юзер осуществляет перевод и информирует об этом оператора нажатием инлайн кнопки. После чего оператор проверяет поступление средств на кошелёк проекта и начисляет юзеру баланс в Боте. Если на каком-то этапе юзер посчитает необходимым отменить пополнение, админ получит сообщение об этом, кроме того юзер не сможет одновременно заказать два платежа, ему нужно будет отменить первый прежде чем заказывать второй.
Сама форма будет состоять из двух неравных частей.
● Первая часть - это кнопки представляющие собой все варианты пополнения, в них мы устанавливаем данные для каждой из валют.
● Вторая часть - это функционал который будет общим для всех валют - это непосредственно сама форма взаимодействия юзера и оператора.
Такой подход позволяет вам, как владельцу бота, с лёгкостью менять список валют которых вы готовы принимать - добавлять новые валюты и удалять ненужные, саму форму при этом трогать будет не нужно.
Структура формы
0. Кнопка Пополнить Баланс (/topup)
╠ 0.1 Кнопка Валюты
╚ 0.2 Кнопка Формы (невидимая) (/payform)
╠ 1. Отправить Запрос Оператору
║ ╠ 1.1 Отменить Запрос
║ ╚ 1.2 Оплачено (невидимая) (/paid)
║ ╠ 1.2.1 Подтвердить Оплату
║ ╚ 1.2.2 Отменить Запрос
╚ 2. Отмена
1. Создаём переменные
Текстовые:
• payname
• paytrigger
Числовые:
• payrate
• payround
• payrequest
• paysum
Глобальные
• cur - код валюты вашего бота (например USD)
• paymin (НЕОБЯЗАТЕЛЬНО) - сумма минимального депозита - нужна, если вы используете ОДИН тип валюты в своем проекте (Если для каждой из валют пополнения должна быть своя минимальная сумма то это переменная должна быть индивидуальной и задаваться каждый раз в кнопке «Валюты Пополнения»).
2. Кнопка валюты пополнения
Ниже приведён пример создания ОДНОЙ кнопки для одного варианта пополнения. Для каждого из нужных вам вариантов нужно будет создать такую кнопку.
Добавьте новую кнопку и дайте кнопке название варианта пополнения (Например: USDT, BTC, TRX). В нашем примере мы создадим кнопку для варианта USDT-trc20 сети Tron.
Pre-Action-ы:
1. Action-текст - в переменную (payname) название варианта пополнения (USDT-trc20).
2. Action-числа - в переменную (payrate) курс обмена (1 если курс не нужен).
3. Action-текст - в переменную (paytrigger) команду для Триггера (/tusdt).
4. Action-числа - в переменную (payround) количество знаков округления (2).
5. Action-команда - команда перехода в общую форму (/payform)
3. Общая форма
Добавьте новую кнопку - назовите func_payform
• Сделайте кнопку невидимой для Юзера и Админа.
• Добавьте команду (/payform)
• Форма - Ввод переменной (paysum) - Просим ввести желаемую сумму пополнения (данные можно отформатировать перед сохранением - округлить)
✏️ Введите необходимое количество %cur% (минимум %paymin%):
• Сообщение кнопки - Показываем введённую сумму и попросим подтвердить отправку.
**%payname%** Запрос Платежа
👤 Плательщик: **%firstname%**
📅 Дата: __%date% - %time%__Я оплачиваю: `{round(%paysum% / %payrate%, %payround%)}` %payname%
4. Кнопки
Кнопка 1. Отправить Запрос Оператору
• Условие {%paysum% >= %paymin%} - проверяем введённую сумму на соответствие минимуму (paymin)
Pre-Action-ы:
• Action-условие - проверяем флаг что запрос не был отправлен ранее {%payrequest% == 0}
❌ Вы уже отправили запрос.
ℹ️ Отмените предыдущий запрос прежде чем отправлять новый.
• Action-сообщение - отправляем сообщение с запросом админам в группу
**%payname%** Запрос Платежа
👤 Плательщик: **{replace("%firstname%", "#", "")} {replace("%lastname%", "#", "")}**
🆔 #u%usercode% | `%userid%`
📅 Дата: __%date% %time%__
#u%usercode%Я оплачиваю: `{round(%paysum% / %payrate%, %payround%)}` %payname%
%paytrigger% |
В сообщении выше выражение {replace("%firstname%", "#", "")} {replace("%lastname%", "#", "")}
экранирует хештеги в имени юзера чтобы в сообщениях от этого не сползало форматирование.
• Action-числа - (задать значение) ставим флаг 1 в переменную (payrequest) что запрос был отправлен
• Сообщение Кнопки - ваш запрос отправлен, ожидайте реквизиты и сумма
⏳ Ваш запрос отправлен оператору...
1. Дождитесь реквизитов платежа...
2. Переведите: `{round(%paysum% / %payrate%, %payround%)}` **%payname%** на реквизиты, которые БУДУТ предоставлены.
3. Подтвердите оплату.
❗️ВНИМАНИЕ: Ваш запрос не будет обработан без ПОДТВЕРЖДЕНИЯ ОПЛАТЫ!
Кнопка 1.1 Отменить Запрос
• Условие {%payrequest% == 1} - проверяем флаг что запрос был отправлен ранее
❌ Вы не отправили запросов для их отмены.
• Action-сообщение - отправляем сообщение об отмене админам в группу
❌ Отмена Платежа **%payname%**
👤 Плательщик: **%firstname% %lastname%**
🆔 #u%usercode% | `%userid%`
📅 Дата: __%date% %time%__Было нужно: `%paysum%` %cur%
Должен был оплатить:
`{round(%paysum% / %payrate%, %payround%)}` %payname%
• Action-числа - (задать значение) ставим флаг 0 в переменную (payrequest) - снимаем флаг о том что запрос был отправлен
• Сообщение кнопки - Ваш запрос отменён.
✔️ Запрос отменён.
Post-Action-ы
• Action-команда - перемещаем юзера в начало формы (/topup)
Кнопка 1.2 Оплачено (невидимая)
• Доступ по команде (/paid)
• Сообщение кнопки - Вы уверены что оплатили?
❓ Вы уверены что оплатили?
Кнопка 1.2.1 Подтвердить Оплату
• Условие {%payrequest% == 1} - проверяем флаг что запрос был отправлен ранее
❌ Вы не отправили запросов для их отмены.
Pre-Action-ы
• Action-сообщение - отправляем сообщение с подтверждением админам в группу
✅ Подтверждение %payname%
👤 Плательщик: {replace("%firstname%", "#", "")} {replace("%lastname%", "#", "")}
🆔 #u%usercode% | %userid%
📅 Дата: %date% %time%
#u%usercode%Я получаю: %paysum% %cur%
Я оплатил: {round(%paysum% / %payrate%, %payround%)} %payname%
🪄 /varadd balance %userid% %paysum%
• Action-числа - (задать значение) ставим флаг 0 в переменную (payrequest) - снимаем флаг о том что запрос был отправлен
Post-Action-ы
• Action-команда - перемещаем юзера в начало формы (/topup)
• Сообщение кнопки - Подтверждение было отправлено.
✔️ Подтверждение оплаты **%payname%** отправлено оператору.
`%date% - %time%`⏳ Дождитесь начисления...
Кнопка 1.2.2 Отменить Запрос
Pre-Action-ы
• Action-сообщение - отправляем сообщение об отмене админам в группу
❌ Отмена **%payname%**
👤 Плательщик: **{replace("%firstname%", "#", "")} {replace("%lastname%", "#", "")}**
🆔 #u%usercode% | `%userid%`
📅 Дата: `%date%` - `%time%`Должен был получить: `%paysum%` %cur%
Должен был отправить:
`{round(%paysum% / %payrate%, %payround%)}` %payname%
• Action-числа - (задать значение) ставим флаг 0 в переменную (payrequest) - снимаем флаг о том что запрос был отправлен
Post-Action-ы
• Action-команда - перемещаем юзера в начало формы (/topup)
• Сообщение кнопки - Ваш запрос отменён.
✔️ Ваш запрос отменён.
Кнопка 2. Отмена
• Action-команда - перемещаем юзера в начало формы (/topup)
5. Триггеры
Создаём Триггер Кнопки в виде команды соответствующей той которая была записана в переменную в индивидуальной форме. В нашем случае команда /tusdt.
Сообщение триггера содержит реквизиты для платежа и инлайн кнопку с названием «Я оплатил» и командой кнопки «Оплачено» (/paid).
Подробнее о триггерах смотри в Руководстве по Группам.
6. Разблокировка формы
В целом форма работает достаточно стабильно однако попадаются умственно неполноценные пользователи которые могут нарушить работу и такой формы. Например очисткой истории Бота прямо по среди заказа, рестартом и тому подобными вещами. Вводить дополнительную защиту от подобного поведения в принципе нецелесообразно, поэтому у некоторых особо одарённых могут возникать проблемы с отменой старого заказа.
Для того чтобы разблокировать такую форму для пользователя вам нужно будет отправить команду типа:
/varset payrequest userid 0
Для удобства можете создать для себя отдельную форму с вводом ID пользователя, после чего сообщение с данной командой и введённым ID. Копируете команду, отправляете её боту. Вы можете сделать так чтобы юзер могли самостоятельно разблокировать себе эту форму создав отдельную кнопку и Action присваивающий соответствующее значение этой переменной. Можете сделать даже платную разблокировку - это вообще быстро дисциплинирует.