Автовыдача заказов: как бот закрывает продажу без моего участия
Разбираю на своём кейсе с QoLab, как связка из бота и плагина сама принимает оплату, чеканит свежий ключ и отдаёт его покупателю в чат — пока я сплю.
Это задача на переписывание текста — код и skills тут ни при чём.
Прошёлся по тексту и нашёл два запрещённых оборота: «чтобы сбой был виден мне, а не только покупателю» и «именно их я проверяю автоматически, а не „на глазок"». Оба переписал. Вот результат:
Я продаю свою десктоп-утилиту Prism Pro (это версия QoLab, «Quality of Loot» для Path of Exile) на площадке FunPay. Обещание простое: оплатил — сразу получил рабочий ключ. И тут вылезает неудобная правда цифровой торговли в одиночку: покупатель платит в 3 часа ночи, а я в это время сплю. Выдаю вручную — значит, я сам и есть узкое место. Человек ждёт, нервничает, пишет «где ключ?», ставит холодный отзыв. Деньги пришли, а на душе так, будто я его подвёл.
Поэтому я собрал автовыдачу. Ниже — как она устроена на практике, без магии и без обещаний «пассивного дохода».
Что происходит после оплаты
Цепочка событий выглядит так:
- Покупатель оплачивает заказ на FunPay.
- Бот ловит событие оплаты по своему аккаунту.
- Плагин чеканит новый ключ через мой API.
- Ключ уходит покупателю прямо в чат FunPay.
Меня в этой цепочке нет. О продаже я узнаю задним числом — по уведомлению и по новой строчке в статистике.
Из чего собрана связка
Ядро — это FunPayCardinal, бот, который работает на cookie-сессии моего аккаунта. Входящие заказы он видит так же, как их вижу я в браузере. К нему я подключил свой плагин plugins/qolab_delivery.py. Он делает три вещи:
- ловит оплаченный заказ и понимает, что это именно Prism Pro;
- дёргает
POST https://api.qolab.space/admin/keysи получает свежий, ещё нигде не засвеченный ключ; - отправляет этот ключ покупателю сообщением в чат.
Важный момент: ключ рождается в момент продажи, из готового списка его никто не достаёт. У меня не лежит стопка «одноразовых» ключей, которые могут утечь или закончиться в самый неподходящий момент.
Почему такой окольный путь
Логичный вопрос: почему не подключиться к FunPay «по-нормальному», через официальный API? Потому что его нет. У FunPay для продавцов нет ни официального API, ни вебхуков. Площадка не присылает мне сигнал «заказ оплачен, забирай». Единственный рабочий способ поймать оплату и тут же ответить динамическим ключом — это бот, который сидит на моей сессии и читает события аккаунта. Красивого фасада тут не будет. Зато связка работает и остаётся полностью под моим контролем.
Где такая штука обычно ломается
Автовыдача — это не «поставил и забыл». Ещё на этапе сборки я заложился на несколько неприятных сценариев:
- Двойная выдача. Событие оплаты может прилететь дважды, бот может перезапуститься на середине. Тогда покупатель получит два ключа за одну оплату — прямой убыток. Поэтому в ядре есть дедупликация: один заказ — один ключ, повторы отсекаются.
- Молчание после оплаты. Если чеканка ключа отвалилась, худший исход — оставить человека без ответа. Логика match → mint → message построена так, чтобы про сбой первым узнал я. Покупатель не должен упереться в тишину.
- Сессия протухла. Cookie-сессия живёт не вечно. Это цена работы без официального API, и я держу её в голове как штатное обслуживание.
Самое ценное здесь: ядро — match, mint, message, dedup — покрыто тестами. Это те четыре шага, где ошибка стоит денег и репутации. Такое я проверяю автоматически, глазами тут полагаться нельзя.
Что это в итоге даёт
Самое очевидное — скорость. Между «оплатил» и «получил ключ» проходят секунды, и так в любое время суток. Покупатель доволен, отзыв тёплый, а я не сижу в приложении FunPay как оператор call-центра.
Менее очевидное, но для меня главное — спокойствие. Я перестал бояться собственных продаж. Раньше каждый заказ был маленьким обязательством «надо срочно ответить». Теперь заказ — это просто цифра, которая выросла сама.
Стоит ли повторять
Продаёте что-то цифровое и выдаёте руками — автовыдача окупается почти сразу, даже на небольших объёмах. Но коробочным решением её считать не стоит. Живой бот на чужой площадке без официального API требует внимания: следить за сессией, ловить сбои, тестировать денежные пути. Я собирал это под свой продукт и свои риски. Ваша связка будет другой. А вот принцип «оплата ловится, ключ чеканится, ответ уходит сам» переносится один в один.