Дайте клиентам кредиты и назначьте операциям цену в них
Добавляйте своих клиентов, ведите для каждого баланс кредитов, пополняйте его, задавайте, сколько кредитов стоит операция, блокируйте клиента и читайте, что было списано.
8 мин чтения
Кредиты — это единица, в которой вы считаете потребление своих клиентов. Slen ведёт баланс кредитов для каждого клиента, берёт кредиты, когда флоу выполняется для него, и отклоняет запуск, который баланс не покрывает. Эта статья — о странице клиентов в консоли.
Как работают кредиты
Клиент — это ваш конечный клиент. Slen знает клиента по идентификатору, который ему даёт ваше приложение, — тому, что запрос, запускающий флоу, отправляет в context.user_id. Используйте идентификатор вашей системы, а не адрес почты и не имя.
Операция получает цену в кредитах. Каждый вызов модели в запуске, который называет клиента, резервирует цену на счёте клиента до того, как модель вызвана. Кредиты тратятся, когда вызов рассчитан, и возвращаются, когда он не удался.
| Запуск | Что происходит с кредитами |
|---|---|
| Не называет клиента | Кредиты не участвуют |
| Относится к операции без цены или с ценой 0 | Кредиты не участвуют, кого бы ни назвали |
| Называет клиента, которого проект не знает | Запуск отклоняется с кодом customer_not_found |
| Называет заблокированного клиента | Запуск отклоняется с кодом customer_blocked |
| Стоит больше кредитов, чем доступно на счёте, или у клиента нет счёта этого типа кредитов | Запуск отклоняется с кодом insufficient_credits |
| Укладывается в счёт | Цена резервируется, затем тратится или возвращается |
Кредиты — не деньги. Запуск, который резервирует кредиты, всё равно проверяется политиками и бюджетами.
У клиента может быть несколько счетов, по одному на каждый тип кредитов. Тип кредитов — это имя, которое вы выбираете сами. Запрос, который запускает флоу, называет его в context.credit_type, а запрос, который его не называет, использует default. Цена ищется для операции и типа кредитов, поэтому тип кредитов, у которого нет цены для операции, кредитов не берёт.
Ваше приложение может и само снимать кредиты — за то, что оно продаёт вне флоу: выгрузку, место. Такое списание делается через API — Клиенты и кредиты. Консоль не списывает.
Где клиенты
Откройте Клиенты. Страница показывает клиентов проекта, выбранного в шапке. Три вкладки под заголовком выбирают, что страница показывает: Клиенты, Маржа или Цены кредитов.
Страница открывается всем, у кого есть разрешение management:read. Добавление клиента, движение кредитов, настройки счёта, блокировка, удаление и цены требуют management:write.
Добавить клиента
Нажмите Добавить клиента, введите идентификатор клиента в поле Идентификатор клиента и снова нажмите Добавить клиента. Клиент добавляется без кредитов и без счёта, и открывается его карточка. Добавление клиента, который уже есть в списке, ничего не меняет.
Клиент появляется и тогда, когда ваше приложение впервые пополняет его через API.
Прочитать список
Строка вкладки Клиенты — это один клиент: идентификатор, метка Заблокирован, когда клиент заблокирован, и для каждого счёта — доступные кредиты, зарезервированные кредиты и время последнего изменения. Счёт, которому разрешено уходить в минус, отмечен меткой Овердрафт разрешён. Под списком страница считает клиентов в нём.
Баланс — это то, что есть у клиента. Зарезервированные кредиты отложены под вызовы, которые ещё не закончились. Доступное — это баланс без зарезервированных кредитов, поэтому баланс — это обе суммы вместе.
Поиск оставляет клиентов, чей идентификатор содержит введённый текст.
Доступно меньше сужает список до клиентов, у которых есть счёт, где доступно меньше кредитов, чем введённое число. Зарезервированные кредиты при этом не считаются доступными.
Фильтры рядом оставляют активных или заблокированных клиентов и клиентов со счётом одного типа кредитов.
Нажмите на строку, чтобы открыть карточку клиента. Карточка перечисляет счета с их суммами и настройками, а Движение под ними перечисляет движения кредитов клиента. Меню строки ведёт сразу к действиям Пополнить, Заблокировать и Удалить.
Настроить счёт
Счёт принадлежит одному типу кредитов. Его создаёт первое пополнение или его настройки, поэтому клиенту можно дать счёт раньше любых кредитов.
1. Откройте настройки
В карточке нажмите Добавить счёт для нового типа кредитов или Настройки в счёте, который уже есть.
2. Выберите тип кредитов
Для нового счёта введите его тип кредитов в поле Тип кредитов. Тип кредитов уже существующего счёта изменить нельзя.
3. Решите насчёт овердрафта
Оставьте Разрешить этому счёту уходить в минус выключенным, и холд, который счёт не покрывает, будет отклонён. Его можно выключить, пока баланс ниже нуля: защита действует со следующего движения.
4. Задайте предупреждение
В поле Предупреждать, когда доступно меньше введите число кредитов. Движение, которое опускает доступное ниже него, отправляет событие вебхука customer.balance_low. 0 не отправляет предупреждений.
5. Сохраните
Нажмите Сохранить настройки. Обе настройки сохраняются вместе.
Пополнить клиента
1. Откройте пополнение
В карточке нажмите Пополнить в счёте. Для типа кредитов, счёта которого у клиента нет, выберите вместо этого Пополнить в меню строки. В карточке клиента без счетов эта кнопка стоит над списком.
2. Назовите тип кредитов
В поле Тип кредитов введите тип кредитов счёта. Пополнение типа кредитов, счёта которого у клиента нет, создаёт счёт.
3. Введите кредиты
В поле Сколько кредитов добавить введите сумму больше нуля. У кредитов четыре знака после точки. В поле Примечание можно написать, за что эти кредиты, например номер счёта на оплату: примечание видно в выписке.
4. Добавьте кредиты
Нажмите Пополнить.
Пополнение никогда не отклоняется из-за баланса, даже на счёте ниже нуля, и заблокированного клиента тоже можно пополнить.
Скорректировать баланс
В карточке нажмите Скорректировать в счёте. В поле Сколько кредитов добавить или снять введите, сколько кредитов добавить, или отрицательную сумму, чтобы снять кредиты, при желании заполните Примечание и нажмите Применить корректировку. Нулевая сумма отклоняется.
Корректировка не может опустить баланс ниже зарезервированных кредитов, если счёту не разрешено уходить в минус.
Прочитать выписку
Движение в карточке перечисляет каждое движение кредитов клиента, самое новое — первым, с балансом и доступными кредитами, которые оставило каждое. Фильтр Движение оставляет один вид движений, а фильтр типа кредитов — движения одного счёта, когда у клиента их несколько. Примечание показывает примечание, с которым сделали пополнение, списание или корректировку.
| Движение | Что оно делает |
|---|---|
| Пополнение | Добавляет кредиты к балансу |
| Забронировано | Снимает кредиты с доступного. Баланс остаётся прежним |
| Потрачено | Снимает зарезервированные кредиты с баланса |
| Возвращено | Возвращает зарезервированные кредиты в доступное |
| Скорректировано | Корректировка вверх или вниз |
| Списание | Кредиты, которые ваше приложение сняло через API за то, что продало |
Не складывайте движения, чтобы узнать, сколько потратил клиент: вызов, который потратил кредиты, сначала резервирует их, а затем тратит, и во что вызовы обошлись клиенту, показывает только Потрачено.
Заблокировать клиента
Заблокируйте клиента, чтобы остановить его запуски, например после возврата платежа.
1. Откройте блокировку
В карточке нажмите Заблокировать или выберите Заблокировать в меню строки.
2. Укажите причину
В поле Причина можно написать, почему клиент заблокирован. Причина видна в карточке. Повторная блокировка с пустой причиной сохраняет прежнюю причину.
3. Заблокируйте
Нажмите Заблокировать. Карточка показывает метку Заблокирован со временем блокировки.
Новый запуск заблокированного клиента отклоняется с кодом customer_blocked до того, как что-либо создано. Его запуск, который уже идёт, отклоняется на следующем холде кредитов. Запуск операции без цены не резервирует кредиты и доходит до конца. У заблокированного клиента по-прежнему можно пополнять, списывать и корректировать кредиты, менять настройки и читать выписку, поэтому с клиентом можно рассчитаться.
Чтобы снова пустить клиента, нажмите Разблокировать в карточке. Разблокировать в меню строки открывает карточку.
Удалить клиента
В карточке нажмите Удалить или выберите Удалить в меню строки, затем нажмите Удалить клиента. Удаляется только клиент без истории: каждый счёт на нуле, ничего не зарезервировано, и в выписке нет ни одного движения. Клиент и его пустые счета исчезают.
Клиент с историей остаётся, потому что выписка объясняет баланс. Карточка объясняет почему и предлагает вместо этого заблокировать клиента. Через API тот же отказ — это код customer_has_history.
Назначить цену операции
1. Откройте цены
Выберите Цены кредитов и нажмите Задать цену.
2. Назовите операцию
В поле Код операции введите код операции, который называют ваши запросы. В поле Тип кредитов введите тип кредитов, в котором берётся цена.
3. Задайте цену
В поле Кредитов за вызов введите цену. Цена 0 делает операцию бесплатной и оставляет её в списке.
4. Сохраните
Нажмите Сохранить цену. Повторная цена для той же операции и того же типа кредитов заменяет прежнюю.
Цена включает кредиты для операции. С этого момента её запуск для клиента без счёта этого типа кредитов отклоняется. Пополните своих клиентов или настройте их счета, прежде чем назначать цену операции, которую они уже запускают.
Новая цена действует со следующего холда. Вызов, который уже зарезервировал кредиты, сохраняет цену, по которой их зарезервировал, и каждый вызов модели в запуске резервирует цену один раз.
Сравнить кредиты со стоимостью
Маржа показывает за выбранный период, сколько кредитов списано с каждого клиента и сколько те же вызовы стоили в деньгах. Считаются только рассчитанные вызовы, и списание вашего приложения среди них не учитывается. Две суммы — в разных единицах, поэтому страница не показывает их соотношение.
Что читать дальше
Глоссарий — клиент, счёт, кредиты, списание и блокировка, по одной строке на каждое.
Политики — политика может применяться к вызовам одного клиента.
Клиенты и кредиты — клиенты, счета, пополнения, списания, блокировка и цены через API.
Клиенты и кредиты — те же клиенты из SDK и запуск, оплаченный кредитами клиента.
Управление API-ключами — ключ, которым ваше приложение ведёт своих клиентов.
Коды ошибок — каждый код API: что он значит и что с ним делать.