Files
claude-plugins/plugins/humhub/skills/humhub/SKILL.md
T
jhsandClaude Opus 5 15dedb3d3f humhub: Umfragen anlegen und auflisten (poll-create / poll-list)
Die Polls-REST-API ist auf der Instanz aktiv, der Skill kannte sie nicht.
Zwei Abweichungen vom Muster der Post-API, die beide in
HTTP 500 'Internal error while save a poll!' enden:

* Der Controller macht $poll->load(Yii::$app->request->post()) — die Felder
  gehoeren unter den Yii-Formnamen 'Poll', nicht unter 'data'.
* Die Optionen heissen beim Anlegen 'newAnswers'; 'answers' ist die Leseform
  und wird beim POST ignoriert.

Beim Lesen ist limit Pflicht: ohne Begrenzung antwortet die Instanz ab etwa
25 Umfragen ebenfalls mit 500.

Quelle: humhub/polls, controllers/rest/PollsController.php + models/Poll.php.
Verifiziert an Space inmedias (Umfrage 36).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-31 07:58:20 +02:00

4.0 KiB

name, description, version
name description version
humhub HumHub Wiki-Seiten, Posts und Umfragen lesen/erstellen/aktualisieren via REST-API. Use when the user mentions "HumHub", "Space", "Wiki-Seite in HumHub", "Post/Beitrag" or "Umfrage/Poll". 0.2.0

HumHub (humhub.py)

Interagiert mit HumHub (https://humhub.inmedias.it) über die REST-API: Wiki-Seiten, Posts und Umfragen auflisten, anzeigen, anlegen und aktualisieren — über die mitgelieferte, self-contained humhub.py.

Ausführen

humhub.py ist ein eigenständiges uv run --script (Inline-Deps: requests, python-dotenv). Aus dem Skill-Verzeichnis:

./humhub.py <befehl> ...

HumHub-Links der Form …/content/perma?id=NNNN tragen eine Content-ID — nicht die Wiki-Seiten- oder Post-ID, die die anderen Befehle erwarten. fetch löst das selbst auf (erkennt WikiPage vs. Post) und braucht keine Vorab-Recherche:

./humhub.py fetch <content-id|perma-url>            # Inhalt + Herkunfts-Kopf auf stdout
./humhub.py fetch <content-id|perma-url> --save     # ablegen unter resources/humhub-<id>-<slug>.md
./humhub.py fetch <content-id|perma-url> --save --out <dir>

--save schreibt Markdown mit einem Herkunfts-Kopf (Quelle, Titel, Typ, Topics, Stand, Abrufdatum). Zielverzeichnis ist standardmäßig resources/ im aktuellen Projekt — dieses gehört üblicherweise in .gitignore (abgerufene Fremdinhalte werden nicht committet).

Spaces

./humhub.py space-list                            # Spaces auflisten mit contentcontainer_id

Wiki

./humhub.py wiki-list ["filter"]                 # Wiki-Seiten auflisten (Titel-Filter optional)
./humhub.py wiki-get <id>                         # Wiki-Seite anzeigen (Inhalt + URL)
./humhub.py wiki-update <id> [datei|-] [--title ...] [--topics a,b] [--parent-id N]
./humhub.py wiki-create <container_id> "<titel>" [datei|-] [--topics a,b] [--parent-id N]

Posts

./humhub.py post-list   <container_id> [--limit N]
./humhub.py post-create <container_id> [datei|-]
./humhub.py post-update <id> [datei|-]

Umfragen

./humhub.py poll-list   <container_id> [--limit N]
./humhub.py poll-create <container_id> "<frage>" --answers "A|B|C" \
    [--file beschreibung.md] [--anonymous] [--multiple] [--hide-results]

Antwortoptionen mit | trennen, mindestens zwei. Der Beschreibungstext kommt wie überall aus einer Datei oder -; Markdown ist erlaubt. Ohne --anonymous ist sichtbar, wer wie gestimmt hat — bei Anmeldungen mit begrenzten Plätzen ist das der Sinn der Sache.

Zwei Eigenheiten der Polls-API, die zu HTTP 500 "Internal error while save a poll!" führen, wenn man dem Muster der Post-API folgt: die Felder gehören unter den Yii-Formnamen Poll (nicht data), und die Optionen heißen beim Anlegen newAnswers (beim Lesen answers). Beim Lesen ist limit Pflicht und nicht Komfort — ohne Begrenzung antwortet die Instanz ab ~25 Umfragen ebenfalls mit 500. Ein fehlgeschlagener POST legt nichts an; vor einem zweiten Versuch trotzdem mit poll-list prüfen.

Inhalte (Markdown) aus Datei oder - (stdin) übergeben — nicht als langes Shell-Argument (Sonderzeichen). container_id akzeptiert eine numerische Container-ID, einen Space-Slug oder eine Space-URL (resolve_container löst Slug/URL selbst auf). Passende Container per space-list ermitteln, Seiten per wiki-list / post-list.

Zugangsdaten

humhub.py bringt keinen Token mit. Jede/r hinterlegt ein eigenes API-Token als Umgebungsvariable oder in einer dotenv-Datei (Reihenfolge: ~/.config/dokumentierer/.env, dann Datei im Arbeitsverzeichnis, dann bereits gesetzte Env-Variablen). Siehe .env.example:

Die Basis-URL (https://humhub.inmedias.it/api/v1) ist fest im Skript; für eine andere Instanz BASE_URL oben in humhub.py anpassen.