Vistas de calendario
- 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:
| Clave | A qué apunta |
|---|---|
startField | Obligatorio. El campo Fecha o Fecha y hora que marca dónde empieza la entrada. Un registro sin nada ahí queda fuera del calendario |
endField | Dónde termina la entrada. Sin él, el calendario dibuja un bloque de una hora desde el inicio |
recurrenceField | Un campo que guarda una string RRULE — mira Registros recurrentes |
groupByField | Un 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:
| Clave | Qué define |
|---|---|
titleExpr | La etiqueta dibujada en cada entrada |
colorExpr | El color de la entrada, como cualquier string de color CSS |
allDayExpr | Si la entrada se dibuja como una banda de día completo |
tooltipExpr | El texto que aparece al pasar el ratón |
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:
| Tipo | Qué guarda |
|---|---|
| Eventos | Las citas en sí — fecha/hora, quién y qué |
| Servicios | Servicios agendables, cada uno con duración y precio |
| Horarios de Trabajo | El horario semanal normal de cada profesional |
| Períodos del Profesional | Ausencias 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:
- Navega hasta la fecha con las flechas o cambiando de vista.
- Haz clic en un horario (vista Día/Semana) o en una fecha (vista Mes) para iniciar un nuevo Evento.
- 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.
- 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:
| Campo | Qué 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
- Creando un Tipo Personalizado — define un tipo y sus campos, incluidos los campos de Fecha / Fecha y hora
- Gestionando registros — agregar, editar y filtrar registros
- Usando Tipos Personalizados con agentes de IA y MCP — deja que los agentes lean y escriban registros del calendario