Подписки в ABBYY Cloud OCR SDK: «заткнитесь и возьмите мои деньги!»
Начать нужно с ответа на вопрос «зачем». Ответ на него: подписки удобны и понятны многим пользователям. Хотя покупать пакеты страниц тоже удобно и несложно, пользователю нужно следить за остатком страниц приложения и докупать страницы. Сервис умеет отправлять предупреждение о скором исчерпании остатка страниц, но пользователь может его пропустить. Если пользователь забудет докупить страницы — его приложение может в самый неподходящий момент доизрасходовать остаток страниц и перестать работать.
Капитан подсказывает решение: автоматизация. Пользователь может продолжать докупать пакеты страниц, а может оформить подписку. Конечно, подписку можно прекратить в любой момент, в этом случае положительный остаток страниц не изменится, его можно будет израсходовать позже.
Мы старались сделать логику подписок как можно более понятной и одновременно удобной для пользователей.
Все подписки в сервисе — с ежемесячным пополнением остатка страниц: раз в месяц списывается оговоренная сумма и остаток пополняется до оговоренного числа. Число страниц, которые можно обработать, в принципе не ограничено — можно «уходить в минус», но за это позже придется доплатить, доплата списывается также автоматически. «Уход в минус» — это очень важная возможностьTM, она защищает приложения пользователей от внезапной остановки в случае исчерпания ежемесячного объема подписки.
Если «минус» не очень глубокий, в конце периода будет списана не только ежемесячная плата, но и плата за страницы, обработанные сверх начисленного объема. Если приложение пользователя обрабатывает много страниц и остаток уходит в глубокий минус, сервис, не дожидаясь очередного ежемесячного списания, автоматически доначисляет пользователю столько страниц, чтобы остаток стал нулевым, и списывает с пользователя оплату за начисленные страницы.
Доначисление может происходить почти как угодно часто по мере уменьшения остатка страниц при каждом достижении определенного порога, который зависит от ежемесячного объема подписки.
При такой схеме доначисления страниц между ежемесячными списаниями пользователи могут быстрее реагировать, если их приложения стали обрабатывать больше страниц, чем они предполагали ранее. Самые очевидные возможные причины — увеличение обрабатываемых объемов или логическая ошибка в приложении пользователя. КРАЙНЕ НЕОЖИДАННО узнать о списании накопившейся за месяц десятикратной стоимости подписки в конце месяца — сомнительная радость.
Иногда пользователи просят возможность запретить досписания или как-то иначе ограничить объем страниц в месяц, чтобы защититься от чрезмерного расходования средств. Пока мы считаем, что это надуманное требование. Как бы ни было сделано ограничение, оно подразумевает некий порог значения остатка страниц, при достижении которого приложение пользователя перестанет работать. Пользователь как-то должен его заранее узнать. Если пользователь ошибется в меньшую сторону — его приложение неожиданно остановится. Если пользователь ошибется в большую сторону — он расстроится из-за чрезмерного списания. Поэтому для случая, когда нужно строго ограничить расходы, ответ — покупка пакетов, с ними не ошибешься.
Подписки работают на основе «reference transactions» в PayPal.
При создании подписки сервис вызывает у PayPal метод CreateBillingAgreement, который возвращает ссылку на страницу подтверждения на сайте PayPal. Пользователь переходит на сайт PayPal и там подтверждает создание «соглашения о списании» (billing agreement). Далее сервис, указывая идентификатор соглашения, может списывать с пользователя практически любые суммы в любой момент, вызывая метод DoReferenceTransaction.
Сервис вызывает DoReferenceTransaction один раз сразу после успешного выполнения CreateBillingAgreement, затем — каждый раз как проходит месяц с предыдущего ежемесячного списания и каждый раз как будет достигнут порог, при котором нужно доначислять страницы между ежемесячными списаниями. Сумма списания каждый раз вычисляется в зависимости от причины конкретного списания и числа страниц, она может быть разной.
Да, именно так — можно взять и списать в произвольный нужный момент столько, сколько спишется почти любую сумму.
PayPal reference transactions — это очень мощный механизм. При работе с ним нужно отслеживать (записывать на стороне сервиса) все выполненные списания и их суммы, а также принимать все разумные технические меры, чтобы по возможности уменьшить число логических ошибок, которые могли бы привести к несправедливым списаниям.
Пользователь, конечно, видит все списания в своей учетной записи в PayPal и в случае несогласия с любым списанием может решить его оспорить — как обычно при использовании PayPal. Большое число несправедливых списаний не только может испортить репутацию сервиса, но и изрядно добавит работы его владельцам — нужно будет реагировать на претензии, на просмотр ленты с котиками и разработку времени не останется.
Важно сделать так, чтобы реализация логики списаний была надежной, предсказуемой и проверяемой, но этого недостаточно. Очень важно также сделать, чтобы списания были максимально понятными для пользователей.
Самое главное — у пользователей не должно оставаться и тени сомнения, что подписка бессрочная и действует до момента отмены. Мало написать в витрине «ежемесячный платеж — столько-то денег», нужно также явно указывать в витрине и уведомлениях, что ежемесячная плата за подписку взимается автоматически и безусловно до тех пор, пока подписка не отменена.
Также хорошим тоном считается предупреждать о списании ежемесячной платы за несколько дней — бывает, пользователи подписываются, потом перестают пользоваться сервисом и забывают о подписке. Удобнее и эффективнее предупредить их и дать им заранее отменить подписку, чем потом они обратятся в поддержку или попробуют оспорить списание в PayPal. Если у пользователя будут основания считать, что его ввели в заблуждение, он может обратиться к местному регулятору или в суд, издержки в таком случае будут намного больше списанной ежемесячной платы.
Неправильно: «мы списали у вас ежемесячную плату за подписку». Правильно: «мы списали у вас ежемесячную плату и будем списывать ее и дальше каждый месяц, пока вы не отмените подписку на вот этой странице [и ссылка]».
Неправильно: «за перерасход страниц списывается…». Правильно: «можно обрабатывать больше страниц, чем включено в ежемесячный объем подписки, в таком случае остаток страниц приложения может стать отрицательным, за все страницы, обработанные сверх ежемесячного объема, будет списана дополнительная плата».
Если сделать правильно, пользователи не только с удовольствием расстаются с деньгами, но и спрашивают, «куда тут засунуть карточку, чтобы ВЖУХ — и само списывалось сколько нужно». С подписками им больше не нужно следить за остатком страниц и невыносимо утомительно несколько раз щелкать мышью для каждой их докупки.
Дмитрий Мещеряков,
департамент продуктов для разработчиков