IOSOR База знаний

Сбой prepaid-hold: auto-refund и честный статус

Неудачный prepaid-hold — событие кошелька: автоматический release или refund, экспортируемые статусы и запрет на Activated/Delivered без реального результата.

Prepaid hold, который не может завершиться, обязан оставить деньги и статус, которые финансы защитят: release в available balance, явный refund settled суммы или именованный freeze до доказательств. Успех при зависших деньгах разрушает доверие к ledger.

IOSOR — white-label prepaid. Правило одно для messaging, verification, email, voice и JIT-номеров на одном кошельке. Минимум USD 20 — пол пилота, не доказательство fail-path. Review около USD 1 000/мес лишь делает строки сбоев заметнее.

Сбой — событие кошелька, не toast

Спиннер и баннер «pending» — не денежная истина. После отказа кошелёк освободил hold, вернул debit или заморозил intent с причиной для экспорта. Успех при открытом резерве — ложь ledger. Счастливый путь — prepaid-резерв до первого списания; эта статья — путь отказа.

Исход Движение денег Читаемый статус
Reject до работы Hold нет или мгновенный release Rejected — без debit
Сбой при активном hold Полный возврат резерва Failed — средства возвращены
Timeout без completion Release по политике expiry Timed out — средства возвращены
Нужно развернуть settled Явный refund Refunded — связь с исходным intent
Неясный mid-flight Freeze retry; без второго debit Needs attention — расследование

Auto-refund и release должны быть автоматическими

«Ops потом поправит» — не продукт. Release и refund запускаются теми же правилами, что создали резерв. Дубли с тем же idempotency key переиспользуют исходный денежный результат — см. идемпотентность, retry и деньги. Частичный batch списывает завершённые units и возвращает остаток в одном экспорте.

Release восстанавливает незакрытый резерв; refund разворачивает settled debit. Клиенту нужны время, причина и business intent ID. Тихие правки баланса без строки ledger запрещены. Swap после сбоя номера: сбой заказа DID refund и swap; эта статья — денежная правда всех каналов.

Статусы, которые финансы выгрузят

Короткий CSV-словарь: funds held; completed / settled; released; refunded; needs attention; cancelled.

Не изобретайте «Activated», «Delivered» или «Live» без ресурса или billable unit. «Needs attention» — очередь, не успех. Статус без суммы, валюты и correlation ID — театр.

Запрет на фейковый Activated или Delivered

Ложный бейдж бьёт сильнее пустого поиска. Messaging-сбой ≠ delivered; verify без сессии ≠ verified; JIT без assign ≠ Activated. Low balance и over-cap отвергают до hold — остановка при низком балансе — чтобы деньги не входили в тупиковый резерв.

Чеклист покупателя по fail-honesty

  1. Каждый failed hold заканчивается release, refund или needs-attention с владельцем?
  2. Release и refund автоматические от продуктовых событий, а не из чата?
  3. Финансы стыкуют fail-строки с intent ID без поддержки?
  4. Retry с тем же ключом двигает деньги максимум один раз?
  5. Клиентские ошибки brand-safe и без имён upstream?
  6. Stop-lines блокируют новые hold при низком available? См. стоп-линии кошелька до production-трафика.

Начните с IOSOR

Вызовите prepaid-hold, который не может завершиться: потолок, отказ или нехватка. Докажите возврат в available или явную строку refund. Выгрузите fail-статус, который защитят финансы. Повторите тот же ключ без второго движения. Это правда сбоя hold, не снятие после мёртвого assign.

Related: контроль prepaid-расходов

Итог IOSOR

Сбойный hold — событие кошелька, а не фикция успеха. Сделайте авто-release или refund, сверьте ledger с консолью в UTC и задайте честный статус вместо выдуманных Activated или Delivered.

Был ли материал полезен?

Связанные гайды