- BrainTools - https://www.braintools.ru -
Я уже больше года работаю над проектом Language Dove [1], и наконец пришло время его монетизировать.
В этой статье – мой опыт [2] с двумя платёжными сервисами: американским MoR (merchant of record) Paddle и интернет-эквайрингом от IDBank в Армении, а также технические детали интеграции с тем из них, который я в итоге выбрал.
Language Dove – это платформа для изучения языков: у меня есть курсы с нуля, интерактивные книги, упражнения на говорение.
Но главная фича сайта – это караоке-субтитры к фильмам с двумя видами перевода: адаптивным художественным и буквальным, но на уровне отдельных слов [3]. Про то, как я их делаю, я недавно писал на Хабре [4].
Если у вас нормально работает YouTube, то фильмы с субтитрами можно посмотреть тут (с переводом на русский) [5] или тут (с переводом на английский) [6].
Если у вас проблемы с YouTube – есть демка на Google Drive [7]: первая серия «Футурамы» с апскейлом до 2160p и с субтитрами, вшитыми прямо в видео.

В базовом варианте все переводы делаются автоматически. Однако, есть возможность подправить их вручную. Для «Футурамы» я так и сделал – это заняло ~2 часа, по часу на каждый вид перевода.
Я реализовал 2 вида монетизации:
Подписка на материалы сайта. Весь контент делится на платный и бесплатный – доступ к платному открывается единой подпиской. В библиотеке (курсы, книги, видео с субтитрами) у каждого материала хранится булевой флаг платности. Чуть сложнее с упражнениями на говорение: они разбиты на шесть уровней, каждый следующий (кроме последнего) вдвое длиннее предыдущего. Первый уровень (100 предложений) бесплатный, остальные – по подписке.

Заказ субтитров для кастомных видео. Пользователь оформляет заказ, оставляет контакты → мне приходит сообщение в Телеграм → я ему пишу, беру видео → я делаю субтитры → отдаю результат → пользователь платит. Нужны две страницы: страница заказа с калькулятором цен и страница оплаты после получения субтитров. Для пользователей из России вторая страница не используются – идёт расчет внутри РФ.

Живу в Ереване.
Ради проекта уволился с работы, оформил ИП, а затем бизнес-ВНЖ.
ИП-счёт открыл в IDBank – потому что у них есть интернет-эквайринг.
Гражданство РФ.
Stripe [8] – самый популярный выбор у американских фаундеров, но в Армении он не работает. Есть обходной путь через удалённую регистрацию компании в США, но это даже на словах звучит запредельно сложно.
Я посмотрел другие американские сервисы: Lemon Squeezy [9], Paddle [10], Dodo Payments [11], FastSpring [12]. Везде на определённом этапе требуется верификация по паспорту.
Patreon [13] тоже рассматривал, но быстро отбросил. «Поддержите нас на Patreon, чтобы получить доступ к платным фичам сайта» – я такого ни на одном серьёзном сайте не видел. Для западной аудитории это выглядело бы схематозно и подозрительно.
Тогда я вспомнил про IDBank и решил подать заявку на «виртуальный POS-терминал» [14] (это они так называют интернет-эквайринг). Сайт банка жёстко глючил, подать онлайн не получилось – пришлось звонить, и оператор оформила заявку по телефону.
Решил обходить сервисы по возрастанию популярности – в моём представлении, менее популярный сервис с большей вероятностью будет добрее к русским.
Dodo отбросил сразу: верификация там происходит уже после настройки аккаунта и получения первых платежей. То есть ты всё подключаешь, получаешь деньги – и тут тебе: «а теперь покажите паспорт». Нет, спасибо.
На следующий день после регистрации пришло письмо
For this type of service our compliance team requests three months of transaction statements to review from a previous payment processor. Would this be possible, or is this a new product offering?
Понял, что шансов мало, но на всякий случай я подробно расписал свою ситуацию. Ожидаемо отказали, причём формулировка породила больше вопросов, чем ответов:
Unfortunately we would not be able to move forward without those statements and we require all new sellers to go through a verification process and if you were using a Russian Passport for that it would be declined due to currency restrictions.
Какое отношение русский паспорт имеет к валюте? (Мой ИП-счёт, естественно, долларовый.) Может, имели в виду «current restrictions»?
На очереди Paddle.
В Paddle для работы с реальными деньгами нужно пройти две стадии верификации: проверка сайта и верификация личности.
С первой стадией всё прошло относительно гладко.
Нужно было добавить стандартные юридические страницы: Terms of Service, Privacy Policy, Refund Policy и Pricing.
После отправки на проверку через 3 дня пришло письмо с замечаниями:
1. Срок рефанда. Paddle требует минимум 14 дней на возврат – у меня было меньше, попросили исправить.
2. Распознавание речи. Потребовали убрать функцию распознавания речи в упражнениях на говорение с формулировкой: “Paddle cannot support products that have a voice-over feature”. Я изучил список запрещённых продуктов [15] – самое близкое к войсоверам – это “Content Generation with Voice Impersonations”. Очевидно, сотрудник перепутал speech-to-text и text-to-speech. В ответном письме объяснил разницу, добавив, что распознавание речи используется практически всеми языковыми платформами.
3. Формат обучения [16]. Спросили, предзаписаны ли материалы или я занимаюсь репетиторством вживую – последнее запрещено как “human services”. Ответил, что всё предзаписано, и дал ссылку на курс испанского.
Ещё через 3 дня пришёл ответ – сайт одобрен.
Вспоминаем про IDBank. Ответа на заявку так и не было, поэтому я пошёл в отделение лично.
Сначала всё шло нормально – меня усадили обсуждать «виртуальный POS» с менеджером. Спрашиваю: есть стандартная процедура для подписочной модели? А если нет, то можно ли навелосипедить на основе разовых платежей? Менеджер кому-то позвонила и неуверенно ответила: подписок нет, но навелосипедить можно.
В остальном сервис устраивал: автоматический приём международных карточных платежей, деньги идут на счёт ИП напрямую. Писать кастомный код для подписки я не боялся.
Уже собирался оставлять заявку, но на всякий случай спросил: «А ничего, что сайт на английском»? Оказалось – сайт обязательно должен иметь армянскую версию. Спрашиваю: «Можно нейронкой перевести»? Менеджер не поняла. «Ну, искусственным интеллектом [17].» (Сказать «машинный перевод» я побоялся – подумает, что я собираюсь построчно гнать через Google Translate.) Она всё равно не поняла. Тогда напрямую: «Ничего, если перевод будет звучать немного коряво?» – «Ничего страшного, главное, чтобы всё было понятно.»
Ушёл из банка с задачей: добавить локализацию на армянский.
Я решил сделать полноценный переключатель языка – не только на армянский, но и на другие языки.
Для каждого языка хранится .json-файл с локализованными строками. Файл генерируется автоматически, после чего перевод можно поправить вручную. Строки сгруппированы по страницам – каждая страница переводится отдельным запросом к LLM.
Стратегия перевода зависит от типа страницы:
Для пользовательских страниц (лендинг, цены, блог, статьи по грамматике, страница заказа субтитров) используется транскреация [18], адаптивный перевод (такой же, как и для фильмов).
Юридические (ToS, Privacy Policy, Refund Policy) – прямой перевод, потому что транскреация может накреативить там, где это крайне неуместно.
Про различия обычного перевода и транскреации я писал в предыдущей статье [4]. Для перевода использовал Claude Opus 4.5 – по моим личным бенчмаркам, модели Anthropic лучше других справляются с языковыми задачами.
Вручную переводы я не правил. Логика [19] простая: если я поменяю хотя бы одно слово в английском тексте, при перегенерации получится другой перевод всей страницы, и ручные правки пойдут в мусорку. Лучше сначала прийти к финальным формулировкам на английском, а потом уже шлифовать переводы.
То, что вы видите на сайте в русской версии [20] – это на 100% машинный перевод. По-моему, выглядит весьма достойно. А вот с армянским LLM справляются заметно хуже. Скорее всего, армянская версия ощутимо пахнет машинным переводом. Если среди читателей есть армяне – поделитесь впечатлениями [21], интересно.
После перевода сайта я снова пришёл в банк, и заявку наконец обработали.
Теперь самое «интересное» – верификация с паспортом РФ.
Paddle использует сервис Onfido: присылают ссылку, загружаешь фото документа и селфи, Onfido всё проверяет и возвращает вердикт. Россия в списке есть – можно отправить внутренний паспорт или загранпаспорт. Я выбрал загран.
Важный нюанс: принимают только фотографию, не скан. У меня камера на планшете сломана, а вебка – так себе. К счастью, нашлось старое фото заграна, снятое ещё рабочей камерой.
Отправил всё днём, ночью пришёл ответ:
Фото недостаточно чёткое, нужно переснять.
Нужен proof of address в несанкционной стране: utility bill или договор аренды.
Отправил семь документов в качестве proof of address:
текущий и 3 предыдущих ВНЖ
договор аренды
скриншоты оплаты коммуналки из банковского приложения (в Армении счета на физическую почту не присылают)
Фото решил переснять вебкой крупным планом.
Не прокатило – сказали, что все углы документа должны быть видны. Стало ясно, что с вебкой тут делать нечего. Пошёл в профессиональную фотостудию и сделал фото заграна в огромном разрешении. В ответе так и написал: камера плохая, обратился к профессионалам.
На этот раз к фото претензий не было. Зато попросили банковскую выписку с именем и адресом за последние 3 месяца.
А вот это проблема. В банке с личным счётом указан российский адрес (открывал в 2022-м, сразу после переезда). В банке с ИП-счётом мало транзакций, а армянский адрес не совпадает с адресом проживания – оформлял ИП удалённо, и компания вписала свой юрадрес вместо моего.
Попробовал сменить адрес в первом банке – отказали. Их устраивает только регистрация по адресу в паспорте, никакие другие документы не годятся; я делал регистрацию, но для предыдущего ВНЖ. Да и в выписке они адрес всё равно не указывают.
Делать нечего – отправил выписки из обоих банков и честно описал всю ситуацию. Для подтверждения адреса приложил справку о регистрации ИП.
Ответ снова про фото паспорта: у системы проблема с распознаванием (и это с профессиональным снимком!). Спросили, есть ли другой документ. Выбора нет – только потрёпанный временем внутренний паспорт РФ.
Снова пошёл в фотостудию. На этот раз сфоткал и загран, и внутренний паспорт по нескольку раз. Отправил всё.
В ответ – опять запрос proof of address в несанкционной стране. К этому моменту имена сотрудников Paddle начали повторяться – видимо, я перебрал их всех.
Снова отправил все документы.
На этот раз написали, что им нужно время проверить всё предоставленное. Через 3 дня пришло подтверждение – верификация пройдена. Ещё несколько дней занял «Final Review», но там прошло без проблем.
Ура, получилось! Наконец-то можно интегрировать монетизацию.
Через 2 недели после подачи заявки позвонили и попросили добавить на сайт логотипы Visa, Mastercard, ArCa и IDram. Добавил – сказали, что отправили на дальнейшую проверку.
Ещё через месяц – когда аккаунт Paddle уже был верифицирован, но монетизация ещё не внедрена – пришло письмо с отказом от IDBank.
Что именно им не понравилось – не знаю. Возможно, сайт не выглядел достаточно армянским: нет перевода материалов на армянский (только машинный перевод интерфейса); цены в долларах; в ToS указано, что английская версия имеет преимущественную силу.
В Paddle разработчик создаёт продукты, а для каждого продукта назначает одну или несколько цен.
Атрибуты цены:
Тип платежа: единовременный, ежемесячный или ежегодный
Значение для каждой страны – в долларах или другой поддерживаемой валюте (примерно у половины стран местная валюта не поддерживается)
Отображение: с НДС, без НДС или по традиции страны. В США цены указывают без НДС (он добавляется при покупке), в большинстве других стран – с НДС
Есть два вида API-ключей:
Фронтенд-ключ – публичный. Через него я получаю цены в локали пользователя для отображения на сайте
Бекенд-ключ – секретный. Я использую его для проверки наличия подписки
Также есть скидочные коды: задаём, к каким ценам применим код, а также размер скидки. Скидка срабатывает, когда пользователь вводит код на странице покупки.
Комиссия Paddle: 5% + $0.50 за транзакцию. Из-за фиксированных 50 центов невыгодно дробить крупные покупки на несколько транзакций.
Создаём продукты, цены и скидочные коды
На фронтенде делаем страницу с ценами – подтягиваем их c помощью фронтенд-ключа
По кнопке «Купить» / «Подписаться» – редирект на страницу оплаты Paddle. Контролируем её косвенно: можно передать email и скидочный код для автозаполнения
После покупки получаем событие на фронтенде и обновляем статус пользователя. Можно настроить вебхук для бекенда, но мне это не нужно – статус подписки проверяется при запросе контента
Пока подписка активна, Paddle сам списывает деньги по расписанию – с нашей стороны ничего не требуется.
Paddle хранит платёжные данные пользователей и предоставляет персональную ссылку на управление подпиской – отмена, смена платёжных данных. Эта же ссылка приходит в письме при покупке.
Я создал два продукта: ежемесячная подписка ($9/мес) и годовая($72/год, т.е. $6/мес). Отображение цены – по традиции страны, чтобы не раздражать пользователей.
Проблема: при автоконвертации, цены во многих локалях выглядят некрасиво – получаются нецелые числа, плюс отсутствует «психологический прайсинг» (199 вместо 200 – мозг [22] видит «сто с чем-то» и воспринимает цену ниже).
Решение – скрипт, который автоматически вычисляет цены во всех валютах с учётом НДС-традиции и подбирает красивые числа, сохраняя примерно одинаковый доход с транзакции:
Вычисляем вещественное референсное значение в местной валюте
Ищем целое число, которое меньше референсного не более чем на 10%, но при этом у него либо отличается ведущая цифра, либо меньше цифр в записи
Если такого нет – просто округляем
Авторизация у меня через Supabase: magic link или Google. При нажатии «Подписаться» пользователь обязан быть авторизован – иначе он может вписать произвольный email, а Paddle его не проверяет. Неавторизованных просим сначала залогиниться.
Пользователь идентифицируется по email. На бекенд передаётся не email напрямую, а JWT-токен сессии – email извлекается из него через Supabase API.
Бекенд умеет по email:
Проверять наличие подписки
Возвращать ссылку на управление подпиской
Если у залогиненного пользователя уже есть активная подписка — кнопки «Подписаться» деактивируются (Paddle, как выяснилось, не контролирует повторную подписку на тот же продукт).
Если материал бесплатный → отдаём сразу.
Если платный → извлекаем email из JWT, проверяем подписку. Есть – отдаём. Нет – возвращаем ошибку [23], на фронтенде показываем попап «материал платный» с редиректом на страницу подписки.
Стоимость обработки видео зависит от:
Длины видео: короткое / среднее / длинное
Нужен ли адаптивный художественный перевод
Нужен ли контекстуальный перевод на уровне слов
Количества видео в заказе
Итого я создал 12 цен: 3 длины × 4 комбинации переводов. Скидки за объём реализованы через скидочные коды.
Внимание [24]: цены указаны из расчета, что все переводы автоматические. Я в теории могу их улучшить вручную, но это весьма трудоёмко (напоминаю, на одну серию «Футурамы» ушло 2 часа). Можно об этом договориться отдельно.

Также я сверстал страничку для оплаты после выполнения заказа.
Все настройки задаются через параметры URL. Предполагается, что я сам формирую соответствующую ссылку и отправляю её пользователю.

Таким образом, монетизировать свой проект через Paddle возможно даже с российским паспортом; однако процесс верификации будет небыстрым.
Я рассказал про подводные камни монетизации и надеюсь, что кому-то помог не совершить ошибок.
Автор: einhorn
Источник [25]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/27271
URLs in this post:
[1] Language Dove: https://languagedove.com
[2] опыт: http://www.braintools.ru/article/6952
[3] буквальным, но на уровне отдельных слов: https://habr.com/ru/articles/928456/
[4] недавно писал на Хабре: https://habr.com/ru/articles/994896/
[5] тут (с переводом на русский): https://languagedove.com/library?target_language=All&translation_language=ru&category=All%20videos
[6] тут (с переводом на английский): https://languagedove.com/library?target_language=All&translation_language=en&category=All%20videos
[7] демка на Google Drive: https://drive.google.com/file/d/10Bwz02RzZ0yMSOpLQpGMu4uERnCB-t3F/view?usp=sharing
[8] Stripe: https://stripe.com
[9] Lemon Squeezy: https://www.lemonsqueezy.com
[10] Paddle: https://www.paddle.com
[11] Dodo Payments: https://dodopayments.com
[12] FastSpring: https://fastspring.com
[13] Patreon: https://www.patreon.com
[14] «виртуальный POS-терминал»: https://idbank.am/ru/business/instruments/torgovoe-finansirovanie/v-pos-pos-1/
[15] список запрещённых продуктов: https://www.paddle.com/help/start/intro-to-paddle/what-am-i-not-allowed-to-sell-on-paddle
[16] обучения: http://www.braintools.ru/article/5125
[17] интеллектом: http://www.braintools.ru/article/7605
[18] транскреация: https://en.wikipedia.org/wiki/Transcreation
[19] Логика: http://www.braintools.ru/article/7640
[20] на сайте в русской версии: https://languagedove.com/?site_language=ru
[21] впечатлениями: http://www.braintools.ru/article/2012
[22] мозг: http://www.braintools.ru/parts-of-the-brain
[23] ошибку: http://www.braintools.ru/article/4192
[24] Внимание: http://www.braintools.ru/article/7595
[25] Источник: https://habr.com/ru/articles/1011226/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1011226
Нажмите здесь для печати.