スキル一覧に戻る
guillempuche

airparser-api

by guillempuche

Sistema de automatización para el procesamiento y extracción de datos de recibos y documentos

0🍴 0📅 2025年12月24日
GitHubで見るManusで実行

SKILL.md


name: airparser-api description: Guia para integrar con el servicio de parsing de documentos Airparser via API, webhooks y Make.com. Usar cuando se configuren inboxes, esquemas de extraccion, o flujos de automatizacion para procesamiento de recibos.

Integracion API de Airparser

1) Vision General

Airparser es un servicio de parsing de documentos impulsado por LLM que extrae datos estructurados de emails, PDFs e imagenes. Esta skill cubre la integracion API, configuracion de esquemas de extraccion y flujos de automatizacion para el sistema de procesamiento de recibos de Transports Pau.

Nota: Airparser usa el termino "Inbox" para referirse a un parser/proyecto (equivalente al "Mailbox" de Parsio).


2) Autenticacion

Clave API

La clave API se almacena en el archivo .env del proyecto:

# Archivo: .env (ya configurado, incluido en .gitignore)
AIRPARSER_API_KEY=tu_clave_api_aqui

La clave API se encuentra en: https://app.airparser.com/account

Cargar variables de entorno

# Cargar .env antes de ejecutar comandos
source .env

# Verificar que esta cargada
echo $AIRPARSER_API_KEY

URL Base

https://api.airparser.com

Header de autenticacion

Usar X-API-Key en el header HTTP:

source .env && curl -X GET https://api.airparser.com/inboxes/ \
  -H "X-API-Key: $AIRPARSER_API_KEY"

3) Conceptos Clave

ConceptoDescripcion
InboxProyecto/parser que recibe documentos. Tiene email propio
DocumentDocumento recibido (email, PDF, imagen)
Extraction SchemaDefinicion de campos a extraer usando descripcion en lenguaje natural
WebhookEndpoint para recibir datos parseados en tiempo real (con firma de seguridad)

4) Referencia API - Inboxes

Listar Inboxes

source .env && curl -X GET https://api.airparser.com/inboxes \
  -H "X-API-Key: $AIRPARSER_API_KEY"

Eliminar Inbox

source .env && curl -X DELETE https://api.airparser.com/inboxes/<inbox_id> \
  -H "X-API-Key: $AIRPARSER_API_KEY"

Obtener Inbox ID

El Inbox ID se encuentra en la URL del navegador cuando abres el inbox:

https://app.airparser.com/inboxes/<INBOX_ID>/documents

O via API listando los inboxes.


5) Referencia API - Documentos

Subir documento para parsear

Formatos soportados: EML, PDF, HTML, TXT, MD, DOCX y mas Tamano maximo: 20MB

source .env && curl -X POST https://api.airparser.com/inboxes/<inbox_id>/upload \
  -H "X-API-Key: $AIRPARSER_API_KEY" \
  -F "file=@recibo.pdf"

Con metadata opcional (se incluira en el JSON parseado como __meta__):

source .env && curl -X POST https://api.airparser.com/inboxes/<inbox_id>/upload \
  -H "X-API-Key: $AIRPARSER_API_KEY" \
  -F "file=@recibo.pdf" \
  -F 'meta={"conductor_id": "123", "vehiculo": "1234-ABC"}'

Retorna: Document ID

Obtener documento con datos parseados

source .env && curl -X GET https://api.airparser.com/docs/<document_id>/extended \
  -H "X-API-Key: $AIRPARSER_API_KEY"

Nota: Se recomienda usar webhooks para recibir datos en tiempo real en lugar de polling.

Listar documentos

source .env && curl -X GET "https://api.airparser.com/inboxes/<inbox_id>/docs?page=1" \
  -H "X-API-Key: $AIRPARSER_API_KEY"

Con filtros:

source .env && curl -X GET "https://api.airparser.com/inboxes/<inbox_id>/docs?page=1&from=2025-01-01&to=2025-12-31&statuses[]=parsed" \
  -H "X-API-Key: $AIRPARSER_API_KEY"

Parametros:

  • page (number): Numero de pagina
  • from (string): Fecha desde (YYYY-MM-DD)
  • to (string): Fecha hasta (YYYY-MM-DD)
  • q (string): Busqueda
  • statuses (array): Estados: importing, parsed, fail, new, quota, parsing, exception

6) Referencia API - Extraction Schema

Crear/Actualizar esquema de extraccion

source .env && curl -X POST https://api.airparser.com/inboxes/<inbox_id>/schema \
  -H "X-API-Key: $AIRPARSER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "fields": [
      {
        "type": "scalar",
        "data": {
          "name": "total_amount",
          "description": "El importe total del recibo",
          "type": "decimal",
          "default_value": "0.00"
        }
      }
    ]
  }'

Tipos de campos

1. Scalar (valores simples)

{
  "type": "scalar",
  "data": {
    "name": "nombre_campo",
    "description": "Descripcion para el LLM",
    "type": "string|integer|decimal|boolean",
    "default_value": "valor_por_defecto"
  }
}

Tipos soportados: string, integer, decimal, boolean

2. List (arrays de objetos)

{
  "type": "list",
  "data": {
    "name": "lineas",
    "description": "Lista de items",
    "attributes": [
      {
        "name": "producto",
        "description": "Nombre del producto",
        "type": "string",
        "default_value": ""
      },
      {
        "name": "cantidad",
        "description": "Cantidad",
        "type": "integer",
        "default_value": "0"
      }
    ]
  }
}

3. Object (objeto unico)

{
  "type": "object",
  "data": {
    "name": "direccion",
    "description": "Direccion de envio",
    "attributes": [
      {
        "name": "calle",
        "description": "Calle",
        "type": "string",
        "default_value": ""
      }
    ]
  }
}

4. Enum (valores predefinidos)

{
  "type": "enum",
  "data": {
    "name": "estado",
    "description": "Estado del pedido",
    "values": ["pendiente", "procesando", "enviado", "entregado"]
  }
}

Clonar esquema entre inboxes

source .env && curl -X POST https://api.airparser.com/inboxes/<source_inbox_id>/schema-clone \
  -H "X-API-Key: $AIRPARSER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"destination_inbox_id": "<target_inbox_id>"}'

Reglas de validacion

  • Nombres de campo: 1-100 caracteres, solo letras minusculas, numeros y guiones bajos
  • Nombres unicos dentro del esquema
  • Descripciones: max 3000 caracteres
  • Valores por defecto: max 400 caracteres
  • Valores de enum: unicos, 1-100 caracteres cada uno

7) Webhooks

Configurar webhook (via UI)

  1. Ir a Integrations → Webhooks en Airparser
  2. Seleccionar "Create a webhook"
  3. Pegar la URL de destino

Airparser envia datos via POST cada vez que se parsea un documento.

Verificar firma del webhook (seguridad)

Airparser firma cada payload con un Signing Secret. La firma se envia en el header airparser-signature.

Pseudocodigo:

signature = base64(HMAC_SHA256(payload_binary, secret))

Node.js ejemplo:

const crypto = require('crypto');

app.post('/webhook', express.raw({type: 'application/json'}), (req, res) => {
  const SIGNING_SECRET = "<your_secret_key>";
  const signature1 = req.get('airparser-signature');
  const signature2 = crypto
    .createHmac('sha256', SIGNING_SECRET)
    .update(req.rawBody)
    .digest('base64');

  if (signature1 === signature2) {
    // Firma valida
    res.sendStatus(200);
  } else {
    // Firma invalida - rechazar
    res.sendStatus(403);
  }
});

PHP ejemplo:

$payload = @file_get_contents('php://input');
// Procesar payload...
http_response_code(200);

8) Esquema para Recibos Transports Pau

Esquema de extraccion configurado en esquema-airparser.json:

{
  "fields": [
    {
      "type": "scalar",
      "data": {
        "name": "razon_social",
        "description": "Nombre del comercio/empresa del recibo. Recortar espacios, preservar acentos.",
        "type": "string",
        "default_value": ""
      }
    },
    {
      "type": "scalar",
      "data": {
        "name": "fecha",
        "description": "Fecha de transaccion mas cercana al total. Convertir DD/MM/YYYY o DD-MM-YYYY a YYYY-MM-DD.",
        "type": "string",
        "default_value": ""
      }
    },
    {
      "type": "scalar",
      "data": {
        "name": "matricula",
        "description": "Matricula espanola del vehiculo si aparece. Formato normalizado. Vacio si no encontrada.",
        "type": "string",
        "default_value": ""
      }
    },
    {
      "type": "scalar",
      "data": {
        "name": "importe",
        "description": "Total a pagar en EUR. Buscar TOTAL, TOTAL A PAGAR. Usar el total final si hay varios.",
        "type": "decimal",
        "default_value": "0.00"
      }
    },
    {
      "type": "enum",
      "data": {
        "name": "categoria",
        "description": "Clasificar por palabras clave: gasoil (gasoil/diesel/fuel), peajes (peaje/toll/autopista), limpieza_vehiculos (lavado/limpieza), otros (default).",
        "values": ["gasoil", "peajes", "limpieza_vehiculos", "otros"]
      }
    },
    {
      "type": "enum",
      "data": {
        "name": "pago",
        "description": "empresa = facturado a Transports Pau o tarjeta empresa. transportista = pagado por conductor. Vacio si ambiguo.",
        "values": ["empresa", "transportista"]
      }
    }
  ]
}

Aplicar esquema via API

source .env && curl -X POST https://api.airparser.com/inboxes/<inbox_id>/schema \
  -H "X-API-Key: $AIRPARSER_API_KEY" \
  -H "Content-Type: application/json" \
  -d @esquema-airparser.json

9) Integracion con Make.com

Trigger: Watch Document Parsed

  1. Anadir modulo Airparser: "Watch Document Parsed"
  2. Conectar cuenta Airparser (email/password)
  3. Seleccionar inbox

Action: Upload a Document for Parsing

Importa un documento externo a Airparser para parsearlo.

Flujo de procesamiento

Trigger Airparser (doc.parsed)
    |
    v
Text Parser (normalizar matricula)
    |
    v
Text Parser (normalizar fecha)
    |
    v
Set Variable (mapeo categoria)
    |
    v
Google Drive (subir original)
    |
    v
Google Sheets (anadir fila)

Si usaste Google Sign Up

Para conectar con Make necesitas credenciales email/password:

  1. Cerrar sesion de Airparser
  2. Ir a https://app.airparser.com/forgot
  3. Crear nueva password via email

10) Ejemplo: Flujo completo

# 1. Cargar credenciales
source .env

# 2. Listar inboxes para obtener ID
curl -X GET https://api.airparser.com/inboxes \
  -H "X-API-Key: $AIRPARSER_API_KEY"

# Respuesta: [{"_id": "abc123", "name": "Recibos", ...}]

# 3. Aplicar esquema de extraccion
curl -X POST https://api.airparser.com/inboxes/abc123/schema \
  -H "X-API-Key: $AIRPARSER_API_KEY" \
  -H "Content-Type: application/json" \
  -d @esquema-airparser.json

# 4. Subir documento de prueba
curl -X POST https://api.airparser.com/inboxes/abc123/upload \
  -H "X-API-Key: $AIRPARSER_API_KEY" \
  -F "file=@recibo_gasoil.pdf" \
  -F 'meta={"matricula": "1234-ABC"}'

# Respuesta: "<document_id>"

# 5. Obtener datos parseados (o usar webhook)
curl -X GET https://api.airparser.com/docs/<document_id>/extended \
  -H "X-API-Key: $AIRPARSER_API_KEY"

11) Mapeo de Campos para Transports Pau

Keywords de Categoria (CA/ES)

CategoriaKeywords
gasoilgasoil, diesel, combustible, fuel, carburant
peajespeatge, peaje, autopista, toll, via-t, telepeaje
limpieza_vehiculosrentat, lavado, neteja, limpieza, autolavado
otros(fallback por defecto)

Mapeo Tipo de Pago

TipoKeywords
empresatargeta empresa, tarjeta empresa, compte, company card
transportistaefectivo, cash, efectiu, targeta personal, tarjeta personal

Normalizacion de Matricula

Formato entrada: 1234 ABC, 1234-ABC, 1234ABC Formato salida: 1234-ABC

Regex: ^(\d{4})-?([A-Z]{3})$


12) Manejo de Errores

CodigoSignificadoAccion
401API key invalidaVerificar AIRPARSER_API_KEY en .env
404Inbox/documento no encontradoVerificar IDs
429Limite de peticionesEsperar y reintentar
500Error del servidorReintentar

13) Recursos

スコア

総合スコア

50/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新

+5
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

0/5
タグ

1つ以上のタグが設定されている

+5

レビュー

💬

レビュー機能は近日公開予定です