Guías

Envía a los firmantes a una experiencia de firma localizada con un parámetro de URL

"Gráfico oscuro que muestra una experiencia de firma multilingüe localizada en un documento digital profesional."

Si envías contratos a firmantes en varios países, esta es la forma más rápida de ofrecerles una experiencia localizada a cada uno. Añade ?lang=fr al enlace de un firmante francés, ?lang=de al enlace de un firmante alemán, y Firma.dev se encarga del resto. Cada pantalla que ven, desde las instrucciones y los botones hasta el texto legal, se carga en ese idioma desde la primera página. No necesitan cuenta por su parte, ni ajustes que configurar por la tuya.

Cómo funciona el parámetro ?lang=

El ?lang= parámetro puede añadirse a cualquier enlace de firma de Firma.dev. Fuerza toda la experiencia de firma al idioma especificado, anulando tanto la detección automática del navegador como cualquier valor predeterminado a nivel de espacio de trabajo. El firmante no tiene que hacer nada; solo sigue el enlace y la interfaz ya está en el idioma correcto.

Los siete códigos de idioma compatibles son:

Código

Idioma

es

Inglés

es

Español

fr

Francés

de

Alemán

it

Italiano

pt

Portugués

el

Griego

Una URL de firma estándar tiene este aspecto:

https://app.firma.dev/signing/{signing_request_user_id}
https://app.firma.dev/signing/{signing_request_user_id}
https://app.firma.dev/signing/{signing_request_user_id}

Con un idioma forzado:

https://app.firma.dev/signing/{signing_request_user_id}?lang=fr
https://app.firma.dev/signing/{signing_request_user_id}?lang=fr
https://app.firma.dev/signing/{signing_request_user_id}?lang=fr

Ese es todo el cambio. Sin llamadas adicionales a la API, sin modificaciones de la plantilla ni configuración por firmante.

Una solicitud de firma, varios enlaces localizados

El patrón práctico para documentos con varias partes o internacionales: crea una única solicitud de firma con los correos automatizados de Firma.dev desactivados, obtén las URLs de firma para cada destinatario y luego añade el parámetro ?lang= apropiado para cada uno antes de enviarlos a través de tu propio sistema.

El siguiente código procede de la guía de marca blanca, con ?lang= añadido según la guía de localización:

// Crear una solicitud de firma con los correos desactivados
const response = await fetch(
  'https://api.firma.dev/functions/v1/signing-request-api/signing-requests',
  {
    method: 'POST',
    headers: {
      'Authorization': API_KEY,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      workspace_id: workspaceId,
      template_id: templateId,
      settings: {
        send_signing_email: false,
        send_finish_email: false
      },
      recipients: [
        { first_name: 'Jane', last_name: 'Smith', email: 'jane@example.com', designation: 'Firmante', order: 1 }
      ]
    })
  }
)
const signingRequest = await response.json()

// Obtener las URLs de firma para cada destinatario
const usersResponse = await fetch(
  `https://api.firma.dev/functions/v1/signing-request-api/signing-requests/${signingRequest.id}/users`,
  {
    headers: { 'Authorization': API_KEY }
  }
)
const { results: users } = await usersResponse.json()

// Enviar correos a través de tu propio sistema con ?lang= añadido
for (const user of users) {
  const signingUrl = `https://app.firma.dev/signing/${user.id}?lang=fr`
  await yourEmailService.send({
    to: user.email,
    subject: 'Por favor, firma tu documento',
    body: `Haz clic aquí para firmar: ${signingUrl}`
  })
}
// Crear una solicitud de firma con los correos desactivados
const response = await fetch(
  'https://api.firma.dev/functions/v1/signing-request-api/signing-requests',
  {
    method: 'POST',
    headers: {
      'Authorization': API_KEY,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      workspace_id: workspaceId,
      template_id: templateId,
      settings: {
        send_signing_email: false,
        send_finish_email: false
      },
      recipients: [
        { first_name: 'Jane', last_name: 'Smith', email: 'jane@example.com', designation: 'Firmante', order: 1 }
      ]
    })
  }
)
const signingRequest = await response.json()

// Obtener las URLs de firma para cada destinatario
const usersResponse = await fetch(
  `https://api.firma.dev/functions/v1/signing-request-api/signing-requests/${signingRequest.id}/users`,
  {
    headers: { 'Authorization': API_KEY }
  }
)
const { results: users } = await usersResponse.json()

// Enviar correos a través de tu propio sistema con ?lang= añadido
for (const user of users) {
  const signingUrl = `https://app.firma.dev/signing/${user.id}?lang=fr`
  await yourEmailService.send({
    to: user.email,
    subject: 'Por favor, firma tu documento',
    body: `Haz clic aquí para firmar: ${signingUrl}`
  })
}
// Crear una solicitud de firma con los correos desactivados
const response = await fetch(
  'https://api.firma.dev/functions/v1/signing-request-api/signing-requests',
  {
    method: 'POST',
    headers: {
      'Authorization': API_KEY,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      workspace_id: workspaceId,
      template_id: templateId,
      settings: {
        send_signing_email: false,
        send_finish_email: false
      },
      recipients: [
        { first_name: 'Jane', last_name: 'Smith', email: 'jane@example.com', designation: 'Firmante', order: 1 }
      ]
    })
  }
)
const signingRequest = await response.json()

// Obtener las URLs de firma para cada destinatario
const usersResponse = await fetch(
  `https://api.firma.dev/functions/v1/signing-request-api/signing-requests/${signingRequest.id}/users`,
  {
    headers: { 'Authorization': API_KEY }
  }
)
const { results: users } = await usersResponse.json()

// Enviar correos a través de tu propio sistema con ?lang= añadido
for (const user of users) {
  const signingUrl = `https://app.firma.dev/signing/${user.id}?lang=fr`
  await yourEmailService.send({
    to: user.email,
    subject: 'Por favor, firma tu documento',
    body: `Haz clic aquí para firmar: ${signingUrl}`
  })
}

El documento es el mismo para todos. La experiencia de firma que ve cada persona está en su idioma. Tú te ocupas de construir el enlace, Firma.dev se encarga del renderizado. Sustituye ?lang=fr por el código de idioma que corresponda a cada destinatario.

Este patrón es especialmente útil cuando los correos automatizados de Firma.dev están desactivados y distribuyes los enlaces de firma a través de tu propio sistema de notificaciones. Ya controlas la entrega, así que añadir el ?lang= parámetro es una incorporación trivial.

Respaldo automático sin el parámetro

Cuando no está presente el parámetro ?lang=, Firma.dev lee la configuración de idioma del navegador del firmante y la compara con el idioma compatible más cercano. Si su navegador está configurado en francés, verá una interfaz en francés. Si su idioma no es compatible, se usará inglés por defecto.

Este respaldo funciona bien para enlaces directos en los que no controlas el contexto de entrega. Pero para la firma incrustada en iframes, o en cualquier escenario en el que construyas las URLs en el lado del servidor, pasar ?lang= explícitamente es el enfoque más fiable. La detección del idioma del navegador dentro de un iframe puede ser inconsistente según cómo esté configurada la aplicación principal.

La recomendación de la documentación es sencilla: usa ?lang= en contextos incrustados y cuando conozcas la configuración regional del firmante; deja que la detección del navegador lo gestione para los enlaces directos cuando no lo sepas.

La visión completa de la localización

El ?lang= parámetro es una pieza de la pila de localización de Firma.dev. Para un flujo de firma totalmente localizado, las piezas encajan así:

Idioma de la experiencia de firma se controla con ?lang= en el enlace, o con la detección del navegador como respaldo. Esto cubre todo lo que el firmante ve durante el flujo de firma.

Correos de notificación se controlan mediante el campo language en la configuración del espacio de trabajo. Configura el espacio de trabajo en francés y todos los correos automatizados de firma se enviarán en francés, sin necesidad de una plantilla personalizada.

Estilos de firma se gestionan automáticamente en función del nombre de cada firmante. Los nombres griegos, cirílicos, japoneses y coreanos obtienen fuentes de firma diseñadas para su sistema de escritura sin necesidad de configuración.

Juntas, estas tres capas cubren toda la experiencia: los correos entrantes, el propio flujo de firma y cómo se ve la firma en el documento. La guía de localización de Firma.dev cubre las tres en detalle.

Consigue tu clave de API y empieza a desarrollar gratis, no se requiere tarjeta de crédito.

  1. Encabezado

Imagen de fondo

¿Listo para añadir firmas electrónicas a tu aplicación?

Comienza gratis. No se requiere tarjeta de crédito. Paga solo 0,049 € por sobre cuando estés listo para empezar.

Imagen de fondo

¿Listo para añadir firmas electrónicas a tu aplicación?

Comienza gratis. No se requiere tarjeta de crédito. Paga solo 0,049 € por sobre cuando estés listo para empezar.

Imagen de fondo

¿Listo para añadir firmas electrónicas a tu aplicación?

Comienza gratis. No se requiere tarjeta de crédito. Paga solo 0,049 € por sobre cuando estés listo para empezar.