Rozdział 23

Informacje o błędach API

Każde nieudane żądanie API BigBlueButton zwraca ustandaryzowaną odpowiedź błędu XML. Ten rozdział zawiera kompletny opis wszystkich kodów i komunikatów błędów, jakie może zwrócić API, oparty na analizie kodu źródłowego BigBlueButton 3.0.

Format odpowiedzi błędu

Gdy wywołanie API kończy się niepowodzeniem, BigBlueButton zwraca odpowiedź XML z trzema kluczowymi elementami: returncode, odczytywalnym maszynowo messageKey oraz czytelnym dla człowieka message. Każda odpowiedź błędu ma następującą strukturę:

<response>
  <returncode>FAILED</returncode>
  <messageKey>errorKeyHere</messageKey>
  <message>A human-readable description of the error.</message>
</response>

returncode ma zawsze wartość FAILED w przypadku błędów. Jedynym wyjątkiem jest duplicateWarning, który zwraca SUCCESS, ale zawiera klucz komunikatu ostrzeżenia. Twoja integracja powinna zawsze sprawdzać pole messageKey, a nie tylko kod zwrotny.

Błędy uwierzytelniania i autoryzacji

Te błędy występują, gdy żądanie nie może zostać uwierzytelnione lub gdy wywołujący nie ma wymaganych uprawnień:

messageKey Komunikat Endpointy wywołujące
checksumError Parametr checksum nie zgadza się. Wszystkie endpointy
invalidPassword Podane hasło jest nieprawidłowe. join, end
guestDeniedAccess Odmowa dostępu na podstawie polityki gości. join
missingToken Brakuje tokenu sesji. getJoinUrl, learningDashboard
missingSession Token sesji jest nieprawidłowy. getJoinUrl, learningDashboard
apiNotEnabled Usługa API nie jest włączona na tym serwerze. Wszystkie endpointy

Błędy zarządzania spotkaniami

Te błędy dotyczą tworzenia, dołączania i zarządzania spotkaniami:

messageKey Komunikat Endpointy wywołujące
invalidMeetingId Podany identyfikator spotkania nie istnieje. getMeetingInfo, isMeetingRunning, end, join
invalidMeetingIdentifier Spotkanie o tym ID nie istnieje. join
meetingForciblyEnded Nie można dołączyć do spotkania, które zostało wymuszenie zakończone. join
idNotUnique Spotkanie o tym ID już istnieje. create
nonUniqueVoiceBridge Wybrany mostek głosowy jest już używany. create
duplicateWarning Ta konferencja już istnieje i może być uruchomiona. returncode ma wartość SUCCESS create
mismatchCreateTimeParam Parametr createTime nie odpowiada bieżącemu spotkaniu. join
maxParticipantsReached Osiągnięto maksymalną liczbę uczestników. join
parentMeetingIDMissing Nie podano parentMeetingID dla pokoju breakout. create (breakout)
parentMeetingDoesNotExist Nie znaleziono spotkania nadrzędnego dla pokoju breakout. create (breakout)
meetingNotFound Nie znaleziono spotkania. sendChatMessage, getJoinUrl, learningDashboard

Błędy walidacji parametrów

Te błędy są zwracane, gdy brakuje wymaganych parametrów lub gdy dane żądania nie przechodzą walidacji:

messageKey Komunikat Endpointy wywołujące
MissingParam Brakuje wymaganego parametru {param} (dynamiczne). create, join, end, getMeetingInfo, i inne
missingParamMeetingID Należy podać identyfikator spotkania. create, join, isMeetingRunning, end, getMeetingInfo, insertDocument, sendChatMessage
missingParamFullName Należy podać fullName. join
missingParamRecordID Należy podać identyfikator nagrania. updateRecordings, publishRecordings, deleteRecordings, getRecordingTextTracks
missingParamPublish Należy podać wartość publish (true/false). publishRecordings
validationError Ogólny błąd walidacji (różne komunikaty). Wiele endpointów
unsupportedContentType Brakuje Content-Type żądania POST lub jest on nieobsługiwany. create, join, end, getMeetingInfo, insertDocument, sendChatMessage
emptyError Pole nie może być puste. Walidacja ogólna
fileNameError Nie udało się zdekodować nazwy pliku. insertDocument

Błędy nagrywania

Te błędy są specyficzne dla zarządzania nagraniami i operacji na ścieżkach tekstowych:

messageKey Komunikat Endpointy wywołujące
notFound Nie znaleziono nagrań. updateRecordings, publishRecordings, deleteRecordings
noRecordings Nie znaleziono nagrania dla podanego identyfikatora nagrania. putRecordingTextTrack
empty_uploaded_text_track Przesłany plik ścieżki tekstowej jest pusty. putRecordingTextTrack
paramError Brakuje parametru {paramName} (dynamiczne). putRecordingTextTrack
invalidKind Nieprawidłowy parametr kind — oczekiwano: subtitles lub captions. putRecordingTextTrack
invalidLang Nieprawidłowy parametr language. putRecordingTextTrack

Błędy sesji i użytkownika

Te błędy występują podczas walidacji sesji i użytkownika:

messageKey Komunikat Endpointy wywołujące
userNotFound Nie znaleziono aktywnej sesji dla podanego identyfikatora użytkownika. join (z existingUserID)
configNotFound Nie znaleziono konfiguracji dla tego tokenu. Walidacja wewnętrzna
noConfigFound Nie znaleziono konfiguracji dla tego żądania. Walidacja wewnętrzna

Rozwiązywanie problemów

Gdy napotkasz błąd API, wykonaj następujące kroki, aby zdiagnozować i rozwiązać problem:

Sprawdź messageKey — użyj powyższych tabel kodów błędów, aby ustalić dokładną przyczynę niepowodzenia i endpoint, który je wywołał.

— najczęstszym błędem jest checsumError. Upewnij się, że używasz poprawnego shared secret, właściwego algorytmu haszującego i że ciąg zapytania zgadza się dokładnie.

Sprawdź wymagane parametry — błędy brakujących parametrów (MissingParam, missingParamMeetingID itd.) wskazują, że wymagane pole nie zostało uwzględnione w żądaniu.

Potwierdź stan spotkania — błędy takie jak invalidMeetingId lub meetingForciblyEnded oznaczają, że spotkanie nie istnieje lub już się zakończyło. Użyj getMeetingInfo, aby zweryfikować bieżący stan przed ponowną próbą.

Przejrzyj logi serwera — jeśli komunikat błędu nie jest wystarczająco precyzyjny, sprawdź logi serwera BigBlueButton w /var/log/bigbluebutton/, aby uzyskać bardziej szczegółowe informacje.

Niektóre komunikaty o błędach są dynamiczne i zawierają nazwę lub wartość problematycznego parametru. Zawsze zapisuj pełną odpowiedź XML z API, aby ułatwić debugowanie.

Przy obsłudze klucza komunikatu duplicateWarning należy pamiętać, że returncode ma wartość SUCCESS, a nie FAILED. Jest to szczególny przypadek, w którym BigBlueButton sygnalizuje, że spotkanie o tym samym ID już istnieje, ale zwraca dane istniejącego spotkania zamiast zgłaszać błąd.

Najczęściej zadawane pytania

Kody błędów wymienione w tym zestawieniu zostały wyodrębnione bezpośrednio z kodu źródłowego BigBlueButton 3.0. Oficjalna dokumentacja BBB nie zawiera kompletnego opisu błędów. Definicje są rozproszone w kilku plikach źródłowych, w tym ApiErrors.java, ApiController.groovy i RecordingController.groovy.

Tak. Chociaż wartości messageKey zwykle pozostają stabilne między wersjami, tekst komunikatu czytelny dla człowieka może się zmieniać. Do programistycznej obsługi błędów zawsze używaj messageKey, a nie tekstu komunikatu.

Oba oznaczają, że żądane spotkanie nie istnieje, ale są zwracane przez różne endpointy. invalidMeetingId jest używane przez getMeetingInfo, isMeetingRunning, end i join. meetingNotFound jest używane przez sendChatMessage, getJoinUrl i learningDashboard.

duplicateWarning to szczególny przypadek: returncode ma wartość SUCCESS, ale messageKey sygnalizuje, że spotkanie o tym samym ID już istnieje. Twoja aplikacja powinna sprawdzić, czy parametry istniejącego spotkania odpowiadają temu, co było zamierzone. Jeśli tak, można bezpiecznie kontynuować. Jeśli nie, wybierz inny identyfikator spotkania.

Najczęstsze przyczyny to: użycie niewłaściwego shared secret, zastosowanie niewłaściwego algorytmu haszującego, niespójne kodowanie URL ciągu zapytania lub uwzględnienie samego parametru checksum w danych wejściowych hasha. Upewnij się, że haszowany ciąg jest budowany jako: apiMethodName + queryString + sharedSecret, gdzie queryString nie zawiera parametru checksum.

Ten błąd jest zwracany, gdy żądanie POST nie zawiera nagłówka Content-Type lub używa typu treści, którego BigBlueButton nie obsługuje. Upewnij się, że Twoje żądania POST zawierają nagłówek Content-Type: application/x-www-form-urlencoded.

BigBlueButton może zwracać dodatkowe kody błędów z wtyczek lub niestandardowych modułów, które nie są częścią głównego API. Wymienione tutaj kody obejmują główne API BigBlueButton 3.0. Jeśli napotkasz nierozpoznany messageKey, sprawdź logi serwera i wszelkie zainstalowane wtyczki, aby uzyskać więcej informacji.