Обзор
Приложения, работа которых стоит денег — например, средство записи звонков, оплачивающее поставщика расшифровки, или приложение для обогащения данных, оплачивающее каждое совпадение, — списывают с рабочей области кредиты. Всё, за что взимает плату приложение, объявляется в одном блокеbilling в конфигурации приложения:
src/application-config.ts
recurring— фиксированные и помесячные сборы за каждого участника, которые платформа начисляет за вас один раз за расчётный период.operations— то, за что вы взимаете плату по мере использования, из логической функции.description— одна понятная строка, показываемая покупателям в карточке вашего приложения на маркетплейсе.
Регулярные списания
Регулярное списание — это плата за подписку: фиксированная ежемесячная сумма, сумма за каждого участника рабочей области или и то и другое. Вы объявляете сумму, а платформа её списывает. Ваше приложение никогда не вызывает для этогоchargeCredits.
src/application-config.ts
Как они начисляются:
- Один раз за расчётный период рабочей области, в её собственную дату начала периода, а не первого числа месяца.
- Без пропорционального расчёта. С приложения, установленного в середине периода, списывается полная сумма за этот период; удаление приложения прекращает списания со следующего периода, но не возвращает средства за текущий.
- При списаниях за участника учитываются все участники рабочей области на момент начисления, поэтому рабочая область, которая выросла в середине периода, платит по увеличенному числу начиная со следующего периода.
- Только для ежемесячных подписок. С рабочей области на годовом тарифе не взимается плата
MONTH; вместо этого она не списывается единовременно за весь год. - Ограничено. Заявленная ставка выше $100 или плата с участника, ставка которой, умноженная на количество участников, превысила бы $1,000 за период, отклоняется и не повышается. Платформа сама начисляет эти суммы, поэтому она не создаст списание, которое не может обосновать.
Платные операции
Операция — это то, за что ваше приложение взимает плату во время работы. Каждая запись сопоставляет выбранное вами имя операции с категорией выставления счетов, которую учитывает платформа, а также с меткой, показываемой администраторам рабочей области в Настройки > Использование.src/application-config.ts
operationType должен быть одной из категорий выставления счетов платформы: AI_CHAT_TOKEN, AI_WORKFLOW_TOKEN, WORKFLOW_EXECUTION, CODE_EXECUTION, WEB_SEARCH, CALL_RECORDING, EMAIL_SEND. Он определяет, как учитываются расходы и какая единица подсчёта применяется (токены, вызовы, минуты), — это не то, что видят администраторы. Для этого используется label.
Сборка отклоняет неизвестный operationType, пустой label и имя, используемое одновременно для регулярного списания и операции.
Списание
Списывайте средства по имени объявленной операции:creditsUsedMicro — это сумма в микрокредитах (1 USD = 1,000,000). quantity — это количество единиц, которые покрывает списание, в единице, определяемой категорией операции: минуты для CALL_RECORDING, вызовы для CODE_EXECUTION и так далее.
Заметки:
- Объявление операций позволяет разделять в разделе «Использование» расходы вашего приложения по тому, за что оно взимало плату. Приложение, которое ничего не объявляет, всё равно отображается как один сегмент под своим отображаемым именем.
- Списание за операцию, не объявленную в вашем манифесте, отклоняется. Добавьте её в
billing.operationsи синхронизируйте. - Несколько операций могут использовать один
operationType. Две операции обогащения данных, учитываемые какCODE_EXECUTION, всё равно отображаются как два сегмента с метками. - Без
operationукажите категорию выставления счетов напрямую с помощьюoperationType, при необходимости добавив произвольныйresourceContext. Эти две формы взаимоисключающие:operationсодержит метку, аoperationType— нет. - Списание никогда не приводит к сбою вашей функции. Ошибка выставления счетов регистрируется и игнорируется, а вызов ничего не делает вне среды выполнения логической функции, поэтому локальные запуски и тесты не завершаются аварийно.
Проверка перед расходованием
В рабочей области могут закончиться кредиты. Когда это происходит, ваша функция отклоняется ещё до запуска вашего кода, и работа самой платформы также прекращается:runAgent возвращает ошибку вместо выполнения, а другие точки входа ИИ полностью отклоняют вызов. sendInboxMessage не запускает модель и не начисляет собственную плату за ИИ, хотя вызывающая её функция отклоняется, как любая другая; ответ участника тарифицируется, как любой ход чата. Хуки удаления и отключения являются исключением и выполняются всегда, поэтому приложение всё равно можно удалить корректно. Выполнение, которое всё же запускается, может завершиться ошибкой позже при вызове платформы, который оно не выполняло, если в рабочей области закончатся кредиты во время выполнения.
Сначала проверьте:
reason: no-credits, no-subscription или workspace-suspended. no-credits также охватывает лимит Все использование, установленный администратором для вашего приложения в разделе Настройки → Выставление счетов → Лимиты: в рабочей области все еще могут быть кредиты, но ваше приложение не может их тратить.
Заметки:
- Он показывает, может ли ваше приложение тратить средства в этой рабочей области, а не то, сколько средств в ней осталось. Ваше приложение не видит баланс, тарифный план или его лимиты.
- Он завершается с разрешением доступа. Если проверка истекает по времени или сервер недоступен, она сообщает, что кредиты доступны, чтобы сбой инфраструктуры не останавливал ваше приложение. Считайте это подсказкой, которой стоит следовать, а не решением об авторизации.
- Это снимок состояния. Кредиты могут закончиться между проверкой и выполнением — в том числе из-за ваших собственных списаний, поскольку каждое совершённое вами списание изменяет тот же счётчик, который считывается здесь.
- Ограничение применяется не везде одинаково. Не каждый путь отправки исходящих писем зависит от кредитов, поэтому значение
falseздесь указывает, что вашему приложению не следует тратить средства прямо сейчас, а не точно предсказывает, какие вызовы завершатся ошибкой.
Как сообщить людям о стоимости
Объявление списаний сообщает платформе, как учитывать ваше приложение; оно не сообщает покупателю, сколько он заплатит. Укажите дляbilling.description короткую дружелюбную строку, которая будет показана в карточке вашего приложения на маркетплейсе до того, как кто-либо его установит.
src/application-config.ts
operations или recurring, также запрашивает согласие у администратора, выполняющего установку: на экране установки указано “Списывать кредиты с вашего рабочего пространства”, а на странице приложения отображается “Списывает кредиты”; при наведении показывается ваше description.
Атрибуция
Расходы относятся к тому, кто инициировал запуск, поэтому они отображаются в Использование по пользователям. У запусков без инициатора (вебхук, cron) нет инициировавшего пользователя — передайтеuserWorkspaceId, если ваше приложение знает, кому принадлежат расходы. Он должен принадлежать рабочей области, в которой установлено приложение, и игнорируется, если у запуска есть инициировавший пользователь.
context.userWorkspaceId в запуске по триггеру или listConnections(), который возвращает userWorkspaceId владельца каждого подключения.
У регулярных списаний нет инициировавшего пользователя, поэтому они относятся только к приложению, а не к участнику.