Microsoft Bookings Integration¶
Die MORELO Dealer Suite nutzt Microsoft Bookings als zentrale Terminverwaltung.
Microsoft 365 Business Premium erforderlich
Microsoft Bookings benötigt eine Microsoft 365 Business Premium Lizenz.
Warum Microsoft Bookings?¶
| Vorteil | Beschreibung |
|---|---|
| Keine eigene Buchungslogik | MS Bookings übernimmt Kalender, Erinnerungen, Konflikte |
| Kundenportal inklusive | Self-Service Buchungsseite für Kunden |
| Teams Integration | Automatische Teams-Meetings für Online-Beratung |
| Outlook Sync | Termine direkt im Outlook-Kalender der Mitarbeiter |
| Mobile Apps | iOS/Android Apps für unterwegs |
Architektur¶
┌─────────────────────────────────────────────────────────────────┐
│ MORELO Dealer Suite │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ MS Graph API │ │
│ │ /solutions/bookingBusinesses │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────┼──────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Bookings │ │ Staff │ │ Services │ │
│ │ Appointment │ │ Members │ │ │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Outlook Kalender + Teams │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
Graph API Endpoints¶
Base URL¶
Booking Business (Händler)¶
# Alle Booking Businesses auflisten
GET /solutions/bookingBusinesses
# Neues Business erstellen
POST /solutions/bookingBusinesses
{
"displayName": "MORELO Händler Mustermann",
"address": {
"street": "Musterstraße 1",
"city": "Musterstadt",
"postalCode": "12345",
"countryOrRegion": "DE"
},
"phone": "+49 123 456789"
}
# Business Details abrufen
GET /solutions/bookingBusinesses/{bookingBusinessId}
# Scheduling Page veröffentlichen
POST /solutions/bookingBusinesses/{id}/publish
Services (Dienstleistungen)¶
Typische MORELO-Services:
POST /solutions/bookingBusinesses/{id}/services
Content-Type: application/json
{
"displayName": "Probefahrt",
"defaultDuration": "PT2H",
"defaultPrice": 0,
"defaultPriceType": "free",
"description": "Probefahrt mit einem MORELO Reisemobil",
"isHiddenFromCustomers": false,
"notes": "Bitte gültigen Führerschein mitbringen"
}
| Service | Dauer | Preis |
|---|---|---|
| Probefahrt | 2h | Kostenlos |
| Kaufberatung | 1h | Kostenlos |
| Fahrzeugübergabe | 3h | Kostenlos |
| Service-Termin | 1-4h | Nach Aufwand |
| Saisoncheck | 2h | €199 |
Staff Members (Mitarbeiter)¶
POST /solutions/bookingBusinesses/{id}/staffMembers
{
"displayName": "Max Mustermann",
"emailAddress": "max@haendler.de",
"role": "administrator",
"availabilityIsAffectedByPersonalCalendar": true,
"workingHours": [
{
"day": "monday",
"timeSlots": [
{"startTime": "08:00:00", "endTime": "18:00:00"}
]
}
]
}
Rollen:
administrator- Volle Kontrolleviewer- Nur lesenexternalGuest- Externe Mitarbeiterscheduler- Kann Termine verwaltenmember- Standard Mitarbeiter
Appointments (Termine)¶
# Termine in Zeitraum abrufen
GET /solutions/bookingBusinesses/{id}/calendarView
?start=2026-01-01T00:00:00Z
&end=2026-01-31T23:59:59Z
# Neuen Termin erstellen
POST /solutions/bookingBusinesses/{id}/appointments
{
"customerEmailAddress": "kunde@email.de",
"customerName": "Hans Kunde",
"customerPhone": "+49 170 1234567",
"serviceId": "{serviceId}",
"staffMemberIds": ["{staffId}"],
"start": {
"dateTime": "2026-01-20T10:00:00",
"timeZone": "Europe/Berlin"
},
"end": {
"dateTime": "2026-01-20T12:00:00",
"timeZone": "Europe/Berlin"
},
"serviceNotes": "Interesse an MORELO Palace 90G"
}
# Termin aktualisieren
PATCH /solutions/bookingBusinesses/{id}/appointments/{appointmentId}
{
"serviceNotes": "Kunde hat Finanzierungsfragen"
}
# Termin stornieren
POST /solutions/bookingBusinesses/{id}/appointments/{appointmentId}/cancel
{
"cancellationMessage": "Termin wurde vom Kunden abgesagt"
}
Customers (Kunden)¶
# Kunden auflisten
GET /solutions/bookingBusinesses/{id}/customers
# Kunde erstellen/aktualisieren
POST /solutions/bookingBusinesses/{id}/customers
{
"displayName": "Hans Kunde",
"emailAddress": "hans@kunde.de",
"phone": "+49 170 1234567",
"addresses": [
{
"street": "Kundenstraße 5",
"city": "Kundenstadt",
"postalCode": "54321",
"countryOrRegion": "DE"
}
]
}
Berechtigungen (Permissions)¶
| Permission | Typ | Beschreibung |
|---|---|---|
Bookings.Read.All |
Delegated/App | Buchungen lesen |
Bookings.ReadWrite.All |
Delegated/App | Buchungen verwalten |
Bookings.Manage.All |
Delegated/App | Volle Verwaltung |
BookingsAppointment.ReadWrite.All |
Delegated | Termine verwalten |
MORELO Suite Integration¶
Sync-Strategie¶
// Webhook für Termin-Updates
app.post('/webhooks/ms-bookings', async (c) => {
const notification = await c.req.json();
// Termin in D1 spiegeln für Dashboard
if (notification.changeType === 'created') {
await db.insert(appointments).values({
msBookingId: notification.resourceData.id,
customerId: notification.resourceData.customerId,
serviceType: notification.resourceData.serviceId,
scheduledAt: notification.resourceData.start.dateTime,
status: 'confirmed'
});
}
return c.json({ status: 'ok' });
});
Dashboard Widget¶
Die Suite zeigt Termine aus MS Bookings an:
// Nächste Termine abrufen
const appointments = await graphClient
.api(`/solutions/bookingBusinesses/${businessId}/calendarView`)
.query({
start: new Date().toISOString(),
end: addDays(new Date(), 7).toISOString()
})
.get();
Self-Service Portal¶
MS Bookings generiert automatisch eine Buchungsseite:
https://outlook.office365.com/owa/calendar/MORELOHaendlerMustermann@domain.onmicrosoft.com/bookings/
Diese kann:
- Im Dealer-Website eingebettet werden (iframe)
- Als Link in E-Mails verschickt werden
- Auf Facebook Business Page verknüpft werden