Skip to main content
El embed firmado permite precargar datos del cliente y adjuntar metadata sin confiar en parámetros modificables por el navegador.

Obtener la configuración

El owner debe abrir Agenda → Configuración → Calendario embebido. Desde ahí copia el código, revela el secreto y, después de validar la integración, activa Exigir firma.
El secreto de producción solo puede vivir en tu backend o secret manager. No lo incluyas en JavaScript del navegador, HTML, aplicaciones móviles ni repositorios.

Parámetros aceptados

Las claves de metadata se normalizan a minúsculas, admiten a-z, 0-9, _ y -, y se recortan a 40 caracteres. Se guardan hasta 20 claves, con valores de hasta 500 caracteres y un máximo total serializado de 4 KB. Los valores que no cumplen se descartan. Los datos prefill_* solo se fuerzan en el backend cuando la firma es válida. Sin firma pueden verse bloqueados en la interfaz, pero el visitante puede alterar la URL antes de abrirla y el backend no los considera datos confiables.

Construir la cadena canónica

  1. Conservá solamente prefill_*, metadata_* y exp.
  2. Convertí cada valor a string. Omití valores nulos.
  3. Ordená los pares por nombre de clave ascendente.
  4. Aplicá percent-encoding RFC 3986 a cada clave y valor por separado: solo A-Z a-z 0-9 - . _ ~ quedan sin escapar y el hexadecimal va en mayúscula.
  5. Uní los pares como clave=valor con &.
No incluyas embed ni sig.
La cadena canónica es:
Calculá HMAC-SHA256(secreto, cadena_canónica) y agregá el digest hexadecimal como sig. Con el secreto mi-secreto, la firma del ejemplo es:

Generar una URL en Node.js

Generar una URL en Python

Definir vencimiento

Mandá exp como timestamp Unix en segundos y firmalo junto con los demás parámetros. Si está vencido o no es un entero válido, Turnito rechaza la reserva. Usá ventanas cortas, de minutos u horas.

Interpretar la validación

  • Firma válida: Turnito fuerza los datos precargados y guarda la metadata normalizada.
  • Firma inválida o vencida: la reserva se rechaza.
  • Firma ausente con Exigir firma activo: la reserva se rechaza cuando la URL incluye parámetros firmables.
  • Embed sin prefill_*, metadata_* ni exp: no exige firma y funciona como un calendario común.

Probar la URL

Este probador calcula la firma en tu navegador. Usalo únicamente con un secreto descartable recién generado y antes de publicar la integración. Cuando termines, regenerá el secreto y guardá el nuevo solo en tu backend.
Nunca pegues en el probador un secreto que ya esté en producción.

Diagnosticar una firma inválida

Compará, en este orden:
  1. El conjunto exacto de parámetros firmados.
  2. El orden alfabético de las claves.
  3. El percent-encoding RFC 3986 de claves y valores.
  4. El timestamp exp en segundos.
  5. El secreto vigente de esa agenda.
Si regenerás el secreto, todas las URLs firmadas con el anterior dejan de funcionar.