Zum Hauptinhalt springen

Wie Fehler gemeldet werden

Jeder Fehler der Sally API nutzt denselben JSON-Body, ein Fehler-Handler reicht also. Diese Seite zeigt diesen Body, was jeder Statuscode für deine Anbindung bedeutet, jeden maschinenlesbaren code, einen Beispiel-Body je Status und einen Handler zum Kopieren.

Die Beispiele funktionieren so, wie sie dastehen, sobald SALLY_TOKEN und DIRECTORY_ID gesetzt sind, siehe Schnellstart.

Schnellnavigation

  1. Der Fehler-Body
  2. Die Statuscodes
  3. Die Fehlercodes
  4. Beispiel-Bodys
  5. 403 und 404 bedeuten Verschiedenes
  6. Fehler im Code behandeln

1. Der Fehler-Body​

429 Too Many Requests
{
"statusCode": 429,
"message": "<für Menschen lesbarer Text>",
"code": "FUP_LIMIT_EXCEEDED"
}
FeldTypImmer daBedeutung
statusCodeintegerjaDer HTTP-Statuscode, im Body wiederholt.
messagestringjaEine für Menschen lesbare Beschreibung. Zeig oder logge sie, aber verzweige nicht darauf.
codestringneinEine stabile, maschinenlesbare Kennung für bestimmte Fehler.

code ist eine stabile, maschinenlesbare Kennung. Sie steht nur bei Fehlern, die eine eigene Reaktion verdienen, etwa FUP_LIMIT_EXCEEDED oder TOO_MANY_CONCURRENT_TRANSCRIPTIONS. Allgemeine Fehler lassen sie weg. Verzweige also auf code, wenn er da ist, sonst auf statusCode.

Hinweis

Der Text von message ist für Menschen gedacht, kann sich ändern und ist unter Umständen deutsch. Echte Antworten können zusätzlich ein Feld error mit der HTTP-Statusbezeichnung tragen, etwa Unauthorized. Es gehört nicht zum dokumentierten Body, verlass dich also nicht darauf.

2. Die Statuscodes​

CodeBedeutungWas du tustErneut versuchen?
400Die Anfrage ist ungültig: Body, Query oder Pfad haben die Prüfung nicht bestanden.Korrigier die Anfrage, etwa einen falsch geschriebenen Namen in fields.Nein
401Das Bearer-Token fehlt oder ist nicht mehr gültig.Prüf den Header Authorization oder leg ein neues Token an.Nein
403Du siehst die Ressource, aber die Operation verlangt eine höhere Rolle, etwa Admin oder Owner, oder das Unternehmenskonto hat sie gesperrt, etwa einen Download. Hier lohnt der Blick auf code.Nimm das Token eines Nutzers mit der nötigen Rolle oder lass die Einstellung des Unternehmenskontos ändern.Nein
404Nicht gefunden oder für dich nicht sichtbar.Prüf die Id und ob der Nutzer des Tokens Zugriff hat.Nein
409Konflikt mit dem aktuellen Stand, etwa beim Einladen einer Person, die schon Mitglied ist, oder wenn du ein Transkript als Datei anforderst, bevor es existiert. Hier lohnt der Blick auf code.Behandle es als bereits erledigt oder lies den aktuellen Stand.Nein
429Rate-Limit überschritten, bei Uploads auch die Fair-Usage-Grenze. Hier lohnt der Blick auf code.Siehe Limits und Fair Usage.Hängt von code ab
500Interner Serverfehler. Später erneut zu versuchen ist sinnvoll.Versuch es später mit wachsender Pause erneut.Ja

3. Die Fehlercodes​

Das sind alle Werte, die code annehmen kann. Verzweige darauf, sie ändern sich nicht.

codeStatusWoBedeutung und was du tust
UNKNOWN_DOCUMENT_FORMAT400Zusammenfassung und Transkript als Dateiformat fehlt oder wird von diesem Endpunkt nicht unterstützt. Der Body nennt die erlaubten Werte.
UNKNOWN_LANGUAGE_CODE400Zusammenfassung und Transkript als DateilanguageCode ist unbekannt. Der Body nennt die erlaubten Werte.
SUMMARY_DOWNLOAD_PREVENTED403Zusammenfassung als DateiDas Unternehmenskonto hat den Download von Zusammenfassungen für seine Mitglieder gesperrt. Ein erneuter Versuch bringt dieselbe Antwort.
TRANSCRIPT_DOWNLOAD_PREVENTED403Transkript als DateiDas Unternehmenskonto hat den Download von Transkripten für seine Mitglieder gesperrt. Ein erneuter Versuch bringt dieselbe Antwort.
RECORDING_EXISTS_CHOICE_REQUIRED409Upload abschließenDer verknüpfte Termin hat schon eine Aufnahme. Wiederhole den Aufruf mit choice auf copy oder replace, die hochgeladene Datei bleibt erhalten.
SUMMARY_HAS_NO_CONTENT409Zusammenfassung als DateiDie Zusammenfassung hat keinen Inhalt für ein Dokument, weil sie entstand, bevor es Meetingtemplates gab, oder ihr Template keine Abschnitte hat.
TRANSCRIPT_NOT_AVAILABLE409Transkript als DateiDie Aufnahme hat noch kein Transkript. Prüf vorher isTranscriptionSucceeded an der Aufnahme.
FUP_LIMIT_EXCEEDED429UploadsDie Fair-Usage-Grenze ist ausgeschöpft. Hör mit dem Hochladen auf, ein baldiger neuer Versuch bringt dieselbe Antwort. Siehe Limits und Fair Usage.
TOO_MANY_CONCURRENT_TRANSCRIPTIONS429UploadsIm Unternehmenskonto laufen zu viele Transkriptionen gleichzeitig. Warte, bis einige fertig sind.

4. Beispiel-Bodys​

Diese Bodys kannst du je Status erwarten. Wo das Beispiel <für Menschen lesbarer Text> zeigt, hängt die echte message von der Ursache ab.

400, etwa bei einem unbekannten Feldnamen:

400 Bad Request
{
"statusCode": 400,
"message": "<für Menschen lesbarer Text>"
}

401, Anfrage ohne Token und Anfrage mit ungültigem Token. Diese beiden sind echte Antworten der API:

401 Unauthorized
{
"message": "`Authorization: Bearer <token>` ist erforderlich.",
"error": "Unauthorized",
"statusCode": 401
}
401 Unauthorized
{
"message": "Ungültiger oder abgelaufener API-Key.",
"error": "Unauthorized",
"statusCode": 401
}

403, die Operation verlangt eine höhere Rolle:

403 Forbidden
{
"statusCode": 403,
"message": "<für Menschen lesbarer Text>"
}

403 mit code, etwa wenn das Unternehmenskonto den Download von Zusammenfassungen gesperrt hat:

403 Forbidden
{
"statusCode": 403,
"message": "<für Menschen lesbarer Text>",
"code": "SUMMARY_DOWNLOAD_PREVENTED"
}

404, nicht gefunden oder nicht sichtbar:

404 Not Found
{
"statusCode": 404,
"message": "<für Menschen lesbarer Text>"
}

409, etwa wenn die eingeladene Person schon Mitglied ist:

409 Conflict
{
"statusCode": 409,
"message": "<für Menschen lesbarer Text>"
}

429 gibt es in drei Varianten. Das einfache Rate-Limit hat keinen code, die beiden Fair-Usage-Fälle schon:

429 Too Many Requests
{
"statusCode": 429,
"message": "<für Menschen lesbarer Text>"
}
429 Too Many Requests
{
"statusCode": 429,
"message": "<für Menschen lesbarer Text>",
"code": "FUP_LIMIT_EXCEEDED"
}
429 Too Many Requests
{
"statusCode": 429,
"message": "<für Menschen lesbarer Text>",
"code": "TOO_MANY_CONCURRENT_TRANSCRIPTIONS"
}

500, interner Serverfehler:

500 Internal Server Error
{
"statusCode": 500,
"message": "<für Menschen lesbarer Text>"
}

5. 403 und 404 bedeuten Verschiedenes​

Das heißt

Ein 403 sagt dir, dass die Ressource existiert und deine Rolle zu niedrig ist oder das Unternehmenskonto die Operation gesperrt hat, was ein Mensch beheben kann. Ein 404 sagt dir absichtlich nichts: Nicht gefunden und nicht sichtbar sind bewusst nicht unterscheidbar, damit eine Antwort nie verrät, dass es Daten gibt. Warum ein Token sieht, was es sieht, erklärt Authentifizierung.

403 Forbidden404 Not Found
Gibt es die Ressource?JaUnbekannt, mit Absicht
Siehst du sie?JaNicht mit diesem Token
Wer kann es beheben?Ein Admin oder Owner, indem er dem Nutzer eine höhere Rolle gibt oder die Einstellung des Unternehmenskontos ändertNiemand über die API. Prüf die Id und den Zugriff des Token-Nutzers.

6. Fehler im Code behandeln​

Lies bei jeder Antwort außerhalb von 2xx den Body und entscheide zuerst nach code, dann nach statusCode:

# Body und Status getrennt, dann nach code und statusCode entscheiden
response=$(curl -s -w '\n%{http_code}' \
"https://api.sally.io/v1.0/directories/$DIRECTORY_ID/recordings/$RECORDING_ID" \
-H "Authorization: Bearer $SALLY_TOKEN")
status=$(echo "$response" | tail -n 1)
body=$(echo "$response" | sed '$d')

if [ "$status" -ge 400 ]; then
echo "$body" | jq -r '"\(.statusCode) \(.code // "-") \(.message)"'
fi
Empfehlung

Logge statusCode, code und message zusammen mit Methode und Pfad der Anfrage. Das reicht meist, um die Ursache zu finden, ohne den Aufruf nachzustellen.