Die EduPage-API ermöglicht die Kommunikation mit EduPage über einfache HTTP-Anfragen (GET oder POST).
Parameter können sowohl in der URL als auch im POST-Inhalt übergeben werden.
Die Kommunikation basiert auf einfachen http-Anfragen. Diese API-Anfragen erfolgen über GET oder POST , und alle Parameter können auf beide Arten übergeben werden: im URL-Query-String oder im POST-Inhalt oder einer Kombination aus beidem.
Aufgrund von URL-Längenbeschränkungen wird empfohlen, lange Parameter als POST zu senden. Wenn Sie Daten als POST senden, muss der MIME-Typ "application/x-www-form-urlencoded" oder ähnlich lauten.
Die Basis-URL für Anfragen lautet: https://edupage_name.edupage.org/eduapi
2.2 Erforderliche Parameter
2.2.1 API key
Der API-Key dient als Passwort für den Zugriff auf die EduPage-API für die EduPage-Seite der jeweiligen Schule.
Eine Schule bzw. eine EduPage kann mehrere API-Keys haben. Es ist möglich, die Zugriffsrechte für jeden API-Key individuell zu konfigurieren, so kann die Schule einen API-Key der Firma geben, die das Anwesenheitssystem anbietet (mit dem Recht postbeeps) und einen anderen der Firma, die die digitalen Signale anbietet (mit dem Recht getdailyplan).
Übertragungsmethoden:
- Bevorzugt: Verwendung des Authorization-Headers.
- Alternativ: Als POST-Parameter senden.
- Nicht empfohlen: In der URL als Query-Parameter (Sicherheitsrisiko durch mögliche Protokollierung).
2.2.2 cmd
Dieser Parameter gibt den gewünschten API-Befehl an. Eine Liste der Befehle befindet sich im Abschnitt 4.
2.3. API-Antworten
2.3.1 Erfolgreiche Antworten
Das genaue Format der Antwort hängt vom jeweiligen API-Befehl ab. Erfolgreiche Antworten sind meist im XML- oder JSON-Format.
- XML: Enthält das Attribut status im Wurzelknoten.
- JSON: Enthält den Schlüssel __eduapi_status im Hauptobjekt.
Mögliche Statuswerte:
- status="OK" → Der Befehl wurde erfolgreich verarbeitet.
- status="WARN" → Der Befehl wurde erfolgreich verarbeitet, es gab jedoch kleinere Probleme. Diese Probleme werden im weiteren Verlauf von XML/JSON aufgeführt.
2.3.2 Fehlerbehandlung
Fehlermeldungen beginnen mit ErrorXXXXXXXX, wobei XXXXXXXX die Fehlernummer ist. Daraufhin folgt eine Texterklärung.
2.3.3 WAIT-Antwort
Es gibt ein festgelegtes Limit, wie oft Sie API-Anfragen mit einem API-Key durchführen können. Wird die API zu oft aufgerufen, erfolgt eine Text-Antwort mit WAIT. Dies bedeutet, dass Sie eine bestimmte Zeit warten sollten, bevor Sie die API erneut aufrufen. Die empfohlene Wartezeit beträgt 10 Sekunden.
2.3.4 Blockierung bei Missbrauch
Es ist wichtig, dass Sie die Antworten der API überwachen und auf Fehler überprüfen. Fehlerhafte oder zu häufige Anfragen können zur automatischen Sperrung eines API-Keys führen. Führen Sie daher ein Protokoll der Antworten auf Ihrer Seite.
Falls eine Sperrung erfolgt, dauert sie in der Regel eine Woche.
Werden Ihre Daten regelmäßig synchronisiert (API-Polling), vermeiden Sie es, Intervalle unter 5 Minuten zu benutzen.
2.4. Befehle
2.4.1 getbasedata
Mit diesen Befehlen können Sie grundlegende Schuldaten wie die Liste der Lehrer, Klassen, Fächer, Klassenzimmer und Schüler aufrufen.
Parameter:
- format: xml (Standard) oder json (empfohlen).
- date: bestimmtes Datum, für das Sie Datensätze abrufen möchten. Ruft nur Daten auf:
- die für das angegebene Datum gültig sind (z.B. Datum liegt nicht außerhalb des Intervalls Datum von/bis des Datensatzes).
- mit Werten für dieses Datum (z.B. wenn ein Schüler während des Schuljahres die Klasse wechselt, erhalten Sie in classid die Klasse, in der er zum angegebenen Datum ist).
- year: Ruft alle Daten für ein gesamtes Schuljahr ab (z. B. für 2017/2018 senden Sie year=2017).
- Einschließlich der Datensätze, die nicht für einen aktuellen Tag gültig sind = außerhalb des Intervalls Datum von/Datum bis.
- Felder, deren Wert sich während des Schuljahres ändern kann, haben den neuesten Wert.
Hinweise:
- Falls date oder year nicht angegeben wird, wird date=today verwendet.
- Der Zugriff auf bestimmte Tabellen (z. B. Schüler) oder Spalten (z. B. datefrom/dateto) muss in den API-Key-Einstellungen aktiviert werden.
- „id“ Felder in den zurückgegebenen Daten sind interne Identifikatoren in der EduPage-Datenbank. Das sind nicht leere Zeichenketten aus druckbaren ASCII-Zeichen. Sie sind eindeutig innerhalb der einzelnen Tabelle.
2.4.2 getphotos
Mit diesem Befehl können Sie Fotos von Schülern oder Lehrkräften in EduPage abrufen.
Parameter:
- studentids: Liste der Schüler-IDs.
- teacherids: Liste der Lehrkräfte-IDs.
Hinweis:
Es gibt ein Limit für die Gesamtmenge der Daten, die durch diese Anfrage übertragen werden. Wenn dieses Limit überschritten wird, werden nur Fotos für einen Teil der Schüler/Lehrer geliefert (status= "OK_part").
Sie müssen dann den Befehl getphotos für die restlichen Schüler-/Lehrer-IDs wiederholen.
2.4.3 getisicorders
Dieser Befehl ist für Aussteller von ISIC/ITIC-Karten gedacht. Die Schule kann Schüler/Lehrer, die eine neue Karte benötigen, im Feld ISIC - Bestellung mit dem Wert Neu markieren, und der Aussteller kann dann mit diesem API-Befehl die für die Ausstellung der Karten erforderlichen Daten abrufen.
Hinweise:
- Mit diesem Befehl können Sie Daten über Schüler/ Lehrer abrufen, die das Feld ISIC - Bestellung ausgefüllt haben.
- Die Daten werden im gleichen Format wie mit dem Befehl getbasedata zurückgegeben, enthalten aber nur Daten für Schüler/ Lehrer mit ausgefüllter ISIC-/ ITIC-Bestellung und enthalten automatisch alle für die Ausstellung von ISIC-/ ITIC-Karten erforderlichen Spalten.
- Wenn Sie das Feld ISIC/ITIC - Auftrag im Schüler- oder Lehrerdialog in Agenda Online nicht sehen, kann es sein, dass es in Ihrem Land deaktiviert ist. Kontaktieren Sie in diesem Fall den Support .
2.4.4 postbeeps
Mit diesem Befehl können Sie Daten aus dem Anwesenheitssystem an EduPage senden. Die Daten werden durch den Parameter data gesendet, der eine XML-Datei wie diese enthalten sollte:
<beepsa>
<beep time="2015-03-16 09:40:03" device=”01:23:45:67:89:ab” ecard="12345678" type=”entrance” studentid="123" />
<beep ... />
<beep ... />
<beep ... />
</beeps>
Erforderliche Parameter (für jede Zeile):
- time: Zeitstempel im Format "YYYY-MM-DD HH:MM:SS" (lokale Zeitzone).
- Der gültige Bereich ist von 7 Tagen in der Vergangenheit bis 5 Minuten in der Zukunft (gegenüber der lokalen Zeit des EduPage-Servers).
- device: interne Identifikation des Gerätes, das zum Scannen des ID-Tokens benutzt wird.
- Die Gerätenummern sollten eindeutig sein und es sollte nur eine begrenzte Anzahl von ihnen geben (z.B. kann es nicht ein Gerät pro Lehrer/ Schüler geben).
- Empfohlene Werteformate sind:
- MAC-Adresse des Geräts.
- Falls mehrere Geräte an das Hauptgerät angeschlossen sind, können Sie einen Punkt und eine Portnummer anhängen, z. B. „01:23:45:67:89:ab.1“.
- Wenn Sie eine interne Nummer Ihres Systems zur Identifizierung des Geräts verwenden möchten, stellen Sie ihr den Namen Ihres Unternehmens und einen Punkt voran, z. B. „UNSERE_UNTERNEHMEN.1234“. Dies ist erforderlich, um sicherzustellen, dass das Gerät eindeutig ist, falls die Schule Geräte von mehreren Unternehmen verwendet.
- ecard (optional): ID-Token-Nummer (z. B. Barcode oder RFID).
- studentid/teacherid: Erforderlich, wenn ecard nicht angegeben ist, ansonsten optional.
- gültige ID-Nummer aus der Liste der Schüler/ Lehrkräfte, mit dem Befehl getbasedata.
- type (optional): Wenn Ihr Gerät zwischen Eingang und Ausgang oder einem anderen Typ unterscheiden kann, können Sie dies hier angeben.
- entrance: Person hat das Schulgebäude betreten.
- exit: Person hat das Schulgebäude verlassen.
- vacation/doctor,...: Wenn Ihr Gerät die Identifizierung des Grundes für das Verlassen des Gebäudes oder eine andere Information unterstützt, können Sie benutzerdefinierte Tags dafür im Attribut type senden.
Hinweise:
- Die Daten sollten im 1-Minuten-Takt gesendet werden.
- Senden Sie mehrere Einträge in einer API-Anfrage, um Wartezeiten (WAIT-Antworten) zu vermeiden.
- Verwenden Sie POST-Parameter statt GET, da GET durch URL-Längenbeschränkungen limitiert ist.
2.4.5 getdailyplan
Dieser Befehl liefert Ihnen eine Liste der Unterrichtsstunden und Ereignisse für einen bestimmten Tag.
Parameter:
- date (optional): Datum, für das Sie die Daten bekommen.
- datefrom, dateto (optional): Mehrere Daten für bis zu 7 Tage.
- purpose (erforderlich): Gibt an, welche Art von Daten für welchen Zweck benötigt wird (Kontakt zum Support empfohlen).
2.4.6 getroomoccupancy
Mit dieser Funktion erhalten Sie alle Daten, die Sie für die Implementierung eines automatischen Raumheizungssystems benötigen. Sie kombiniert die Ergebnisse der Befehle getdailyplan und getbasedata und beschränkt die Daten auf die Teile, die von Raumheizungssystemen benötigt werden.
Parameter:
- date oder datefrom, dateto: siehe getdailyplan.
2.4.7 listtimetables
Dieser Befehl liefert Ihnen eine Liste der Stundenplandateien aus Timetables Online im JSON-Format.
2.4.8 gettimetable
Mit dieser Funktion können Sie die Stundenplandaten abrufen.
Parameter:
- timetableid (erforderlich)
- format (erforderlich)
- asctt2012.xml: aSc Timetables 2012 XML-Format
- asctt2008.xml: aSc Timetables 2008 XML-Format
- idmode
- timetable (Standard): IDs wie in aSc Timetables PC-Anwendung (keine Verknüpfung mit EduPage/ SIS-Daten).
- edupage: Für verknüpfte Elemente wird die EduPage-ID zurückgegeben, für andere rohe ids.
- sis: Falls eine SIS-ID vorhanden ist, wird diese zurückgegeben, für andere rohe ids.
Hinweise:
- Diese Funktion gibt „rohe“ exportierte XML-Daten zurück, deshalb gibt es kein „Status“-Feld in der Rückantwort.
- Wenn Sie einen anderen idmode als 'timetable' benutzen, können Sie manchmal in einer Tabelle mehrere Zeilen mit der gleichen 'id' bekommen (für Fächer ist es in EduPage z.B. möglich, zwei Stundenplanfächer mit einem EduPage-Fach zu verknüpfen).
- Doppelte IDs können auch vorkommen, wenn es mehrere Zeilen in der EduPage-Datenbank gibt, die die gleiche 'sisid' haben.
2.4.9 logintopartner
Mit diesem Befehl können Sie die automatische Anmeldung von EduPage zu einem externen System implementieren.
Die Schule muss diesen speziellen Link irgendwo auf ihrer EduPage hinzufügen:
/eduapi?cmd=logintopartner&url=EXTERNAL_SYSTEM_URL
Sie können eines der folgenden Module benutzen, um einen Link hinzuzufügen:
- Menü (oben, links, rechts)
- Textbaustein
- Nachricht
- (oder jedes andere Modul der EduPage, das Links unterstützt)
Ablauf:
- Wenn ein eingeloggter Benutzer auf einen Link klickt, wird er/ sie auf Ihre Seite EXTERNAL_SYSTEM_URL umgeleitet, mit Hinzufügung dieser 2 Url-Parameter:
- edupage: Schule, von der diese Umleitung kommt.
- logintoken: neu generiertes Token, das den aktuell angemeldeten Benutzer auf edupage kodiert.
- Sie können dieses Token dekodieren, indem Sie den API-Befehl „logintopartner“ aufrufen.
- Aus Sicherheitsgründen ist dieses Token nur für eine sehr kurze Zeit gültig (z.B. 15 Sekunden), so dass Ihr Webserver sofort die EduPage-API aufrufen muss, um es aufzulösen.
API-Befehl:
Parameter:
- logintoken: Login-Token, den Sie vom Redirect-Link von EduPage erhalten haben.
Gibt JSON mit diesen Feldern zurück:
- url: Das ist der URL-Parameter aus dem Redirect-Link (oben erklärt). Es ist wichtig zu prüfen, ob sie mit der URL Ihres Systems übereinstimmt und das Logintoken mit einer anderen URL abzulehnen.
- admin: Wenn der Benutzer als Administrator in EduPage eingeloggt war.
- teacherid: Wenn der Benutzer als Lehrkraft in EduPage eingeloggt war.
- studentid: Wenn der Benutzer als Schüler in EduPage eingeloggt war, oder wenn der Benutzer als Elternteil des Schülers eingeloggt war.
- parentid: Wenn der Benutzer als Elternteil in EduPage eingeloggt war.
2.4.10 noticeboard_writepdf
Mit diesem Befehl können Sie eine PDF-Datei an der Pinnwand von EduPage aktualisieren.
Parameter:
- nb: Nummer Ihrer Pinnwand
- data: Daten der PDF-Datei
Beispiel mit cURL:
curl -k -v --data-urlencode "apikey=YOUR_API_KEY" --data-urlencode "cmd=noticeboard_writepdf" --data-urlencode "nb=YOUR_NB_NUMBER" --data-urlencode "data@YOUR_PDF_FILE.pdf" https://YOUR_EDUPAGE.edupage.org/eduapi
2.4.11 noticeboard_writeimage
Diese Funktion aktualisiert die Bilder an der Pinnwand von EduPage.
Parameter:
- nb: Nummer Ihrer Pinnwand
- data: Daten der Bilddatei
2.4.12 substitution_import
Dieser Befehl automatisiert den Import von Vertretungsplänen aus anderen Stundenplanprogrammen.
Parameter:
- data: Importdatei
- multi (optional): 1, um einen mehrtägigen Import durchzuführen.
- publish (optional): 1, um die Daten nach erfolgreichem Import sofort zu veröffentlichen.
2.5. EduPage Datenstrukturen
EduPage verwaltet Schuljahre, Stundenpläne und IDs nach spezifischen Regeln. Hier finden Sie die Dokumentation über einige EduPage-Interna, die für die Benutzung der EduPage-API wichtig sind.
2.5.1 Schuljahre
In EduPage wird jedes Datum einem festen Schuljahr zugewiesen, basierend auf der sog. „turn over day“ Einstellung.
- In der nördlichen Hemisphäre meist 08-01 (1. August).
- In der südlichen Hemisphäre meist 01-01 (1. Januar).
- Angaben können je nach Land oder Region variieren (besonders für Länder in der Nähe des Äquators).
- Die Einstellung ist nicht vom Benutzer konfigurierbar, kann aber auf Wunsch geändert werden.
Interne Dartstellung:
- Das Schuljahr wird durch den int-Wert year dargestellt
- year entspricht dem Jahr des ersten Tages in diesem Schuljahr (z.B. year=2023 für das Jahr 2023/2024)
- Das Jahr ist sehr wichtig für einige Teile der EduPage-Datenbank - besonders für die Tabelle der Klassen.
Relevanz für EduPage-Daten:
- Klassen: Die Namen ändern sich im neuen Schuljahr (z.B. 5A wird 6A oder 501 wird 601 usw.).
- Wenn Sie z.B. den Befehl getbasedata für zwei aufeinanderfolgende Jahre aufrufen (Parameter year=...), werden Sie einen anderen Namen für dieselbe Klassen-ID bekommen.
- Sie werden auch eine andere Liste von Klassen erhalten, da einige Klassen ihre Schulzeit beendet haben und neue hinzugekommen sind.
- Schüler: Die Schüler haben in jedem Jahr die gleiche ID aber einige Felder können in jedem Jahr andere Werte haben (z. B. die Note).
- Sie erhalten immer nur eine Liste der Schüler, die in dem betreffenden Jahr anwesend sind.
- Lehrer: Die Felder datefrom und dateto geben den Beginn und das Ende der Beschäftigung des Lehrers an.
- getdailyplan gibt keine Lehrer an, die außerhalb des Schuljahres sind.
- Für einige Tabellen, wie Fächer und Klassenräume, gibt es ein Feld yearto (in UI heißt es „Used till year“).
2.5.2 Stundenplan-Datenbank vs. EduPage-Datenbank
Jede Stundenplandatei in EduPage ist ein selbständiges Dokument mit eigener Datenbank von Fächern, Klassen, Lehrern usw. und diese ist von der EduPage-Datenbank getrennt.
Parameter:
- gettimetable: Zugriff auf die Stundenplan-Datenbank.
- getbasedata: Zugriff auf die EduPage-Datenbank.
- Alle anderen API-Befehle arbeiten mit EduPage-Datenbank (Fahrplandatenbank hat ihre eigenen IDs).
Hinweis:
Wenn der Stundenplan richtig mit EduPage verbunden ist, können Sie mit dem Parameter idmode kontrollieren, welche IDs Sie vom Befehl gettimetable bekommen.
2.5.3 Zeitplan-IDs
Für die Stundenpläne werden verschiedene Arten von IDs verwendet.
Native Stundenplan-IDs
- Sie beginnen mit dem Zeichen *, z.B. *1, *2, *3... .
- Sie sind nur innerhalb des gettimetable-Aufrufs gültig.
- Wenn die Schule mehrere Stundenplandateien hat, kann dasselbe Objekt in jeder Datei eine andere Stundenplankennung haben. Diese IDs können auch neu zugewiesen werden, wenn der Benutzer den individuellen Stundenplan ändert. Das bedeutet, dass Sie diese Kennungen nicht für die langfristige Verknüpfung von Stundenplandaten mit Ihren externen Daten verwenden können.
ascttchrid
- Sehen aus wie 16-stellige Hexadezimalzahlen, z.B. 0D136D21DB6CCE9D, aber in Wirklichkeit sind sie nur eine längere, zufällig generierte Zeichenkette.
- EduPage benutzt sie für die Verknüpfung mit externen Daten (z.B. Fahrplandatenbank) oder internen Daten (z.B. zwischen Stundenplan und EduPage-Datenbank).
- Sie können neu zugewiesen werden, aber sie werden nie in ein anderes Objekt „umziehen" (im Gegensatz zu nativen Stundenplan-IDs).
2.5.4 Zuordnung von Stundenplänen zu Terminen
Schulen können eine beliebige Anzahl von Stundenplandateien in EduPage gespeichert haben. Einige von diesen Stundenplänen können als offizielle Stundenpläne veröffentlicht sein. Sie werden state=official und gefüllte entsprechende Felder Jahr und datefrom/dateto in listtimetables result haben.
Es kann mehrere offizielle (=veröffentlichte) Stundenpläne innerhalb eines Schuljahres geben, aber es kann nur einen Stundenplan geben, der für den jeweiligen Tag gültig ist. Wenn es mehrere veröffentlichte Stundenpläne mit überlappenden Datum-von/Datum-bis-Intervallen gibt, dann wird derjenige mit dem höheren Datum-von verwendet. Sie können sehen, welcher Stundenplan für einen bestimmten Tag gültig ist, indem Sie den Befehl getdailyplan aufrufen und das Feld timetableid für jedes Datum überprüfen.
Erläuterung:
Schulen ändern oft den Stundenplan während des Schuljahres, um unerwartete Änderungen zu berücksichtigen (z.B. wenn ein Lehrer die Schule verlässt oder ein Klassenzimmer nicht mehr verfügbar ist), oder sie können einen völlig anderen Stundenplan für Schuljahresabschnitte benutzen (z.B. für das 1. und 2. Semester). EduPage muss diese Änderungen verfolgen und wissen, welcher Stundenplan für das jeweilige Datum gültig war. Das ist vor allem für die Vertretungs- und Klassenbuchfunktionen wichtig. Wenn es also eine Änderung während des Schuljahres gibt, sollte die Schule den bestehenden Stundenplan nicht überschreiben, weil das zu einer Datenverfälschung führen kann (die Daten der vergangenen Vertretungen müssen bspw. mit den Daten des Stundenplans übereinstimmen). Sie sollten stattdessen die bestehende Stundenplandatei duplizieren (mit der Funktion Speichern > Speichern unter > Unter neuem Namen speichern) und dann diese neue Stundenplandatei mit einem neuen Datumsanfangswert veröffentlichen.
2.5.5 ZeitplanJson
Nachstehend finden Sie die Typdefinition für die Antwort des Befehls gettimetable
im Format=json. Um die Struktur besser zu verstehen, verwenden Sie bitte die API, um json für einen tatsächlichen Stundenplan für einige Ihrer Schulen zu erhalten.
Hinweis:
Das Format enthält nur eine Grundmenge von Feldern, die von den meisten Integratoren benötigt werden.
Wenn Sie zusätzliche Stundenplandaten benötigen, die nicht im Grundformat enthalten sind, kontaktieren Sie den Support.
ype TimetableJson = {
timetableid: string;
periods: {
rows: {
id: string;
name: string;
short: string;
starttime: string;
endtime: string;
daydata: {
[key: string]: {
starttime: string;
endtime: string;
};
};
}[];
};
breaks: {
rows: {
id: string;
name: string;
short: string;
starttime: string;
endtime: string;
daydata: {
[key: string]: {
starttime: string;
endtime: string;
};
};
}[];
};
days: {
rows: {
id: string;
name: string;
short: string;
}[];
};
weeks: {
rows: {
id: string;
name: string;
short: string;
}[];
};
daysdefs: {
rows: {
id: string;
name: string;
short: string;
typ: string;
vals: string[];
}[];
};
weeksdefs: {
rows: {
id: string;
name: string;
short: string;
typ: string;
vals: string[];
}[];
};
termsdefs: {
rows: {
id: string;
name: string;
short: string;
typ: string;
vals: string[];
}[];
};
subjects: {
rows: {
id: string;
name: string;
short: string;
}[];
};
teachers: {
rows: {
id: string;
firstname: string;
lastname: string;
short: string;
gender: string;
color: string;
}[];
};
buildings: {
rows: {
id: string;
name: string;
short: string;
}[];
};
classrooms: {
rows: {
id: string;
name: string;
short: string;
buildingid: string;
}[];
};
classes: {
rows: {
id: string;
name: string;
short: string;
classroomid: string;
}[];
};
groups: {
rows: {
id: string;
classid: string;
name: string;
entireclass: boolean;
divisionid: string;
}[];
};
lessons: {
rows: {
id: string;
subjectid: string;
classids: string[];
groupids: string[];
seminargroup: string | null;
teacherids: string[];
count: number;
durationperiods: number;
daysdefid: string;
weeksdefid: string;
termsdefid: string;
terms: string;
}[];
};
cards: {
rows: {
id: string;
lessonid: string;
periodid: string;
dayid: string;
weekid: string;
classroomids: string[];
}[];
};
};