Documentación / Recursos Avançados
Recursos Avançados

Cómo Crear una Agenda (Calendario) Vía API

Crear una Agenda

Resumen

La API de la plataforma eAgenda permite crear agendas (calendarios) de forma programática, configurando horarios, servicios, modos de programación y permisos. Esta guía práctica detalla cómo enviar una solicitud HTTP POST al endpoint /api/v3/calendars/ y procesar la respuesta. Para más detalles, consulte la documentación oficial de la API de eAgenda.

Preparación del Entorno

Antes de comenzar, necesitará:

  • Clave de API: Acceda al panel de eAgenda para obtener su token Bearer.
  • Herramienta para solicitudes HTTP: Use cURL, Postman o bibliotecas como requests (Python) o axios (JavaScript).
  • Configuración del encabezado: La autenticación se realiza mediante Bearer Token. Configure el encabezado Authorization: Bearer y defina Content-Type: application/json.

Consejo: Consulte la sección de autenticación en la documentación de la API para configurar el token correctamente: https://eagenda.com.br/api/v3/documents/#overview.

Definición de los Datos de la Agenda

Para crear una agenda, envíe un objeto JSON en el cuerpo de la solicitud con los siguientes campos:

{
  "calendar_name": "string",
  "slug": "string",
  "is_internal": boolean,
  "service_list": [
    {
      "service_key": "uuid"
    }
  ],
  "time_config": {
    "opening_hours": [
      {
        "week_day": "string",
        "opening_time": "time",
        "closing_time": "time",
        "max_people": integer
      }
    ],
    "slot_interval": "string",
    "duration": "string",
    "minimum_notice": integer,
    "maximum_notice": integer,
    "start_date": "date",
    "end_date": "date"
  },
  "online_meeting_platform": "string",
  "max_people": integer,
  "request_email": boolean,
  "email_required": boolean,
  "request_phone": boolean,
  "phone_required": boolean,
  "max_companions": integer,
  "max_services": integer,
  "count_companions": boolean,
  "appointment_mode": "string",
  "owner_user": "email",
  "account_slug": "string"
}

calendar_name (obligatorio)

  • Descripción: Nombre de la agenda.
  • Restricciones: Mínimo de 1 carácter.
  • Impacto: Identifica la agenda en el sistema.
  • Ejemplo: “Agenda Principal”

slug (opcional)

  • Descripción: Nombre del enlace para la agenda.
  • Restricciones: Máximo de 250 caracteres, patrón ^[-a-zA-Z0-9_]+$.
  • Impacto: Define un identificador amigable para la URL de la agenda.
  • Ejemplo: “agenda-principal”

is_internal (obligatorio)

  • Descripción: Indica si la agenda es de uso interno (solo administradores).
  • Impacto: Restringe el acceso a administradores si es true.
  • Ejemplo: false

service_list (opcional)

  • Descripción: Lista de servicios asociados a la agenda.
  • Estructura: Array de objetos, cada uno con service_key (UUID).
  • Cómo obtener: Use el endpoint de listado de servicios (/api/v3/services/).
  • Impacto: Define los servicios disponibles para programación.
  • Ejemplo:[ { "service_key": "19730681-29f0-4000-848c-34869ad83880" } ]

time_config (obligatorio)

  • Descripción: Configuraciones de horarios y programación.
  • Estructura: Objeto con:
    • opening_hours: Lista de horarios de funcionamiento por día de la semana.
      • week_day: Día de la semana (ej.: “1” para lunes, hasta “7” para domingo).
      • opening_time: Horario de apertura (formato HH:MM:SS).
      • closing_time: Horario de cierre (formato HH:MM:SS).
      • max_people: Número máximo de personas por horario (mín. 0, máx. 2147483647).
      • Ejemplo:[ { "week_day": "1", "opening_time": "08:00:00", "closing_time": "17:00:00", "max_people": 10 } ]
    • slot_interval: Intervalo entre opciones de programación (ej.: “00:15:00” para 15 minutos).
    • duration: Duración predeterminada de la cita (ej.: “00:30:00”).
    • minimum_notice: Tiempo mínimo de aviso para programar (en horas).
    • maximum_notice: Tiempo máximo de aviso para programar (en días).
    • start_date: Fecha de inicio para citas (formato YYYY-MM-DD).
    • end_date: Fecha de finalización para citas (formato YYYY-MM-DD).
  • Ejemplo:{ "opening_hours": [ { "week_day": "1", "opening_time": "08:00:00", "closing_time": "17:00:00", "max_people": 10 } ], "slot_interval": "00:15:00", "duration": "00:30:00", "minimum_notice": 2, "maximum_notice": 30, "start_date": "2025-06-01", "end_date": "2025-12-31" }

online_meeting_platform (opcional)

  • Descripción: Proveedor de videoconferencia.
  • Valores posibles: meet, teams, zoom, other.
  • Impacto: Define la plataforma para reuniones en línea.
  • Ejemplo: “meet”

max_people (obligatorio)

  • Descripción: Número máximo de personas por horario.
  • Impacto: Limita la capacidad de programación.
  • Ejemplo: 10

request_email (opcional)

  • Descripción: Solicitar correo electrónico de contacto.
  • Impacto: Incluye campo de correo electrónico en el formulario de programación si es true.
  • Ejemplo: true

email_required (opcional)

  • Descripción: Correo electrónico obligatorio para programar.
  • Impacto: Exige correo electrónico si es true.
  • Ejemplo: false

request_phone (opcional)

  • Descripción: Solicitar teléfono de contacto.
  • Impacto: Incluye campo de teléfono en el formulario de programación si es true.
  • Ejemplo: true

phone_required (opcional)

  • Descripción: Teléfono obligatorio para programar.
  • Impacto: Exige teléfono si es true.
  • Ejemplo: false

max_companions (opcional)

  • Descripción: Número máximo de acompañantes por cita.
  • Restricciones: Mínimo de 0, predeterminado 0.
  • Impacto: Limita el número de acompañantes.
  • Ejemplo: 2

max_services (opcional)

  • Descripción: Número máximo de servicios por cita.
  • Restricciones: Mínimo de 0, predeterminado 0.
  • Impacto: Limita los servicios seleccionables.
  • Ejemplo: 3

count_companions (opcional)

  • Descripción: Contar acompañantes en el total de personas.
  • Impacto: Incluye acompañantes en el conteo de max_people si es true.
  • Ejemplo: false

appointment_mode (opcional)

  • Descripción: Modo de programación.
  • Valores posibles: hybrid, online, on_site, off_site.
  • Impacto: Define si la cita es presencial, en línea o híbrida.
  • Ejemplo: “hybrid”

owner_user (opcional)

  • Descripción: Correo electrónico del usuario responsable de la agenda.
  • Impacto: Vincula la agenda a un responsable.
  • Ejemplo: “responsavel@example.com

account_slug (opcional)

  • Descripción: Slug de la cuenta o subcuenta.
  • Restricciones: Mínimo de 1 carácter, patrón ^[-a-zA-Z0-9_]+$.
  • Cómo obtener: Use el endpoint de listado de cuentas.
  • Impacto: Vincula la agenda a una cuenta específica.
  • Ejemplo: “minha-conta”

Nota: Los campos obligatorios son calendar_name, is_internal, time_config y max_people. Los demás son opcionales, pero recomendados para mayor control.

Envío de la Solicitud para Crear una Agenda

Para crear una agenda, envíe una solicitud HTTP POST al endpoint:

https://eagenda.com.br/api/v3/calendars/

Configuración de la Solicitud

  • Método: POST
  • Encabezados:
    • accept: application/json
    • Authorization: Bearer
    • Content-Type: application/json
  • Cuerpo de la solicitud: JSON con los datos de la agenda.

Ejemplo de Solicitud con cURL

curl -X POST https://eagenda.com.br/api/v3/calendars/ \
-H "accept: application/json" \
-H "Authorization: Bearer ba08ab41bd58e9b9f82b4d2788b3cd9999ee9999" \
-H "Content-Type: application/json" \
-d '{
  "calendar_name": "Agenda Principal",
  "slug": "agenda-principal",
  "is_internal": false,
  "service_list": [
    {
      "service_key": "19730681-29f0-4000-848c-34869ad83880"
    }
  ],
  "time_config": {
    "opening_hours": [
      {
        "week_day": "1",
        "opening_time": "08:00:00",
        "closing_time": "17:00:00",
        "max_people": 10
      }
    ],
    "slot_interval": "00:15:00",
    "duration": "00:30:00",
    "minimum_notice": 2,
    "maximum_notice": 30,
    "start_date": "2025-06-01",
    "end_date": "2025-12-31"
  },
  "online_meeting_platform": "meet",
  "max_people": 10,
  "request_email": true,
  "email_required": false,
  "request_phone": true,
  "phone_required": false,
  "max_companions": 2,
  "max_services": 3,
  "count_companions": false,
  "appointment_mode": "hybrid",
  "owner_user": "responsavel@example.com",
  "account_slug": "minha-conta"
}'

Ejemplo en Python (usando requests)

import requests

url = "https://eagenda.com.br/api/v3/calendars/"
headers = {
    "accept": "application/json",
    "Authorization": "Bearer ba08ab41bd58e9b9f82b4d2788b3cd9999ee9999",
    "Content-Type": "application/json"
}
data = {
    "calendar_name": "Agenda Principal",
    "slug": "agenda-principal",
    "is_internal": False,
    "service_list": [
        {
            "service_key": "19730681-29f0-4000-848c-34869ad83880"
        }
    ],
    "time_config": {
        "opening_hours": [
            {
                "week_day": "1",
                "opening_time": "08:00:00",
                "closing_time": "17:00:00",
                "max_people": 10
            }
        ],
        "slot_interval": "00:15:00",
        "duration": "00:30:00",
        "minimum_notice": 2,
        "maximum_notice": 30,
        "start_date": "2025-06-01",
        "end_date": "2025-12-31"
    },
    "online_meeting_platform": "meet",
    "max_people": 10,
    "request_email": True,
    "email_required": False,
    "request_phone": True,
    "phone_required": False,
    "max_companions": 2,
    "max_services": 3,
    "count_companions": False,
    "appointment_mode": "hybrid",
    "owner_user": "responsavel@example.com",
    "account_slug": "minha-conta"
}

response = requests.post(url, json=data, headers=headers)
print(response.status_code)
print(response.json())

Verificación de la Respuesta

La API devolverá una respuesta con el estado de la creación de la agenda. Verifique los siguientes puntos:

  • Código de estado HTTP:
    • 201 Created: Agenda creada con éxito.
    • 400 Bad Request: Error en los datos enviados (verifique el JSON).
    • 401 Unauthorized: Token inválido o ausente.
  • Cuerpo de la respuesta: Contiene detalles de la agenda creada, como:{ "calendar_key": "19730681-29f0-4000-8d78-94e4d6116180", "calendar_name": "Agenda Principal", "slug": "agenda-principal", "is_active": false, "is_internal": false, "service_list": [ { "service_key": "19730681-29f0-4000-848c-34869ad83880", "service_name": "Consulta Médica" } ], "appointment_link": "https://eagenda.com.br/agenda-principal", "time_config": { "opening_hours": [ { "week_day": "1", "opening_time": "08:00:00", "closing_time": "17:00:00", "max_people": 10 } ], "slot_interval": "00:15:00", "duration": "00:30:00", "minimum_notice": 2, "maximum_notice": 30, "start_date": "2025-06-01", "end_date": "2025-12-31" }, "online_meeting_platform": "meet", "max_people": 10, "request_email": true, "email_required": false, "request_phone": true, "phone_required": false, "max_companions": 2, "max_services": 3, "count_companions": false, "appointment_mode": "hybrid", "owner_user": "responsavel@example.com", "address": { "postal_code": "12345-678", "street": "Rua Exemplo", "neighborhood": "Centro", "number": "123", "complement": "Sala 101", "city": { "name": "São Paulo", "state_name": "São Paulo", "state_code": "SP", "country_code": "BR" } }, "account_slug": "minha-conta" }

La agenda quedará registrada en el sistema y estará lista para recibir citas, respetando las configuraciones definidas.

Conclusión

Con este tutorial, aprendió cómo crear una agenda (calendario) vía API de eAgenda, configurando horarios, servicios y permisos de forma eficiente. Esta integración es ideal para gestionar citas en diferentes contextos, como atenciones presenciales, en línea o híbridas. Para más funcionalidades, como listado o edición de agendas, consulte la documentación completa de la API de eAgenda.

Contáctenos o Conozca Más

Estamos a su disposición para ayudarle. Acceda a nuestros canales oficiales:

📞 WhatsApp : Haga clic aquí para enviarnos un mensaje 🌐 Plataforma eAgenda : Conozca eAgenda 🏢 Nuestra Empresa : Mupi Systems – Soluciones Innovadoras 📧 Correo electrónico : contato@mupisystems.com.br 📚 Tutoriales y Documentación : Acceda a nuestras guías y tutoriales