Resumen
Las apps que cuestan dinero de ejecutar —una grabadora de llamadas que paga a un proveedor de transcripción, una app de enriquecimiento que paga por coincidencia— cobran al espacio de trabajo en créditos. Todo aquello por lo que factura una app se declara en un bloquebilling de la configuración de tu aplicación:
src/application-config.ts
recurring— tarifas fijas y por miembro que la plataforma cobra por ti, una vez por período de facturación.operations— aquello por lo que cobras a medida que lo usas, desde una función lógica.description— una línea clara que se muestra a los compradores en tu ficha del marketplace.
Cargos recurrentes
Un cargo recurrente es una tarifa de suscripción: un importe mensual fijo, un importe por miembro del espacio de trabajo o ambos. Tú declaras el importe y la plataforma lo cobra. Tu app nunca llama achargeCredits para estos.
src/application-config.ts
Cómo se cobran:
- Una vez por período de facturación del espacio de trabajo, en el límite de período propio del espacio de trabajo, no el primer día del mes.
- No se prorratean. A una app instalada a mitad de período se le cobra el importe completo de ese período; al desinstalarla se detiene el siguiente período, pero no se reembolsa el actual.
- Los cargos por miembro cuentan a todos los miembros del espacio de trabajo en el momento en que se cobra el cargo, por lo que un espacio de trabajo que crece a mitad de período paga el recuento mayor a partir del siguiente período.
- Solo en suscripciones mensuales. A un espacio de trabajo con un plan anual no se le cobra una tarifa
MONTH, en lugar de cobrarle una vez por todo el año. - Limitados. Se rechaza y no se aumenta una tarifa declarada superior a $100, o un cargo por miembro cuya tarifa multiplicada por el número de miembros superaría $1.000 durante el período. La propia plataforma cobra estos cargos, por lo que no registrará un débito que no pueda justificar.
Operaciones facturables
Una operación es aquello por lo que cobra tu app mientras funciona. Cada entrada asigna un nombre de operación que eliges a la categoría de facturación que mide la plataforma, además de la etiqueta que se muestra a los administradores del espacio de trabajo en Configuración > Uso.src/application-config.ts
operationType debe ser una de las categorías de facturación de la plataforma: AI_CHAT_TOKEN, AI_WORKFLOW_TOKEN, WORKFLOW_EXECUTION, CODE_EXECUTION, WEB_SEARCH, CALL_RECORDING, EMAIL_SEND. Determina cómo se mide el gasto y qué unidad de recuento se aplica (tokens, invocaciones, minutos); no es lo que leen los administradores. La label sí lo es.
La compilación rechaza un operationType desconocido, una label vacía y un nombre usado tanto por un cargo recurrente como por una operación.
Cobro
Cobra una operación declarada por nombre:creditsUsedMicro es el importe en microcréditos (1 USD = 1.000.000). quantity es el número de unidades que cubre el cargo, en la unidad implícita por la categoría de la operación: minutos para CALL_RECORDING, invocaciones para CODE_EXECUTION, etcétera.
Notas:
- Declarar operaciones permite que Uso divida el gasto de tu app según aquello por lo que cobró. Una app que no declara nada se sigue informando como una sola sección bajo su nombre visible.
- Se rechaza el cobro de una operación que tu manifiesto no declara. Añádela a
billing.operationsy sincroniza. - Varias operaciones pueden compartir un mismo
operationType. Dos operaciones de enriquecimiento medidas ambas comoCODE_EXECUTIONsiguen mostrándose como dos secciones con etiqueta. - Sin
operation, nombra directamente la categoría de facturación conoperationType, opcionalmente con unresourceContextde formato libre. Las dos formas son mutuamente excluyentes:operationincluye la etiqueta;operationType, no. - El cobro nunca hace que falle tu función. Se registra y se descarta un error de facturación, y la llamada no realiza ninguna operación fuera del tiempo de ejecución de la función lógica para que las ejecuciones locales y las pruebas no fallen.
Comprobar antes de gastar
Un espacio de trabajo puede quedarse sin créditos. Cuando eso sucede, tu función se rechaza antes de que se inicie tu código, y el propio trabajo de la plataforma también se detiene:runAgent devuelve un error en lugar de ejecutarse, y los demás puntos de entrada de IA se rechazan directamente. sendInboxMessage no ejecuta ningún modelo ni añade ningún cargo de IA propio, aunque la función que lo llama se rechaza como cualquier otra; la respuesta de un miembro se cobra como cualquier turno de chat. Los hooks de desinstalación y desconexión son la excepción y siempre se ejecutan, por lo que una aplicación aún puede eliminarse correctamente. Una ejecución que logra pasar aún puede fallar más tarde, en una llamada de la plataforma que no escribió, si el espacio de trabajo se queda sin créditos durante la ejecución.
Pregunta primero:
reason: no-credits, no-subscription o workspace-suspended. no-credits también cubre un límite de Todo el uso que un administrador estableció en tu aplicación en Configuración → Facturación → Límites: el espacio de trabajo puede seguir teniendo créditos, pero tu aplicación no puede gastarlos.
Notas:
- Indica si tu aplicación puede gastar en este espacio de trabajo, no cuánto le queda. Tu aplicación no ve el saldo, el plan ni sus límites.
- Falla de forma abierta. Si la comprobación agota el tiempo de espera o el servidor es inaccesible, informa que hay créditos disponibles, para que un problema de infraestructura no detenga tu app. Trátalo como una indicación que vale la pena respetar, no como una decisión de autorización.
- Es una instantánea. Los créditos pueden agotarse entre la comprobación y el trabajo, incluso debido a tus propios cargos, ya que cada cargo que haces mueve el mismo contador que lee esto.
- La restricción no se aplica de manera uniforme. No todas las rutas de correo electrónico saliente están restringidas por créditos, por lo que un
falseaquí te indica que tu aplicación no debe gastar en este momento, en lugar de predecir exactamente qué llamadas fallarán.
Indicar a las personas cuánto cuesta
Declarar cargos indica a la plataforma cómo medir tu app; no le dice a un comprador cuánto pagará. Configurabilling.description para ello: una línea breve y amigable que se muestra en la ficha de tu marketplace antes de que alguien instale.
src/application-config.ts
operations o recurring también solicita el consentimiento del administrador que realiza la instalación: la pantalla de instalación muestra “Facturar créditos a tu espacio de trabajo”, y la página de la aplicación muestra “Factura créditos”, con tu description al pasar el cursor.
Atribución
El gasto se atribuye a quien activó la ejecución, por lo que aparece en Uso por usuario. Las ejecuciones sin nadie detrás (un webhook, un cron) no tienen una persona que las active; pasauserWorkspaceId si tu app sabe a quién pertenece el gasto. Debe pertenecer al espacio de trabajo en el que está instalada la app y se ignora cuando la ejecución sí tiene un usuario que la activa.
context.userWorkspaceId en una ejecución activada, o listConnections(), que devuelve el userWorkspaceId del propietario de cada conexión.
Los cargos recurrentes no tienen una persona que los active, por lo que se informan solo para la app, nunca para un miembro.