Zum Hauptinhalt springen

Wie Rate-Limits und Fair Usage funktionieren

Die Sally API kennt zwei verschiedene Grenzen, und sie verlangen zwei verschiedene Reaktionen: Rate-Limits schützen den Dienst vor zu vielen Anfragen, die Fair-Usage-Regel bestimmt, wie viel du transkribieren kannst.

Diese Seite zeigt, wie du die Grenzen deines Unternehmenskontos abliest, wie du die drei Arten von 429 auseinanderhältst, und eine Wiederholungsschleife mit wachsender Pause zum Kopieren. Die Beispiele funktionieren so, wie sie dastehen, sobald SALLY_TOKEN und DIRECTORY_ID gesetzt sind, siehe Schnellstart.

Schnellnavigation

  1. Rate-Limits
  2. Deine Grenzen ablesen
  3. Fair Usage bei der Transkription
  4. Wie du reagierst
  5. Mit Backoff wiederholen

1. Rate-Limits​

Anfragen werden je Token begrenzt, Anfragen ohne Anmeldung je Client-IP. Jedes Unternehmenskonto hat zusätzlich eigene Grenzen. Wird eine Grenze überschritten, antwortet die API mit 429.

GrenzeGilt fürWo du den Wert siehst
Je TokenJede angemeldete AnfrageNicht veröffentlicht
Je Client-IPAnfragen ohne TokenNicht veröffentlicht
Je Unternehmenskonto und MinuteAlle Anfragen für ein UnternehmenskontomaxApiRequestsPerMinute
Je Unternehmenskonto und TagAlle Anfragen für ein UnternehmenskontomaxApiRequestsPerDay

2. Deine Grenzen ablesen​

Die Grenzen eines Unternehmenskontos liest du am Unternehmenskonto selbst ab. Mit der Feldauswahl enthält die Antwort nur, was du brauchst:

curl "https://api.sally.io/v1.0/directories/$DIRECTORY_ID?fields=name,maxApiRequestsPerMinute,maxApiRequestsPerDay" \
-H "Authorization: Bearer $SALLY_TOKEN"
200 OK
{
"name": "Example GmbH",
"maxApiRequestsPerMinute": 60,
"maxApiRequestsPerDay": 10000
}
FeldTypBedeutung
maxApiRequestsPerMinutenumberHöchstzahl der API-Anfragen je Minute für dieses Unternehmenskonto.
maxApiRequestsPerDaynumberHöchstzahl der API-Anfragen je Tag für dieses Unternehmenskonto.

Die Werte oben sind Beispiele. Lies die echten für dein Unternehmenskonto ab, und lies sie ab und zu neu, statt sie fest einzutragen. GET /v1.0/directories liefert dieselben Felder für jedes Unternehmenskonto, das dein Token ansprechen kann.

Referenz: GET/v1.0/directories/{directoryId}

Empfehlung

Verteil deine Aufrufe, statt sie gebündelt abzuschicken. Steht maxApiRequestsPerMinute auf 60, bleibt eine Anfrage pro Sekunde unter der Grenze, solange nichts anderes gleichzeitig dasselbe Unternehmenskonto nutzt.

3. Fair Usage bei der Transkription​

Uploads zur Transkription unterliegen zusätzlich einer Fair-Usage-Regel. Sie gilt gleichermaßen für den zweistufigen Upload und für den Import per URL. Die API meldet sie mit eigenen Codes im Fehler-Body:

codeBedeutungWann er kommt
FUP_LIMIT_EXCEEDEDDas Transkriptionskontingent ist aufgebraucht.Schon bei der Upload-Anfrage, bevor du eine Datei schickst.
TOO_MANY_CONCURRENT_TRANSCRIPTIONSZu viele Transkriptionen deines Unternehmenskontos laufen gleichzeitig.Etwa beim Abschließen eines Uploads.
429 Too Many Requests
{
"statusCode": 429,
"message": "<für Menschen lesbarer Text>",
"code": "FUP_LIMIT_EXCEEDED"
}

Die Endpunkte, die eine Transkription starten:

4. Wie du reagierst​

Wichtig

Behandle die Fälle getrennt. Ein einfaches 429 heißt langsamer machen und später erneut versuchen. TOO_MANY_CONCURRENT_TRANSCRIPTIONS heißt warten, bis laufende Transkriptionen fertig sind. FUP_LIMIT_EXCEEDED heißt, das Kontingent ist aufgebraucht, und ein baldiger neuer Versuch bringt dieselbe Antwort. Wie der Fehler-Body aussieht, steht unter Fehler.

429 mitBedeutungReaktion
keinem codeRate-Limit überschrittenWarten, dann mit wachsender Pause erneut versuchen.
TOO_MANY_CONCURRENT_TRANSCRIPTIONSZu viele laufende TranskriptionenWarten, bis laufende Transkriptionen fertig sind, dann erneut versuchen.
FUP_LIMIT_EXCEEDEDKontingent aufgebrauchtNicht bald erneut versuchen. Uploads stoppen und einem Menschen Bescheid geben.

5. Mit Backoff wiederholen​

Ein 429 sagt dir nicht, wie lange du warten sollst. Warte deshalb nach jedem Versuch etwas länger: eine Sekunde, dann zwei, vier und so weiter, höchstens eine Minute, mit einem kleinen Zufallsanteil, damit mehrere Clients nicht im Gleichschritt wiederholen. Dieselbe Schleife passt für einen 500. FUP_LIMIT_EXCEEDED wird sofort durchgereicht.

wait=1
for attempt in 1 2 3 4 5 6; do
response=$(curl -s -w '\n%{http_code}' \
"https://api.sally.io/v1.0/directories/$DIRECTORY_ID/recordings" \
-H "Authorization: Bearer $SALLY_TOKEN")
status=$(echo "$response" | tail -n 1)
body=$(echo "$response" | sed '$d')

if [ "$status" = "429" ] && [ "$(echo "$body" | jq -r '.code')" = "FUP_LIMIT_EXCEEDED" ]; then
echo "Kontingent aufgebraucht, kein neuer Versuch" >&2; break
fi
if [ "$status" != "429" ] && [ "$status" -lt 500 ]; then
echo "$body"; break
fi
sleep "$wait"
wait=$(( wait * 2 > 60 ? 60 : wait * 2 ))
done
Hinweis

Bei TOO_MANY_CONCURRENT_TRANSCRIPTIONS sind ein paar Sekunden Pause oft zu kurz. Warte, bis deine laufenden Transkriptionen isTranscriptionCompleted melden, oder nutze einen Webhook, bevor du den nächsten Upload abschließt.