Cómo crear, lanzar y monetizar tu primer plugin de ChatGPT en 2026
Guía práctica paso a paso desde la apertura oficial de la tienda de plugins
Introducción
En junio de 2026 OpenAI abrió la tienda oficial de plugins y, en cuestión de semanas, las búsquedas de “ChatGPT plugins” se dispararon un +420 %. Si eres desarrollador, startup o miembro de un equipo de producto, este es el momento de aprovechar la explosión de demanda y lanzar tu propia extensión de IA. En las siguientes 2 800 palabras descubrirás cómo construir un plugin funcional, publicarlo en la tienda, generar ingresos y blindarlo contra los ataques más comunes. Todo con ejemplos de código listos para copiar y ejecutar.
1. Requisitos previos
| Recurso | Por qué lo necesitas | Cómo obtenerlo |
|---|---|---|
| Cuenta de OpenAI | Acceso al Developer Dashboard y a la API de ChatGPT | Regístrate en https://platform.openai.com y verifica tu identidad |
| Clave API | Autenticación en todas las llamadas a la IA | En el dashboard → API Keys → “Create new secret key” |
| Entorno de despliegue | Hospedar el endpoint que recibirá las peticiones de la IA | AWS Lambda, Google Cloud Functions, Vercel o Azure Functions (elige según tu presupuesto) |
| Herramientas de desarrollo | Editor de código, Git y Docker (opcional) | VS Code, GitHub, Docker Desktop |
2. Arquitectura mínima de un plugin
Un plugin se compone de tres elementos:
- Manifest (manifest.json) – Describe el plugin a la tienda.
- Endpoint HTTP – Recibe la solicitud de ChatGPT, ejecuta tu lógica y devuelve JSON.
- Esquema de entrada/salida – Define los parámetros esperados (JSON Schema) y garantiza la validación.
2.1. Manifest de ejemplo
{
"schema_version": "v1",
"name_for_human": "Calculadora de impuestos MX",
"name_for_model": "tax_calculator_mx",
"description_for_human": "Calcula el ISR y el IVA de facturas mexicanas.",
"description_for_model": "Given a gross amount and a tax type, returns the net amount after applying the appropriate Mexican tax rates.",
"auth": {
"type": "none"
},
"api": {
"type": "openapi",
"url": "https://mi-dominio.com/openapi.yaml",
"has_user_authentication": false
},
"logo_url": "https://mi-dominio.com/logo.png",
"contact_email": "soporte@mi-dominio.com",
"legal_info_url": "https://mi-dominio.com/terms"
}
Tip: Usa
name_for_modelen minúsculas y sin espacios; es el identificador que ChatGPT usará internamente.
2.2. Endpoint básico en Python (AWS Lambda)
import json
from decimal import Decimal
TAX_RATES = {
"iva": Decimal("0.16"),
"isr": Decimal("0.10")
}
def lambda_handler(event, context):
# 1️⃣ Parsear cuerpo JSON
body = json.loads(event["body"])
amount = Decimal(str(body.get("gross_amount", 0)))
tax_type = body.get("tax_type", "iva").lower()
# 2️⃣ Validar parámetros
if tax_type not in TAX_RATES:
return {
"statusCode": 400,
"body": json.dumps({"error": "tax_type no soportado"})
}
# 3️⃣ Calcular neto
net = amount * (1 - TAX_RATES[tax_type])
result = {"gross_amount": str(amount), "tax_type": tax_type, "net_amount": str(net.quantize(Decimal("0.01")))}
# 4️⃣ Responder
return {
"statusCode": 200,
"headers": {"Content-Type": "application/json"},
"body": json.dumps(result)
}
Consejo de seguridad:
- Usa
Decimalpara evitar errores de precisión.- Valida siempre los campos contra un JSON Schema (ver sección 4).
3. Publicar en la tienda
- Sube el manifest en el Developer Dashboard → Plugins → Add new plugin.
-
Provee la URL del OpenAPI (
openapi.yaml). Un ejemplo mínimo:
openapi: 3.0.1
info:
title: Calculadora de impuestos MX
version: '1.0'
paths:
/calculate:
post:
operationId: calculateTax
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TaxRequest'
responses:
'200':
description: Resultado del cálculo
content:
application/json:
schema:
$ref: '#/components/schemas/TaxResponse'
components:
schemas:
TaxRequest:
type: object
required: [gross_amount, tax_type]
properties:
gross_amount:
type: number
description: Importe bruto en MXN
tax_type:
type: string
enum: [iva, isr]
TaxResponse:
type: object
properties:
gross_amount:
type: string
tax_type:
type: string
net_amount:
type: string
- Revisa el “Safety Filter” en la sección Security del dashboard y habilítalo.
- Envía a revisión. El proceso tarda entre 24 h y 72 h; mientras tanto, puedes probar el plugin en modo sandbox usando la herramienta “Test Console”.
4. Seguridad práctica (anti‑prompt‑injection y más)
4.1. Validación con JSON Schema
from jsonschema import validate, ValidationError
SCHEMA = {
"type": "object",
"required": ["gross_amount", "tax_type"],
"properties": {
"gross_amount": {"type": "number"},
"tax_type": {"type": "string", "enum": ["iva", "isr"]}
}
}
def safe_parse(body):
try:
validate(instance=body, schema=SCHEMA)
except ValidationError as e:
raise ValueError(f"Payload inválido: {e.message}")
Llama a safe_parse(body) antes de cualquier cálculo.
4.2. Rate‑limiting por API‑Key
En AWS API Gateway agrega un Usage Plan de 100 req/min por usuario y activa burst de 200. En GCP Cloud Functions usa Cloud Armor con reglas de límite de velocidad.
4.3. Monitoreo de anomalías
- Datadog → APM → alerta cuando el número de errores 5xx supera el 2 % del tráfico.
- Snyk → escaneo continuo del contenedor Docker (si lo usas).
5. Estrategias de monetización
| Modelo | Cómo cobrar | Ejemplo real |
|---|---|---|
| Suscripción mensual | Cobro fijo por 10 000 llamadas | Promptify → US$15 K/mes |
| Pay‑per‑use | $0,001 por 1 000 tokens procesados | ShopAI → US$27 K/mes |
| Freemium + premium | 1 000 llamadas gratuitas, luego tarifa | Plugin de traducción de documentos |
| Marketplace share | 15 % de comisión de OpenAI (actual) | Todos los plugins publicados |
Implementación rápida de suscripciones (Stripe Checkout):
# 1️⃣ Instala Stripe CLI
npm i -g stripe
# 2️⃣ Crea un producto y plan
stripe products create --name "Tax Calculator Pro"
stripe prices create --unit-amount 500 --currency usd --recurring interval=month --product <PRODUCT_ID>
Luego, en tu endpoint:
import stripe
stripe.api_key = "sk_test_..."
def create_checkout_session(customer_email):
session = stripe.checkout.Session.create(
payment_method_types=["card"],
customer_email=customer_email,
line_items=[{
"price": "<PRICE_ID>",
"quantity": 1,
}],
mode="subscription",
success_url="https://mi-dominio.com/success?session_id={CHECKOUT_SESSION_ID}",
cancel_url="https://mi-dominio.com/cancel",
)
return session.url
6. Optimización de costos
| Proveedor | Precio base (por millón de invocaciones) | Precio tokens (por 1 000) | Comentario |
|---|---|---|---|
| AWS Lambda | $0,20 | $0,0001 | Ideal para picos esporádicos |
| Google Cloud Functions | $0 |
Herramienta mencionada: Groq Cloud
Top comments (0)