alloop
Reuniones de venta

Cal.com, Acuity y otras agendas

Cal.com se conecta directo y firmado. Acuity, Zcal, HubSpot Meetings, las citas de Google Calendar o tu CRM entran por una dirección genérica con tu clave, desde Zapier, Make o tu propio código.

No hace falta que tu agenda sea Calendly. Cal.com habla con alloop directamente; cualquier otra herramienta que sepa avisar a una dirección web (todas lo hacen, al menos a través de Zapier o Make) entra por la dirección genérica de tu cuenta.

Cal.com

  1. En Cal.com, Settings → Developer → Webhooks: nueva suscripción a

    https://track.alloop.ch/webhooks/calcom/<tu-cliente>

    con los eventos BOOKING_CREATED, BOOKING_RESCHEDULED, BOOKING_CANCELLED y BOOKING_NO_SHOW_UPDATED.

  2. Pon un secreto en la suscripción y pásanoslo. Cal.com firma cada aviso con él y alloop lo comprueba.

  3. Si tu formulario de reserva pide teléfono, alloop lo lee (cualquier campo cuyo nombre contenga «phone», «tel» o «whatsapp»).

alloop lee el invitado (nunca el organizador), la hora, el título del evento, la sala de Zoom si la reserva la crea y las marcas utm_* si las pasas en los metadatos.

Cualquier otra herramienta (Zapier, Make o tu CRM)

Tu cuenta tiene una dirección genérica que acepta reservas, cancelaciones, asistencias, resultados y transcripciones:

POST https://track.alloop.ch/webhooks/meetings/<tu-cliente>
X-Alloop-Token: <tu clave>
Content-Type: application/json

La clave te la damos nosotros (es distinta para cada cliente y solo vale para esto).

Una reserva nueva
{
  "action": "booked",
  "external_id": "id-de-la-cita-en-tu-herramienta",
  "email": "maria@ejemplo.com",
  "phone": "+41 79 123 45 67",
  "name": "María",
  "scheduled_at": "2026-10-20T15:00:00Z",
  "provider": "acuity",
  "event_name": "Diagnóstico 30 min",
  "host": "laura@tu-academia.com",
  "join_url": "https://zoom.us/j/91234567890",
  "utm_source": "meta",
  "utm_campaign": "reto-octubre"
}
actionQué haceCampos
bookedRegistra la reserva (si external_id se repite, no duplica)email o phone, scheduled_at; opcionales name, provider, event_name, host, join_url o conference_id, page_url, utm_*
cancelledLa persona cancelóexternal_id (y reason si quieres)
rescheduledCambió la horaexternal_id, scheduled_at
heldLa persona se presentóexternal_id o email, at, duration_s
outcomeEl resultadoexternal_id o meeting_id, outcome (qualified, unqualified, no_show, cancelled, won), opcionales qualification, value, currency
transcriptLa transcripción, si ya la tiene otra herramientaexternal_id o meeting_id, transcript (texto «Nombre: frase» por líneas, un VTT o una lista {speaker, start, end, text}), lang

Con Zapier o Make: un zap por acción, con «Webhooks → POST» y el JSON de arriba rellenado con los campos de tu herramienta. Para las citas de Google Calendar (appointment schedules) y para HubSpot Meetings, es la misma mecánica: el evento «cita creada» de tu herramienta → POST a esta dirección.

Por API

Lo mismo, con tus credenciales de la API de lectura: POST /api/v1/clients/{client_id}/meetings crea una reserva, POST …/meetings/{meeting_id}/outcome marca el resultado y POST …/meetings/{meeting_id}/transcript deja la transcripción. Detalle en la referencia de la API.

Cómo sabes que funciona

Manda una reserva de prueba desde tu herramienta (o con curl). La respuesta trae "created": true y un meeting_id; en 📅 Reuniones aparece al momento. Repite el mismo envío: "created": false y ninguna reunión nueva.

Errores comunes

  • 401 token inválido. La cabecera se llama X-Alloop-Token y la clave es la de reuniones, no la de tu panel.
  • 400 «hace falta el email o el teléfono». Tu zap manda el campo vacío cuando la persona no lo rellena. Pon el teléfono como segunda opción.
  • Dos reuniones por una reserva. Tu herramienta no manda external_id y los dos envíos llevaban horas distintas. Mándalo siempre; cualquier id estable de tu herramienta sirve.

Siguiente paso

Zoom para la asistencia y la transcripción, y el resultado de la reunión.

En esta página