Как я превратил Google Таблицу в Telegram-бота и подключил оплату — и что из денег не прижилось

Как я превратил Google Таблицу в Telegram-бота и подключил оплату — и что из денег не прижилось

В прошлой части я рассказал, как собрал в Google Таблице генератор праздничных открыток: человек загружает фото, выбирает праздник — и получает готовую картинку с собственным лицом, не притрагиваясь к промптам. Таблица работала, но у неё был один потолок: пользоваться ей могли только те, кому я лично давал ссылку. Для своих — нормально. Для чего-то большего — тупик: не будешь же раздавать Google-документ каждому встречному, да и денег так не заработаешь.
Напрашивался следующий шаг — сделать так, чтобы любой человек мог просто написать в чат, прислать фото и получить открытку. То есть Telegram-бот.

Таблица осталась мозгом, бот стал лицом

Главное, что я понял сразу: переписывать всё с нуля не нужно. Движок, который собирает запрос, прячет промпт и ходит в нейросеть, у меня уже был — в таблице. Его я и оставил «мозгом». А Telegram-бот стал просто новым лицом к тому же движку: он принимает фото и нажатия кнопок от пользователя, передаёт их в тот же код, а готовую картинку отдаёт обратно в чат.
Бот я поднял там же, где и всё остальное, — на Google Apps Script, без отдельного сервера. Пользователь присылает фото, бот показывает кнопки: праздник, модель, при желании — короткая надпись. Те же четыре шага, что и в таблице, только теперь в привычном мессенджере и без всяких ссылок на документы.

Оплата: что я перепробовал и выкинул

А вот дальше начались деньги — и с ними грабли.
Сначала я пошёл очевидным путём — встроенная оплата Telegram, звёзды (Stars). На бумаге красиво: всё внутри мессенджера, кнопка «оплатить» прямо в боте. На практике — не для моей аудитории. Это в основном обычные люди, часто не самые молодые, которым праздничная открытка нужна «здесь и сейчас», а не «сначала разберись, как пополнить какие-то звёзды». Отвалилось.
Потом попробовал оплату по QR-коду. Тоже вроде логично — навёл камеру, заплатил. Но на деле работало криво и непредсказуемо, а я не хотел, чтобы первое впечатление от сервиса у человека было «не смог оплатить». Убрал и это.

Что осталось: перевод по номеру и ручное подтверждение

В итоге я оставил самое простое и понятное всем — перевод по номеру телефона через СБП. Схема получилась такая.
Человек выбирает пакет, бот показывает реквизиты для перевода и кнопку «Я оплатил». Как только он её нажимает, мне — владельцу — прилетает заявка с кнопками «Подтвердить» и «Отклонить». Я вижу поступление в банке, подтверждаю — и боту автоматически начисляется баланс. Дальше человек просто делает открытки, а баланс у него тратится по мере генераций.
Да, в этой схеме есть ручной шаг — оплату я подтверждаю сам. Но для текущих объёмов это честнее и надёжнее любой «умной» автоматики: я своими глазами вижу, что деньги пришли, и только тогда открываю доступ. Никаких «оплата зависла» или «деньги ушли, а доступа нет».

Грабли — снова не там, где ждёшь

Первая была техническая и злая. Бот общается с Telegram через веб-адрес (вебхук), и поначалу он отвечал пользователю, но Telegram считал, что доставка не удалась, и слал то же сообщение снова и снова. Бот честно обрабатывал каждый дубль — и человек получал по три одинаковых ответа. Оказалось, всё дело в том, в каком именно виде код отвечает Telegram на входящий запрос: стоит вернуть ответ чуть иначе — и бесконечные повторы прекращаются. Мелочь в одну строку, а без неё бот ведёт себя как сломанный.
Вторая граблина была дороже — в прямом смысле. Поле с моим собственным адресом в боте, куда должны приходить заявки об оплате, я сначала оставил пустым. И первая же реальная оплата ушла в никуда: человек заплатил, нажал «Я оплатил», а до меня заявка не дошла — отправлять было некуда. Telegram недоставленное не хранит, так что узнал я об этом только от самого человека. Пришлось извиняться и начислять доступ вручную. С тех пор правило железное: пока адрес владельца не вписан и сам владелец хоть раз не написал боту, приём оплат не включаем.

Что дальше

Так таблица превратилась в живого бота, который принимает фото, делает открытки и берёт за это деньги — без моего участия в каждом заказе. Казалось бы, можно выдохнуть. Но тут я решил пойти ещё дальше и запустить того же бота в новом российском мессенджере MAX — и вот там меня ждали грабли совсем другого калибра: от отключённых методов API до национального сертификата безопасности, без которого сервер вообще не может достучаться до MAX. Об этом — в третьей, заключительной части.
Если интересно следить за проектом дальше — я пишу об AI-инструментах и автоматизации в Telegram-канале «Сундук AI».