Биллинг и тарифные планы
Система биллинга 4phone отслеживает потребление ресурсов тенанта, управляет тарифными планами и формирует счета. Каждый тенант имеет свой баланс, тариф и расчетный период.
Обзор биллинга
На главной странице биллинга отображаются:
- Баланс: текущее состояние счета. Отрицательный баланс означает задолженность.
- Тарифный план: название текущего плана и статус аккаунта.
- Расчетный период: даты начала и окончания текущего периода.
Расход по функциям
Система автоматически учитывает потребление по каждой категории:
- Внутренние номера: количество активных добавочных номеров.
- SIP-транки: количество активных транков.
- Очереди: количество активных очередей.
- DID-номера: количество подключенных входящих номеров.
- Голосовые минуты: суммарное время разговоров.
- Webhook-доставки: число отправленных вебхук-уведомлений.
- Email-доставки: число отправленных email-уведомлений.
- Минуты записи: объем сохраненных записей.
- IVR-потоки: количество активных IVR-сценариев.
- Хранилище: использованный объем в ГБ.
- API-запросы: количество вызовов API.
- Мониторинг: количество активных мониторов, проверок, звонков оповещения.
Для каждой метрики показывается:
- текущее потребление;
- включенный в тариф лимит (если есть);
- процент использования.
Некоторые ресурсы тарифицируются по факту без фиксированного лимита.
Важно
Кнопка «Синхронизировать» обновляет данные потребления. Обычно данные синхронизируются автоматически, но при необходимости можно запустить вручную.
Тарифные планы
Доступные тарифы отображаются в разделе Биллинг → Тарифы. Источник истины для тарифа — BillingPlan + BillingPriceItem + Subscription.
План может содержать:
- цену активного внутреннего номера;
- фиксированные ежемесячные ресурсы — базовую подписку, запись внутренних номеров, транки, DID, очереди, IVR, мониторинг и Telegram-отчеты;
- usage-метрики — голосовой трафик, доставки, автоинформатор, проверки мониторинга, транскрибацию и другие счетчики;
includedQuantityдля ресурса и цену каждой единицы сверх включенного объема.
Для внутреннего номера используется простая модель «цена за каждый активный номер»; включенное количество мест для extension_seat не применяется.
Смена тарифа
- Откройте раздел Тарифы.
- Выберите активный план.
- Подтвердите переход.
- Backend завершит предыдущую активную подписку, создаст новую и применит цену места нового плана к последующим начислениям.
Изменение тарифного плана фиксируется в журнале аудита.
Настройка тарифов администратором платформы
В Администрирование → Биллинг → Тарифы и услуги можно создавать планы, задавать стоимость каждой метрики и включенный объем. Изменение цены extension_seat автоматически применяется к биллинговым аккаунтам клиентов, подключенным к этому плану.
Счета
В разделе «Счета» отображается история начислений:
- дата формирования;
- расчетный период;
- строки начисления и тарифицируемые метрики;
- сумма;
- срок оплаты;
- статус:
ISSUED,PAID,OVERDUEилиVOID.
Счет считается оплаченным по ledger-проводкам, а не по визуальному остатку баланса. Поэтому точная оплата долга, например начисление 360 000 сум и последующее пополнение на 360 000 сум, закрывает счет при итоговом балансе 0.
Если платеж, которым был покрыт счет, возвращен платежной системой, refund создает обратную ledger-проводку. Если после возврата средств счет снова не покрыт, он возвращается в ISSUED или OVERDUE.
PREPAID и POSTPAID
В режиме PREPAID отрицательный баланс может сразу включить автоматическую депозитную блокировку.
В режиме POSTPAID само выставление счета не блокирует клиента. Блокировка применяется после наступления dueAt, когда счет получает статус OVERDUE, если задолженность не погашена и не действует отсрочка платежа.
Пополнение баланса
В кабинете доступен единый выбор способов оплаты:
- Payme;
- Click;
- Uzum Bank;
- Anorbank;
- Alif;
- Oson;
- Xazna;
- Beepul;
- Trastpay;
- SBP.
Пополнение доступно ролям OWNER, ADMIN и MANAGER. Минимальная сумма составляет 1 000 сум.
Как пополнить баланс
- Откройте раздел «Оплата».
- Укажите сумму в сумах или выберите готовое значение.
- Выберите платежное приложение.
- Нажмите «Перейти к оплате».
- Завершите операцию на защищенной странице выбранной системы.
После возврата в кабинет операция сначала показывается как отправленная на обработку. Сам возврат из платежного приложения не означает, что деньги уже зачислены. Баланс обновится после подтверждения платежной системой, обычно это занимает до 1-2 минут.
Важно
Если способ временно отключен, его карточка остается видимой, но выбрать ее нельзя. Остальные способы оплаты продолжают работать.
История пополнений
В общей истории отображаются:
- дата и сумма;
- выбранный способ оплаты;
- текущий статус;
- внешний идентификатор операции;
- ссылка на фискальный чек, если она получена.
Возможные статусы: «Ожидает», «В обработке», «Зачисление», «Оплачена», «Ошибка», «Возврат» и «Истек срок».
Если оплата отменена или не завершена, можно повторить попытку либо выбрать другое приложение. Каждая попытка создает отдельную операцию и остается в истории. Повторное подтверждение одной операции не зачисляет баланс второй раз.
Возврат Multicard/Rahmat имеет отдельный статус REFUNDED/revert. Возврат не ограничивается изменением статуса внешней транзакции: backend создает обратную проводку и уменьшает внутренний баланс на возвращенную сумму. Повторные refund-callbacks обрабатываются идемпотентно, а поздний success-callback не может снова перевести уже возвращенную транзакцию в PAID.
Дополнительные функции
В разделе Биллинг → Доп. функции клиент видит каталог платных функций.
При подключении backend:
- проверяет актуальный баланс внутри serializable-транзакции;
- при недостатке средств отклоняет первичное подключение без частичной активации;
- при успешном подключении создает ledger charge с идемпотентным ключом;
- записывает пользователя, стоимость и событие в историю/audit;
- для ежемесячной функции сохраняет дату следующего списания.
Продления выполняются singleton-задачей с distributed lock. Если на дату продления средств недостаточно, активная функция получает статус PENDING_FUNDS до следующей успешной попытки.
Использование
Раздел «Использование» показывает детальную разбивку потребления за текущий и прошлые периоды.
Перед закрытием расчетного периода backend принудительно пересобирает rollup закрываемого периода. Для usage-метрики денежное начисление рассчитывается как:
max(0, quantity - includedQuantity) × unitAmountMinor.
Результат попадает отдельными строками в invoice и затем одной идемпотентной charge-проводкой в ledger.
Контроль биллинга
- регулярно проверяйте баланс и расход;
- отслеживайте метрики, приближающиеся к лимиту;
- планируйте смену тарифа до превышения лимитов;
- проверяйте счета за прошлые периоды.
Следом полезно открыть Тарифы на сайте и Как устроена телефония 4phone.