5. Webhook Novita y procesamiento asíncrono

Curso Flutter y .NET 8 con Novita AI: índice completo paso a paso

0. Curso Flutter + .NET 8 + Novita AI: índice completo

1. Arquitectura Flutter + backend .NET 8 con Novita AI

2. Configurar entorno .NET 8 + Flutter + Firebase + Novita AI

3. Backend .NET 8: Auth Firebase y esqueleto API

4. Integrar Novita AI: text-to-image e image-to-image en .NET 8

5. Webhook Novita y procesamiento asíncrono

6. Firestore, modelos y endpoints de dominio

7. Flutter: login Google y configuración API

8. Flutter: subida de imagen y creación de invitaciones

9. Listado, estado y detalle de invitaciones

10. ControlNet completo en backend y Flutter

11. LLM con Novita: img2prompt y adaptación de prompts

12. Despliegue, checklist final y publicación WordPress

Bonus 01: vídeo con FFmpeg y flujo opcional

Bonus 02: importador de modelos Novita a Firestore

Bonus 03: Prompt Generator y administración básica

Bonus 03: Prompt Generator y administración básica

Actualizado: 20 de febrero de 2026.

Este capítulo resuelve el punto crítico de producción: cómo cerrar tareas asíncronas y persistir el resultado final.

Prerrequisitos

  1. Tener clonado o disponible codigo/ de esta serie.
  2. Contar con Firebase y Novita configurados para pruebas.
  3. Haber completado el capítulo anterior del curso.

Paso 1: Endpoint webhook

Archivo clave:

  • codigo/backend/InvitaIA.Api/Controllers/NovitaWebhookController.cs

Responsabilidades:

  1. Aceptar payload de Novita.
  2. Soportar forma payload o data.
  3. Ignorar eventos que no sean ASYNC_TASK_RESULT.
  4. Extraer task_id, status y URLs.

Paso 2: Worker de aplicación

Archivo clave:

  • codigo/backend/InvitaIA.Api/Workers/NovitaTaskWorker.cs

Responsabilidades:

  1. Buscar invitación por taskId.
  2. Descargar imagen/video de Novita.
  3. Subir archivo a Firebase Storage.
  4. Guardar previewUrl, finalUrl, status en Firestore.

Paso 3: Flujo completo

sequenceDiagram
    participant API as .NET API
    participant NOV as Novita AI
    participant WH as /api/webhooks/novita
    participant WRK as NovitaTaskWorker
    participant FS as Firestore/Storage

    API->>NOV: Start async generation
    NOV-->>API: task_id
    NOV->>WH: ASYNC_TASK_RESULT
    WH->>WRK: HandleWebhookAsync(taskId, status, urls)
    WRK->>FS: upload + save status/finalUrl

Paso 4: Polling de respaldo

Además del webhook, existe PendingInvitationWorker como red de seguridad para tareas en QUEUED o PROCESSING.

Paso 5: Comprobación manual

cd codigo/backend
rg -n "api/webhooks/novita|HandleWebhookAsync|task-result" InvitaIA.Api -S

Troubleshooting

  1. No llega webhook: backend no accesible públicamente.
  2. Webhook llega pero no actualiza invitación: taskId no coincide.
  3. Status se queda en processing: valida parseo de status en webhook y GetTaskAsync.

FAQ corta

¿Webhook y polling son redundantes?

No. Polling actúa como fallback en fallos de red o retries perdidos.

¿Dónde se sube el archivo final?

En Firebase Storage vía IFirebaseService.UploadFileAsync.

¿Qué estado marca éxito?

TASK_STATUS_SUCCEED y equivalentes normalizados.

Fuente verificada

  • Código del curso:
    • codigo/backend/InvitaIA.Api/Controllers/NovitaWebhookController.cs
    • codigo/backend/InvitaIA.Api/Workers/NovitaTaskWorker.cs
    • codigo/backend/InvitaIA.Api/Workers/PendingInvitationWorker.cs
  • Documentación oficial Novita:

Share this content:

Curso Flutter y .NET 8 con Novita AI: índice completo paso a paso

4. Integrar Novita AI: text-to-image e image-to-image en .NET 8 6. Firestore, modelos y endpoints de dominio

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.