Scheduling

L'API timum gestisce le disponibilità (Timeslots), gli appuntamenti (Appointments), le partecipazioni (Participations) e i clienti: il cuore della pianificazione degli appuntamenti.

Panoramica dei concetti

- Timeslot (Disponibilità): Fascia oraria durante la quale è possibile prenotare - Appointment (Appuntamento): Slot orario prenotato con partecipanti - Participation (Partecipazione): Collegamento tra Customer e Appointment - Customer (Cliente): Dati di contatto di chi prenota

Timeslots (Disponibilità)

Un Timeslot definisce che una risorsa è disponibile per un periodo di tempo. Il periodo viene suddiviso in slot prenotabili tramite una griglia.

Concetto di griglia

Esempio: Una sala conferenze è disponibile dalle 8:00 alle 18:00 (Timeslot). Le prenotazioni sono possibili in blocchi da 30 minuti (griglia = 30). Questo dà origine a 20 slot prenotabili da 30 minuti ciascuno.

Create Timeslots

Crea uno o più Timeslot per una risorsa.

POST /crms/:crmId/provider/:providerRef/timeslots
curl -X POST "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/timeslots" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "timeslots": [
      {
        "reference": "tsl-2024-01-15@yourCrm",
        "resourceReference": "res-musterstr1@yourCrm",
        "start": "2024-01-15T09:00",
        "end": "2024-01-15T17:00",
        "raster": 30,
        "defaultCapacity": 1,
        "defaultAcceptBookings": true,
        "address": {
          "city": "Berlin",
          "zip": "10115",
          "country": "DE",
          "street": "Musterstraße",
          "number": "1"
        },
        "state": "BOOKABLE"
      }
    ]
  }'

Request Body

CampoTipoObbligatorioDescrizione
timeslotsarrayArray di oggetti Timeslot

Campi dell'oggetto Timeslot

CampoTipoObbligatorioDescrizione
referencestringNoRiferimento Timeslot univoco (generato se non specificato)
resourceReferencestringRiferimento della risorsa associata
startdatetimeNoInizio del Timeslot (ISO 8601)
enddatetimeFine del Timeslot (ISO 8601)
rasternumberDurata di uno slot di prenotazione in minuti. Suddivide il Timeslot in unità prenotabili.
defaultCapacitynumberNumero massimo di partecipanti per Appointment creato
defaultAcceptBookingsbooleantrue: prenotabile pubblicamente. false: l'Appointment diventa privato (ulteriori prenotazioni solo da parte del fornitore).
addressobject | stringNoIndirizzo per gli Appointment. Può essere un oggetto o una stringa (ad es. "Zoom: https://zoom.us/j/123")
statestringCREATED: nascosto (fase di pianificazione). BOOKABLE: visibile pubblicamente e prenotabile.
Indirizzo come stringa (ad es. per videochiamate)
{
  "address": "Zoom-Meeting: https://zoom.us/j/123456789"
}

Get Timeslots

Recupera tutti i Timeslot di una risorsa in un determinato periodo.

GET /crms/:crmId/provider/:providerRef/resource/:resourceRef/timeslots
curl -X GET "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/resource/res-musterstr1@yourCrm/timeslots?from=2024-01-15T00:00&to=2024-01-22T00:00" \
  -H "X-TIMUM-CLIENT-ID: your-api-key"

Parametri di query

ParametroTipoObbligatorioDescrizione
fromdatetimeData di inizio (ISO 8601)
todatetimeData di fine (ISO 8601)

Appointment inclusi

La risposta contiene anche i dati degli Appointment se un Timeslot ha già appuntamenti prenotati.

Update Timeslot

Aggiorna un Timeslot esistente. Vengono modificati solo i campi forniti.

PUT /crms/:crmId/provider/:providerRef/timeslots/:timeslotRef
curl -X PUT "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/timeslots/tsl-2024-01-15@yourCrm" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "start": "2024-01-15T10:00",
    "end": "2024-01-15T16:00",
    "raster": 30,
    "defaultCapacity": 2,
    "defaultAcceptBookings": true,
    "state": "BOOKABLE"
  }'

Delete Timeslot

Elimina un Timeslot.

DELETE /crms/:crmId/provider/:providerRef/timeslots/:timeslotRef
curl -X DELETE "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/timeslots/tsl-2024-01-15@yourCrm" \
  -H "X-TIMUM-CLIENT-ID: your-api-key"

Prerequisito

Fallisce se il Timeslot ha un Appointment non annullato. Eliminare o annullare prima l'Appointment.

Appointments (Appuntamenti)

Gli Appointment sono appuntamenti prenotati. Possono essere creati singolarmente, come sequenza o come serie su più giorni.

Get Appointments

Recupera gli Appointment di un fornitore. Include appuntamenti attivi e annullati.

GET /crms/:crmId/provider/:providerRef/appointments
curl -X GET "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/appointments?productRef=prod-besichtigung@yourCrm&resourceRef=res-musterstr1@yourCrm&includeArchived=false" \
  -H "X-TIMUM-CLIENT-ID: your-api-key"

Parametri di query

ParametroTipoDescrizione
productRefstringFiltro per prodotto (opzionale)
resourceRefstringFiltro per risorsa (opzionale)
includeArchivedbooleanIncludere gli Appointment archiviati (predefinito: false)

Response

200 OK
[
  {
    "reference": "apt-001@yourCrm",
    "acceptBookings": true,
    "address": {
      "city": "Berlin",
      "countryCode": "DE",
      "street": "Musterstraße",
      "number": "1",
      "zip": "10115"
    },
    "archived": false,
    "capacity": 1,
    "contactReference": "user-123@yourCrm",
    "description": "Besichtigung",
    "start": "2024-01-15T10:00:00Z",
    "end": "2024-01-15T10:30:00Z",
    "notes": null,
    "participations": [
      {
        "reference": "part-001@yourCrm",
        "email": "kunde@example.com",
        "mobile": "+49 170 9876543",
        "name": "Max Kunde",
        "note": "",
        "state": "BOOKED",
        "messages": null
      }
    ],
    "price": null,
    "productReference": "prod-besichtigung@yourCrm",
    "resourceReference": "res-musterstr1@yourCrm",
    "seriesId": null,
    "state": "ACTIVE"
  }
]

Create Appointments

Crea Appointment. Supporta appuntamenti singoli, sequenze e serie.

POST /crms/:crmId/provider/:providerRef/appointments - Appuntamento singolo
curl -X POST "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/appointments" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "reference": "apt-001@yourCrm",
    "start": "2024-01-15T10:00",
    "end": "2024-01-15T11:00",
    "capacity": 1,
    "acceptBookings": true,
    "resourceReference": "res-musterstr1@yourCrm",
    "productReference": "prod-besichtigung@yourCrm",
    "productName": "Besichtigung",
    "contactReference": "user-123@yourCrm",
    "address": {
      "city": "Berlin",
      "zip": "10115",
      "country": "DE",
      "street": "Musterstraße",
      "number": "1"
    },
    "participations": [
      {
        "reference": "part-001@yourCrm",
        "name": "Max Kunde",
        "email": "kunde@example.com",
        "mobile": "+49 170 9876543",
        "note": "Interessiert an 3-Zimmer-Wohnung",
        "state": "BOOKED"
      }
    ],
    "price": {
      "value": 0.00,
      "currency": "EUR"
    }
  }'

Request Body (Appuntamento singolo)

CampoTipoObbligatorioDescrizione
referencestringSì**Obbligatorio per appuntamento singolo, ignorato per la serie
startdatetimeInizio (ISO 8601)
enddatetimeFine (ISO 8601)
capacitynumberNoMax. partecipanti (predefinito: 0)
acceptBookingsbooleanNoPrenotabile pubblicamente (predefinito: false)
resourceReferencestringRiferimento della risorsa
productReferencestringRiferimento del prodotto
productNamestringNoSovrascrive il nome del prodotto
contactReferencestringNoStaff responsabile
addressobject | stringNoIndirizzo (predefinito: indirizzo della risorsa)
participationsarrayNoPartecipanti dell'Appointment
priceobjectNoPrezzo (value, currency: EUR/CHF)

Oggetto Participation

CampoTipoObbligatorioDescrizione
referencestringSì**Obbligatorio per appuntamento singolo
namestringNome del partecipante
emailstringE-mail del partecipante
mobilestringNoNumero di cellulare
notestringNoNota sul partecipante
statestringRESERVED, REQUESTED, BOOKED, CANCELED, DELETED

Stato RESERVED

Le Participation con stato RESERVED vengono eliminate automaticamente dopo 3 minuti!

Creare una serie

POST /crms/:crmId/provider/:providerRef/appointments - Serie
curl -X POST "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/appointments" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "2024-01-15T09:00",
    "to": "2024-01-15T17:00",
    "capacity": 1,
    "acceptBookings": true,
    "resourceReference": "res-musterstr1@yourCrm",
    "productReference": "prod-besichtigung@yourCrm",
    "series_data": {
      "from": "2024-01-15T09:00",
      "to": "2024-01-19T17:00",
      "raster": 30,
      "weekdays": ["1", "2", "3", "4", "5"]
    }
  }'

Oggetto series_data

CampoTipoObbligatorioDescrizione
fromdatetimeInizio della serie (ISO 8601)
todatetimeFine della serie (ISO 8601)
rasternumberDurata dello slot in minuti
weekdaysstring[]No**Obbligatorio per più di 1 giorno. Array di giorni della settimana: "1"=lun a "7"=dom

Delete Appointments (senza notifica)

Elimina gli Appointment senza notificare i partecipanti. Per correzioni amministrative.

DELETE /crms/:crmId/provider/:providerRef/appointments/withoutNotification
curl -X DELETE "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/appointments/withoutNotification" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "appointmentReference": "apt-001@yourCrm"
  }'

Request Body

CampoTipoDescrizione
appointmentReferencestringRiferimento dell'Appointment da eliminare
seriesIdstringOPPURE: ID di una serie (elimina tutti gli Appointment della serie)

Nessuna notifica

I partecipanti non vengono informati dell'eliminazione! Utilizzare questa funzione solo per correzioni amministrative.

Cancel Appointments

Annulla gli Appointment e notifica tutti i partecipanti via e-mail.

DELETE /crms/:crmId/provider/:providerRef/appointments
curl -X DELETE "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/appointments?message=Der%20Termin%20muss%20leider%20abgesagt%20werden" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "appointmentReference": "apt-001@yourCrm"
  }'

Parametri di query

ParametroTipoDescrizione
messagestringMessaggio ai partecipanti (nell'e-mail di annullamento)

Comportamento

  • Imposta lo stato dell'Appointment su CANCELLED
  • Imposta tutti gli stati di Participation su CANCELLED
  • Invia e-mail di annullamento a tutti i partecipanti
  • L'Appointment non è più prenotabile

Participations (Partecipazioni)

Le Participation collegano i Customer agli Appointment. Ogni Participation ha uno stato che riflette il processo di prenotazione.

Participation States

StatoDescrizione
RESERVEDRiservato temporaneamente. Viene eliminato automaticamente dopo 3 minuti.
REQUESTEDRichiesta inviata, in attesa di conferma da parte del fornitore.
BOOKEDConfermato e prenotato.
CANCELEDAnnullato dal Customer o dal fornitore.
DELETEDEliminato amministrativamente (senza notifica).

Create Participation

Aggiunge un Customer a un Appointment.

POST /crms/:crmId/provider/:providerRef/participations
curl -X POST "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/participations?ignoreCapacity=false&onDuplicateRaise=false&sendMails=true" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "reference": "part-002@yourCrm",
    "appointmentReference": "apt-001@yourCrm",
    "customerReference": "cust-001@yourCrm",
    "state": "BOOKED",
    "message": "Bestätigung Ihrer Terminbuchung"
  }'

Parametri di query

ParametroTipoPredefinitoDescrizione
ignoreCapacitybooleanfalseAggiungere la Participation anche a capacità piena
onDuplicateRaisebooleanfalsePer un riferimento esistente: true=errore, false=aggiornamento
sendMailsbooleantrueInviare e-mail di notifica

Request Body

CampoTipoObbligatorioDescrizione
referencestringRiferimento Participation univoco
appointmentReferencestringRiferimento dell'Appointment
customerReferencestringRiferimento del Customer
statestringRESERVED, REQUESTED, BOOKED, CANCELED, DELETED
messagestringNoMessaggio nell'e-mail al Customer

Update Participation

Modifica lo stato di una Participation.

POST /crms/:crmId/provider/:providerRef/participations/:participationRef
curl -X POST "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/participations/part-002@yourCrm?sendMails=true" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "state": "CANCELED",
    "message": "Leider müssen wir Ihren Termin stornieren."
  }'

Transizioni di stato con invio di e-mail

TransizioneEmail?
RESERVED → BOOKED✓ Sì
REQUESTED → BOOKED✓ Sì
REQUESTED → CANCELED✓ Sì
BOOKED → CANCELED✓ Sì
RESERVED → CANCELED✗ No
DELETED → CANCELED✗ No
BOOKED → DELETED✗ No (!)

Transizioni non supportate

Le transizioni verso RESERVED o REQUESTED non sono possibili. Creare invece una nuova Participation.

Customers (Clienti)

I Customer sono persone che prenotano appuntamenti. Appartengono a un fornitore e possono partecipare a più Appointment.

Get Customer

Recupera un Customer in base al suo riferimento.

GET /crms/:crmId/provider/:providerRef/customers/:customerRef
curl -X GET "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/customers/cust-001@yourCrm" \
  -H "X-TIMUM-CLIENT-ID: your-api-key"

Response

200 OK
{
  "api-info": {
    "version": "1"
  },
  "customer": {
    "customerReference": "cust-001@yourCrm",
    "email": "kunde@example.com",
    "note": "Interessiert an 3-Zimmer-Wohnungen",
    "userName": "Max Kunde",
    "mobile": "+49 170 9876543",
    "language": "de",
    "providerReference": "prov-001@yourCrm"
  }
}

Status Codes

CodiceSignificato
200Customer trovato
204Nessun Customer trovato con questo riferimento

Create Customer

Crea un nuovo Customer per un fornitore.

POST /crms/:crmId/provider/:providerRef/customers
curl -X POST "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/customers" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "customerReference": "cust-001@yourCrm",
    "providerReference": "prov-001@yourCrm",
    "userName": "Max Kunde",
    "email": "kunde@example.com",
    "mobile": "+49 170 9876543",
    "note": "Interessiert an 3-Zimmer-Wohnungen",
    "language": "de"
  }'

Request Body

CampoTipoObbligatorioDescrizione
customerReferencestringRiferimento Customer univoco
providerReferencestringRiferimento del fornitore
userNamestringNome del cliente
emailstringNoIndirizzo e-mail
mobilestringNoNumero di cellulare (con prefisso internazionale)
notestringNoNota interna (max. 1023 caratteri)
languagestringNoCodice lingua (de, en, ecc.)

Status Codes

CodiceSignificato
201Nuovo Customer creato
200Il Customer esiste già

Update Customer

Aggiorna un Customer esistente.

PUT /crms/:crmId/provider/:providerRef/customers/:customerRef
curl -X PUT "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/customers/cust-001@yourCrm" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "customerReference": "cust-001-new@yourCrm",
    "email": "neue-email@example.com",
    "userName": "Max Neukunde",
    "mobile": "+49 170 1111111",
    "note": "Aktualisierte Notiz"
  }'

Modificare il riferimento

È possibile modificare anche customerReference. userName e customerReference non possono essere impostati su null/vuoto.

Delete Customer

Elimina un Customer.

DELETE /crms/:crmId/provider/:providerRef/customers/:customerRef
curl -X DELETE "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/customers/cust-001@yourCrm?ignoreFutureAppointments" \
  -H "X-TIMUM-CLIENT-ID: your-api-key"

Parametri di query

ParametroDescrizione
ignoreFutureAppointmentsSe impostato: rimuove il Customer da tutti gli Appointment futuri. Il Customer viene notificato via e-mail (se configurato).

Appointment futuri

Senza ignoreFutureAppointments, la richiesta fallisce se il Customer partecipa ad Appointment futuri.

GDPR

L'eliminazione di un Customer rimuove tutti i dati personali in conformità al GDPR. Lo storico delle prenotazioni viene conservato in forma anonima.

Prossimi passi

  • Booking Flow - Endpoint rivolti al consumatore per le prenotazioni

Argomenti correlati