Saltar al contenido principal
Actualizado el Sep 17, 2026

Vistas de calendario

Qué vas a aprender
  • Cómo cualquier tipo personalizado puede mostrarse como un calendario
  • Dónde vive la configuración de calendario y qué hace cada clave
  • Cuándo un tipo obtiene una vista de calendario y cómo abrirla
  • Cómo el ejemplo de agendamiento usa el calendario para las citas
  • Cómo funcionan los registros recurrentes

En AutoTalk, un calendario es una forma de ver un tipo personalizado — no una aplicación nativa aparte. Cualquier tipo personalizado cuyos registros tengan un campo Fecha o Fecha y hora puede mostrarse en un calendario, para que navegues y gestiones esos registros por día, semana o mes en lugar de una lista plana.

¿Cuándo obtiene un tipo un calendario?

Un tipo personalizado muestra una vista de calendario cuando su definición incluye una configuración de calendario — como mínimo, qué campo de fecha/hora marca el inicio de cada registro. También puedes apuntar a un campo de fin, un título, un color y un campo de recurrencia.

Una vez configurado el calendario, el tipo gana una vista de calendario junto a su listado normal, accesible desde la entrada de ese tipo en el menú lateral. Los tipos sin campo de fecha — o sin configuración de calendario — aparecen como lista.

Añadir una configuración de calendario

El interruptor es un único campo en la definición del tipo: Calendario, en el formulario de Tipos Personalizados. Es una caja de JSON puro — sin selector y sin texto de ejemplo — y el estado vacío dentro de la app llama a lo que va ahí un bloque de calendario.

El bloque más pequeño que funciona indica el campo de inicio:

{
"startField": "startTimestamp",
"defaultView": "month"
}

Guarda, y el tipo pasa a ser un grupo en la barra lateral, con Vista de lista y Vista de calendario dentro. Un startField no vacío es exactamente lo que mira esa comprobación: sin él el tipo sigue siendo una lista simple, contenga lo que contenga el resto del bloque.

Un bloque más completo, adaptado del tipo Events del ejemplo Agendador:

{
"startField": "startTimestamp",
"endField": "endTimestamp",
"recurrenceField": "recurrence",
"groupByField": "employeeId",
"colorExpr": "'#23a538'",
"defaultView": "month"
}

Las claves

Cuatro de ellas son rutas con puntos a campos del registro:

ClaveA qué apunta
startFieldObligatorio. El campo Fecha o Fecha y hora que marca dónde empieza la entrada. Un registro sin nada ahí queda fuera del calendario
endFieldDónde termina la entrada. Sin él, el calendario dibuja un bloque de una hora desde el inicio
recurrenceFieldUn campo que guarda una string RRULE — mira Registros recurrentes
groupByFieldUn campo por el que agrupar las entradas, como el empleado al que está asignada

defaultView elige la vista con la que abre el calendario — day, week, month o agenda. Si no la pones, abre en month. Un ?view= en la URL la sobrescribe, y es lo que hace que una vista concreta se pueda compartir como enlace.

Las otras cuatro claves son expresiones CEL, no rutas:

ClaveQué define
titleExprLa etiqueta dibujada en cada entrada
colorExprEl color de la entrada, como cualquier string de color CSS
allDayExprSi la entrada se dibuja como una banda de día completo
tooltipExprEl texto que aparece al pasar el ratón
Las expresiones no ven el registro

Estas cuatro se evalúan una vez para toda la vista, con tu empresa en el alcance — no el registro que se está dibujando. Una expresión escrita sobre los campos del propio registro no falla de forma visible; simplemente no produce nada, así que colorExpr da el mismo color a todas las entradas y allDayExpr nunca es verdadero.

Hasta que eso cambie, úsalas para valores que no dependan del registro — "colorExpr": "'#23a538'" — y deja que la etiqueta de cada entrada venga del campo name del propio registro, al que el calendario recurre siempre que titleExpr no produce nada.

Otras dos claves aparecen en los bloques del ejemplo Agendador — availabilityFromType y workingHoursType — y nada las lee. La superposición de horario de trabajo encuentra ese tipo por su slug working_hours, no a través de este bloque, así que copiar esas dos claves a tu propio tipo no tiene ningún efecto.

Un ejemplo completo: agendamiento de citas

Nada provisiona un producto de agendamiento por ti — un calendario es lo que obtienes al darle a uno de tus tipos personalizados un campo de fecha y una configuración de calendario. La forma más rápida de ver uno completo es importar el ejemplo Agendador, cuyo ZIP ya trae un conjunto listo de tipos personalizados para agendar citas:

TipoQué guarda
EventosLas citas en sí — fecha/hora, quién y qué
ServiciosServicios agendables, cada uno con duración y precio
Horarios de TrabajoEl horario semanal normal de cada profesional
Períodos del ProfesionalAusencias y excepciones puntuales de disponibilidad

El tipo Eventos ya viene con una configuración de calendario, así que abre directamente como un calendario. Es el mismo mecanismo que puedes agregar a cualquier tipo personalizado — el ejemplo es solo un conjunto listo, ajustado para reservas.

Las vistas del calendario

Un calendario ofrece cuatro formas de ver los mismos registros:

  • Día — un solo día, hora por hora. Mejor para un detalle de los registros del día.
  • Semana — la semana actual a lo largo de las horas de trabajo. Bueno para detectar huecos y solapamientos.
  • Mes — un mes entero de un vistazo. Bueno para una visión general.
  • Agenda — una lista cronológica de los próximos registros.

Usa las flechas de navegación para cambiar de período y los filtros para restringir qué registros se muestran (por ejemplo, por el profesional al que está asignado un Evento).

Creando un registro desde el calendario

Usando el tipo Eventos de ese ejemplo:

  1. Navega hasta la fecha con las flechas o cambiando de vista.
  2. Haz clic en un horario (vista Día/Semana) o en una fecha (vista Mes) para iniciar un nuevo Evento.
  3. Completa los campos del registro. Para Eventos son el contacto, el/los servicio(s), el profesional asignado y la hora de inicio/fin — pero el formulario siempre refleja los campos que define tu tipo personalizado.
  4. Guarda. El registro aparece en el calendario de inmediato.

Puedes abrir cualquier registro para editarlo, arrastrarlo a un nuevo horario para reprogramar o eliminarlo. Para Eventos, la hora de fin y el título pueden completarse automáticamente con los workflows del ejemplo (por ejemplo, calculando el fin a partir de la duración de los servicios seleccionados).

Registros recurrentes

Si la configuración de calendario declara un campo de recurrencia, los registros pueden repetirse según un patrón en lugar de recrearse a mano. La recurrencia se almacena como una cadena RRULE estándar, así que un tipo puede expresar patrones diarios, semanales o mensuales (por ejemplo, una sesión semanal cada martes a las 10:00).

Un registro recurrente se almacena como un único registro, y el calendario lo expande en un evento por ocurrencia dentro del período visible. Editarlo edita ese único registro, así que el cambio aplica a toda la serie, no a una ocurrencia específica.

Cómo se conectan los registros (ejemplo de agendamiento)

En ese ejemplo, cada Evento enlaza otros tres registros:

CampoQué responde
Contacto¿Para quién es la cita?
Servicio¿Qué se hará?
Profesional¿Quién la realiza?

El Contacto es un registro de contacto real, así que un Evento referencia al contacto en lugar de copiar sus datos. Los workflows del ejemplo también graban una marca de tiempo lastScheduledEventAt en el contacto (usada, por ejemplo, para retomar el contacto tras un período de inactividad); las citas en sí no se listan en el perfil del contacto. Este enlace de tres puntas es específico del diseño de ese ejemplo; tus propios tipos con calendario pueden referenciar los registros que tengan sentido para ellos.

Próximos pasos