Support-Agenten
Viele Fragen, die Familien an Admins richten, lassen sich im Admin-Panel beantworten: Hat mein Kind einen Platz bekommen? Ist meine Zahlung angekommen? Warum habe ich keine E-Mail erhalten? Dieser Leitfaden zeigt, wie ein KI-Agent oder ein Helpdesk-Tool dieselben Antworten über die API nachschlägt, für die Familie, die fragt, und für niemanden sonst.
Bevor Sie einen KI-Agenten anbinden
Ein Agent, der auf einem Sprachmodell beruht, sendet die Daten, die er liest, an den Anbieter des Modells. Verantwortlich für diese Daten ist die Organisation, die fepli betreibt. Bevor der Agent Daten liest, klärt die Organisation diese Punkte mit der oder dem Datenschutzbeauftragten:
- einen Auftragsverarbeitungsvertrag mit dem Anbieter des Modells und mit dem Anbieter des Helpdesk-Tools,
- ob einer der beiden Anbieter die Daten außerhalb der EU oder des EWR verarbeitet und auf welcher Grundlage,
- eine Datenschutz-Folgenabschätzung, weil der Agent Daten von Kindern automatisiert verarbeitet,
- wie Familien erfahren, dass ein Agent ihre Fragen beantwortet und welche Daten er liest,
- eine Person, die entscheidet, bevor sich etwas an einer Anmeldung ändert. Der Agent antwortet und bereitet einen Fall vor. Er entscheidet nicht.
Wissen, wer fragt
Der Agent handelt nur für eine Person, deren Identität feststeht, und nur in ihrem eigenen Konto:
- Die Identität stammt aus Ihrem Kanal, nicht aus der Frage. Entweder ist die Familie in diesem Kanal angemeldet (eine authentifizierte Sitzung), oder sie schreibt von einer Absenderadresse, die Ihr Helpdesk verifiziert und an ihr fepli-Konto gebunden hat.
- Ihre Integration macht aus dieser Identität die
uuiddes Kontos, bevor der Agent startet, und behält sie bei der Sitzung oder dem Helpdesk-Kontakt. Bei einer verifizierten Absenderadresse schlägt sie das Konto einmal mitGET /accounts?email=…nach, außerhalb des Agenten. - Jedes Tool begrenzt seinen Aufruf auf diese
uuid. Kein Tool nimmt ein Konto, einen Namen oder eine E-Mail-Adresse vom Agenten entgegen. Eine Adresse oder ein Name, die in einer Frage stehen, werden nie nachgeschlagen. Fragen zu anderen Familien gehen an die Admins.
Schreibgeschützten Service-Account einrichten
Legen Sie für den Agenten einen Service-Account mit der Zugriffsstufe Nur lesen an. Ein Token, das nur liest, kann nichts ändern. Es kann aber alles lesen, was seine Rollen erlauben, und dazu gehören die Daten von Familien und Kindern. Geben Sie ihm nur die Rollen, die seine Tools brauchen (siehe die Tools):
Auf dem Server
bin/console ferienpass:api:service-account "Support-Agent" --tenant=elmsbrueck \
--role=ROLE_ADMIN --role=ROLE_PAYMENTS_ADMIN --valid-until="+90 days" \
--description="Answers verified families' questions in the helpdesk"
Ohne --role vergibt der Befehl nur Admin. Fügen Sie Zahlungen wie oben nur hinzu, wenn der Agent Fragen zu Zahlungen beantwortet. Die Rolle gilt nur zusammen mit Admin.
Geben Sie jedem Token ein Ablaufdatum und erneuern Sie es, bevor es abläuft: Erstellen Sie auf der Seite des Service-Accounts ein neues Token, stellen Sie den Agenten darauf um und widerrufen Sie dann das alte. Widerrufen Sie ein Token sofort, wenn es möglicherweise offengelegt wurde.
Lassen Sie Ihre Integration beim Start GET /me aufrufen. Die Antwort bestätigt "access": "read" und die Rollen. In Installationen mit mehreren Mandanten nennt sie außerdem, für welchen Mandanten das Token gilt.
Fragen und die Aufrufe, die sie beantworten
In den folgenden Aufrufen ist {account} die uuid aus der verifizierten Sitzung, zum Beispiel die von Anna Müller:
curl -G https://example.fepli.eu/api/attendances \
-H "Authorization: Bearer $FEPLI_TOKEN" \
-d account=0191c7b2-4d5e-7f60-8a1b-2c3d4e5f6a05 \
-d edition=herbstferien-2026
| Die Familie fragt | Aufruf |
|---|---|
| „Hat Lena einen Platz bekommen?“ | GET /attendances?account={account}&edition=herbstferien-2026: status, offer und participant jeder Anmeldung |
| „Wo ist der Treffpunkt?“ | GET /offers/{uuid}, für ein Angebot aus den Anmeldungen der Familie: dates, meetingPoint, bring |
| „Warum steht sie auf der Warteliste?“ | status, sorting (Position auf der Liste) und decisionReason der Anmeldung; vacancies des Angebots |
| „Ich habe die Bestätigung nie bekommen.“ | GET /sent-messages?account={account}: subject, sentAt, deliveryStatus, bounced |
| „Wie viel schulde ich noch?“ | GET /debtors?account={account}: due, paid, balance, openAttendances |
| „Ist meine Zahlung angekommen?“ | GET /receipts?account={account}: status, totalAmount, items |
| „Kann ich meine Einwilligung noch widerrufen?“ | GET /consents?account={account} |
Ist ein Konto blockedEmail, sind E-Mails an seine Adresse zurückgekommen,
und fepli hat das Senden eingestellt. Das ist die Antwort auf viele Fälle
von „Ich habe nie eine E-Mail bekommen“. Sobald das Postfach wieder
funktioniert, kann ein Admin die Adresse
entsperren.
Tools für den Agenten auswählen
Ein Agent arbeitet besser mit einer Handvoll gut beschriebener Tools als mit einem allgemeinen HTTP-Client. Jedes Tool setzt {account} selbst ein. Der Agent wählt nur, welches Tool er aufruft.
| Tool | Endpunkt | Rolle |
|---|---|---|
get_account() | GET /accounts/{account} | Admin |
list_attendances(edition?) | GET /attendances?account={account}&edition=… | Admin |
get_offer(uuid) | GET /offers/{uuid}, nur für Angebote aus den Anmeldungen der Familie | Admin |
list_sent_messages() | GET /sent-messages?account={account} | Admin |
list_consents() | GET /consents?account={account} | Admin |
get_balance() | GET /debtors?account={account} | Admin und Zahlungen |
list_receipts() | GET /receipts?account={account} | Admin und Zahlungen |
Geben Sie dem Service-Account die Rollen der Tools, die Sie verwenden, und keine weiteren. Lassen Sie jedes Tool nur die Felder weitergeben, die die Antwort braucht, und nicht den ganzen Datensatz. Ein Konto enthält zum Beispiel auch die Adresse und die Telefonnummern der Familie.
Geben Sie die detail-Meldungen der API an den Agenten zurück, wenn ein Aufruf fehlschlägt. Sie sind verständlich geschrieben und nennen meist, was Sie stattdessen versuchen können.
Den Fall übergeben
Wenn eine Familie etwas geändert haben möchte, zum Beispiel eine Anmeldung abmelden, sammelt der Agent, was die Admins brauchen, und eine Person entscheidet. Der Agent kann seine Zusammenfassung als interne Notiz am Konto hinterlassen:
Notiz am Konto hinterlassen
curl -X POST "https://example.fepli.eu/api/accounts/0191c7b2-4d5e-7f60-8a1b-2c3d4e5f6a05/comments" \
-H "Authorization: Bearer $FEPLI_TOKEN" \
-H "Content-Type: application/json" \
-d '{"body": "The family asks to withdraw Lena from the bike tour on Wednesday: they are away on a family trip that week. Nothing changed; please decide."}'
Notizen, die über die API geschrieben werden, sind intern: Nur Admins sehen sie, sie zeigen den Namen des Service-Accounts als Autor, und sie benachrichtigen die Admins des Mandanten. Um eine Notiz zu schreiben, brauchen Sie ein Token mit Schreibzugriff, und ein solches Token kann alles, was seine Rollen erlauben. Geben Sie dem Notiz-Tool einen eigenen Service-Account mit Lesen und schreiben und nur Admin. Verwenden Sie sein Token in keinem anderen Tool.
Die Person, die entscheidet, führt die Entscheidung im Admin-Panel aus. Wenn Ihr Helpdesk-Tool das für sie übernimmt, sobald sie bestätigt, verwendet es einen eigenen Service-Account, niemals den des Agenten:
Nach der Entscheidung einer Person: Anmeldung abmelden und die Familie informieren
curl -X POST "https://example.fepli.eu/api/attendances/0192d0e8-3a4b-7c5d-9e6f-7a8b9c0d1e07/transition" \
-H "Authorization: Bearer $FEPLI_TOKEN" \
-H "Content-Type: application/json" \
-d '{"transition": "withdraw", "notify": true}'
Übergänge schicken der Familie nur dann eine E-Mail, wenn Sie "notify": true übergeben.
Personenbezogene Daten
Der Agent sieht Namen, Adressen und Kontaktdaten von Familien und Kindern. Behandeln Sie seine Protokolle und Transkripte wie das Admin-Panel: Bewahren Sie sie nur dort auf, wo Ihre Auftragsverarbeitungsverträge sie abdecken, lassen Sie nur Admins sie lesen, und löschen Sie sie, wenn der Fall abgeschlossen ist.