Telegram-botda Click va Payme orqali to‘lov: Splash Water tajribasi
2024-yilda biz pulni butunlay boshqacha usulda qabul qiladigan ikkita bot qildik. Splash Water suvni chatning o‘zida Click va Payme orqali to‘lov bilan sotadi. Foydali Nuqtalar esa chek skrinshotini yuborishni so‘raydi, admin uni qo‘lda tasdiqlaydi. Ikkala usul ham ishlaydi va ikkalasining ham o‘z tuzoqlari bor.
Mirodil OrtiqovBackend dasturchi
Buyurtma boti bilan kelgan deyarli har bir mijozning birinchi savoli: «To‘lovni to‘g‘ridan-to‘g‘ri Telegram’da qilsa bo‘ladimi?» Bo‘ladi. Lekin «ha» deyishdan oldin endi kuniga nechta buyurtma kutayotganingizni va pulni buyurtmalar bilan kim solishtirishini so‘rayman.
Sizga to‘lov tizimlari bilan integratsiya kerakmi yoki chek rasmi va bitta e’tiborli administrator yetadimi — shu javobga bog‘liq.
Ikki bot, pul qabul qilishning ikki usuli
Splash Water — shishalangan suv yetkazib berish. Mijoz savatni yig‘adi, sana va vaqtni tanlaydi, geolokatsiya yuboradi va to‘laydi. To‘lov usuli uchta: Click, Payme va kuryerga naqd pul. Buyurtma darhol operatorlarning yopiq kanaliga tushadi.
Foydali Nuqtalar — iOS va Android uchun mobil ilovadagi akupressura bo‘yicha pullik elektron kitob. Birinchi boblar bepul, qolganlari to‘lovdan keyin ochiladi. To‘lov alohida Telegram-bot orqali o‘tadi: odam pul o‘tkazadi va chek skrinshotini yuboradi, xodim esa admin panelda «to‘langan» statusini qo‘yadi.
Birinchi variant — to‘laqonli integratsiya. Ikkinchisi — aslida zanjirdagi inson. Ikkalasini ham ko‘rib chiqaman.
Splash Water’da to‘lov qanday tuzilgan
Biz Click va Payme API’sini to‘g‘ridan-to‘g‘ri ulamadik. Buning o‘rniga Telegram Payments’dan foydalandik: Click va Payme Telegram’ning to‘lov provayderlari qatorida bor va ular @BotFather orqali ulanadi. Bot hisob chiqaradi, Telegram o‘zining to‘lov formasini ko‘rsatadi, provayder pulni yechadi, bot esa muvaffaqiyatli to‘lov haqida xabar oladi.
Nega to‘g‘ridan-to‘g‘ri API emas? Telegram Payments orqali o‘z to‘lov sahifangizni qilish va kartalar haqida biror narsa saqlash shart emas: formani Telegram’ning o‘zi ko‘rsatadi, karta ma’lumotlarini esa faqat provayder ko‘radi. Lekin Click yoki Payme bilan shartnoma baribir kerak. @BotFather’dagi token aniq merchant uchun beriladi, shuning uchun biznes avval to‘lov tizimiga yuridik shaxs yoki YaTT sifatida ulanishi kerak. Bu ko‘pincha to‘lovni ishlab chiqishning o‘zidan ko‘proq vaqt oladi, shuning uchun endi mijozlardan bu jarayonni loyihaning birinchi haftasidayoq boshlashni so‘rayman.
Mijozning yo‘li mana bunday ko‘rinadi:
Ichkarida esa mana nima bo‘ladi:
- Savat va buyurtma ma’lumotlari. Yetkazib berish sanasi (ertangi kundan boshlab), vaqt oralig‘i, izoh, geolokatsiya. Buyurtma rasmiylashtirilguncha hammasi aiogram FSM holatida saqlanadi.
- Hisob.
UZSvalyutasi va savat pozitsiyalari bilansend_invoice. Summalar eng kichik birliklarda, ya’ni tiyinlarda uzatiladi: so‘mdagi narxni 100 ga ko‘paytiramiz. - pre_checkout_query. Pul yechilishidan oldin Telegram botdan so‘raydi: «Bu to‘lovni tasdiqlaysanmi?» Javob uchun 10 soniya bor.
- successful_payment. To‘lov identifikatorlari bilan xabar keladi. Tranzaksiyani bazada saqlaymiz: foydalanuvchi, to‘lov usuli, summa,
telegram_payment_charge_id. - Operatorlar kanaliga buyurtma. Tovarlar va summa bilan buyurtma matni, unga alohida javob sifatida geolokatsiya va shu buyurtmani Django admin panelda ochadigan «Buyurtmaga o‘tish» tugmasi.
- Statuslar. Operator buyurtmani suradi: «Moderatsiyada» → «Tasdiqlangan» → «Yetkazib berildi».
Naqd pul uchun 2–4-qadamlar o‘tkazib yuboriladi: bot buyurtma xulosasini ko‘rsatadi va «Tasdiqlaysizmi?» deb so‘raydi. Aytgancha, ko‘pchilik hali ham naqd to‘laydi: kuryer 19 litrli idishni eshik oldigacha olib keladi va odamga pulni unga berish osonroq.
Operatorlar kanali loyihaning eng muvaffaqiyatli qismi bo‘lib chiqdi. Operatorlar admin panelni ochiq ushlab turishi shart emas: buyurtma Telegram’da bildirishnoma bo‘lib keladi, manzil xaritadan bitta bosishda ochiladi, biror narsani tuzatish kerak bo‘lsa, tugma to‘g‘ri kerakli yozuvga olib boradi.
Nimani noto‘g‘ri qildik
Endi qayta qilgan bo‘lardim degan narsalar haqida. Mana birinchi versiyadagi pre_checkout ishlovchimiz:
async def pre_checkout(query: types.PreCheckoutQuery):
await OrderForm.success_state.set()
await query.bot.answer_pre_checkout_query(query.id, ok=True)
U hech narsani tekshirmasdan istalgan to‘lovni tasdiqlaydi. Narxlar kamdan-kam o‘zgarguncha bu ishlaydi. Lekin hisob chiqarilishi va «To‘lash» bosilishi orasida yarim soat o‘tishi mumkin: bu vaqt ichida admin narxni o‘zgartirishi yoki tovarni katalogdan olib tashlashi mumkin, mijoz esa eski hisob bo‘yicha to‘laydi.
Ikkinchi xato — payload. Biz unga barcha hisoblar uchun bir xil satr uzatardik. Payload successful_payment’da qaytib keladi va bu to‘lovni aniq buyurtma bilan bog‘lashning eng oddiy yo‘li. To‘g‘risi — u yerga hisob chiqarilishidan oldin yaratilgan buyurtma ID’sini qo‘yish, buyurtmani esa to‘lovdan keyin FSM holatidan yig‘maslik.
Uchinchisi — xotiradagi holat. Agar bot hisob va to‘lov oralig‘ida qayta ishga tushsa, FSM’dagi buyurtma ma’lumotlari yo‘qoladi, pul esa keladi. To‘lov ssenariylari uchun holatlar ombori MemoryStorage’da emas, Redis yoki bazada bo‘lishi kerak.
Bilishimizcha, bu xatolarning birortasi ham mijozga pul yo‘qotishga olib kelmadi. Lekin botni qaytadan qilganimda, uchalasini ham birinchi kunning o‘zida tuzatgan bo‘lardim.
Cheklarni qo‘lda tekshirish: Foydali Nuqtalar
Ikkinchi loyihada mantiq boshqacha. Foydalanuvchi ilovada «Sotib olish»ni bosadi, ilova Telegram-botni t.me/<bot>?start=<foydalanuvchi id> ko‘rinishidagi havola orqali ochadi. Shunday qilib bot kim to‘layotganini ro‘yxatdan o‘tishsiz darhol biladi.
Keyin odam pul o‘tkazadi va botga chek skrinshotini yuboradi. Bot rasmni saqlaydi, «pending» statusli tranzaksiya yaratadi va rasmni ism, vaqt va admin paneldagi yozuvga havola bilan yopiq kanalga yuboradi. Xodim ochadi, tushum bilan solishtiradi, tranzaksiyaga «completed» yoki «rejected» qo‘yadi va foydalanuvchiga premium kirishni yoqadi. Ilova «Endilikda siz to‘liq kitobni o‘qishingiz mumkin» push xabarini oladi va boblar ochiladi.
Eskicha eshitiladi, lekin bu loyihaga mos keldi. Mahsulot bitta, narx bitta, xaridlar kuniga minglab emas, mijozda esa baribir har kuni tushumlarni tekshiradigan odam bor edi.
- +Ikki-uch kunda ishga tushadi, to‘lov tizimi bilan shartnomasiz
- +Har qanday o‘tkazma usuliga mos, jumladan kartadan kartaga
- +Xodim har bir to‘lovni o‘z ko‘zi bilan ko‘radi
- −Xaridor tasdiqni kutadi, ba’zan soatlab, ayniqsa tunda
- −Skrinshotni soxtalashtirish mumkin va tekshiruv odamning e’tiboriga tayanadi
- −Masshtablanmaydi: kuniga yuzta buyurtmada bu alohida shtat birligi
- −Foydalanuvchi boshqa fayl yuborishi mumkin va bu yana bitta yozishma
Ular orasidan qanday tanlash kerak
Ikkala loyihadan keyingi fikrim: agar tovar jismoniy bo‘lsa, buyurtmalar ko‘p va takrorlanuvchi bo‘lsa, darhol Telegram Payments orqali Click va Payme qiling. Ishlab chiqishda bu qimmat emas, mijoz esa buyurtma bergan oynaning o‘zida to‘laydi va «keyin o‘tkazaman» deb ketib qolmaydi.
Agar mahsulot bitta, sotuvlar donalab bo‘lsa va siz umuman sotib olishadimi-yo‘qmi, shuni tekshirayotgan bo‘lsangiz, cheklarni qo‘lda tekshirish — normal start. Asosiysi, kim va qanchalik tez javob berishini oldindan kelishib oling va hech bir chek chatda yo‘qolib ketmasligi uchun statuslar qo‘ying.
Va ikkala holatda ham buyurtma va to‘lovlar faqat bazaga emas, odamlar ko‘radigan joyga kelishi kerak. Admin panelga tugmali operatorlar kanali — bunday botlarda qilgan eng arzon va eng foydali narsamiz. Keyin bu buyurtmalar qayerdan kelganini qanday hisoblashimiz haqida Telegram’dan arizalar analitikasi maqolasida yozganman.
Loyihalarni Splash Water va Foydali Nuqtalar keyslarida batafsil ko‘rishingiz mumkin.



