Қысқаша
Жазылым дегеніміз — счётты кестеге сай автоматты шығару. Белгіленген күн келгенде жүйе клиентке жаңа счёт жасайды, клиент оны Kaspi-де өзі растайды. Ақша клиенттің шотынан өздігінен шешілмейді. Бұл техникалық жағынан да, заңды жағынан да солай: Kaspi QR төлемі клиенттің әр жолғы растауын талап етеді, ал біз кассир рөлі арқылы жұмыс істейміз — бізде клиенттің шотына қол жеткізу мүмкіндігі жоқ және болмайды.
Сондықтан жазылымдық бизнесті құрғанда басты сұрақ басқаша қойылады: клиентті әр айда төлеуге қалай ыңғайлы етесіз, ал төлемегендерге не істейсіз.
Не автоматтандырылады, не автоматтандырылмайды
| Не | Автоматты ма |
|---|---|
| Счёт шығару | Иә, кестеге сай |
| Клиентке счёт жету | Иә, телефонға счёт болса Kaspi-ге push келеді |
| Төлемді растау | Жоқ. Клиент өзі растайды |
| Төленбесе қайта жіберу | Иә, қайталау сатысы бойынша |
| Қолжетімділікті ашу/жабу | Сіздің жағыңызда, webhook бойынша |
Бұл ұстанымды клиентке де түсіндіріп қойған дұрыс: «ай сайын Kaspi-ге счёт келеді, растап қоясыз». Күтпеген жерден ақша шешіліп кетті деген шағым да болмайды — бұл жағынан бұл схема тіпті ыңғайлы.
Жұмыс схемасы қадамдап
| Қадам | Кім | Не болады |
|---|---|---|
| 1 | Сіз | Клиентке жазылым жасайсыз: сома, аралық, бастау күні |
| 2 | Qut Pay | Кезек келгенде счёт шығарады |
| 3 | Клиент | Kaspi-де растайды |
| 4 | Qut Pay | Сіздің адреске invoice.paid оқиғасын жібереді |
| 5 | Сіздің сервер | Қолжетімділікті келесі кезеңге ұзартады |
| 6 | Төленбесе | Қайталау сатысы бойынша қайта шығарылады |
| 7 | Саты бітсе | Кезек тасталады, кесте келесі айға жалғасады |
Аралық және кесте
Аралықтар: day, week, month. Оларға кратность қосылады — every өрісі. Мысалы month + every: 3 деген тоқсан сайын деген сөз.
Жазылым да қай кассир арқылы жасалғанын есте сақтайды. Кассир ауысса, оны ескеріңіз.
Толық өрістер мен әдістер: Жазылым API.
Қайталау сатысы
Клиент счётты бірден растамаса, жүйе оны қайта шығарады. Қанша рет және қандай аралықпен — retryDelaysMin өрісінде, минутпен.
Әдепкі мәні: [15, 60, 360] — яғни 15 минуттан кейін, сосын бір сағаттан кейін, сосын алты сағаттан кейін. Ең көбі 5 мән бере аласыз.
Саты аяқталғанда сол кезек тасталады, бірақ жазылым өлмейді — кесте келесі кезеңге жалғасады. Жазылымда failedRuns, lastError және lastRunStatus өрістері сақталады, олардан не болғанын көресіз.
Сатыны таңдау:
| Бизнес | Ұсыныс | Себебі |
|---|---|---|
| Спортзал, курс | [60, 720, 1440] | Клиент асықпайды, күндіз-түні мазалаудың қажеті жоқ |
| SaaS, қызмет | [15, 60, 360] | Әдепкі, жеткілікті |
| Жеткізу, тағам | [10, 30, 60] | Күн ішінде шешілуі керек |
Тым жиі қайталау клиентті мазалайды: Kaspi-ге қайта-қайта счёт келеді.
Өткізіп алу саясаты
Кезек өз уақытында жүрмей қалатын жағдай болады (жазылым тоқтатылып тұрған, байланыс үзілген, техникалық үзіліс). Ондайда не істеу керегін misfirePolicy шешеді:
| Мән | Не болады |
|---|---|
run_once (әдепкі) | Өткізіп алған кезек бір рет жіберіледі |
skip | Өткізіп алған кезек тасталады, келесісін күтеді |
misfireAfterMin — кезек қанша кешіксе «өткізіп алынды» деп саналады. Әдепкі мәні 1440 минут, яғни тәулік.
Қайсысын таңдау: айлық абонемент болса run_once дұрыс (клиент бәрібір сол айға төлеуі керек). Күнделікті жеткізу болса skip дұрыс — өткен күннің тамағы үшін счёт шығарудың мәні жоқ.
Тоқтату, жалғастыру және catchUp
POST /api/v1/subscriptions/{id}/pause— уақытша тоқтату. Клиент демалысқа кетсе, ауырып қалса.POST /api/v1/subscriptions/{id}/resume— жалғастыру.POST /api/v1/subscriptions/{id}/resumeденесінде{ "catchUp": true }— жалғастырумен қатар өткізіп алған кезекті бірден жібереді.
catchUp абайлап қолданыңыз: ұзақ тоқтап тұрған жазылымда ол клиентке бірнеше счётты бірден жіберіп жіберуі мүмкін. Тоқтату ұзаққа созылса, catchUp қоспай жалғастырыңыз да, өткен кезең үшін қолмен бір счёт шығарыңыз.
Клиентке алдын ала ескерту
Бұл — жазылымдық бизнестегі ең пайдалы әдет, әрі оны толығымен өзіңіз істейсіз. Счёт шығатын күннен бір-екі күн бұрын клиентке хабарлама жіберіңіз:
«Ертең абонементіңіздің төлем счёты Kaspi-ге келеді, сомасы 12 000 ₸. Растап қойсаңыз, қолжетімділік үзілмейді.»
Не береді:
- Клиент дайын болады, счёт «күтпеген жерден» келмейді
- Бірінші қайталауға дейін-ақ төлейді
- Тоқтатқысы келсе, алдын ала айтады — сіз босқа счёт шығармайсыз
Хабарламаны WhatsApp, SMS немесе өз қосымшаңыз арқылы жіберіңіз. Telegram ботын қоссаңыз, өзіңіз де жазылым оқиғаларын көріп отырасыз.
Есеп
Webhook арқылы келетін оқиғалар: subscription.created, subscription.status, ал әр счёт бойынша әдеттегі invoice.created, invoice.paid, invoice.expired.
Не бақылау керек:
| Көрсеткіш | Қайдан аласыз |
|---|---|
| Бірінші жолы төлегендер үлесі | invoice.paid пен invoice.created арақатынасы |
| Қайталауға дейін кеткендер | Қай кезек нөмірінде төленгенін өзіңіз белгілеп отырыңыз |
| Мүлдем төлемегендер | failedRuns өскен жазылымдар |
| Айлық кіріс | Кабинеттегі Счёттар бөлімі, CSV экспорт |
CSV-ды бухгалтерияға беру: CSV экспорт және есеп.
Кодсыз нұсқасы бар ма
Ішінара. Жазылымды кабинеттің Жазылымдар бөлімінен қолмен жасауға болады — әзірлеуші керек емес. Ал webhook арқылы қолжетімділікті автоматты ашу үшін сервер керек.
Клиент саны аз болса (20-30 адам), webhook-сыз да жұмыс істейді: төлемдерді кабинеттен көріп, қолжетімділікті қолмен жүргізесіз. Тұрақты сома болса, төлем сілтемесі де жарайды — клиент айына бір рет сол сілтемені ашады.
Ерекше ескертулер
- Жазылым — счёт шығару кестесі, автоматты есептен шығару емес. Маркетингте де осылай жазыңыз, әйтпесе клиент алданғандай сезінеді.
- Сома өзгерсе, жазылымды жаңартыңыз. Ескі сомамен счёт шығып кетуі мүмкін.
- Айлық лимитті есептеңіз. 500 жазылымшы × ай сайын 1 счёт + қайталаулар — тарифке сыюы керек: Қай тарифті таңдау керек.
- Кассир байланысы үзілсе, кезектер шықпайды. Telegram ботын қосып қойыңыз, бірден білесіз.
- Счёт шықпай жатса себебін осы жерден қараңыз: Жазылым бойынша счёт шықпай жатыр.
Жиі қойылатын сұрақтар
Клиенттен әр ай сайын растауды сұрамай-ақ ақшаны алуға бола ма? Жоқ. Бұл схемада мүмкін емес — клиент әр төлемді Kaspi қосымшасында өзі растайды.
Клиент растамай қойса, қолжетімділікті қашан жабамын? Өзіңіз шешесіз. Жиі кездесетін тәжірибе: қайталау сатысы біткеннен кейін 1-3 күн «жеңілдік мерзімі», сосын жабу.
Жылдық абонемент сатсам, жазылым керек пе? Жоқ. Жылына бір рет төлейтін болса, жай ғана бір счёт шығарыңыз.
Клиент тоқтатқысы келсе не істеймін? Жазылымды pause немесе мүлдем тоқтатасыз. Ол Kaspi-де ештеңе өшірудің қажеті жоқ — біздің жақтан счёт шықпаса болды.
Спортзалға немесе онлайн мектепке нақты қалай құрамын? Сол салаларға арналған бөлек мақалалар бар: Спортзал мен фитнеске, Онлайн мектеп пен курс платформасына.