Copiar página

Receta

Prellena un formulario PDF y mándalo a firma

Objetivo: Un formulario PDF con sus campos prellenados, el RFC bloqueado y enviado a la persona que lo llena y firma.

Para: integrador · nivel intermedio · 10 min · Necesitas: API key de sandbox · Un PDF con campos de formulario (AcroForm): formulario.pdf

Grabado en el entorno interno de AllSign con una key de sandbox · backend 24c0469 · · test docs-checks-v3/tests/recetas/formulario-pdf-acroform.receta.spec.ts

Los ejemplos usan $ALLSIGN_API_KEY. Defínela una vez con tu key de sandbox: export ALLSIGN_API_KEY="allsign_test_sk_…" (en PowerShell: $env:ALLSIGN_API_KEY="allsign_test_sk_…").

1 Da de alta el formulario como plantilla

POST /templates ver en la referencia

Qué haces

AllSign importa cada campo del formulario (los widgets del PDF) con su nombre y su tipo. Ya trae un rol (roleCount: 1) porque el PDF tiene una caja de firma llamada firma_cliente. readiness en pending quiere decir que hay campos que todavía no son de nadie.

Qué mirar

  • id = "tmpl_39701d80589b412dbd39e02b48679840"
  • fieldCount = 5
  • roleCount = 1
  • readiness = "pending"

2 Revisa los campos que importó

GET /templates/{template_id}/fields ver en la referencia

Qué haces

La caja de firma ya es del rol Cliente, así que no tienes que declarar roles. Los otros cuatro campos (nombre, rfc, fecha y acepta) esperan a que digas quién los llena.

Qué mirar

  • unassignedCount = 4
  • data.4.role = "Cliente"

3 Asigna un campo al rol

PATCH /templates/{template_id}/fields/{name} ver en la referencia

Qué haces

Repite esta llamada con rfc, fecha y acepta: cada campo dice qué rol lo llena. Un rol es un lugar en el formulario, no una persona; la persona se asigna al crear cada documento.

Qué mirar

  • name = "nombre"
  • role = "Cliente"

4 Confirma que la plantilla quedó lista

GET /templates/{template_id} ver en la referencia

Qué haces

Con todos los campos asignados, readiness pasa a ready.

Qué mirar

  • readiness = "ready"

5 Crea el documento con valores y un campo bloqueado

POST /documents ver en la referencia

Qué haces

values prellena los campos por su nombre (texto o casilla) y readOnly bloquea los que el firmante no debe cambiar: aquí el RFC, que ya validaste de tu lado. Un nombre de campo que no existe se ignora sin error, así que revisa la ortografía contra la lista de campos.

Qué mirar

  • id = "doc_c8fee66bd4fb43ad9d928183b9ed7b38"
  • status = "draft"

6 Revisa cómo quedaron los campos

GET /documents/{document_id}/fields ver en la referencia

Qué haces

filledBy en owner dice que el valor lo puso quien envía; la fecha queda vacía para que la llene el firmante.

Qué mirar

  • data.1.value = {"text":"XAXX010101000","checked":null}
  • data.1.readOnly = true
  • data.1.filledBy = "owner"
  • data.2.filledBy = null

7 Envíalo a firma

POST /documents/{document_id}/send ver en la referencia

Qué haces

La persona recibe su invitación, llena la fecha, ve el RFC sin poder cambiarlo y firma.

Qué mirar

  • status = "awaiting_signatures"

En producción

Con una key live este paso consume créditos de tu saldo; en sandbox no se cobra nada.

Errores comunes de esta receta

Errores reales que el test de esta receta provocó a propósito en sandbox, sobre sus mismos pasos. Cada uno enlaza a su explicación en Errores.

FIELD_NOT_FOUND · 404 · en el paso 3 (Asigna un campo al rol)

Asigna un campo que no existe. Qué significa y qué hacer

Respuesta · 404 · FIELD_NOT_FOUND
{
  "type": "https://allsign.io/developers/docs/errors#FIELD_NOT_FOUND",
  "title": "Not Found",
  "status": 404,
  "detail": "Field 'telefono_movil' not found in this template.",
  "instance": "/v3/templates/tmpl_24c55a589976432da1a168e3c4859ce6/fields/telefono_movil",
  "code": "FIELD_NOT_FOUND",
  "requestId": "req_06aa3c8f7ed843d0afa10acac48240e5"
}

Grabado en el entorno interno de AllSign con una key de sandbox · backend 24c0469 · · test docs-checks-v3/tests/recetas/formulario-pdf-acroform.receta.spec.ts

DOCUMENT_CONFLICT · 409 · en PATCH /v3/documents/doc_6b7fc763d2bc430980ae397679f7a465/fields/fie_fb20c7c439fc4902b6b6bbc9bbca55cc

Corrige un campo de un documento anulado. Qué significa y qué hacer

Respuesta · 409 · DOCUMENT_CONFLICT
{
  "type": "https://allsign.io/developers/docs/errors#DOCUMENT_CONFLICT",
  "title": "Conflict",
  "status": 409,
  "detail": "Este documento ya terminó (ANULADO): sus campos ya no se pueden crear, mover, reasignar ni borrar.",
  "instance": "/v3/documents/doc_6b7fc763d2bc430980ae397679f7a465/fields/fie_fb20c7c439fc4902b6b6bbc9bbca55cc",
  "code": "DOCUMENT_CONFLICT",
  "requestId": "req_55b09c55654746338f3f811e0ced82a7",
  "reason": "document_terminal"
}

Grabado en el entorno interno de AllSign con una key de sandbox · backend 24c0469 · · test docs-checks-v3/tests/recetas/formulario-pdf-acroform.receta.spec.ts

Siguiente